copland 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/README +88 -0
- data/doc/manual-html/chapter-1.html +454 -0
- data/doc/manual-html/chapter-10.html +399 -0
- data/doc/manual-html/chapter-11.html +600 -0
- data/doc/manual-html/chapter-12.html +406 -0
- data/doc/manual-html/chapter-2.html +382 -0
- data/doc/manual-html/chapter-3.html +424 -0
- data/doc/manual-html/chapter-4.html +432 -0
- data/doc/manual-html/chapter-5.html +381 -0
- data/doc/manual-html/chapter-6.html +364 -0
- data/doc/manual-html/chapter-7.html +434 -0
- data/doc/manual-html/chapter-8.html +373 -0
- data/doc/manual-html/chapter-9.html +324 -0
- data/doc/manual-html/copland.png +0 -0
- data/doc/manual-html/index.html +331 -0
- data/doc/manual-html/manual.css +179 -0
- data/doc/manual-html/tutorial-1.html +407 -0
- data/doc/manual-html/tutorial-2.html +451 -0
- data/doc/manual-html/tutorial-3.html +484 -0
- data/doc/manual-html/tutorial-4.html +446 -0
- data/doc/manual-html/tutorial-5.html +520 -0
- data/doc/manual/chapter.erb +18 -0
- data/doc/manual/example.erb +18 -0
- data/doc/manual/img/copland.png +0 -0
- data/doc/manual/index.erb +30 -0
- data/doc/manual/manual.css +179 -0
- data/doc/manual/manual.rb +239 -0
- data/doc/manual/manual.yml +2643 -0
- data/doc/manual/page.erb +102 -0
- data/doc/manual/tutorial.erb +30 -0
- data/doc/packages/copland.html +764 -0
- data/doc/packages/copland.lib.html +439 -0
- data/doc/packages/copland.remote.html +2096 -0
- data/doc/packages/copland.webrick.html +925 -0
- data/doc/packages/index.html +49 -0
- data/doc/packages/packrat.css +125 -0
- data/examples/calc/calc.rb +47 -0
- data/examples/calc/package.yml +35 -0
- data/examples/calc/services.rb +74 -0
- data/examples/solitaire-cipher/README +11 -0
- data/examples/solitaire-cipher/Rakefile +57 -0
- data/examples/solitaire-cipher/bin/main.rb +14 -0
- data/examples/solitaire-cipher/lib/cipher.rb +230 -0
- data/examples/solitaire-cipher/lib/cli.rb +24 -0
- data/examples/solitaire-cipher/lib/package.yml +106 -0
- data/examples/solitaire-cipher/test/tc_deck.rb +30 -0
- data/examples/solitaire-cipher/test/tc_key-stream.rb +19 -0
- data/examples/solitaire-cipher/test/tc_keying-algorithms.rb +31 -0
- data/examples/solitaire-cipher/test/tc_solitaire-cipher.rb +66 -0
- data/examples/solitaire-cipher/test/tc_unkeyed-algorithm.rb +17 -0
- data/examples/solitaire-cipher/test/tests.rb +2 -0
- data/lib/copland.rb +56 -0
- data/lib/copland/class-factory.rb +95 -0
- data/lib/copland/configuration-point.rb +38 -0
- data/lib/copland/configuration-point/common.rb +203 -0
- data/lib/copland/configuration-point/errors.rb +44 -0
- data/lib/copland/configuration-point/list.rb +59 -0
- data/lib/copland/configuration-point/map.rb +59 -0
- data/lib/copland/configuration/errors.rb +43 -0
- data/lib/copland/configuration/loader.rb +113 -0
- data/lib/copland/configuration/yaml/configuration-point.rb +87 -0
- data/lib/copland/configuration/yaml/implementor.rb +134 -0
- data/lib/copland/configuration/yaml/interceptor.rb +63 -0
- data/lib/copland/configuration/yaml/listener.rb +56 -0
- data/lib/copland/configuration/yaml/loader.rb +122 -0
- data/lib/copland/configuration/yaml/package.rb +125 -0
- data/lib/copland/configuration/yaml/parser.rb +71 -0
- data/lib/copland/configuration/yaml/schema.rb +165 -0
- data/lib/copland/configuration/yaml/service-point.rb +116 -0
- data/lib/copland/configuration/yaml/utils.rb +82 -0
- data/lib/copland/default-schema-processor.rb +144 -0
- data/lib/copland/errors.rb +82 -0
- data/lib/copland/event-producer.rb +95 -0
- data/lib/copland/impl/builder-factory.rb +112 -0
- data/lib/copland/impl/copland-config.yml +1 -0
- data/lib/copland/impl/include-exclude.rb +140 -0
- data/lib/copland/impl/logging-interceptor.rb +106 -0
- data/lib/copland/impl/package.yml +217 -0
- data/lib/copland/impl/startup.rb +116 -0
- data/lib/copland/impl/symbol-source-manager.rb +131 -0
- data/lib/copland/impl/symbol-source.rb +63 -0
- data/lib/copland/instantiator.rb +38 -0
- data/lib/copland/instantiator/abstract.rb +91 -0
- data/lib/copland/instantiator/complex.rb +96 -0
- data/lib/copland/instantiator/identity.rb +58 -0
- data/lib/copland/instantiator/simple.rb +68 -0
- data/lib/copland/interceptor-chain.rb +166 -0
- data/lib/copland/interceptor.rb +139 -0
- data/lib/copland/log-factory.rb +206 -0
- data/lib/copland/models.rb +39 -0
- data/lib/copland/models/abstract.rb +78 -0
- data/lib/copland/models/prototype-deferred.rb +58 -0
- data/lib/copland/models/prototype.rb +58 -0
- data/lib/copland/models/proxy.rb +100 -0
- data/lib/copland/models/singleton-deferred.rb +59 -0
- data/lib/copland/models/singleton.rb +77 -0
- data/lib/copland/models/threaded.rb +65 -0
- data/lib/copland/ordering.rb +123 -0
- data/lib/copland/package.rb +246 -0
- data/lib/copland/registry.rb +368 -0
- data/lib/copland/schema.rb +206 -0
- data/lib/copland/service-point.rb +282 -0
- data/lib/copland/utils.rb +221 -0
- data/lib/copland/version.rb +47 -0
- data/test/conf-test/list-bad-key.yml +30 -0
- data/test/conf-test/list-bad-missing.yml +28 -0
- data/test/conf-test/list-bad-type.yml +28 -0
- data/test/conf-test/list-good.yml +29 -0
- data/test/conf-test/map-bad-key.yml +25 -0
- data/test/conf-test/map-bad-missing.yml +24 -0
- data/test/conf-test/map-bad-type.yml +23 -0
- data/test/conf-test/map-good.yml +25 -0
- data/test/configuration-point/package.yml +52 -0
- data/test/configuration/yaml/config/copland-config.yml +2 -0
- data/test/configuration/yaml/config/module.yml +2 -0
- data/test/configuration/yaml/config/subdir/copland-config.yml +2 -0
- data/test/configuration/yaml/config/subdir/package.yml +4 -0
- data/test/configuration/yaml/defaults/package.yml +5 -0
- data/test/configuration/yaml/defaults/subdir/package.yml +4 -0
- data/test/configuration/yaml/tc_config-loader.rb +86 -0
- data/test/configuration/yaml/tc_configuration-point-processor.rb +134 -0
- data/test/configuration/yaml/tc_implementor-processor.rb +104 -0
- data/test/configuration/yaml/tc_interceptor-processor.rb +85 -0
- data/test/configuration/yaml/tc_listener-processor.rb +69 -0
- data/test/configuration/yaml/tc_loader.rb +74 -0
- data/test/configuration/yaml/tc_package-processor.rb +120 -0
- data/test/configuration/yaml/tc_parser.rb +94 -0
- data/test/configuration/yaml/tc_schema-parser.rb +160 -0
- data/test/configuration/yaml/tc_service-point-processor.rb +104 -0
- data/test/configuration/yaml/tc_type-validator.rb +90 -0
- data/test/custom-logger.yml +3 -0
- data/test/impl/logging/package.yml +44 -0
- data/test/impl/logging/services.rb +84 -0
- data/test/impl/startup/package.yml +46 -0
- data/test/impl/startup/services.rb +47 -0
- data/test/impl/symbols/package.yml +24 -0
- data/test/impl/symbols/services.rb +38 -0
- data/test/impl/tc_builder-factory.rb +173 -0
- data/test/impl/tc_logging-interceptor.rb +148 -0
- data/test/impl/tc_startup.rb +59 -0
- data/test/impl/tc_symbol-sources.rb +61 -0
- data/test/logger.yml +6 -0
- data/test/mock.rb +201 -0
- data/test/schema/bad-package.yml +65 -0
- data/test/schema/package.yml +102 -0
- data/test/schema/services.rb +5 -0
- data/test/services/package.yml +79 -0
- data/test/services/simple.rb +87 -0
- data/test/tc_class-factory.rb +93 -0
- data/test/tc_complex-instantiator.rb +107 -0
- data/test/tc_configuration-point-contrib.rb +74 -0
- data/test/tc_configuration-point-schema.rb +122 -0
- data/test/tc_configuration-point.rb +91 -0
- data/test/tc_default-schema-processor.rb +297 -0
- data/test/tc_identity-instantiator.rb +61 -0
- data/test/tc_interceptors.rb +84 -0
- data/test/tc_logger.rb +131 -0
- data/test/tc_models.rb +176 -0
- data/test/tc_package.rb +165 -0
- data/test/tc_proxy.rb +65 -0
- data/test/tc_registry.rb +141 -0
- data/test/tc_schema.rb +78 -0
- data/test/tc_service-point.rb +178 -0
- data/test/tc_service.rb +70 -0
- data/test/tc_simple-instantiator.rb +61 -0
- data/test/tests.rb +93 -0
- data/tutorial/01/main.rb +7 -0
- data/tutorial/01/package.yml +8 -0
- data/tutorial/01/tutorial.rb +7 -0
- data/tutorial/02/main.rb +10 -0
- data/tutorial/02/package.yml +27 -0
- data/tutorial/02/tutorial.rb +46 -0
- data/tutorial/03/main.rb +24 -0
- data/tutorial/03/package.yml +29 -0
- data/tutorial/03/tutorial.rb +48 -0
- data/tutorial/04/main.rb +24 -0
- data/tutorial/04/package.yml +35 -0
- data/tutorial/04/tutorial.rb +48 -0
- data/tutorial/05/functions/package.yml +16 -0
- data/tutorial/05/functions/services.rb +15 -0
- data/tutorial/05/main.rb +10 -0
- data/tutorial/05/package.yml +35 -0
- data/tutorial/05/tutorial.rb +53 -0
- metadata +260 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
$:.unshift "../.."
|
|
35
|
+
$:.unshift "../../../lib"
|
|
36
|
+
|
|
37
|
+
require 'test/unit'
|
|
38
|
+
require 'copland/configuration/yaml/listener'
|
|
39
|
+
require 'mock'
|
|
40
|
+
|
|
41
|
+
class TC_ListenerProcessor < Test::Unit::TestCase
|
|
42
|
+
|
|
43
|
+
def setup
|
|
44
|
+
@processor = Copland::Configuration::YAML::ListenerProcessor.new
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_process_valid
|
|
48
|
+
point = MockServicePoint.new
|
|
49
|
+
assert_nothing_raised do
|
|
50
|
+
@processor.process( point, "something" )
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_process_bad_type
|
|
55
|
+
point = MockServicePoint.new
|
|
56
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
57
|
+
@processor.process( point, 15 )
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_process
|
|
62
|
+
point = MockServicePoint.new
|
|
63
|
+
@processor.process( point, "something" )
|
|
64
|
+
|
|
65
|
+
assert_equal 1, point.event_producers.length
|
|
66
|
+
assert_equal "something", point.event_producers.first
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
$:.unshift "../../"
|
|
35
|
+
$:.unshift "../../../lib"
|
|
36
|
+
|
|
37
|
+
require 'test/unit'
|
|
38
|
+
require 'copland/configuration/yaml/loader'
|
|
39
|
+
require 'mock'
|
|
40
|
+
|
|
41
|
+
class TC_Loader < Test::Unit::TestCase
|
|
42
|
+
|
|
43
|
+
def setup
|
|
44
|
+
@registry = MockRegistry.new
|
|
45
|
+
@mock_loader = MockLoader.new
|
|
46
|
+
@loader = Copland::Configuration::YAML::Loader.new( @registry, @mock_loader )
|
|
47
|
+
@defaults_dir = File.join( File.dirname( __FILE__ ), "defaults" )
|
|
48
|
+
@config_dir = File.join( File.dirname( __FILE__ ), "config" )
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_defaults
|
|
52
|
+
@loader.process_dir @defaults_dir, Hash.new
|
|
53
|
+
|
|
54
|
+
assert_equal 1, @registry.packages.length
|
|
55
|
+
assert_not_nil @registry.package( "test" )
|
|
56
|
+
|
|
57
|
+
@loader.process_dir File.join( @defaults_dir, "subdir" ), Hash.new
|
|
58
|
+
|
|
59
|
+
assert_equal 3, @registry.packages.length
|
|
60
|
+
assert_not_nil @registry.package( "subdir" )
|
|
61
|
+
assert_not_nil @registry.package( "another" )
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_config
|
|
65
|
+
opts = @loader.process_dir @config_dir, Hash.new
|
|
66
|
+
|
|
67
|
+
assert_equal "module.yml", opts[ :yaml_package_file ]
|
|
68
|
+
assert_equal "threaded", opts[ :default_service_model ]
|
|
69
|
+
|
|
70
|
+
assert_equal 1, @registry.packages.length
|
|
71
|
+
assert_not_nil @registry.package( "test-config" )
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
$:.unshift "../.."
|
|
35
|
+
$:.unshift "../../../lib"
|
|
36
|
+
|
|
37
|
+
require 'test/unit'
|
|
38
|
+
require 'copland/configuration/errors'
|
|
39
|
+
require 'copland/configuration/yaml/package'
|
|
40
|
+
require 'mock'
|
|
41
|
+
|
|
42
|
+
class TC_PackageProcessor < Test::Unit::TestCase
|
|
43
|
+
|
|
44
|
+
def setup
|
|
45
|
+
@registry = MockRegistry.new
|
|
46
|
+
@loader = MockLoader.new
|
|
47
|
+
@processor = Copland::Configuration::YAML::PackageProcessor.new( @registry, @loader )
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_bad_type
|
|
51
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
52
|
+
@processor.process( 15 )
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_bad_key
|
|
57
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
58
|
+
@processor.process( "id" => "value",
|
|
59
|
+
"bogus" => "value" )
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_missing_key
|
|
64
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
65
|
+
@processor.process( "description" => "value" )
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_bad_service_points
|
|
70
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
71
|
+
@processor.process( "id" => "test",
|
|
72
|
+
"service-points" => "Q" )
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_bad_configuration_points
|
|
77
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
78
|
+
@processor.process( "id" => "test",
|
|
79
|
+
"configuration-points" => "Q" )
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_bad_contributions
|
|
84
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
85
|
+
@processor.process( "id" => "test",
|
|
86
|
+
"contributions" => "Q" )
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_process
|
|
91
|
+
@processor.process( "id" => "test",
|
|
92
|
+
"description" => "A",
|
|
93
|
+
"require" => [ "copland/lib" ],
|
|
94
|
+
"service-points" => {
|
|
95
|
+
"point" => { "implementor" => "something" }
|
|
96
|
+
},
|
|
97
|
+
"configuration-points" => {
|
|
98
|
+
"point" => { "type" => "list" }
|
|
99
|
+
},
|
|
100
|
+
"contributions" => {
|
|
101
|
+
"point" => [ "B", "C", "D" ]
|
|
102
|
+
} )
|
|
103
|
+
|
|
104
|
+
assert_equal 1, @registry.packages.length
|
|
105
|
+
|
|
106
|
+
package = @registry.package( "test" )
|
|
107
|
+
assert_not_nil package
|
|
108
|
+
|
|
109
|
+
package.fixate!
|
|
110
|
+
|
|
111
|
+
assert_equal "A", package.description
|
|
112
|
+
assert_not_nil package.service_point( "point" )
|
|
113
|
+
cfg = package.configuration_point( "point" )
|
|
114
|
+
assert_not_nil cfg
|
|
115
|
+
assert_equal 3, cfg.length
|
|
116
|
+
assert_equal "C", cfg[1]
|
|
117
|
+
assert_equal [ "copland/lib" ], @loader.used
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
$:.unshift "../.."
|
|
35
|
+
$:.unshift "../../../lib"
|
|
36
|
+
|
|
37
|
+
require 'test/unit'
|
|
38
|
+
require 'copland/configuration/yaml/parser'
|
|
39
|
+
require 'mock'
|
|
40
|
+
|
|
41
|
+
class TC_Parser < Test::Unit::TestCase
|
|
42
|
+
|
|
43
|
+
def setup
|
|
44
|
+
@registry = MockRegistry.new
|
|
45
|
+
@loader = MockLoader.new
|
|
46
|
+
@parser = Copland::Configuration::YAML::Parser.new( @registry, @loader )
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_bad_yaml
|
|
50
|
+
yaml = <<EOY
|
|
51
|
+
---
|
|
52
|
+
hello
|
|
53
|
+
:
|
|
54
|
+
blah
|
|
55
|
+
EOY
|
|
56
|
+
|
|
57
|
+
assert_raise( ArgumentError ) do
|
|
58
|
+
@parser.parse( yaml )
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_good_yaml
|
|
63
|
+
yaml = <<EOY
|
|
64
|
+
---
|
|
65
|
+
id: test
|
|
66
|
+
description: >-
|
|
67
|
+
This is a description
|
|
68
|
+
|
|
69
|
+
service-points:
|
|
70
|
+
point:
|
|
71
|
+
implementor: some/service/Implementation
|
|
72
|
+
---
|
|
73
|
+
id: test2
|
|
74
|
+
description: >-
|
|
75
|
+
Another test
|
|
76
|
+
EOY
|
|
77
|
+
|
|
78
|
+
assert_nothing_raised do
|
|
79
|
+
@parser.parse( yaml )
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
assert_equal 2, @registry.packages.length
|
|
83
|
+
assert_not_nil @registry.package( "test2" )
|
|
84
|
+
pkg = @registry.package( "test" )
|
|
85
|
+
assert_not_nil pkg
|
|
86
|
+
assert_equal "test", pkg.name
|
|
87
|
+
assert_equal "This is a description", pkg.description
|
|
88
|
+
|
|
89
|
+
pt = pkg.service_point( "point" )
|
|
90
|
+
assert_not_nil pt
|
|
91
|
+
assert_equal "point", pt.name
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
$:.unshift "../.."
|
|
35
|
+
$:.unshift "../../../lib"
|
|
36
|
+
|
|
37
|
+
require 'test/unit'
|
|
38
|
+
require 'copland/configuration/yaml/schema'
|
|
39
|
+
require 'copland/package'
|
|
40
|
+
require 'copland/service-point'
|
|
41
|
+
require 'mock'
|
|
42
|
+
require 'yaml'
|
|
43
|
+
|
|
44
|
+
class TC_SchemaParser < Test::Unit::TestCase
|
|
45
|
+
|
|
46
|
+
def setup
|
|
47
|
+
@parser = Copland::Configuration::YAML::SchemaParser.new
|
|
48
|
+
@registry = MockRegistry.new
|
|
49
|
+
@package = Copland::Package.new( @registry, "test" )
|
|
50
|
+
@point = Copland::ServicePoint.new( @package, "point" )
|
|
51
|
+
@package.add_service_point @point
|
|
52
|
+
@registry.add_package @package
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_schema_reference
|
|
56
|
+
assert_nothing_raised do
|
|
57
|
+
@parser.process( @point, "test.SpecialSchema" )
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def do_test_invalid_field( name, value )
|
|
62
|
+
y = YAML::load( %Q{#{name}: #{value}} )
|
|
63
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
64
|
+
@parser.process( @point, y )
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def do_test_valid_field( name, value, try_nil=true )
|
|
69
|
+
if try_nil
|
|
70
|
+
y = YAML::load( %Q{#{name}:\n} )
|
|
71
|
+
assert_nothing_raised do
|
|
72
|
+
@parser.process( @point, y )
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
y = YAML::load( %Q{#{name}: #{value}} )
|
|
77
|
+
assert_nothing_raised do
|
|
78
|
+
@parser.process( @point, y )
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
[ "name", "class", "description" ].each do |name|
|
|
83
|
+
class_eval <<-EOF
|
|
84
|
+
def test_valid_#{name}
|
|
85
|
+
do_test_valid_field( "#{name}", "Bogus" )
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_invalid_#{name}
|
|
89
|
+
do_test_invalid_field( "#{name}", 15 )
|
|
90
|
+
end
|
|
91
|
+
EOF
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_invalid_required
|
|
95
|
+
do_test_invalid_field( "required", 15 )
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_valid_required
|
|
99
|
+
do_test_valid_field( "required", true )
|
|
100
|
+
do_test_valid_field( "required", false )
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_invalid_type
|
|
104
|
+
do_test_invalid_field( "type", 15 )
|
|
105
|
+
do_test_invalid_field( "type", "bogus" )
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_valid_type
|
|
109
|
+
do_test_valid_field( "type", "any" )
|
|
110
|
+
do_test_valid_field( "type", "integer", false )
|
|
111
|
+
do_test_valid_field( "type", "real", false )
|
|
112
|
+
do_test_valid_field( "type", "service", false )
|
|
113
|
+
do_test_valid_field( "type", "log", false )
|
|
114
|
+
do_test_valid_field( "type", "configuration", false )
|
|
115
|
+
do_test_valid_field( "type", "string", false )
|
|
116
|
+
do_test_valid_field( "type", "hash", false )
|
|
117
|
+
do_test_valid_field( "type", "array", false )
|
|
118
|
+
do_test_valid_field( "type", "boolean", false )
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_type_conflict
|
|
122
|
+
y = YAML::load( %Q{
|
|
123
|
+
type: string
|
|
124
|
+
definition:
|
|
125
|
+
something:
|
|
126
|
+
type: string
|
|
127
|
+
} )
|
|
128
|
+
assert_raise( Copland::Configuration::ParserError ) do
|
|
129
|
+
@parser.process( @point, y )
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_recursive_parse
|
|
134
|
+
y = YAML::load( %Q{
|
|
135
|
+
name: Recursive
|
|
136
|
+
definition:
|
|
137
|
+
options:
|
|
138
|
+
type: array
|
|
139
|
+
required: true
|
|
140
|
+
definition:
|
|
141
|
+
auto.start:
|
|
142
|
+
type: string
|
|
143
|
+
auto.wait:
|
|
144
|
+
type: string
|
|
145
|
+
user.name:
|
|
146
|
+
type: string
|
|
147
|
+
required: true
|
|
148
|
+
} )
|
|
149
|
+
|
|
150
|
+
result = nil
|
|
151
|
+
assert_nothing_raised do
|
|
152
|
+
result = @parser.process( @point, y )
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
assert_equal "Recursive", result.name
|
|
156
|
+
assert result.definition['options'].required
|
|
157
|
+
assert "string", result.definition['options'].definition['auto.wait'].type
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|