buildr4osgi 0.9.0 → 0.9.2
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.
- data/buildr4osgi.gemspec +2 -2
- data/lib/buildr4osgi/compile/compiler.rb +23 -5
- data/lib/buildr4osgi/compile.rb +1 -1
- data/lib/buildr4osgi/eclipse/feature.rb +206 -65
- data/lib/buildr4osgi/osgi/bundle.rb +5 -7
- data/lib/buildr4osgi/osgi/bundle_package.rb +2 -2
- data/lib/buildr4osgi/osgi/container.rb +5 -0
- data/lib/buildr4osgi/osgi/dependencies.rb +91 -0
- data/lib/buildr4osgi/osgi/library_extension.rb +6 -4
- data/lib/buildr4osgi/osgi/packaging.rb +78 -6
- data/lib/buildr4osgi/osgi/packaging_sources.rb +86 -0
- data/lib/buildr4osgi/osgi/project_extension.rb +9 -115
- data/lib/buildr4osgi/osgi/registry.rb +71 -1
- data/lib/buildr4osgi/osgi/resolving_strategies.rb +4 -2
- data/lib/buildr4osgi/osgi.rb +2 -0
- data/lib/buildr4osgi.rb +0 -1
- data/rakelib/release.rake +3 -0
- data/rakelib/rspec.rake +3 -3
- data/rakelib/stage.rake +7 -0
- data/spec/compile/compiler_spec.rb +40 -8
- data/spec/eclipse/feature_spec.rb +103 -6
- data/spec/osgi/bundle_spec.rb +2 -2
- data/spec/osgi/dependencies_spec.rb +91 -0
- data/spec/osgi/library_extension_spec.rb +17 -0
- data/spec/osgi/packaging_sources_spec.rb +71 -0
- data/spec/osgi/packaging_spec.rb +11 -1
- data/spec/osgi/project_extension_spec.rb +31 -21
- data/spec/osgi/registry_spec.rb +31 -0
- data/spec/osgi/resolving_strategies_spec.rb +116 -0
- data/spec/spec_helpers.rb +2 -2
- data/spec/tmp/remote/log4j/log4j/1.2.15/log4j-1.2.15.jar +0 -0
- data/spec/tmp/remote/log4j/log4j/1.2.15/log4j-1.2.15.pom +478 -0
- metadata +10 -13
- data/lib/buildr4osgi/nature/eclipse.rb +0 -80
- data/lib/buildr4osgi/nature/java.rb +0 -32
- data/lib/buildr4osgi/nature/nature.rb +0 -156
- data/lib/buildr4osgi/nature/osgi.rb +0 -32
- data/lib/buildr4osgi/nature/scala.rb +0 -32
- data/spec/nature/eclipse_spec.rb +0 -46
- data/spec/nature/java_spec.rb +0 -45
- data/spec/nature/osgi_spec.rb +0 -63
- data/spec/nature/scala_spec.rb +0 -45
- data/spec/nature_spec.rb +0 -144
@@ -143,7 +143,7 @@ FEATURE
|
|
143
143
|
foo.package(:feature).feature_xml = "feature.xml"
|
144
144
|
|
145
145
|
foo.package(:feature).invoke
|
146
|
-
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0
|
146
|
+
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0.zip")
|
147
147
|
Zip::ZipFile.open(feature_file) do |zip|
|
148
148
|
zip.find_entry("eclipse/features/foo_1.0.0/feature.xml").should_not be_nil
|
149
149
|
zip.read("eclipse/features/foo_1.0.0/feature.xml").should == featurexml
|
@@ -164,7 +164,7 @@ PROPS
|
|
164
164
|
foo.package(:feature).feature_xml = "feature.xml"
|
165
165
|
foo.package(:feature).feature_properties = "feature.properties"
|
166
166
|
foo.package(:feature).invoke
|
167
|
-
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0
|
167
|
+
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0.zip")
|
168
168
|
Zip::ZipFile.open(feature_file) do |zip|
|
169
169
|
zip.find_entry("eclipse/features/foo_1.0.0/feature.xml").should_not be_nil
|
170
170
|
zip.read("eclipse/features/foo_1.0.0/feature.xml").should == featurexml
|
@@ -190,7 +190,7 @@ PROPS
|
|
190
190
|
f.license = "The license is too long to explain"
|
191
191
|
f.licenseURL = "http://example.com/license"
|
192
192
|
foo.package(:feature).invoke
|
193
|
-
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0
|
193
|
+
feature_file = File.join(foo.base_dir, "target", "foo-1.0.0.zip")
|
194
194
|
Zip::ZipFile.open(feature_file) do |zip|
|
195
195
|
zip.find_entry("eclipse/features/foo_1.0.0/feature.xml").should_not be_nil
|
196
196
|
feature_xml = zip.read("eclipse/features/foo_1.0.0/feature.xml")
|
@@ -222,7 +222,7 @@ describe Buildr4OSGi::FeatureTask, " when running" do
|
|
222
222
|
|
223
223
|
it "should create a jar file with a eclipse/plugins and a eclipse/features structure" do
|
224
224
|
@foo.package(:feature).invoke
|
225
|
-
feature_file = File.join(@foo.base_dir, "target", "foo-1.0.0
|
225
|
+
feature_file = File.join(@foo.base_dir, "target", "foo-1.0.0.zip")
|
226
226
|
File.exists?(feature_file).should be_true
|
227
227
|
Zip::ZipFile.open(feature_file) do |zip|
|
228
228
|
zip.find_entry("eclipse/features/foo_1.0.0/feature.xml").should_not be_nil
|
@@ -232,7 +232,7 @@ describe Buildr4OSGi::FeatureTask, " when running" do
|
|
232
232
|
end
|
233
233
|
|
234
234
|
it 'should complain if one of the dependencies is not a plugin' do
|
235
|
-
@foo.package(:feature).plugins <<
|
235
|
+
@foo.package(:feature).plugins << LOG4J
|
236
236
|
lambda { @foo.package(:feature).invoke}.should raise_error(
|
237
237
|
/The dependency .* is not an Eclipse plugin: make sure the headers Bundle-SymbolicName and Bundle-Version are present in the manifest/)
|
238
238
|
end
|
@@ -259,9 +259,11 @@ end
|
|
259
259
|
describe Buildr4OSGi::FeatureTask, " package subprojects" do
|
260
260
|
|
261
261
|
before do
|
262
|
+
Buildr::write "bar/src/main/java/Hello.java", "public class Hello {}"
|
262
263
|
@container = define("container") do
|
263
264
|
@bar = define("bar", :version => "1.0.0") do
|
264
|
-
package(:
|
265
|
+
package(:bundle)
|
266
|
+
package(:sources)
|
265
267
|
end
|
266
268
|
end
|
267
269
|
@foo = define("foo", :version => "1.0.0")
|
@@ -288,6 +290,101 @@ describe Buildr4OSGi::FeatureTask, " package subprojects" do
|
|
288
290
|
zip.find_entry("eclipse/features/foo_1.0.0/feature.properties").should_not be_nil
|
289
291
|
zip.find_entry("eclipse/plugins/bar_1.0.0.jar").should_not be_nil
|
290
292
|
zip.find_entry("eclipse/plugins/bar_1.0.0.jar").directory?.should be_false
|
293
|
+
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
|
301
|
+
describe Buildr4OSGi::FeatureTask, "packaged as SDK" do
|
302
|
+
|
303
|
+
before do
|
304
|
+
Buildr::write "bar/src/main/java/Hello.java", "public class Hello {}"
|
305
|
+
@container = define("container") do
|
306
|
+
project.group = "grp"
|
307
|
+
@bar = define("bar", :version => "1.0.0") do
|
308
|
+
package(:bundle)
|
309
|
+
package(:sources)
|
310
|
+
end
|
311
|
+
end
|
312
|
+
@foo = define("foo", :version => "1.0.0") do
|
313
|
+
|
314
|
+
f = package(:feature)
|
315
|
+
f.plugins.<< project("container:bar"), :unjarred => true
|
316
|
+
f.label = "My feature"
|
317
|
+
f.provider = "Acme Inc"
|
318
|
+
f.description = "The best feature ever"
|
319
|
+
f.changesURL = "http://example.com/changes"
|
320
|
+
f.license = "The license is too long to explain"
|
321
|
+
f.licenseURL = "http://example.com/license"
|
322
|
+
f.branding_plugin = "com.musal.ui"
|
323
|
+
f.update_sites << {:url => "http://example.com/update", :name => "My update site"}
|
324
|
+
f.discovery_sites = [{:url => "http://example.com/update2", :name => "My update site2"},
|
325
|
+
{:url => "http://example.com/upup", :name => "My update site in case"}]
|
326
|
+
package(:sources)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
it "should create a jar file with the subproject packaged as a jar inside it" do
|
331
|
+
@foo.package(:sources).invoke
|
332
|
+
feature_file = @foo.package(:sources).to_s
|
333
|
+
File.exists?(feature_file).should be_true
|
334
|
+
Zip::ZipFile.open(feature_file) do |zip|
|
335
|
+
zip.find_entry("eclipse/features/foo.sources_1.0.0/feature.xml").should_not be_nil
|
336
|
+
zip.find_entry("eclipse/features/foo.sources_1.0.0/feature.properties").should_not be_nil
|
337
|
+
zip.find_entry("eclipse/plugins/bar.sources_1.0.0.jar").should be_nil
|
338
|
+
zip.find_entry("eclipse/plugins/bar.sources_1.0.0").directory?.should be_true
|
339
|
+
zip.find_entry("eclipse/plugins/bar.sources_1.0.0/Hello.java").should_not be_nil
|
340
|
+
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
describe Buildr4OSGi::FeatureTask, "packaged as SDK, detecting the OSGi headers from the original build" do
|
348
|
+
|
349
|
+
before do
|
350
|
+
Buildr::write "bar/src/main/java/Hello.java", "public class Hello {}"
|
351
|
+
@container = define("container") do
|
352
|
+
project.group = "grp"
|
353
|
+
@bar = define("bar", :version => "1.0.0") do
|
354
|
+
package(:jar).with :manifest => {"Bundle-SymbolicName" => "myName", "Bundle-Version" => "3.2.1"}
|
355
|
+
package(:sources)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
@foo = define("foo", :version => "1.0.0") do
|
359
|
+
|
360
|
+
f = package(:feature)
|
361
|
+
f.plugins.<< project("container:bar"), :unjarred => true
|
362
|
+
f.label = "My feature"
|
363
|
+
f.provider = "Acme Inc"
|
364
|
+
f.description = "The best feature ever"
|
365
|
+
f.changesURL = "http://example.com/changes"
|
366
|
+
f.license = "The license is too long to explain"
|
367
|
+
f.licenseURL = "http://example.com/license"
|
368
|
+
f.branding_plugin = "com.musal.ui"
|
369
|
+
f.update_sites << {:url => "http://example.com/update", :name => "My update site"}
|
370
|
+
f.discovery_sites = [{:url => "http://example.com/update2", :name => "My update site2"},
|
371
|
+
{:url => "http://example.com/upup", :name => "My update site in case"}]
|
372
|
+
package(:sources)
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
it "should create a jar file with the subproject packaged as a jar inside it" do
|
377
|
+
@foo.package(:sources).invoke
|
378
|
+
feature_file = @foo.package(:sources).to_s
|
379
|
+
File.exists?(feature_file).should be_true
|
380
|
+
Zip::ZipFile.open(feature_file) do |zip|
|
381
|
+
zip.find_entry("eclipse/features/foo.sources_1.0.0/feature.xml").should_not be_nil
|
382
|
+
zip.find_entry("eclipse/features/foo.sources_1.0.0/feature.properties").should_not be_nil
|
383
|
+
zip.find_entry("eclipse/plugins/myName.sources_3.2.1.jar").should be_nil
|
384
|
+
zip.find_entry("eclipse/plugins/myName.sources_3.2.1").directory?.should be_true
|
385
|
+
zip.find_entry("eclipse/plugins/myName.sources_3.2.1/Hello.java").should_not be_nil
|
386
|
+
zip.find_entry("eclipse/plugins/myName.sources_3.2.1/META-INF/MANIFEST.MF").should_not be_nil
|
387
|
+
zip.read("eclipse/plugins/myName.sources_3.2.1/META-INF/MANIFEST.MF").should match(/Bundle-SymbolicName: myName\.sources/)
|
291
388
|
end
|
292
389
|
end
|
293
390
|
|
data/spec/osgi/bundle_spec.rb
CHANGED
@@ -48,11 +48,11 @@ MANIFEST
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'should be transformed as an artifact' do
|
51
|
-
@bundle.to_s.should eql("
|
51
|
+
@bundle.to_s.should eql("org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090912")
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'should compare with its artifact definition' do
|
55
|
-
(@bundle <=> "
|
55
|
+
(@bundle <=> "org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090912").should == 0
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'should recognize itself as a fragment' do
|
@@ -0,0 +1,91 @@
|
|
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
|
+
describe OSGi::Dependencies do
|
19
|
+
|
20
|
+
it "should read a dependencies.yml file" do
|
21
|
+
write "dependencies.yml", {"foo" => {"dependencies" => ["com:artifact:jar:1.0"], "projects" => ["bar", "foobar"]},
|
22
|
+
"bar" => {"dependencies" => [], "projects" => []},
|
23
|
+
"foobar" => {"dependencies" => [], "projects" => []}}.to_yaml
|
24
|
+
foo = define("foo")
|
25
|
+
bar = define("bar")
|
26
|
+
foobar = define("foobar")
|
27
|
+
deps = OSGi::Dependencies.new(foo)
|
28
|
+
deps.read
|
29
|
+
deps.dependencies.should == ["com:artifact:jar:1.0"]
|
30
|
+
deps.projects.should == [bar, foobar]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should complain if a project is missing" do
|
34
|
+
write "dependencies.yml", {"foo" => {"dependencies" => ["com:artifact:jar:1.0"], "projects" => ["bar", "foobar"]}}.to_yaml
|
35
|
+
foo = define("foo")
|
36
|
+
bar = define("bar")
|
37
|
+
|
38
|
+
deps = OSGi::Dependencies.new(foo)
|
39
|
+
lambda { deps.read }.should raise_error(RuntimeError, /No such project/)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should add the project to the dependencies even if the project is not declared in the dependencies file" do
|
43
|
+
write "dependencies.yml", {"foo" => {"dependencies" => ["com:artifact:jar:1.0"], "projects" => ["bar", "foobar"]}}.to_yaml
|
44
|
+
foo = define("foo")
|
45
|
+
bar = define("bar")
|
46
|
+
foobar = define("foobar")
|
47
|
+
deps = OSGi::Dependencies.new(foo)
|
48
|
+
deps.read
|
49
|
+
deps.dependencies.should == ["com:artifact:jar:1.0"]
|
50
|
+
deps.projects.should == [bar, foobar]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should find the dependencies of each project even if cycles are present" do
|
54
|
+
write "dependencies.yml", {"foo" => {"dependencies" => ["com:artifact:jar:1.0"], "projects" => ["bar", "foobar"]},
|
55
|
+
"bar" => {"dependencies" => [], "projects" => ["foo"]},
|
56
|
+
"foobar" => {"dependencies" => [], "projects" => ["bar"]}}.to_yaml
|
57
|
+
foo = define("foo")
|
58
|
+
bar = define("bar")
|
59
|
+
foobar = define("foobar")
|
60
|
+
deps = OSGi::Dependencies.new(foo)
|
61
|
+
deps.read
|
62
|
+
deps.dependencies.should == ["com:artifact:jar:1.0"]
|
63
|
+
deps.projects.should == [bar, foobar]
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should add the dependencies of the projects it depends on to its own" do
|
67
|
+
write "dependencies.yml", {"foo" => {"dependencies" => [], "projects" => ["bar"]},
|
68
|
+
"bar" => {"dependencies" => ["com:artifact:jar:1.0"], "projects" => []}}.to_yaml
|
69
|
+
foo = define("foo")
|
70
|
+
bar = define("bar")
|
71
|
+
deps = OSGi::Dependencies.new(foo)
|
72
|
+
deps.read
|
73
|
+
deps.dependencies.should == ["com:artifact:jar:1.0"]
|
74
|
+
deps.projects.should == [bar]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should write dependencies for several projects" do
|
78
|
+
foo = define("foo")
|
79
|
+
bar = define("bar")
|
80
|
+
deps = OSGi::Dependencies.new(foo)
|
81
|
+
deps.write([foo, "bar"]) {|hash, name|
|
82
|
+
case
|
83
|
+
when name == "foo"
|
84
|
+
hash["foo"]["projects"] << "bar"
|
85
|
+
when name == "bar"
|
86
|
+
hash["bar"]["dependencies"] << "com:art:jar:1.0"
|
87
|
+
end
|
88
|
+
}
|
89
|
+
YAML.load(File.read("dependencies.yml")).should == {"foo"=>{"projects"=>["bar"], "dependencies"=>[]}, "bar"=>{"projects"=>[], "dependencies"=>["com:art:jar:1.0"]}}
|
90
|
+
end
|
91
|
+
end
|
@@ -71,6 +71,23 @@ describe Buildr4OSGi::BuildLibraries do
|
|
71
71
|
}
|
72
72
|
end
|
73
73
|
|
74
|
+
it 'should not add the Export-Package header if no packages contain .class files' do
|
75
|
+
pending "Create a zip full of files but no .class files"
|
76
|
+
library_project(SLF4J, "group", "foo", "1.0.0")
|
77
|
+
foo = project("foo")
|
78
|
+
lambda {foo.package(:library_project).invoke}.should_not raise_error
|
79
|
+
jar = File.join(foo.base_dir, "target", "foo-1.0.0.jar")
|
80
|
+
File.exists?(jar).should be_true
|
81
|
+
Zip::ZipFile.open(jar) {|zip|
|
82
|
+
manifest = zip.find_entry("META-INF/MANIFEST.MF")
|
83
|
+
manifest.should_not be_nil
|
84
|
+
contents = Manifest.read(zip.read(manifest))
|
85
|
+
contents.first["Export-Package"].should_not be_nil
|
86
|
+
contents.first["Export-Package"].keys.should include("org.slf4j.helpers")
|
87
|
+
contents.first["Export-Package"].keys.should_not include("org")
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
74
91
|
it 'should produce a zip of the sources' do
|
75
92
|
library_project(SLF4J, "group", "foo", "1.0.0")
|
76
93
|
foo = project("foo")
|
@@ -0,0 +1,71 @@
|
|
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::BundleTask do
|
23
|
+
|
24
|
+
def define_project
|
25
|
+
Buildr::write "plugin.xml", <<-PLUGIN_XML
|
26
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
27
|
+
<?eclipse version="3.2"?>
|
28
|
+
<plugin>
|
29
|
+
<extension point="org.eclipse.core.runtime.preferences">
|
30
|
+
<initializer class="org.intalio.preferenceInitializer"></initializer>
|
31
|
+
</extension>
|
32
|
+
<extension id="helloproblemmarker" name="%marker" point="org.eclipse.core.resources.markers">
|
33
|
+
<super type="org.eclipse.core.resources.problemmarker"/>
|
34
|
+
<persistent value="true"/>
|
35
|
+
</extension>
|
36
|
+
</plugin>
|
37
|
+
PLUGIN_XML
|
38
|
+
Buildr::write "plugin.properties", <<-PLUGIN_PROPERTIES
|
39
|
+
marker=Hello marker
|
40
|
+
PLUGIN_PROPERTIES
|
41
|
+
Buildr::write "src/main/java/Main.java", "public class Main { public static void main(String[] args) {}}"
|
42
|
+
@plugin = define("plugin", :version => "1.0.0.001") do
|
43
|
+
package(:sources)
|
44
|
+
package(:plugin)
|
45
|
+
end
|
46
|
+
@path = @plugin.package(:sources).to_s
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should package the sources as a normal Java -sources.jar" do
|
51
|
+
define_project
|
52
|
+
@plugin.package(:sources).invoke
|
53
|
+
File.exists?(@path).should be_true
|
54
|
+
@path.to_s.should include(".jar")
|
55
|
+
Zip::ZipFile.open(@path) do |zip|
|
56
|
+
zip.find_entry("Main.java").should_not be_nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should package a manifest for OSGi" do
|
61
|
+
define_project
|
62
|
+
@plugin.package(:sources).invoke
|
63
|
+
File.exists?(@path).should be_true
|
64
|
+
sourcesManifest = ::Buildr::Packaging::Java::Manifest.new(nil)
|
65
|
+
Zip::ZipFile.open(@path) do |zip|
|
66
|
+
zip.find_entry("Main.java").should_not be_nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
end
|
data/spec/osgi/packaging_spec.rb
CHANGED
@@ -41,7 +41,6 @@ PLUGIN_PROPERTIES
|
|
41
41
|
Buildr::write "src/main/java/Main.java", "public class Main { public static void main(String[] args) {}}"
|
42
42
|
@plugin = define("plugin", :version => "1.0.0.001")
|
43
43
|
@path = @plugin.package(:plugin).to_s
|
44
|
-
|
45
44
|
end
|
46
45
|
|
47
46
|
it "should package a project as a normal Java project" do
|
@@ -63,6 +62,16 @@ PLUGIN_PROPERTIES
|
|
63
62
|
end
|
64
63
|
end
|
65
64
|
|
65
|
+
it "should package a project as a plugin with its internal properties files" do
|
66
|
+
define_project
|
67
|
+
Buildr::write "src/main/java/somefolder/hello.properties", "# Empty properties file"
|
68
|
+
@plugin.package(:plugin).invoke
|
69
|
+
File.exists?(@path).should be_true
|
70
|
+
Zip::ZipFile.open(@path) do |zip|
|
71
|
+
zip.find_entry("somefolder/hello.properties").should_not be_nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
66
75
|
it "should work with subprojects" do
|
67
76
|
Buildr::write "bar/plugin.xml", <<-PLUGIN_XML
|
68
77
|
<?xml version="1.0" encoding="UTF-8"?>
|
@@ -85,6 +94,7 @@ PLUGIN_PROPERTIES
|
|
85
94
|
define("bar", :version => "2.0")
|
86
95
|
end
|
87
96
|
project("plugin:bar").package(:plugin).invoke
|
97
|
+
File.basename(project("plugin:bar").package(:plugin).to_s).should == "bar-2.0.jar"
|
88
98
|
Zip::ZipFile.open(project("plugin:bar").package(:plugin).to_s) do |zip|
|
89
99
|
zip.find_entry("plugin.xml").should_not be_nil
|
90
100
|
zip.find_entry("plugin.properties").should_not be_nil
|
@@ -25,16 +25,26 @@ describe OSGi::ProjectExtension do
|
|
25
25
|
define('foo').dependencies.should be_instance_of(Array)
|
26
26
|
end
|
27
27
|
|
28
|
-
it 'should
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
it 'should fail when the user uses a dependency that is not present locally or remotely' do
|
29
|
+
write "dependencies.yml", {"foo" => {"dependencies" => ["group:artifact:jar:99.99.1"], "projects" => []},
|
30
|
+
"bar" => {"dependencies" => [], "projects" => ["foobar"]}}.to_yaml
|
31
|
+
foo = define('foo') {
|
32
|
+
compile.with dependencies
|
33
|
+
}
|
34
|
+
# bar = define("bar") {
|
35
|
+
# compile.with dependencies
|
36
|
+
# }
|
37
|
+
lambda {foo.compile.invoke}.should raise_error(RuntimeError, /Failed to download group:artifact:jar:99.99.1/)
|
38
|
+
pending "Unsupported scenario as of now."
|
39
|
+
lambda {bar.compile.invoke}.should raise_error(RuntimeError, /No such project/)
|
34
40
|
end
|
35
41
|
|
36
|
-
it 'should
|
37
|
-
|
42
|
+
it 'should fail when the user uses a project that is not present locally or remotely' do
|
43
|
+
# see the spec dependencies_spec.rb at line 33 for an equivalent test.
|
44
|
+
write "dependencies.yml", {"bar" => {"dependencies" => [], "projects" => ["foobar"]}}.to_yaml
|
45
|
+
bar = define("bar") {
|
46
|
+
lambda {compile.with dependencies}.should raise_error(RuntimeError, /No such project/)
|
47
|
+
}
|
38
48
|
end
|
39
49
|
|
40
50
|
end
|
@@ -580,7 +590,7 @@ MANIFEST
|
|
580
590
|
foo.osgi.registry.containers = @eclipse_instances.dup
|
581
591
|
foo.dependencies
|
582
592
|
foo.task('osgi:install:dependencies').invoke
|
583
|
-
File.exist?(artifact("
|
593
|
+
File.exist?(artifact("org.eclipse:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").to_s).should be_true
|
584
594
|
|
585
595
|
end
|
586
596
|
|
@@ -599,13 +609,13 @@ MANIFEST
|
|
599
609
|
|
600
610
|
foo.task('osgi:resolve:dependencies').invoke
|
601
611
|
foo.task('osgi:install:dependencies').invoke
|
602
|
-
File.exist?(artifact("
|
603
|
-
Zip::ZipFile.open(artifact("
|
612
|
+
File.exist?(artifact("org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s).should be_true
|
613
|
+
Zip::ZipFile.open(artifact("org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s) {|zip|
|
604
614
|
zip.entries.empty?.should_not be_true
|
605
615
|
}
|
606
|
-
File.exist?(artifact("
|
616
|
+
File.exist?(artifact("org.eclipse:org.eclipse.core.runtime.compatibility.registry:jar:3.2.200.v20090429-1800").to_s).should be_true
|
607
617
|
|
608
|
-
Zip::ZipFile.open(artifact("
|
618
|
+
Zip::ZipFile.open(artifact("org.eclipse:org.eclipse.core.runtime.compatibility.registry:jar:3.2.200.v20090429-1800").to_s) {|zip|
|
609
619
|
|
610
620
|
zip.entries.empty?.should_not be_true
|
611
621
|
}
|
@@ -627,17 +637,17 @@ MANIFEST
|
|
627
637
|
|
628
638
|
foo.task('osgi:resolve:dependencies').invoke
|
629
639
|
URI.should_receive(:upload).once.
|
630
|
-
with(URI.parse('sftp://example.com/base/
|
631
|
-
artifact("
|
640
|
+
with(URI.parse('sftp://example.com/base/org/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.jar'),
|
641
|
+
artifact("org.eclipse:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").to_s, anything)
|
632
642
|
URI.should_receive(:upload).once.
|
633
|
-
with(URI.parse('sftp://example.com/base/
|
634
|
-
artifact("
|
643
|
+
with(URI.parse('sftp://example.com/base/org/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.pom'),
|
644
|
+
artifact("org.eclipse:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341").pom.to_s, anything)
|
635
645
|
URI.should_receive(:upload).once.
|
636
|
-
with(URI.parse('sftp://example.com/base/
|
637
|
-
artifact("
|
646
|
+
with(URI.parse('sftp://example.com/base/org/eclipse/org.eclipse.core.resources/3.5.1.R_20090512/org.eclipse.core.resources-3.5.1.R_20090512.pom'),
|
647
|
+
artifact("org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090512").pom.to_s, anything)
|
638
648
|
URI.should_receive(:upload).once.
|
639
|
-
with(URI.parse('sftp://example.com/base/
|
640
|
-
artifact("
|
649
|
+
with(URI.parse('sftp://example.com/base/org/eclipse/org.eclipse.core.resources/3.5.1.R_20090512/org.eclipse.core.resources-3.5.1.R_20090512.jar'),
|
650
|
+
artifact("org.eclipse:org.eclipse.core.resources:jar:3.5.1.R_20090512").to_s, anything)
|
641
651
|
|
642
652
|
foo.task('osgi:upload:dependencies').invoke
|
643
653
|
|
data/spec/osgi/registry_spec.rb
CHANGED
@@ -47,4 +47,35 @@ describe OSGi::Registry do
|
|
47
47
|
lambda {foo.osgi.registry.containers << "hello"}.should raise_error(TypeError)
|
48
48
|
lambda {foo.osgi.registry.containers = ["hello"]}.should raise_error(RuntimeError, /Cannot set containers, containers have been resolved already/)
|
49
49
|
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
describe OSGi::OSGi do
|
54
|
+
|
55
|
+
it 'should add a new osgi method to projects' do
|
56
|
+
define('foo').osgi.should be_instance_of(::OSGi::OSGi)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should give a handle over the OSGi containers registry' do
|
60
|
+
define('foo').osgi.registry.should be_instance_of(::OSGi::Registry)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
describe OSGi::GroupMatcher do
|
66
|
+
|
67
|
+
it 'should use osgi as the default group for an artifact' do
|
68
|
+
OSGi::GroupMatcher.instance.group("hello").should == "osgi"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should use org.eclipse as the default group for Eclipse artifacts' do
|
72
|
+
OSGi::GroupMatcher.instance.group("org.eclipse.core.resources").should == "org.eclipse"
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should let users specify their own groups' do
|
76
|
+
OSGi::GroupMatcher.instance.group_matchers << Proc.new {|name| "bar" if name.match /foo$/}
|
77
|
+
OSGi::GroupMatcher.instance.group("org.eclipse.core.resources").should == "org.eclipse"
|
78
|
+
OSGi::GroupMatcher.instance.group("hello").should == "osgi"
|
79
|
+
OSGi::GroupMatcher.instance.group("org.eclipse.core.foo").should == "bar"
|
80
|
+
end
|
50
81
|
end
|
@@ -0,0 +1,116 @@
|
|
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
|
+
describe OSGi::BundleResolvingStrategies do
|
19
|
+
|
20
|
+
before(:all) do
|
21
|
+
@bundles = [OSGi::Bundle.new("art", "1.0"), OSGi::Bundle.new("art", "2.0"),
|
22
|
+
OSGi::Bundle.new("art", "2.0.1"), OSGi::Bundle.new("art", "3.0")]
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should use latest by default to resolve bundle dependencies' do
|
27
|
+
define('foo').osgi.options.bundle_resolving_strategy.should eql(:latest)
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'latest' do
|
31
|
+
|
32
|
+
it 'should return the bundle with the latest version' do
|
33
|
+
OSGi::BundleResolvingStrategies.latest(@bundles).should == @bundles.last
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'oldest' do
|
39
|
+
|
40
|
+
it 'should return the bundle with the oldest version' do
|
41
|
+
OSGi::BundleResolvingStrategies.oldest(@bundles).should == @bundles.first
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'prompt' do
|
47
|
+
|
48
|
+
it 'should prompt the user to choose a bundle' do
|
49
|
+
input = $stdin
|
50
|
+
$stdin = StringIO.new
|
51
|
+
$stdin.should_receive(:gets).and_return("i\n")
|
52
|
+
$stdin.should_receive(:gets).and_return("256\n")
|
53
|
+
$stdin.should_receive(:gets).and_return("2\n")
|
54
|
+
lambda {
|
55
|
+
OSGi::BundleResolvingStrategies.prompt(@bundles).should == @bundles[1]
|
56
|
+
}.should show("Invalid index")
|
57
|
+
$stdin = input
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
describe OSGi::PackageResolvingStrategies do
|
65
|
+
|
66
|
+
before(:all) do
|
67
|
+
@bundles = [OSGi::Bundle.new("art", "1.0"), OSGi::Bundle.new("art", "2.0"),
|
68
|
+
OSGi::Bundle.new("art", "2.0.1"), OSGi::Bundle.new("art", "3.0")]
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should use all by default to resolve package dependencies' do
|
73
|
+
define('foo').osgi.options.package_resolving_strategy.should eql(:all)
|
74
|
+
end
|
75
|
+
|
76
|
+
describe 'all' do
|
77
|
+
|
78
|
+
it 'should take all the bundles' do
|
79
|
+
OSGi::PackageResolvingStrategies.all(::OSGi::BundlePackage.new("com.package", "1.0"), @bundles).should == @bundles
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'prompt' do
|
85
|
+
|
86
|
+
it 'should prompt the user to choose a bundle' do
|
87
|
+
input = $stdin
|
88
|
+
$stdin = StringIO.new
|
89
|
+
$stdin.should_receive(:gets).and_return("2\n")
|
90
|
+
OSGi::PackageResolvingStrategies.prompt(::OSGi::BundlePackage.new("com.package", "1.0"), @bundles).should == [@bundles[1]]
|
91
|
+
$stdin = input
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should complain if the user enters an invalid index' do
|
95
|
+
input = $stdin
|
96
|
+
$stdin = StringIO.new
|
97
|
+
$stdin.should_receive(:gets).and_return("i\n")
|
98
|
+
$stdin.should_receive(:gets).and_return("256\n")
|
99
|
+
$stdin.should_receive(:gets).and_return("2\n")
|
100
|
+
lambda {
|
101
|
+
OSGi::PackageResolvingStrategies.prompt(::OSGi::BundlePackage.new("com.package", "1.0"), @bundles).should == [@bundles[1]]
|
102
|
+
}.should show("Invalid index")
|
103
|
+
$stdin = input
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should let the user select all bundles' do
|
107
|
+
input = $stdin
|
108
|
+
$stdin = StringIO.new
|
109
|
+
$stdin.should_receive(:gets).and_return("A\n")
|
110
|
+
OSGi::PackageResolvingStrategies.prompt(::OSGi::BundlePackage.new("com.package", "1.0"), @bundles).should == @bundles
|
111
|
+
$stdin = input
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
data/spec/spec_helpers.rb
CHANGED
@@ -35,17 +35,17 @@ unless defined?(SpecHelpers)
|
|
35
35
|
HELPERS_REPOSITORY = File.expand_path(File.join(File.dirname(__FILE__), "tmp", "remote"))
|
36
36
|
Buildr::repositories.local = HELPERS_REPOSITORY
|
37
37
|
slf4j = Buildr::group(%w{ slf4j-api slf4j-log4j12 jcl104-over-slf4j }, :under=>"org.slf4j", :version=>"1.5.8")
|
38
|
+
LOG4J = "log4j:log4j:jar:1.2.15"
|
38
39
|
SLF4J = slf4j
|
39
40
|
DEBUG_UI = "eclipse:org.eclipse.debug.ui:jar:3.4.1.v20080811_r341"
|
40
41
|
Buildr::repositories.remote << "http://www.intalio.org/public/maven2"
|
41
42
|
artifact(DEBUG_UI).invoke # download it once!
|
43
|
+
artifact(LOG4J).invoke
|
42
44
|
for lib in SLF4J do
|
43
45
|
artifact(lib).invoke
|
44
46
|
artifact(artifact(lib).to_hash.merge(:classifier => "sources")).invoke
|
45
47
|
end
|
46
48
|
Buildr::repositories.local = fake_local
|
47
|
-
# Keep a default registry.
|
48
|
-
DEFAULT = Buildr::Nature::Registry.all unless defined?(DEFAULT)
|
49
49
|
|
50
50
|
module Buildr4OSGi::SpecHelpers
|
51
51
|
|
Binary file
|