buildr4osgi 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/LICENSE +176 -0
  2. data/NOTICE +6 -0
  3. data/README.rdoc +50 -0
  4. data/Rakefile +45 -0
  5. data/buildr4osgi.gemspec +40 -0
  6. data/lib/buildr4osgi/compile/compiler.rb +54 -0
  7. data/lib/buildr4osgi/compile/ecj-3.4.1.jar +0 -0
  8. data/lib/buildr4osgi/compile.rb +16 -0
  9. data/lib/buildr4osgi/eclipse/feature.rb +271 -0
  10. data/lib/buildr4osgi/eclipse/plugin.rb +22 -0
  11. data/lib/buildr4osgi/eclipse.rb +17 -0
  12. data/lib/buildr4osgi/nature/eclipse.rb +80 -0
  13. data/lib/buildr4osgi/nature/java.rb +32 -0
  14. data/lib/buildr4osgi/nature/nature.rb +156 -0
  15. data/lib/buildr4osgi/nature/osgi.rb +32 -0
  16. data/lib/buildr4osgi/nature/scala.rb +32 -0
  17. data/lib/buildr4osgi/nature.rb +23 -0
  18. data/lib/buildr4osgi/osgi/bundle.rb +275 -0
  19. data/lib/buildr4osgi/osgi/bundle_package.rb +80 -0
  20. data/lib/buildr4osgi/osgi/container.rb +140 -0
  21. data/lib/buildr4osgi/osgi/library_extension.rb +174 -0
  22. data/lib/buildr4osgi/osgi/packaging.rb +129 -0
  23. data/lib/buildr4osgi/osgi/project_extension.rb +324 -0
  24. data/lib/buildr4osgi/osgi/registry.rb +61 -0
  25. data/lib/buildr4osgi/osgi/resolving_strategies.rb +104 -0
  26. data/lib/buildr4osgi/osgi/version.rb +131 -0
  27. data/lib/buildr4osgi/osgi.rb +24 -0
  28. data/lib/buildr4osgi.rb +37 -0
  29. data/rakelib/checks.rake +57 -0
  30. data/rakelib/doc.rake +92 -0
  31. data/rakelib/jekylltask.rb +120 -0
  32. data/rakelib/package.rake +73 -0
  33. data/rakelib/release.rake +149 -0
  34. data/rakelib/rspec.rake +73 -0
  35. data/rakelib/setup.rake +54 -0
  36. data/rakelib/stage.rake +206 -0
  37. data/spec/compile/compiler_spec.rb +30 -0
  38. data/spec/eclipse/feature_spec.rb +295 -0
  39. data/spec/nature/eclipse_spec.rb +46 -0
  40. data/spec/nature/java_spec.rb +45 -0
  41. data/spec/nature/osgi_spec.rb +63 -0
  42. data/spec/nature/scala_spec.rb +45 -0
  43. data/spec/nature_spec.rb +144 -0
  44. data/spec/osgi/bundle_package_spec.rb +32 -0
  45. data/spec/osgi/bundle_spec.rb +202 -0
  46. data/spec/osgi/container_spec.rb +93 -0
  47. data/spec/osgi/library_extension_spec.rb +142 -0
  48. data/spec/osgi/packaging_spec.rb +340 -0
  49. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/META-INF/ECLIPSEF.RSA +0 -0
  50. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/META-INF/ECLIPSEF.SF +20 -0
  51. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/META-INF/MANIFEST.MF +28 -0
  52. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/META-INF/eclipse.inf +3 -0
  53. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/about.html +28 -0
  54. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/fragment.properties +12 -0
  55. data/spec/osgi/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800/runtime_registry_compatibility.jar +0 -0
  56. data/spec/osgi/project_extension_spec.rb +662 -0
  57. data/spec/osgi/registry_spec.rb +50 -0
  58. data/spec/osgi/version_spec.rb +127 -0
  59. data/spec/spec_helpers.rb +85 -0
  60. data/spec/tmp/remote/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.jar +0 -0
  61. data/spec/tmp/remote/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.pom +82 -0
  62. data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8-sources.jar +0 -0
  63. data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.jar +0 -0
  64. data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.pom +30 -0
  65. data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8-sources.jar +0 -0
  66. data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar +0 -0
  67. data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.pom +101 -0
  68. data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8-sources.jar +0 -0
  69. data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar +0 -0
  70. data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.pom +56 -0
  71. metadata +142 -0
@@ -0,0 +1,662 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ require File.join(File.dirname(__FILE__), '../spec_helpers')
17
+
18
+ Spec::Runner.configure do |config|
19
+ config.include Buildr4OSGi::SpecHelpers
20
+ end
21
+
22
+ describe OSGi::ProjectExtension do
23
+
24
+ it 'should give a way to take project dependencies' do
25
+ define('foo').dependencies.should be_instance_of(Array)
26
+ end
27
+
28
+ it 'should add a new osgi method to projects' do
29
+ define('foo').osgi.should be_instance_of(OSGi::ProjectExtension::OSGi)
30
+ end
31
+
32
+ it 'should give a handle over the OSGi containers registry' do
33
+ define('foo').osgi.registry.should be_instance_of(OSGi::Registry)
34
+ end
35
+
36
+ it 'should give options to resolve bundle dependencies' do
37
+ pending
38
+ end
39
+
40
+ end
41
+
42
+ describe OSGi::DependenciesTask do
43
+
44
+ before :all do
45
+ e1 = createRepository("eclipse1")
46
+ @eclipse_instances = [e1]
47
+
48
+ Buildr::write e1 + "/plugins/com.ibm.icu-3.9.9.R_20081204/META-INF/MANIFEST.MF", <<-MANIFEST
49
+ Manifest-Version: 1.0
50
+ Bundle-ManifestVersion: 2
51
+ Bundle-SymbolicName: com.ibm.icu; singleton:=true
52
+ Bundle-Version: 3.9.9.R_20081204
53
+ Export-Package: my.package;version="1.0.0"
54
+ MANIFEST
55
+ Buildr::write e1 + "/plugins/org.eclipse.core.resources-3.5.0.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
56
+ Manifest-Version: 1.0
57
+ Bundle-ManifestVersion: 2
58
+ Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
59
+ Bundle-Version: 3.5.0.R_20090512
60
+ MANIFEST
61
+ Buildr::write e1 + "/plugins/org.dude-3.5.0.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
62
+ Manifest-Version: 1.0
63
+ Bundle-ManifestVersion: 2
64
+ Bundle-SymbolicName: org.dude; singleton:=true
65
+ Bundle-Version: 3.5.0.R_20090512
66
+ MANIFEST
67
+ end
68
+
69
+ it 'should resolve dependencies' do
70
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
71
+ Manifest-Version: 1.0
72
+ Bundle-ManifestVersion: 2
73
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
74
+ Bundle-Version: 3.9.9.R_20081204
75
+ Require-Bundle: com.ibm.icu,org.eclipse.core.resources
76
+ MANIFEST
77
+ foo = define('foo', :version=> "1.0", :group => "grp" ) {
78
+ package(:bundle)
79
+ }
80
+ foo.osgi.registry.containers = @eclipse_instances.dup
81
+ foo.manifest_dependencies.select {|b| b.name == "com.ibm.icu"}.should_not be_empty
82
+ end
83
+
84
+ it "should use projects as dependencies" do
85
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
86
+ Manifest-Version: 1.0
87
+ Bundle-ManifestVersion: 2
88
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
89
+ Bundle-Version: 3.9.9.R_20081204
90
+ Require-Bundle: bar
91
+ MANIFEST
92
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
93
+ Manifest-Version: 1.0
94
+ Bundle-ManifestVersion: 2
95
+ Bundle-SymbolicName: bar
96
+ MANIFEST
97
+ define('container') do
98
+ project.version = "1.0"
99
+ project.group = "grp"
100
+ define('foo') do
101
+ package(:bundle)
102
+ end
103
+ define('bar') do
104
+ package(:bundle)
105
+ end
106
+ end
107
+ project('container:foo').task('osgi:resolve:dependencies').invoke
108
+ project('container:foo').manifest_dependencies.should include(project('container:bar'))
109
+ end
110
+
111
+ it "should use projects as dependencies, even if those are libraries projects" do
112
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
113
+ Manifest-Version: 1.0
114
+ Bundle-ManifestVersion: 2
115
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
116
+ Bundle-Version: 3.9.9.R_20081204
117
+ Require-Bundle: bar
118
+ MANIFEST
119
+ library_project(SLF4J, "grp", "bar", "1.1")
120
+ define('foo') do
121
+ project.version = "1.0"
122
+ project.group = "grp"
123
+ package(:bundle)
124
+ end
125
+ project('foo').manifest_dependencies.should include(project('bar'))
126
+ end
127
+
128
+ it "should let library projects depend on each other" do
129
+ library_project(DEBUG_UI, "grp", "bar", "1.0")
130
+ library_project(SLF4J, "grp", "foo", "1.1", :manifest => {"Require-Bundle" => "bar"})
131
+
132
+ project('foo').manifest_dependencies.should include(project('bar'))
133
+ end
134
+
135
+ it 'should resolve dependencies with version requirements' do
136
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
137
+ Manifest-Version: 1.0
138
+ Bundle-ManifestVersion: 2
139
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
140
+ Bundle-Version: 3.9.9.R_20081204
141
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.eclipse.core.resources;bundle-version=3.5.0.R_20090512
142
+ MANIFEST
143
+ foo = define('foo', :version => "1.0", :group => "grp") {
144
+ package(:bundle)
145
+ }
146
+ foo.osgi.registry.containers = @eclipse_instances.dup
147
+ foo.manifest_dependencies.select {|b| b.name == "com.ibm.icu"}.should_not be_empty
148
+ foo.manifest_dependencies.select {|b| b.name == "com.ibm.icu" && b.version="[3.4.0,3.5.0)"}.should_not be_empty
149
+ foo.manifest_dependencies.select {|b| b.name == "org.eclipse.core.resources" && b.version="3.5.0.R_20090512"}.should_not be_empty
150
+ end
151
+
152
+ it "should resolve projects as dependencies with version requirements" do
153
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
154
+ Manifest-Version: 1.0
155
+ Bundle-ManifestVersion: 2
156
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
157
+ Bundle-Version: 3.9.9.R_20081204
158
+ Require-Bundle: bar;bundle-version="[1.0,3.5)"
159
+ MANIFEST
160
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
161
+ Manifest-Version: 1.0
162
+ Bundle-ManifestVersion: 2
163
+ Bundle-SymbolicName: bar
164
+ MANIFEST
165
+ define('container') do
166
+ project.version = "1.1"
167
+
168
+ define('foo') do
169
+ package(:bundle)
170
+ end
171
+ define('bar') do
172
+ package(:bundle)
173
+ end
174
+ end
175
+ project('container').osgi.registry.containers = @eclipse_instances.dup
176
+ project('container:foo').manifest_dependencies.should include(project('container:bar'))
177
+
178
+ end
179
+
180
+ it 'should resolve dependencies with package imports' do
181
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
182
+ Manifest-Version: 1.0
183
+ Bundle-ManifestVersion: 2
184
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
185
+ Bundle-Version: 3.9.9.R_20081204
186
+ Import-Package: my.package
187
+ MANIFEST
188
+ foo = define('foo', :version => "1.0", :group => "grp") {
189
+ package(:bundle)
190
+ }
191
+ foo.osgi.registry.containers = @eclipse_instances.dup
192
+ foo.manifest_dependencies.select {|b| b.name == "com.ibm.icu"}.should_not be_empty
193
+ end
194
+
195
+ it "should resolve projects as dependencies with package imports" do
196
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
197
+ Manifest-Version: 1.0
198
+ Bundle-ManifestVersion: 2
199
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
200
+ Bundle-Version: 3.9.9.R_20081204
201
+ Import-Package: my.very.own.package
202
+ MANIFEST
203
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
204
+ Manifest-Version: 1.0
205
+ Bundle-ManifestVersion: 2
206
+ Bundle-SymbolicName: bar
207
+ Export-Package: my.very.own.package
208
+ MANIFEST
209
+ write "bar2/META-INF/MANIFEST.MF", <<-MANIFEST
210
+ Manifest-Version: 1.0
211
+ Bundle-ManifestVersion: 2
212
+ Bundle-SymbolicName: bar2
213
+ Export-Package: my.very.own.packageuh
214
+ MANIFEST
215
+ define('container') do
216
+ project.version = "1.1"
217
+
218
+ define('foo') do
219
+ package(:bundle)
220
+ end
221
+ define('bar') do
222
+ package(:bundle)
223
+ end
224
+ define('bar2') do
225
+ package(:bundle)
226
+ end
227
+ end
228
+ project('container').osgi.registry.containers = @eclipse_instances.dup
229
+ project('container:foo').manifest_dependencies.should include(project('container:bar'))
230
+ project('container:foo').manifest_dependencies.should_not include(project('container:bar2'))
231
+ end
232
+
233
+ it 'should resolve dependencies with package imports with version requirements' do
234
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
235
+ Manifest-Version: 1.0
236
+ Bundle-ManifestVersion: 2
237
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
238
+ Bundle-Version: 3.9.9.R_20081204
239
+ Import-Package: my.package;version="0.9.0"
240
+ MANIFEST
241
+ foo = define('foo', :version => "1.0", :group => "grp") {
242
+ package(:bundle)
243
+ }
244
+ foo.osgi.registry.containers = @eclipse_instances.dup
245
+ foo.manifest_dependencies.select {|b| b.name == "com.ibm.icu"}.should_not be_empty
246
+ end
247
+
248
+ it "should resolve projects as dependencies with package imports" do
249
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
250
+ Manifest-Version: 1.0
251
+ Bundle-ManifestVersion: 2
252
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
253
+ Bundle-Version: 3.9.9.R_20081204
254
+ Import-Package: my.very.own.package;version="0.9.0"
255
+ MANIFEST
256
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
257
+ Manifest-Version: 1.0
258
+ Bundle-ManifestVersion: 2
259
+ Bundle-SymbolicName: bar
260
+ Export-Package: my.very.own.package;version="1.0.0"
261
+ MANIFEST
262
+ write "bar2/META-INF/MANIFEST.MF", <<-MANIFEST
263
+ Manifest-Version: 1.0
264
+ Bundle-ManifestVersion: 2
265
+ Bundle-SymbolicName: bar2
266
+ Export-Package: my.very.own.package;version="0.5.0"
267
+ MANIFEST
268
+ define('container') do
269
+ project.version = "1.1"
270
+
271
+ define('foo') do
272
+ package(:bundle)
273
+ end
274
+ define('bar') do
275
+ package(:bundle)
276
+ end
277
+ define('bar2') do
278
+ package(:bundle)
279
+ end
280
+ end
281
+ project('container').osgi.registry.containers = @eclipse_instances.dup
282
+ project('container:foo').manifest_dependencies.should include(project('container:bar'))
283
+ project('container:foo').manifest_dependencies.should_not include(project('container:bar2'))
284
+
285
+ end
286
+
287
+ it 'should write a file named dependencies.yml with the dependencies of the project' do
288
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
289
+ Manifest-Version: 1.0
290
+ Bundle-ManifestVersion: 2
291
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
292
+ Bundle-Version: 3.9.9.R_20081204
293
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.dude;bundle-version=3.5.0.R_20090512
294
+ MANIFEST
295
+ foo = define('foo', :version => "1.0", :group => "grp") {
296
+ package(:bundle)
297
+ }
298
+ foo.osgi.registry.containers = @eclipse_instances.dup
299
+ foo.task('osgi:resolve:dependencies').invoke
300
+ File.exist?('dependencies.yml').should be_true
301
+ deps = YAML::load(File.read('dependencies.yml'))
302
+ deps["foo"]["dependencies"].size.should == 2
303
+ artifact(deps["foo"]["dependencies"][0]).to_hash[:id].should == "com.ibm.icu"
304
+ artifact(deps["foo"]["dependencies"][0]).to_hash[:version].should == "3.9.9.R_20081204"
305
+ end
306
+
307
+ it 'should write a file named dependencies.yml with the projects required for the project' do
308
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
309
+ Manifest-Version: 1.0
310
+ Bundle-ManifestVersion: 2
311
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
312
+ Bundle-Version: 3.9.9.R_20081204
313
+ Require-Bundle: bar
314
+ MANIFEST
315
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
316
+ Manifest-Version: 1.0
317
+ Bundle-ManifestVersion: 2
318
+ Bundle-SymbolicName: bar
319
+ Bundle-Version: 3.9.9.R_20081204
320
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.dude;bundle-version=3.5.0.R_20090512
321
+ MANIFEST
322
+ define("container") do
323
+ project.version = "1.0"
324
+ project.group = "grp"
325
+ foo = define('foo') {
326
+ package(:bundle)
327
+ }
328
+ bar = define("bar") do
329
+ package(:bundle)
330
+ end
331
+ end
332
+ project('container').osgi.registry.containers = @eclipse_instances.dup
333
+ project('container').task('osgi:resolve:dependencies').invoke
334
+ File.exist?('dependencies.yml').should be_true
335
+ deps = YAML::load(File.read('dependencies.yml'))
336
+ deps["container:foo"]["projects"].size.should == 1
337
+ end
338
+
339
+ it 'should write a file named dependencies.yml with the projects required for the project' do
340
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
341
+ Manifest-Version: 1.0
342
+ Bundle-ManifestVersion: 2
343
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
344
+ Bundle-Version: 3.9.9.R_20081204
345
+ Require-Bundle: bar
346
+ MANIFEST
347
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
348
+ Manifest-Version: 1.0
349
+ Bundle-ManifestVersion: 2
350
+ Bundle-SymbolicName: bar
351
+ Bundle-Version: 3.9.9.R_20081204
352
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.dude;bundle-version=3.5.0.R_20090512
353
+ MANIFEST
354
+ define("container") do
355
+ project.version = "1.0"
356
+ project.group = "grp"
357
+ foo = define('foo') {
358
+ package(:bundle)
359
+ }
360
+ bar = define("bar") do
361
+ package(:bundle)
362
+ end
363
+ end
364
+ project('container').osgi.registry.containers = @eclipse_instances.dup
365
+ project('container').task('osgi:resolve:dependencies').invoke
366
+ File.exist?('dependencies.yml').should be_true
367
+ deps = YAML::load(File.read('dependencies.yml'))
368
+ deps["container:foo"]["projects"].size.should == 1
369
+ end
370
+
371
+ it 'should write a file named dependencies.yml and merge it as needed' do
372
+ write "foo/META-INF/MANIFEST.MF", <<-MANIFEST
373
+ Manifest-Version: 1.0
374
+ Bundle-ManifestVersion: 2
375
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
376
+ Bundle-Version: 3.9.9.R_20081204
377
+ Require-Bundle: bar
378
+ MANIFEST
379
+ write "bar/META-INF/MANIFEST.MF", <<-MANIFEST
380
+ Manifest-Version: 1.0
381
+ Bundle-ManifestVersion: 2
382
+ Bundle-SymbolicName: bar
383
+ Bundle-Version: 3.9.9.R_20081204
384
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.dude;bundle-version=3.5.0.R_20090512
385
+ MANIFEST
386
+ define("container") do
387
+ project.version = "1.0"
388
+ project.group = "grp"
389
+ foo = define('foo') {
390
+ package(:bundle)
391
+ }
392
+ bar = define("bar") do
393
+ package(:bundle)
394
+ end
395
+ end
396
+ project('container').osgi.registry.containers = @eclipse_instances.dup
397
+ project('container:foo').task('osgi:resolve:dependencies').invoke
398
+ project('container:bar').task('osgi:resolve:dependencies').invoke
399
+ File.exist?('dependencies.yml').should be_true
400
+ deps = YAML::load(File.read('dependencies.yml'))
401
+ deps["container:foo"]["projects"].size.should == 1
402
+ deps["container:bar"]["dependencies"].size.should == 2
403
+ end
404
+
405
+ it "should sort projects by name" do
406
+ define("container") do
407
+ project.version = "1"
408
+ project.group = "grp"
409
+ define('a'){
410
+ package(:bundle)
411
+ }
412
+ define('b'){
413
+ package(:bundle)
414
+ }
415
+ define('c'){
416
+ package(:bundle)
417
+ }
418
+ define('d'){
419
+ package(:bundle)
420
+ }
421
+ define('e'){
422
+ package(:bundle)
423
+ }
424
+ end
425
+ project('container').osgi.registry.containers = @eclipse_instances.dup
426
+ project('container').task('osgi:resolve:dependencies').invoke
427
+ File.exist?('dependencies.yml').should be_true
428
+ File.read('dependencies.yml').should == <<-CONTENTS
429
+ ---
430
+ container:
431
+ dependencies: []
432
+
433
+ projects: []
434
+
435
+ container:a:
436
+ dependencies: []
437
+
438
+ projects: []
439
+
440
+ container:b:
441
+ dependencies: []
442
+
443
+ projects: []
444
+
445
+ container:c:
446
+ dependencies: []
447
+
448
+ projects: []
449
+
450
+ container:d:
451
+ dependencies: []
452
+
453
+ projects: []
454
+
455
+ container:e:
456
+ dependencies: []
457
+
458
+ projects: []
459
+
460
+ CONTENTS
461
+ end
462
+
463
+ it 'should give a version to the dependency even if none is specified' do
464
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
465
+ Manifest-Version: 1.0
466
+ Bundle-ManifestVersion: 2
467
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
468
+ Bundle-Version: 3.9.9.R_20081204
469
+ Require-Bundle: com.ibm.icu;bundle-version="[3.3.0,4.0.0)",org.dude
470
+ MANIFEST
471
+ foo = define('foo', :version => "1.0", :group => "grp") {
472
+ package(:bundle)
473
+ }
474
+ foo.osgi.registry.containers = @eclipse_instances.dup
475
+ foo.task('osgi:resolve:dependencies').invoke
476
+ File.exist?('dependencies.yml').should be_true
477
+ deps = YAML::load(File.read('dependencies.yml'))
478
+ deps["foo"]["dependencies"].size.should == 2 # there should be 2 dependencies
479
+ artifact(deps["foo"]["dependencies"][1]).to_hash[:id].should == "org.dude"
480
+ artifact(deps["foo"]["dependencies"][1]).to_hash[:version].should == "3.5.0.R_20090512"
481
+ end
482
+
483
+ it 'should pick a bundle when several match' do
484
+ e2 = createRepository("eclipse2")
485
+ Buildr::write e2 + "/plugins/org.eclipse.core.resources-3.5.0.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
486
+ Manifest-Version: 1.0
487
+ Bundle-ManifestVersion: 2
488
+ Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
489
+ Bundle-Version: 3.5.0.R_20090512
490
+ MANIFEST
491
+ Buildr::write e2 + "/plugins/org.eclipse.core.resources-3.5.1.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
492
+ Manifest-Version: 1.0
493
+ Bundle-ManifestVersion: 2
494
+ Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
495
+ Bundle-Version: 3.5.1.R_20090512
496
+ MANIFEST
497
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
498
+ Manifest-Version: 1.0
499
+ Bundle-ManifestVersion: 2
500
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
501
+ Bundle-Version: 3.9.9.R_20081204
502
+ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.3.0,3.5.2)"
503
+ MANIFEST
504
+ foo = define('foo', :version => "1.0", :group => "grp") {
505
+ package(:bundle)
506
+ }
507
+ foo.osgi.registry.containers = [e2]
508
+ foo.task('osgi:resolve:dependencies').invoke
509
+ File.exist?('dependencies.yml').should be_true
510
+ deps = YAML::load(File.read('dependencies.yml'))
511
+ deps["foo"]["dependencies"].size.should == 1
512
+ artifact(deps["foo"]["dependencies"][0].to_s).to_hash[:id].should == "org.eclipse.core.resources"
513
+ artifact(deps["foo"]["dependencies"][0]).to_hash[:version].should == "3.5.1.R_20090512"
514
+ end
515
+
516
+ it 'should resolve transitively all the jars needed' do
517
+ e2 = createRepository("eclipse2")
518
+ Buildr::write e2 + "/plugins/org.eclipse.core.resources-3.5.0.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
519
+ Manifest-Version: 1.0
520
+ Bundle-ManifestVersion: 2
521
+ Bundle-SymbolicName: org.eclipse.core.resources2; singleton:=true
522
+ Bundle-Version: 3.5.0.R_20090512
523
+ MANIFEST
524
+ Buildr::write e2 + "/plugins/org.eclipse.core.resources-3.5.1.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
525
+ Manifest-Version: 1.0
526
+ Bundle-ManifestVersion: 2
527
+ Require-Bundle: org.eclipse.core.resources2
528
+ Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
529
+ Bundle-Version: 3.5.1.R_20090512
530
+ MANIFEST
531
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
532
+ Manifest-Version: 1.0
533
+ Bundle-ManifestVersion: 2
534
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
535
+ Bundle-Version: 3.9.9.R_20081204
536
+ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.3.0,3.5.2)"
537
+ MANIFEST
538
+ foo = define('foo', :version => "1.0", :group => "grp") {
539
+ package(:bundle)
540
+ }
541
+ foo.osgi.registry.containers = [e2]
542
+ foo.task('osgi:resolve:dependencies').invoke
543
+ File.exist?('dependencies.yml').should be_true
544
+ deps = YAML::load(File.read('dependencies.yml'))
545
+
546
+ deps["foo"]["dependencies"].size.should == 2
547
+ end
548
+
549
+ end
550
+
551
+ describe OSGi::InstallTask do
552
+ before :all do
553
+ e1 = createRepository("eclipse1")
554
+ @eclipse_instances = [e1]
555
+ mkpath e1 + "/plugins"
556
+ debug_ui = artifact("eclipse:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341")
557
+ debug_ui.invoke # download it from our fake remote repository
558
+ cp debug_ui.to_s, (e1 + "/plugins/org.eclipse.debug.ui-3.4.1.v20080811_r341.jar")
559
+ Buildr::write e1 + "/plugins/org.eclipse.core.resources-3.5.1.R_20090512/META-INF/MANIFEST.MF", <<-MANIFEST
560
+ Manifest-Version: 1.0
561
+ Bundle-ManifestVersion: 2
562
+ Require-Bundle: org.eclipse.core.resources2
563
+ Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
564
+ Bundle-Version: 3.5.1.R_20090512
565
+ MANIFEST
566
+ cp_r File.join(File.dirname(__FILE__), "plugins", "org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800"), e1 + "/plugins"
567
+ end
568
+
569
+ it 'should install the dependencies into the local Maven repository' do
570
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
571
+ Manifest-Version: 1.0
572
+ Bundle-ManifestVersion: 2
573
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
574
+ Bundle-Version: 3.9.9.R_20081204
575
+ Require-Bundle: org.eclipse.debug.ui
576
+ MANIFEST
577
+ foo = define('foo', :version => "1.0", :group => "grp") {
578
+ package(:bundle)
579
+ }
580
+ foo.osgi.registry.containers = @eclipse_instances.dup
581
+ foo.dependencies
582
+ foo.task('osgi:install:dependencies').invoke
583
+ File.exist?(artifact("osgi:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").to_s).should be_true
584
+
585
+ end
586
+
587
+ it 'should jar up OSGi bundles represented as directories' do
588
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
589
+ Manifest-Version: 1.0
590
+ Bundle-ManifestVersion: 2
591
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
592
+ Bundle-Version: 3.9.9.R_20081204
593
+ Require-Bundle: org.eclipse.debug.ui,
594
+ org.eclipse.core.resources;bundle-version=3.5.1.R_20090512,
595
+ org.eclipse.core.runtime.compatibility.registry
596
+ MANIFEST
597
+ foo = define('foo', :version => "1.0", :group => "grp") do package(:bundle) end
598
+ foo.osgi.registry.containers = @eclipse_instances.dup
599
+
600
+ foo.task('osgi:resolve:dependencies').invoke
601
+ foo.task('osgi:install:dependencies').invoke
602
+ File.exist?(artifact("osgi:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s).should be_true
603
+ Zip::ZipFile.open(artifact("osgi:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s) {|zip|
604
+ zip.entries.empty?.should_not be_true
605
+ }
606
+ File.exist?(artifact("osgi:org.eclipse.core.runtime.compatibility.registry:jar:3.2.200.v20090429-1800").to_s).should be_true
607
+
608
+ Zip::ZipFile.open(artifact("osgi:org.eclipse.core.runtime.compatibility.registry:jar:3.2.200.v20090429-1800").to_s) {|zip|
609
+
610
+ zip.entries.empty?.should_not be_true
611
+ }
612
+ end
613
+
614
+ it 'should upload dependencies to the releasing repository' do
615
+ write "META-INF/MANIFEST.MF", <<-MANIFEST
616
+ Manifest-Version: 1.0
617
+ Bundle-ManifestVersion: 2
618
+ Bundle-SymbolicName: org.osgi.something; singleton:=true
619
+ Bundle-Version: 3.9.9.R_20081204
620
+ Require-Bundle: org.eclipse.debug.ui,org.eclipse.core.resources
621
+ MANIFEST
622
+ foo = define('foo', :version => "1.0", :group => "grp") {
623
+ package(:bundle)
624
+ }
625
+ foo.osgi.registry.containers = @eclipse_instances.dup
626
+ repositories.release_to = 'sftp://example.com/base'
627
+
628
+ foo.task('osgi:resolve:dependencies').invoke
629
+ URI.should_receive(:upload).once.
630
+ with(URI.parse('sftp://example.com/base/osgi/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.jar'),
631
+ artifact("osgi:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").to_s, anything)
632
+ URI.should_receive(:upload).once.
633
+ with(URI.parse('sftp://example.com/base/osgi/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.pom'),
634
+ artifact("osgi:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").pom.to_s, anything)
635
+ URI.should_receive(:upload).once.
636
+ with(URI.parse('sftp://example.com/base/osgi/org.eclipse.core.resources/3.5.1.R_20090512/org.eclipse.core.resources-3.5.1.R_20090512.pom'),
637
+ artifact("osgi:org.eclipse.core.resources:jar:3.5.1.R_20090512").pom.to_s, anything)
638
+ URI.should_receive(:upload).once.
639
+ with(URI.parse('sftp://example.com/base/osgi/org.eclipse.core.resources/3.5.1.R_20090512/org.eclipse.core.resources-3.5.1.R_20090512.jar'),
640
+ artifact("osgi:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s, anything)
641
+
642
+ foo.task('osgi:upload:dependencies').invoke
643
+
644
+
645
+ end
646
+
647
+ end
648
+
649
+ describe 'osgi:clean:dependencies' do
650
+ it 'should install a nice and clean dependencies.yml for the project to depend on' do
651
+ foo = define('foo') {
652
+ define('bar')
653
+ define('foobar')
654
+ }
655
+ foo.task('osgi:clean:dependencies').invoke
656
+ File.exist?('dependencies.yml').should be_true
657
+ deps = YAML::load(File.read('dependencies.yml'))
658
+ deps["foo"].size.should == 0
659
+ deps.keys.should include("foo:foobar")
660
+ deps.keys.should include("foo:bar")
661
+ end
662
+ end