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.
Files changed (184) hide show
  1. data/doc/README +88 -0
  2. data/doc/manual-html/chapter-1.html +454 -0
  3. data/doc/manual-html/chapter-10.html +399 -0
  4. data/doc/manual-html/chapter-11.html +600 -0
  5. data/doc/manual-html/chapter-12.html +406 -0
  6. data/doc/manual-html/chapter-2.html +382 -0
  7. data/doc/manual-html/chapter-3.html +424 -0
  8. data/doc/manual-html/chapter-4.html +432 -0
  9. data/doc/manual-html/chapter-5.html +381 -0
  10. data/doc/manual-html/chapter-6.html +364 -0
  11. data/doc/manual-html/chapter-7.html +434 -0
  12. data/doc/manual-html/chapter-8.html +373 -0
  13. data/doc/manual-html/chapter-9.html +324 -0
  14. data/doc/manual-html/copland.png +0 -0
  15. data/doc/manual-html/index.html +331 -0
  16. data/doc/manual-html/manual.css +179 -0
  17. data/doc/manual-html/tutorial-1.html +407 -0
  18. data/doc/manual-html/tutorial-2.html +451 -0
  19. data/doc/manual-html/tutorial-3.html +484 -0
  20. data/doc/manual-html/tutorial-4.html +446 -0
  21. data/doc/manual-html/tutorial-5.html +520 -0
  22. data/doc/manual/chapter.erb +18 -0
  23. data/doc/manual/example.erb +18 -0
  24. data/doc/manual/img/copland.png +0 -0
  25. data/doc/manual/index.erb +30 -0
  26. data/doc/manual/manual.css +179 -0
  27. data/doc/manual/manual.rb +239 -0
  28. data/doc/manual/manual.yml +2643 -0
  29. data/doc/manual/page.erb +102 -0
  30. data/doc/manual/tutorial.erb +30 -0
  31. data/doc/packages/copland.html +764 -0
  32. data/doc/packages/copland.lib.html +439 -0
  33. data/doc/packages/copland.remote.html +2096 -0
  34. data/doc/packages/copland.webrick.html +925 -0
  35. data/doc/packages/index.html +49 -0
  36. data/doc/packages/packrat.css +125 -0
  37. data/examples/calc/calc.rb +47 -0
  38. data/examples/calc/package.yml +35 -0
  39. data/examples/calc/services.rb +74 -0
  40. data/examples/solitaire-cipher/README +11 -0
  41. data/examples/solitaire-cipher/Rakefile +57 -0
  42. data/examples/solitaire-cipher/bin/main.rb +14 -0
  43. data/examples/solitaire-cipher/lib/cipher.rb +230 -0
  44. data/examples/solitaire-cipher/lib/cli.rb +24 -0
  45. data/examples/solitaire-cipher/lib/package.yml +106 -0
  46. data/examples/solitaire-cipher/test/tc_deck.rb +30 -0
  47. data/examples/solitaire-cipher/test/tc_key-stream.rb +19 -0
  48. data/examples/solitaire-cipher/test/tc_keying-algorithms.rb +31 -0
  49. data/examples/solitaire-cipher/test/tc_solitaire-cipher.rb +66 -0
  50. data/examples/solitaire-cipher/test/tc_unkeyed-algorithm.rb +17 -0
  51. data/examples/solitaire-cipher/test/tests.rb +2 -0
  52. data/lib/copland.rb +56 -0
  53. data/lib/copland/class-factory.rb +95 -0
  54. data/lib/copland/configuration-point.rb +38 -0
  55. data/lib/copland/configuration-point/common.rb +203 -0
  56. data/lib/copland/configuration-point/errors.rb +44 -0
  57. data/lib/copland/configuration-point/list.rb +59 -0
  58. data/lib/copland/configuration-point/map.rb +59 -0
  59. data/lib/copland/configuration/errors.rb +43 -0
  60. data/lib/copland/configuration/loader.rb +113 -0
  61. data/lib/copland/configuration/yaml/configuration-point.rb +87 -0
  62. data/lib/copland/configuration/yaml/implementor.rb +134 -0
  63. data/lib/copland/configuration/yaml/interceptor.rb +63 -0
  64. data/lib/copland/configuration/yaml/listener.rb +56 -0
  65. data/lib/copland/configuration/yaml/loader.rb +122 -0
  66. data/lib/copland/configuration/yaml/package.rb +125 -0
  67. data/lib/copland/configuration/yaml/parser.rb +71 -0
  68. data/lib/copland/configuration/yaml/schema.rb +165 -0
  69. data/lib/copland/configuration/yaml/service-point.rb +116 -0
  70. data/lib/copland/configuration/yaml/utils.rb +82 -0
  71. data/lib/copland/default-schema-processor.rb +144 -0
  72. data/lib/copland/errors.rb +82 -0
  73. data/lib/copland/event-producer.rb +95 -0
  74. data/lib/copland/impl/builder-factory.rb +112 -0
  75. data/lib/copland/impl/copland-config.yml +1 -0
  76. data/lib/copland/impl/include-exclude.rb +140 -0
  77. data/lib/copland/impl/logging-interceptor.rb +106 -0
  78. data/lib/copland/impl/package.yml +217 -0
  79. data/lib/copland/impl/startup.rb +116 -0
  80. data/lib/copland/impl/symbol-source-manager.rb +131 -0
  81. data/lib/copland/impl/symbol-source.rb +63 -0
  82. data/lib/copland/instantiator.rb +38 -0
  83. data/lib/copland/instantiator/abstract.rb +91 -0
  84. data/lib/copland/instantiator/complex.rb +96 -0
  85. data/lib/copland/instantiator/identity.rb +58 -0
  86. data/lib/copland/instantiator/simple.rb +68 -0
  87. data/lib/copland/interceptor-chain.rb +166 -0
  88. data/lib/copland/interceptor.rb +139 -0
  89. data/lib/copland/log-factory.rb +206 -0
  90. data/lib/copland/models.rb +39 -0
  91. data/lib/copland/models/abstract.rb +78 -0
  92. data/lib/copland/models/prototype-deferred.rb +58 -0
  93. data/lib/copland/models/prototype.rb +58 -0
  94. data/lib/copland/models/proxy.rb +100 -0
  95. data/lib/copland/models/singleton-deferred.rb +59 -0
  96. data/lib/copland/models/singleton.rb +77 -0
  97. data/lib/copland/models/threaded.rb +65 -0
  98. data/lib/copland/ordering.rb +123 -0
  99. data/lib/copland/package.rb +246 -0
  100. data/lib/copland/registry.rb +368 -0
  101. data/lib/copland/schema.rb +206 -0
  102. data/lib/copland/service-point.rb +282 -0
  103. data/lib/copland/utils.rb +221 -0
  104. data/lib/copland/version.rb +47 -0
  105. data/test/conf-test/list-bad-key.yml +30 -0
  106. data/test/conf-test/list-bad-missing.yml +28 -0
  107. data/test/conf-test/list-bad-type.yml +28 -0
  108. data/test/conf-test/list-good.yml +29 -0
  109. data/test/conf-test/map-bad-key.yml +25 -0
  110. data/test/conf-test/map-bad-missing.yml +24 -0
  111. data/test/conf-test/map-bad-type.yml +23 -0
  112. data/test/conf-test/map-good.yml +25 -0
  113. data/test/configuration-point/package.yml +52 -0
  114. data/test/configuration/yaml/config/copland-config.yml +2 -0
  115. data/test/configuration/yaml/config/module.yml +2 -0
  116. data/test/configuration/yaml/config/subdir/copland-config.yml +2 -0
  117. data/test/configuration/yaml/config/subdir/package.yml +4 -0
  118. data/test/configuration/yaml/defaults/package.yml +5 -0
  119. data/test/configuration/yaml/defaults/subdir/package.yml +4 -0
  120. data/test/configuration/yaml/tc_config-loader.rb +86 -0
  121. data/test/configuration/yaml/tc_configuration-point-processor.rb +134 -0
  122. data/test/configuration/yaml/tc_implementor-processor.rb +104 -0
  123. data/test/configuration/yaml/tc_interceptor-processor.rb +85 -0
  124. data/test/configuration/yaml/tc_listener-processor.rb +69 -0
  125. data/test/configuration/yaml/tc_loader.rb +74 -0
  126. data/test/configuration/yaml/tc_package-processor.rb +120 -0
  127. data/test/configuration/yaml/tc_parser.rb +94 -0
  128. data/test/configuration/yaml/tc_schema-parser.rb +160 -0
  129. data/test/configuration/yaml/tc_service-point-processor.rb +104 -0
  130. data/test/configuration/yaml/tc_type-validator.rb +90 -0
  131. data/test/custom-logger.yml +3 -0
  132. data/test/impl/logging/package.yml +44 -0
  133. data/test/impl/logging/services.rb +84 -0
  134. data/test/impl/startup/package.yml +46 -0
  135. data/test/impl/startup/services.rb +47 -0
  136. data/test/impl/symbols/package.yml +24 -0
  137. data/test/impl/symbols/services.rb +38 -0
  138. data/test/impl/tc_builder-factory.rb +173 -0
  139. data/test/impl/tc_logging-interceptor.rb +148 -0
  140. data/test/impl/tc_startup.rb +59 -0
  141. data/test/impl/tc_symbol-sources.rb +61 -0
  142. data/test/logger.yml +6 -0
  143. data/test/mock.rb +201 -0
  144. data/test/schema/bad-package.yml +65 -0
  145. data/test/schema/package.yml +102 -0
  146. data/test/schema/services.rb +5 -0
  147. data/test/services/package.yml +79 -0
  148. data/test/services/simple.rb +87 -0
  149. data/test/tc_class-factory.rb +93 -0
  150. data/test/tc_complex-instantiator.rb +107 -0
  151. data/test/tc_configuration-point-contrib.rb +74 -0
  152. data/test/tc_configuration-point-schema.rb +122 -0
  153. data/test/tc_configuration-point.rb +91 -0
  154. data/test/tc_default-schema-processor.rb +297 -0
  155. data/test/tc_identity-instantiator.rb +61 -0
  156. data/test/tc_interceptors.rb +84 -0
  157. data/test/tc_logger.rb +131 -0
  158. data/test/tc_models.rb +176 -0
  159. data/test/tc_package.rb +165 -0
  160. data/test/tc_proxy.rb +65 -0
  161. data/test/tc_registry.rb +141 -0
  162. data/test/tc_schema.rb +78 -0
  163. data/test/tc_service-point.rb +178 -0
  164. data/test/tc_service.rb +70 -0
  165. data/test/tc_simple-instantiator.rb +61 -0
  166. data/test/tests.rb +93 -0
  167. data/tutorial/01/main.rb +7 -0
  168. data/tutorial/01/package.yml +8 -0
  169. data/tutorial/01/tutorial.rb +7 -0
  170. data/tutorial/02/main.rb +10 -0
  171. data/tutorial/02/package.yml +27 -0
  172. data/tutorial/02/tutorial.rb +46 -0
  173. data/tutorial/03/main.rb +24 -0
  174. data/tutorial/03/package.yml +29 -0
  175. data/tutorial/03/tutorial.rb +48 -0
  176. data/tutorial/04/main.rb +24 -0
  177. data/tutorial/04/package.yml +35 -0
  178. data/tutorial/04/tutorial.rb +48 -0
  179. data/tutorial/05/functions/package.yml +16 -0
  180. data/tutorial/05/functions/services.rb +15 -0
  181. data/tutorial/05/main.rb +10 -0
  182. data/tutorial/05/package.yml +35 -0
  183. data/tutorial/05/tutorial.rb +53 -0
  184. metadata +260 -0
@@ -0,0 +1,87 @@
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
+ require 'copland/event-producer'
35
+
36
+ class Simple
37
+ attr_reader :attr1
38
+
39
+ def echo( a )
40
+ a
41
+ end
42
+ end
43
+
44
+ class Producer
45
+ include Copland::EventProducer
46
+ end
47
+
48
+ class Listener
49
+ attr_reader :message
50
+
51
+ def initialize
52
+ @message = ""
53
+ end
54
+
55
+ def responder_callback( &block )
56
+ @responder_callback = block
57
+ end
58
+
59
+ def on_custom_event( producer )
60
+ @responder_callback.call "custom event", producer if @responder_callback
61
+ end
62
+
63
+ def on_registry_shutdown( registry )
64
+ @responder_callback.call "registry shutdown", registry if @responder_callback
65
+ end
66
+ end
67
+
68
+ class SimpleInterceptorFactory
69
+ attr_writer :type
70
+ attr_writer :messages
71
+
72
+ def create_instance( point, parms )
73
+ SimpleInterceptor.new( @type, @messages )
74
+ end
75
+ end
76
+
77
+ class SimpleInterceptor
78
+ def initialize( type, messages )
79
+ @messages = messages
80
+ @type = type
81
+ end
82
+
83
+ def process( chain, context )
84
+ @messages << "#{@type}"
85
+ chain.process_next( context )
86
+ end
87
+ end
@@ -0,0 +1,93 @@
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 "../lib"
35
+
36
+ require 'test/unit'
37
+ require 'copland/class-factory'
38
+ require 'copland/errors'
39
+
40
+ class TC_ClassFactory < Test::Unit::TestCase
41
+
42
+ def setup
43
+ @factory = Copland::ClassFactory.instance
44
+ end
45
+
46
+ def test_pool
47
+ assert_raise( Copland::NoSuchPoolException ) do
48
+ @factory.get_pool( "test_pool" )
49
+ end
50
+
51
+ @factory.create_pool( "test_pool" )
52
+ pool = @factory.get_pool( "test_pool" )
53
+
54
+ assert_instance_of Hash, pool
55
+ end
56
+
57
+ def test_register
58
+ @factory.create_pool( "test_register" )
59
+
60
+ @factory.register( "test_register", "object", Object )
61
+ @factory.register( "test_register", "array", Array )
62
+ @factory.register( "test_register", "hash", Hash )
63
+
64
+ a = @factory.get( "test_register", "object" )
65
+ b = @factory.get( "test_register", "array" )
66
+ c = @factory.get( "test_register", "hash" )
67
+
68
+ assert_instance_of Object, a
69
+ assert_instance_of Array, b
70
+ assert_instance_of Hash, c
71
+
72
+ assert_raise( Copland::NoSuchRegisteredClassException ) do
73
+ @factory.get( "test_register", "string" )
74
+ end
75
+ end
76
+
77
+ def test_constructors
78
+ @factory.create_pool( "test_constructors" ) do |k,*args|
79
+ a = k.new
80
+ a.concat( args )
81
+ end
82
+
83
+ @factory.register( "test_constructors", "one", Array )
84
+ @factory.register( "test_constructors", "two", Array )
85
+
86
+ a = @factory.get( "test_constructors", "one", 1, 2, 3 )
87
+ b = @factory.get( "test_constructors", "two", "hello world" )
88
+
89
+ assert_equal [ 1, 2, 3 ], a
90
+ assert_equal [ "hello world" ], b
91
+ end
92
+
93
+ end
@@ -0,0 +1,107 @@
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 "../lib"
35
+
36
+ require 'test/unit'
37
+ require 'copland/class-factory'
38
+ require 'copland/errors'
39
+ require 'copland/instantiator'
40
+ require 'copland/service-point'
41
+ require 'mock'
42
+
43
+ class MockServiceFactory
44
+ def create_instance( point, parms )
45
+ return { :point => point,
46
+ :parms => parms }
47
+ end
48
+ end
49
+
50
+ class TC_ComplexInstantiator < Test::Unit::TestCase
51
+
52
+ ValueElement = Struct.new( :type_id, :value )
53
+
54
+ def valuize( hash )
55
+ new_hash = Hash.new
56
+ hash.each do |k,v|
57
+ new_hash[k] = ValueElement.new( "string", v )
58
+ end
59
+ return new_hash
60
+ end
61
+
62
+ def setup
63
+ @factory = Factory.new( Copland::Instantiator::POOL_NAME )
64
+ @registry = MockRegistry.new
65
+ @package = MockPackage.new( @registry )
66
+
67
+ svc = MockServiceFactory.new
68
+ @point = Copland::ServicePoint.new( @package, 'factory' )
69
+ @point.use_service_model "singleton"
70
+ @point.instantiator = @factory.get( "identity", @point, svc )
71
+ @package.add_service_point @point
72
+ end
73
+
74
+ def test_get
75
+ assert_nothing_raised do
76
+ @factory.get( "complex", @point, valuize( "factory" => "factory" ) )
77
+ end
78
+ end
79
+
80
+ def test_validate_good
81
+ inst = @factory.get( "complex", @point, valuize( "factory" => "factory",
82
+ "data" => "hello" ) )
83
+ assert_nothing_raised do
84
+ inst.validate!
85
+ end
86
+ end
87
+
88
+ def test_validate_bad
89
+ inst = @factory.get( "complex", @point, valuize( "factory" => "data" ) )
90
+ assert_raise( Copland::ServicePointNotFound ) do
91
+ inst.validate!
92
+ end
93
+ end
94
+
95
+ def test_instantiate
96
+ inst = @factory.get( "complex", @point, valuize( "factory" => "factory",
97
+ "data" => "hello" ) )
98
+ inst.validate!
99
+ svc = inst.instantiate
100
+
101
+ assert_instance_of Hash, svc
102
+ assert_equal 2, svc.length
103
+ assert_equal @point, svc[ :point ]
104
+ assert_equal( valuize( "data" => "hello" ), svc[ :parms ] )
105
+ end
106
+
107
+ 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 "../lib"
35
+
36
+ require 'test/unit'
37
+ require 'copland'
38
+
39
+ class TC_ConfigurationPointContrib < Test::Unit::TestCase
40
+
41
+ def test_contributions
42
+ registry = nil
43
+
44
+ assert_nothing_raised do
45
+ registry = Copland::Registry.build(
46
+ File.join( File.dirname( __FILE__ ), "configuration-point" ),
47
+ :log_device => STDOUT )
48
+ end
49
+
50
+ t1_object = registry.service( "test1.Object" )
51
+ t2_array = registry.service( "test2.Array" )
52
+
53
+ t1_test_map = registry.configuration_point( "test1.TestMap" )
54
+ t1_test_list = registry.configuration_point( "test1.TestList" )
55
+
56
+ t2_test_map = registry.configuration_point( "test2.TestMap" )
57
+ t2_test_list = registry.configuration_point( "test2.TestList" )
58
+
59
+ assert_same t1_object, t1_test_map['value1']
60
+ assert_same t2_array, t1_test_map['value2']
61
+
62
+ assert_same t1_object, t1_test_list[0]
63
+ assert_same t2_array, t1_test_list[1]
64
+
65
+ assert_same t2_array, t2_test_map['value1']
66
+ assert_same t1_object, t2_test_map['value2']
67
+
68
+ assert_same t2_array, t2_test_list[0]
69
+ assert_same t1_object, t2_test_list[1]
70
+
71
+ registry.shutdown
72
+ end
73
+
74
+ end
@@ -0,0 +1,122 @@
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 "../lib"
35
+
36
+ require 'test/unit'
37
+ require 'copland/registry'
38
+ require 'copland/errors'
39
+
40
+ class TC_ConfigurationPointSchema < Test::Unit::TestCase
41
+
42
+ def test_list_good
43
+ reg = nil
44
+
45
+ assert_nothing_raised do
46
+ reg = Copland::Registry.build(
47
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
48
+ :log_device => STDOUT,
49
+ :yaml_package_file => "list-good.yml" )
50
+ end
51
+
52
+ assert_equal 3, reg.configuration_point( "list-good.ListGood" ).size
53
+ end
54
+
55
+ def test_list_bad_missing
56
+ assert_raise( Copland::ValidationException ) do
57
+ reg = Copland::Registry.build(
58
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
59
+ :log_device => STDOUT,
60
+ :yaml_package_file => "list-bad-missing.yml" )
61
+ end
62
+ end
63
+
64
+ def test_list_bad_type
65
+ assert_raise( Copland::ValidationException ) do
66
+ reg = Copland::Registry.build(
67
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
68
+ :log_device => STDOUT,
69
+ :yaml_package_file => "list-bad-type.yml" )
70
+ end
71
+ end
72
+
73
+ def test_list_bad_key
74
+ assert_raise( Copland::ValidationException ) do
75
+ reg = Copland::Registry.build(
76
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
77
+ :log_device => STDOUT,
78
+ :yaml_package_file => "list-bad-key.yml" )
79
+ end
80
+ end
81
+
82
+ def test_map_good
83
+ reg = nil
84
+
85
+ assert_nothing_raised do
86
+ reg = Copland::Registry.build(
87
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
88
+ :log_device => STDOUT,
89
+ :yaml_package_file => "map-good.yml" )
90
+ end
91
+
92
+ assert_equal 3, reg.configuration_point( "map-good.MapGood" ).size
93
+ end
94
+
95
+ def test_map_bad_key
96
+ assert_raise( Copland::ValidationException ) do
97
+ reg = Copland::Registry.build(
98
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
99
+ :log_device => STDOUT,
100
+ :yaml_package_file => "map-bad-key.yml" )
101
+ end
102
+ end
103
+
104
+ def test_map_bad_missing
105
+ assert_raise( Copland::ValidationException ) do
106
+ reg = Copland::Registry.build(
107
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
108
+ :log_device => STDOUT,
109
+ :yaml_package_file => "map-bad-missing.yml" )
110
+ end
111
+ end
112
+
113
+ def test_map_bad_type
114
+ assert_raise( Copland::ValidationException ) do
115
+ reg = Copland::Registry.build(
116
+ File.join( File.dirname( __FILE__ ), "conf-test" ),
117
+ :log_device => STDOUT,
118
+ :yaml_package_file => "map-bad-type.yml" )
119
+ end
120
+ end
121
+
122
+ end