osgi 0.0.1

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.
@@ -0,0 +1,48 @@
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::ExecutionEnvironment do
19
+
20
+ it 'should create a frozen object' do
21
+ ee = OSGi::ExecutionEnvironment.new("example", "hello", ["com", "org"])
22
+ ee.should be_frozen
23
+ ee.packages.should be_frozen
24
+ end
25
+ end
26
+
27
+ describe OSGi::ExecutionEnvironmentConfiguration do
28
+
29
+ before :all do
30
+ @conf = OSGi::ExecutionEnvironmentConfiguration.new
31
+ end
32
+
33
+
34
+ it "should add the default execution environments" do
35
+ @conf.send( :available_ee).values.should include OSGi::NONE, OSGi::CDC10FOUNDATION10, OSGi::CDC10FOUNDATION11, OSGi::J2SE12, OSGi::J2SE13, OSGi::J2SE14, OSGi::J2SE15, OSGi::JAVASE16, OSGi::JAVASE17, OSGi::OSGIMINIMUM10, OSGi::OSGIMINIMUM11, OSGi::OSGIMINIMUM12
36
+ end
37
+
38
+ it "should set JavaSE1.6 as the default execution environment" do
39
+ @conf.current_execution_environment.should == OSGi::JAVASE16
40
+ end
41
+
42
+ it "should let the user define extra packages to be part of the execution environment" do
43
+ @conf.extra_packages << "com.sum.nedia"
44
+ @conf.extra_packages.should include("com.sum.nedia")
45
+ end
46
+ end
47
+
48
+
@@ -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
+ require File.join(File.dirname(__FILE__), '../spec_helpers')
17
+
18
+
19
+ Spec::Runner.configure do |config|
20
+ config.include SpecHelpers
21
+ end
22
+
23
+ describe OSGi::Registry do
24
+
25
+ it 'should be possible to set the containers from the OSGi environment variables' do
26
+ ENV['OSGi'] = "foo;bar"
27
+ OSGi.registry.containers.should == ["foo","bar"]
28
+ end
29
+
30
+ it 'should fall back on OSGI if the constant OSGi is not defined, issuing a warning' do
31
+ ENV['OSGi'] = nil
32
+ ENV['OSGI'] = "foo;bar"
33
+ lambda {OSGi.registry.resolved_containers}.should show_warning "The correct constant to define for the OSGi containers is named OSGi"
34
+ ENV['OSGi'].should == ENV['OSGI']
35
+ end
36
+
37
+ it 'should not complain if OSGI is set and OSGi is also set' do
38
+ ENV['OSGI'] = nil
39
+ lambda {OSGi.registry.resolved_containers}.should_not show_warning "The correct constant to define for the OSGi containers is named OSGi"
40
+ end
41
+
42
+ it 'should be possible to modify the containers in the registry before the resolved_containers method is called' do
43
+ lambda {OSGi.registry.containers << "hello"}.should_not raise_error
44
+ lambda {OSGi.registry.containers = ["hello"]}.should_not raise_error
45
+ end
46
+
47
+ it 'should throw an exception when modifying the containers in the registry after the resolved_containers method is called' do
48
+ OSGi.registry.resolved_containers
49
+ lambda {OSGi.registry.containers << "hello"}.should raise_error(TypeError)
50
+ lambda {OSGi.registry.containers = ["hello"]}.should raise_error(RuntimeError, /Cannot set containers, containers have been resolved already/)
51
+ end
52
+ end
53
+
54
+
55
+ describe OSGi do
56
+
57
+ it 'should give a handle over the OSGi containers registry' do
58
+ OSGi.registry.should be_instance_of(::OSGi::Registry)
59
+ end
60
+
61
+ it 'should help determine whether a package is part of the framework given by the execution environment' do
62
+ OSGi.is_framework_package?("com.mypackage").should be_false
63
+ OSGi.is_framework_package?(OSGi::JAVASE16.packages.first).should be_true
64
+ end
65
+
66
+ end
67
+
68
+ describe OSGi::GroupMatcher do
69
+
70
+ it 'should use osgi as the default group for an artifact' do
71
+ OSGi::GroupMatcher.instance.group("hello").should == "osgi"
72
+ end
73
+
74
+ it 'should use org.eclipse as the default group for Eclipse artifacts' do
75
+ OSGi::GroupMatcher.instance.group("org.eclipse.core.resources").should == "org.eclipse"
76
+ end
77
+
78
+ it 'should let users specify their own groups' do
79
+ OSGi::GroupMatcher.instance.group_matchers << Proc.new {|name| "bar" if name.match /foo$/}
80
+ OSGi::GroupMatcher.instance.group("org.eclipse.core.resources").should == "org.eclipse"
81
+ OSGi::GroupMatcher.instance.group("hello").should == "osgi"
82
+ OSGi::GroupMatcher.instance.group("org.eclipse.core.foo").should == "bar"
83
+ end
84
+ 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
+ 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
+ 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
@@ -0,0 +1,133 @@
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::Version do
19
+ it 'should initialize itself from a string' do
20
+ version = OSGi::Version.new("1.0.0.qualifier")
21
+ version.major.should eql("1")
22
+ version.minor.should eql("0")
23
+ version.tiny.should eql("0")
24
+ version.qualifier.should eql("qualifier")
25
+ end
26
+
27
+ it 'should accept versions without a qualifier' do
28
+ version = OSGi::Version.new("1.0.0")
29
+ version.major.should eql("1")
30
+ version.minor.should eql("0")
31
+ version.tiny.should eql("0")
32
+ version.qualifier.should be_nil
33
+ end
34
+
35
+ it 'should accept versions without a qualifier and a tiny digit' do
36
+ version = OSGi::Version.new("1.0")
37
+ version.major.should eql("1")
38
+ version.minor.should eql("0")
39
+ version.tiny.should be_nil
40
+ version.qualifier.should be_nil
41
+ end
42
+
43
+ it 'should accept versions without a qualifier, a minor and a tiny digit' do
44
+ version = OSGi::Version.new("1")
45
+ version.major.should eql("1")
46
+ version.minor.should be_nil
47
+ version.tiny.should be_nil
48
+ version.qualifier.should be_nil
49
+ end
50
+
51
+ it 'should raise an exception if no major digit is given' do
52
+ lambda { OSGi::Version.new(".0.0.qualifier") }.should raise_error(RuntimeError, /Invalid version:/)
53
+ end
54
+
55
+ it 'should raise an exception if no minor digit is given' do
56
+ lambda { OSGi::Version.new("1..0.qualifier") }.should raise_error(RuntimeError, /Invalid version:/)
57
+ end
58
+
59
+ it 'should raise an exception if no tiny digit is given' do
60
+ lambda { OSGi::Version.new("1.0..qualifier") }.should raise_error(RuntimeError, /Invalid version:/)
61
+ end
62
+
63
+ it 'should have a string representation' do
64
+ version = OSGi::Version.new("1.0.0.qualifier")
65
+ version.to_s.should eql("1.0.0.qualifier")
66
+ version.major = 2
67
+ version.to_s.should eql("2.0.0.qualifier")
68
+ end
69
+
70
+ it 'should compare with other versions' do
71
+ (OSGi::Version.new('1.0.0') < "2.0.0").should be_true
72
+ (OSGi::Version.new('1.9.9') > "2.0.0").should be_false
73
+ (OSGi::Version.new('1.54.112') < "2.2.0").should be_true
74
+ (OSGi::Version.new('1.0.3') > "1.0.2").should be_true
75
+ (OSGi::Version.new('2.3.4') == "2.3.4").should be_true
76
+ (OSGi::Version.new('2.3.4') <=> "2.3.4").should eql(0)
77
+ end
78
+
79
+ it 'should compare with nil' do
80
+ (OSGi::Version.new('1.0.0') <=> nil).should eql(1)
81
+ end
82
+
83
+ it 'should find if two versions are equal' do
84
+ (OSGi::Version.new('1.0.0.001-March') <=> "1.0.0.001-March").should == 0
85
+ end
86
+
87
+ it "should consider a version with no qualifier equals the same version with a qualifier" do
88
+ (OSGi::Version.new('2.5.0') == "2.5.0.v200806031605").should be_true
89
+ (OSGi::Version.new('2.5.0.v200806031605') == "2.5.0").should be_true
90
+ end
91
+ end
92
+
93
+ describe OSGi::VersionRange do
94
+
95
+ it 'should be able to parse version ranges' do
96
+ OSGi::VersionRange.parse("[1.0.0,2.0.0)").should be_instance_of(OSGi::VersionRange)
97
+ OSGi::VersionRange.parse("[1.0.0,2.0.0]").should be_instance_of(OSGi::VersionRange)
98
+ OSGi::VersionRange.parse("(1.0.0,2.0.0)").should be_instance_of(OSGi::VersionRange)
99
+ OSGi::VersionRange.parse("(1.0.0,2.0.0]").should be_instance_of(OSGi::VersionRange)
100
+ OSGi::VersionRange.parse("[1.0.02.0.0)").should be_false
101
+ OSGi::VersionRange.parse("[1.0.0,2.0.0").should be_false
102
+ OSGi::VersionRange.parse("1.0.0,2.0.0)").should be_false
103
+ OSGi::VersionRange.parse("[1.0,0,2.0.0)").should be_false
104
+ end
105
+
106
+ it 'should be able to tell if a version is in a range' do
107
+ range = OSGi::VersionRange.parse("[1.0.0,2.0.0)")
108
+ range.in_range("1.5.0.20080607").should be_true
109
+ range.in_range("2.0.0.20080607").should be_false
110
+ range.in_range("1.0.0.20080607").should be_true
111
+ range.in_range("0.9.0.20080607").should be_false
112
+ range = OSGi::VersionRange.parse("(1.0.0,2.0.0]")
113
+ range.in_range("2.0.0.20080607").should be_true
114
+ range.in_range("1.0.0.20080607").should be_false
115
+ end
116
+
117
+ it 'should have a String representation' do
118
+ range = OSGi::VersionRange.parse("[1.0.0,2.0.0)")
119
+ range.to_s.should eql("[1.0.0,2.0.0)")
120
+ r2 = OSGi::VersionRange.new
121
+ r2.min = OSGi::Version.new("1.0.0")
122
+ r2.max = OSGi::Version.new("2.0.0")
123
+ r2.min_inclusive = true
124
+ r2.to_s.should eql("[1.0.0,2.0.0)")
125
+ end
126
+
127
+ it 'should be able to consume a range with a space before or after the two limits' do
128
+ OSGi::VersionRange.parse("[1.0.0, 2.0.0)").should be_instance_of(OSGi::VersionRange)
129
+ OSGi::VersionRange.parse("[1.0.0 , 2.0.0)").should be_instance_of(OSGi::VersionRange)
130
+ OSGi::VersionRange.parse("[1.0.0 ,2.0.0)").should be_instance_of(OSGi::VersionRange)
131
+ end
132
+
133
+ end
@@ -0,0 +1,131 @@
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
+ unless defined?(SpecHelpers)
17
+
18
+ # For testing we use the gem requirements specified on the buildr4osgi.gemspec
19
+ spec = Gem::Specification.load(File.expand_path('../osgi.gemspec', File.dirname(__FILE__)))
20
+ spec.dependencies.each { |dep| gem dep.name, dep.version_requirements.to_s }
21
+ # Make sure to load from these paths first, we don't want to load any
22
+ # code from Gem library.
23
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
24
+ require 'osgi'
25
+
26
+ [:info, :warn, :error, :puts].each do |severity|
27
+ ::Object.class_eval do
28
+ define_method severity do |*args|
29
+ $messages ||= {}
30
+ $messages[severity] ||= []
31
+ $messages[severity].push(*args)
32
+ end
33
+ end
34
+ end
35
+
36
+ class MessageWithSeverityMatcher
37
+ def initialize(severity, message)
38
+ @severity = severity
39
+ @expect = message
40
+ end
41
+
42
+ def matches?(target)
43
+ $messages = {@severity => []}
44
+ target.call
45
+ return Regexp === @expect ? $messages[@severity].join('\n') =~ @expect : $messages[@severity].include?(@expect.to_s)
46
+ end
47
+
48
+ def failure_message
49
+ "Expected #{@severity} #{@expect.inspect}, " +
50
+ ($messages[@severity].empty? ? "no #{@severity} issued" : "found #{$messages[@severity].inspect}")
51
+ end
52
+
53
+ def negative_failure_message
54
+ "Found unexpected #{$messages[@severity].inspect}"
55
+ end
56
+ end
57
+
58
+ # Test if an info message was shown. You can use a string or regular expression.
59
+ #
60
+ # For example:
61
+ # lambda { info 'ze test' }.should show_info(/ze test/)
62
+ def show_info(message)
63
+ MessageWithSeverityMatcher.new :info, message
64
+ end
65
+
66
+ # Test if a warning was shown. You can use a string or regular expression.
67
+ #
68
+ # For example:
69
+ # lambda { warn 'ze test' }.should show_warning(/ze test/)
70
+ def show_warning(message)
71
+ MessageWithSeverityMatcher.new :warn, message
72
+ end
73
+
74
+ # Test if an error message was shown. You can use a string or regular expression.
75
+ #
76
+ # For example:
77
+ # lambda { error 'ze test' }.should show_error(/ze test/)
78
+ def show_error(message)
79
+ MessageWithSeverityMatcher.new :error, message
80
+ end
81
+
82
+ # Test if any message was shown (puts). You can use a string or regular expression.
83
+ #
84
+ # For example:
85
+ # lambda { puts 'ze test' }.should show(/ze test/)
86
+ def show(message)
87
+ MessageWithSeverityMatcher.new :puts, message
88
+ end
89
+
90
+ # Writes contents in file
91
+ def write(file, contents)
92
+ FileUtils.mkpath File.dirname(file)
93
+ File.open(file.to_s, 'wb') { |file| file.write contents.to_s }
94
+ end
95
+
96
+ OSGi_REPOS = File.expand_path File.join(File.dirname(__FILE__), "..", "tmp", "osgi")
97
+
98
+ module MockInstanceWriter
99
+ def registry=(i)
100
+ @registry=i
101
+ end
102
+ end
103
+
104
+ module SpecHelpers
105
+
106
+ class << self
107
+
108
+ def included(config)
109
+ config.before(:all) {
110
+ OSGi.extend MockInstanceWriter
111
+ }
112
+
113
+ config.before(:each) {
114
+ OSGi.registry = OSGi::Registry.new
115
+ }
116
+ config.after(:all) {
117
+ FileUtils.rm_rf OSGi_REPOS
118
+ }
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ def createRepository(name)
126
+ repo = File.join(OSGi_REPOS, name)
127
+ FileUtils.mkpath repo
128
+ return repo
129
+ end
130
+
131
+ end