buildr4osgi 0.9.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|