buildr4osgi 0.9.2 → 0.9.3
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.rb +2 -0
- data/lib/buildr4osgi/compile.rb +2 -1
- data/lib/buildr4osgi/compile/compiler.rb +1 -3
- data/lib/buildr4osgi/compile/external.rb +71 -0
- data/lib/buildr4osgi/eclipse.rb +3 -1
- data/lib/buildr4osgi/eclipse/feature.rb +12 -7
- data/lib/buildr4osgi/eclipse/p2.rb +137 -0
- data/lib/buildr4osgi/eclipse/site.rb +207 -0
- data/lib/buildr4osgi/osgi/bundle.rb +17 -12
- data/lib/buildr4osgi/osgi/bundle_package.rb +35 -11
- data/lib/buildr4osgi/osgi/container.rb +1 -0
- data/lib/buildr4osgi/osgi/execution_environment.rb +199 -0
- data/lib/buildr4osgi/osgi/library_extension.rb +14 -1
- data/lib/buildr4osgi/osgi/packaging_sources.rb +4 -0
- data/lib/buildr4osgi/osgi/project_extension.rb +59 -20
- data/lib/buildr4osgi/osgi/registry.rb +23 -29
- data/lib/buildr4osgi/osgi/resolving_strategies.rb +1 -0
- data/lib/buildr4osgi/osgi/version.rb +1 -1
- data/rakelib/all-in-one.rake +84 -0
- data/rakelib/stage.rake +5 -4
- data/spec/compile/external_spec.rb +41 -0
- data/spec/eclipse/p2_spec.rb +65 -0
- data/spec/eclipse/site_spec.rb +94 -0
- data/spec/osgi/bundle_package_spec.rb +13 -1
- data/spec/osgi/bundle_spec.rb +2 -2
- data/spec/osgi/execution_environment_spec.rb +48 -0
- data/spec/osgi/library_extension_spec.rb +15 -2
- data/spec/osgi/project_extension_spec.rb +86 -18
- data/spec/osgi/registry_spec.rb +30 -20
- data/spec/osgi/resolving_strategies_spec.rb +2 -2
- data/spec/osgi/version_spec.rb +6 -0
- data/spec/spec_helpers.rb +12 -0
- metadata +12 -16
- 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
- data/spec/tmp/remote/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.pom +0 -82
- 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 +0 -478
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.pom +0 -30
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.pom +0 -101
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.pom +0 -56
@@ -13,6 +13,8 @@
|
|
13
13
|
# License for the specific language governing permissions and limitations under
|
14
14
|
# the License.
|
15
15
|
|
16
|
+
require File.join(File.dirname(__FILE__), 'execution_environment')
|
17
|
+
|
16
18
|
module OSGi
|
17
19
|
|
18
20
|
OSGI_GROUP_ID = "osgi"
|
@@ -61,6 +63,10 @@ module OSGi
|
|
61
63
|
@containers = [Buildr.settings.user, Buildr.settings.build].inject([]) { |repos, hash|
|
62
64
|
repos | Array(hash['osgi'] && hash['osgi']['containers'])
|
63
65
|
}
|
66
|
+
if ENV['OSGI'] && !ENV['OSGi']
|
67
|
+
warn "The correct constant to define for the OSGi containers is named OSGi"
|
68
|
+
ENV['OSGi'] = ENV['OSGI']
|
69
|
+
end
|
64
70
|
if ENV['OSGi']
|
65
71
|
@containers |= ENV['OSGi'].split(';')
|
66
72
|
end
|
@@ -80,19 +86,6 @@ module OSGi
|
|
80
86
|
end
|
81
87
|
end
|
82
88
|
|
83
|
-
class OSGi #:nodoc:
|
84
|
-
|
85
|
-
attr_reader :options, :registry
|
86
|
-
|
87
|
-
def initialize(project)
|
88
|
-
if (project.parent)
|
89
|
-
@options = project.parent.osgi.options.dup
|
90
|
-
@registry = project.parent.osgi.registry.dup
|
91
|
-
end
|
92
|
-
@options ||= Options.new
|
93
|
-
@registry ||= ::OSGi::Registry.new
|
94
|
-
end
|
95
|
-
|
96
89
|
# The options for the osgi.options method
|
97
90
|
# package_resolving_strategy:
|
98
91
|
# The package resolving strategy, it should be a symbol representing a module function in the OSGi::PackageResolvingStrategies module.
|
@@ -102,30 +95,31 @@ module OSGi
|
|
102
95
|
# A set of Proc objects to match a bundle to a groupId for maven.
|
103
96
|
# The array is examined with the latest added Procs first.
|
104
97
|
# The first proc to return a non-nil answer is used, otherwise the OGSGI_GROUP_ID constant is used.
|
105
|
-
class Options
|
98
|
+
class Options < ::OSGi::ExecutionEnvironmentConfiguration
|
106
99
|
attr_accessor :package_resolving_strategy, :bundle_resolving_strategy
|
107
100
|
|
108
101
|
def initialize
|
102
|
+
super
|
109
103
|
@package_resolving_strategy = :all
|
110
104
|
@bundle_resolving_strategy = :latest
|
111
105
|
end
|
112
|
-
|
113
106
|
end
|
114
|
-
end
|
115
|
-
|
116
|
-
module OSGiOptions
|
117
|
-
include Extension
|
118
107
|
|
119
|
-
#
|
120
|
-
#
|
121
|
-
# or
|
122
|
-
|
123
|
-
|
124
|
-
|
108
|
+
# Calls to this method return true if the package name passed as argument
|
109
|
+
# is either part of the packages of the framework given by the execution environment
|
110
|
+
# or part of the extra packages specified by the user.
|
111
|
+
#
|
112
|
+
def is_framework_package?(name)
|
113
|
+
options.current_execution_environment.packages.include?(name) || options.extra_packages.include?(name)
|
125
114
|
end
|
115
|
+
|
116
|
+
|
117
|
+
def options
|
118
|
+
@options ||= Options.new
|
126
119
|
end
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
120
|
+
|
121
|
+
def registry
|
122
|
+
@registry ||= ::OSGi::Registry.new
|
123
|
+
end
|
124
|
+
|
131
125
|
end
|
@@ -91,7 +91,7 @@ module OSGi #:nodoc:
|
|
91
91
|
#
|
92
92
|
def self.parse(string, max_infinite = false)
|
93
93
|
return string if string.is_a?(VersionRange) || string.is_a?(Version)
|
94
|
-
if !string.nil? && (match = string.match /\s*([\[|\(])([0-9|\.]*)
|
94
|
+
if !string.nil? && (match = string.match /\s*([\[|\(])([0-9|A-z|\.]*)\s*,\s*([0-9|A-z|\.]*)([\]|\)])/)
|
95
95
|
range = VersionRange.new
|
96
96
|
range.min = Version.new(match[2])
|
97
97
|
range.max = Version.new(match[3])
|
@@ -0,0 +1,84 @@
|
|
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
|
+
desc "Create JRuby all-in-one distribution"
|
17
|
+
task "all-in-one" => :gem do
|
18
|
+
version = "1.4.0"
|
19
|
+
jruby_distro = "jruby-bin-#{version}.tar.gz"
|
20
|
+
url = "http://jruby.kenai.com/downloads/#{version}/#{jruby_distro}"
|
21
|
+
dir = "jruby-#{version}"
|
22
|
+
|
23
|
+
mkpath '_all-in-one'
|
24
|
+
cd '_all-in-one'
|
25
|
+
|
26
|
+
# Download and extract JRuby
|
27
|
+
lambda do
|
28
|
+
unless File.exist? jruby_distro
|
29
|
+
puts "Downloading JRuby from #{url} ..."
|
30
|
+
sh 'wget', url
|
31
|
+
puts "[X] Downloaded JRuby"
|
32
|
+
end
|
33
|
+
|
34
|
+
rm_rf dir if File.exist? dir
|
35
|
+
|
36
|
+
puts "Extracting JRuby to #{dir} ..."
|
37
|
+
sh 'tar', 'xzf', jruby_distro
|
38
|
+
puts "[X] Extracted JRuby"
|
39
|
+
cd dir
|
40
|
+
end.call
|
41
|
+
|
42
|
+
# Cleanup JRuby distribution
|
43
|
+
lambda do
|
44
|
+
rm_rf 'docs'
|
45
|
+
mkpath 'jruby-docs'
|
46
|
+
mv Dir["COPYING*"], 'jruby-docs'
|
47
|
+
mv Dir["LICENSE*"], 'jruby-docs'
|
48
|
+
mv 'README', 'jruby-docs'
|
49
|
+
rm_rf 'lib/ruby/1.9'
|
50
|
+
rm_rf 'lib/ruby/gems/1.8/doc'
|
51
|
+
rm_rf 'samples'
|
52
|
+
rm_rf 'share'
|
53
|
+
end.call
|
54
|
+
|
55
|
+
# Install Buildr gem and dependencies
|
56
|
+
lambda do
|
57
|
+
puts "Install Buildr gem ..."
|
58
|
+
sh "bin/jruby", '-S', 'gem', 'install', FileList['../../pkg/*-java.gem'].first, FileList['../../../buildr4osgi*.gem'].first,
|
59
|
+
'--no-rdoc', '--no-ri'
|
60
|
+
puts "[X] Install Buildr gem"
|
61
|
+
end.call
|
62
|
+
|
63
|
+
# Add Buildr executables/scripts
|
64
|
+
lambda do
|
65
|
+
cp 'bin/jruby.exe', 'bin/_buildr.exe'
|
66
|
+
cp Dir["../../all-in-one/*"], 'bin'
|
67
|
+
end.call
|
68
|
+
|
69
|
+
# Package distribution
|
70
|
+
lambda do
|
71
|
+
puts "Zipping distribution ..."
|
72
|
+
cd '..'
|
73
|
+
new_dir = "#{spec.name}-#{spec.version}-#{dir}"
|
74
|
+
mv dir, new_dir
|
75
|
+
zip = "#{new_dir}.zip"
|
76
|
+
rm zip if File.exist? zip
|
77
|
+
sh 'zip', '-q', '-r', zip, new_dir
|
78
|
+
puts "[X] Zipped distribution"
|
79
|
+
rm_rf new_dir
|
80
|
+
end.call
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
task(:clobber) { rm_rf '_all-in-one' }
|
data/rakelib/stage.rake
CHANGED
@@ -113,7 +113,7 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
|
|
113
113
|
File.open(pkg + '.sha1', 'w') { |file| file.write Digest::SHA1.hexdigest(bytes) << ' ' << File.basename(pkg) }
|
114
114
|
sh 'gpg2', '--local-user', args.gpg, '--armor', '--output', pkg + '.asc', '--detach-sig', pkg, :verbose=>true
|
115
115
|
end
|
116
|
-
cp 'etc/KEYS', '_staged'
|
116
|
+
cp 'etc/KEYS', '_staged/dist'
|
117
117
|
puts "[X] Created and signed release packages in _staged/dist"
|
118
118
|
end.call
|
119
119
|
|
@@ -121,10 +121,11 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
|
|
121
121
|
# want to do that before generating the site/documentation.
|
122
122
|
lambda do
|
123
123
|
puts "Updating download page with links to release packages ... "
|
124
|
-
|
124
|
+
mirror = "http://www.apache.org/dyn/closer.cgi/#{spec.name}/#{spec.version}"
|
125
|
+
official = "http://www.apache.org/dist/#{spec.name}/#{spec.version}"
|
125
126
|
rows = FileList['_staged/dist/*.{gem,tgz,zip}'].map { |pkg|
|
126
127
|
name, md5 = File.basename(pkg), Digest::MD5.file(pkg).to_s
|
127
|
-
%{| "#{name}":#{
|
128
|
+
%{| "#{name}":#{mirror}/#{name} | "#{md5}":#{official}/#{name}.md5 | "Sig":#{official}/#{name}.asc |}
|
128
129
|
}
|
129
130
|
textile = <<-TEXTILE
|
130
131
|
h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
|
@@ -132,7 +133,7 @@ h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
|
|
132
133
|
|_. Package |_. MD5 Checksum |_. PGP |
|
133
134
|
#{rows.join("\n")}
|
134
135
|
|
135
|
-
p>. ("Release signing keys":#{
|
136
|
+
p>. ("Release signing keys":#{official}/KEYS)
|
136
137
|
TEXTILE
|
137
138
|
file_name = 'doc/download.textile'
|
138
139
|
print "Adding download links to #{file_name} ... "
|
@@ -0,0 +1,41 @@
|
|
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
|
+
|
17
|
+
require File.join(File.dirname(__FILE__), '../spec_helpers')
|
18
|
+
|
19
|
+
describe Buildr4OSGi::CompilerSupport::ExternalC do
|
20
|
+
|
21
|
+
before :all do
|
22
|
+
Buildr::Compiler.compilers.delete Buildr::Compiler::Javac
|
23
|
+
Buildr::Compiler.compilers.delete Buildr4OSGi::CompilerSupport::OSGiC
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "should compile a Java project just in the same way javac does" do
|
27
|
+
javac_spec = File.read(File.join(File.dirname(__FILE__), "..", "..", "buildr", "spec", "java", "compiler_spec.rb"))
|
28
|
+
javac_spec = javac_spec.match(Regexp.escape("require File.join(File.dirname(__FILE__), '../spec_helpers')\n")).post_match
|
29
|
+
javac_spec.gsub!("javac", "externalc")
|
30
|
+
javac_spec.gsub!("nowarn", "warn:none")
|
31
|
+
eval(javac_spec)
|
32
|
+
end
|
33
|
+
|
34
|
+
after :all do
|
35
|
+
Buildr::Compiler.compilers << Buildr::Compiler::Javac
|
36
|
+
Buildr::Compiler.compilers.unshift Buildr4OSGi::CompilerSupport::OSGiC
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
|
@@ -0,0 +1,65 @@
|
|
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 Buildr4OSGi::P2 do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
Buildr::write "bar/src/main/java/Hello.java", "public class Hello {}"
|
22
|
+
@container = define("container") do
|
23
|
+
project.group = "grp"
|
24
|
+
@bar = define("bar", :version => "1.0.0") do
|
25
|
+
package(:bundle)
|
26
|
+
package(:sources)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
@foo = define("foo", :version => "1.0.0") do
|
30
|
+
f = package(:feature)
|
31
|
+
f.plugins << project("container:bar")
|
32
|
+
f.label = "My feature"
|
33
|
+
f.provider = "Acme Inc"
|
34
|
+
f.description = "The best feature ever"
|
35
|
+
f.changesURL = "http://example.com/changes"
|
36
|
+
f.license = "The license is too long to explain"
|
37
|
+
f.licenseURL = "http://example.com/license"
|
38
|
+
f.branding_plugin = "com.musal.ui"
|
39
|
+
f.update_sites << {:url => "http://example.com/update", :name => "My update site"}
|
40
|
+
f.discovery_sites = [{:url => "http://example.com/update2", :name => "My update site2"},
|
41
|
+
{:url => "http://example.com/upup", :name => "My update site in case"}]
|
42
|
+
#package(:sources)
|
43
|
+
end
|
44
|
+
|
45
|
+
@bar = define("bar", :version => "1.0")
|
46
|
+
site = @bar.package(:site)
|
47
|
+
category = Buildr4OSGi::Category.new
|
48
|
+
category.name = "category.id"
|
49
|
+
category.label = "Some Label"
|
50
|
+
category.description = "The category is described here"
|
51
|
+
category.features<< @foo
|
52
|
+
site.categories << category
|
53
|
+
site
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should generate a p2 site" do
|
58
|
+
@p2 = project("foo") do
|
59
|
+
package(:p2_from_site).with :site => @bar
|
60
|
+
end
|
61
|
+
@p2.package(:p2_from_site).invoke
|
62
|
+
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,94 @@
|
|
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 Buildr4OSGi::SiteWriter do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
class SiteWriterTester
|
22
|
+
|
23
|
+
end
|
24
|
+
@f_w = SiteWriterTester.new
|
25
|
+
@f_w.extend Buildr4OSGi::SiteWriter
|
26
|
+
Buildr::write "bar/src/main/java/Hello.java", "public class Hello {}"
|
27
|
+
@container = define("container") do
|
28
|
+
project.group = "grp"
|
29
|
+
@bar = define("bar", :version => "1.0.0") do
|
30
|
+
package(:bundle)
|
31
|
+
package(:sources)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@foo = define("foo", :version => "1.0.0") do
|
35
|
+
f = package(:feature)
|
36
|
+
f.plugins << project("container:bar")
|
37
|
+
f.label = "My feature"
|
38
|
+
f.provider = "Acme Inc"
|
39
|
+
f.description = "The best feature ever"
|
40
|
+
f.changesURL = "http://example.com/changes"
|
41
|
+
f.license = "The license is too long to explain"
|
42
|
+
f.licenseURL = "http://example.com/license"
|
43
|
+
f.branding_plugin = "com.musal.ui"
|
44
|
+
f.update_sites << {:url => "http://example.com/update", :name => "My update site"}
|
45
|
+
f.discovery_sites = [{:url => "http://example.com/update2", :name => "My update site2"},
|
46
|
+
{:url => "http://example.com/upup", :name => "My update site in case"}]
|
47
|
+
#package(:sources)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should write a valid site.xml" do
|
52
|
+
@f_w.description = "Description"
|
53
|
+
@f_w.description_url = "http://www.example.com/description"
|
54
|
+
category = Buildr4OSGi::Category.new
|
55
|
+
category.name = "category.id"
|
56
|
+
category.label = "Some Label"
|
57
|
+
category.description = "The category is described here"
|
58
|
+
category.features<< @foo
|
59
|
+
@f_w.categories << category
|
60
|
+
@f_w.writeSiteXml({@foo.package(:feature).to_s => {:id => "foo", :version => "1.0.0"}}).should == <<-SITE_XML
|
61
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
62
|
+
<site pack200="false">
|
63
|
+
<description url="http://www.example.com/description">Description</description>
|
64
|
+
<category-def name="category.id" label="Some Label">
|
65
|
+
<description>The category is described here</description>
|
66
|
+
</category-def>
|
67
|
+
<feature url="features/foo_1.0.0.jar" version="1.0.0" patch="false" id="foo">
|
68
|
+
<category name="category.id"/>
|
69
|
+
</feature>
|
70
|
+
</site>
|
71
|
+
SITE_XML
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should create a zip file containing site.xml at its root" do
|
75
|
+
@bar = define("bar", :version => "1.0")
|
76
|
+
site = @bar.package(:site)
|
77
|
+
category = Buildr4OSGi::Category.new
|
78
|
+
category.name = "category.id"
|
79
|
+
category.label = "Some Label"
|
80
|
+
category.description = "The category is described here"
|
81
|
+
category.features<< @foo
|
82
|
+
site.categories << category
|
83
|
+
site.invoke
|
84
|
+
File.should exist(site.to_s)
|
85
|
+
Zip::ZipFile.open(site.to_s) do |zip|
|
86
|
+
print zip.entries.join("\n")
|
87
|
+
print zip.read("site.xml")
|
88
|
+
zip.find_entry("plugins").should_not be_nil
|
89
|
+
zip.find_entry("features").should_not be_nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
end
|
@@ -27,6 +27,18 @@ describe OSGi::BundlePackage do
|
|
27
27
|
it 'should be able to know if it equals another bundle package' do
|
28
28
|
package = OSGi::BundlePackage.new("my.package", "1.0.0")
|
29
29
|
package2 = OSGi::BundlePackage.new("my.package", "1.0.0")
|
30
|
-
package.
|
30
|
+
package.should == package2
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should be able to know if it equals another bundle package with version range' do
|
34
|
+
package = OSGi::BundlePackage.new("javax.servlet", "[2.4.0,3.0.0)")
|
35
|
+
package2 = OSGi::BundlePackage.new("javax.servlet", "[2.4.0,3.0.0)")
|
36
|
+
package.should == package2
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should define the same hash when bundles are equal' do
|
40
|
+
package = OSGi::BundlePackage.new("my.package", "1.0.0")
|
41
|
+
package2 = OSGi::BundlePackage.new("my.package", "1.0.0")
|
42
|
+
package.hash.should == package2.hash
|
31
43
|
end
|
32
44
|
end
|