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,25 @@
1
+ ---
2
+ id: map-good
3
+
4
+ configuration-points:
5
+
6
+ MapGood:
7
+ type: map
8
+ schema:
9
+ definition:
10
+ service:
11
+ type: string
12
+ required: true
13
+ options:
14
+ type: array
15
+ color:
16
+ type: string
17
+
18
+ contributions:
19
+
20
+ MapGood:
21
+ service: some.Service
22
+ options:
23
+ - opt1: opt2
24
+ - opt3: opt4
25
+ color: blue
@@ -0,0 +1,52 @@
1
+ ---
2
+ id: test1
3
+
4
+ service-points:
5
+
6
+ Object:
7
+ implementor: Object
8
+
9
+ configuration-points:
10
+
11
+ TestMap:
12
+ type: map
13
+
14
+ TestList:
15
+ type: list
16
+
17
+ contributions:
18
+
19
+ TestMap:
20
+ value1: !!service Object
21
+ value2: !!service test2.Array
22
+
23
+ test2.TestList:
24
+ - !!service test2.Array
25
+ - !!service Object
26
+
27
+ ---
28
+ id: test2
29
+
30
+ service-points:
31
+
32
+ Array:
33
+ implementor: Array
34
+
35
+ configuration-points:
36
+
37
+ TestMap:
38
+ type: map
39
+
40
+ TestList:
41
+ type: list
42
+
43
+ contributions:
44
+
45
+ TestMap:
46
+ value1: !!service Array
47
+ value2: !!service test1.Object
48
+
49
+ test1.TestList:
50
+ - !!service test1.Object
51
+ - !!service Array
52
+
@@ -0,0 +1,2 @@
1
+ yaml-package-file: module.yml
2
+ default-service-model: threaded
@@ -0,0 +1,2 @@
1
+ ---
2
+ id: test-config
@@ -0,0 +1,2 @@
1
+ yaml-package-file: package.yml
2
+ default-service-model: prototype
@@ -0,0 +1,4 @@
1
+ ---
2
+ id: subdir-config
3
+ ---
4
+ id: another-config
@@ -0,0 +1,5 @@
1
+ ---
2
+ id: test
3
+ description:
4
+ A test package for verifying the default loader settings.
5
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ id: subdir
3
+ ---
4
+ id: another
@@ -0,0 +1,86 @@
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/loader'
39
+ require 'copland/configuration/yaml/loader'
40
+ require 'mock'
41
+
42
+ class TC_ConfigLoader < Test::Unit::TestCase
43
+
44
+ def setup
45
+ @registry = MockRegistry.new
46
+
47
+ @loader = Copland::Configuration::Loader.new
48
+ @loader.add_loader Copland::Configuration::YAML::Loader.new( @registry, @loader )
49
+
50
+ @defaults_dir = File.join( File.dirname( __FILE__ ), "defaults" )
51
+ @config_dir = File.join( File.dirname( __FILE__ ), "config" )
52
+ end
53
+
54
+ def test_load_path
55
+ @loader.load_path @defaults_dir, Hash.new
56
+
57
+ assert_equal 3, @registry.packages.length
58
+ assert_not_nil @registry.package( "test" )
59
+ assert_not_nil @registry.package( "subdir" )
60
+ assert_not_nil @registry.package( "another" )
61
+ end
62
+
63
+ def test_load_path_with_config
64
+ @loader.load_path @config_dir, Hash.new
65
+
66
+ assert_equal 3, @registry.packages.length
67
+ assert_not_nil @registry.package( "test-config" )
68
+ assert_not_nil @registry.package( "subdir-config" )
69
+ assert_not_nil @registry.package( "another-config" )
70
+ end
71
+
72
+ def test_load
73
+ @loader.add_search_path @defaults_dir, @config_dir
74
+ @loader.load
75
+
76
+ assert_equal 7, @registry.packages.length
77
+ assert_not_nil @registry.package( "copland" )
78
+ assert_not_nil @registry.package( "test" )
79
+ assert_not_nil @registry.package( "subdir" )
80
+ assert_not_nil @registry.package( "another" )
81
+ assert_not_nil @registry.package( "test-config" )
82
+ assert_not_nil @registry.package( "subdir-config" )
83
+ assert_not_nil @registry.package( "another-config" )
84
+ end
85
+
86
+ end
@@ -0,0 +1,134 @@
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/configuration-point'
40
+ require 'copland/configuration-point'
41
+ require 'copland/errors'
42
+ require 'mock'
43
+
44
+ class TC_ConfigurationPointProcessor < Test::Unit::TestCase
45
+
46
+ def setup
47
+ @package = MockPackage.new( MockRegistry.new )
48
+ @processor =
49
+ Copland::Configuration::YAML::ConfigurationPointProcessor.new(
50
+ @package
51
+ )
52
+ end
53
+
54
+ def test_process_bad_type
55
+ assert_raise( Copland::Configuration::ParserError ) do
56
+ @processor.process( "hello", "world" )
57
+ end
58
+ end
59
+
60
+ def test_process_bad_key
61
+ assert_raise( Copland::Configuration::ParserError ) do
62
+ @processor.process( "hello", "type" => "list",
63
+ "bogus" => "value" )
64
+ end
65
+ end
66
+
67
+ def test_process_missing_key
68
+ assert_raise( Copland::Configuration::ParserError ) do
69
+ @processor.process( "hello", Hash.new )
70
+ end
71
+ assert_raise( Copland::Configuration::ParserError ) do
72
+ @processor.process( "hello", "description" => "blah" )
73
+ end
74
+ end
75
+
76
+ def test_process_list
77
+ point = nil
78
+
79
+ assert_nothing_raised do
80
+ point = @processor.process( "hello", "type" => "list",
81
+ "description" => "blah" )
82
+ end
83
+
84
+ assert_equal "hello", point.name
85
+ assert_equal "blah", point.description
86
+ assert_instance_of Copland::ConfigurationPoint::ListConfigurationPoint, point
87
+ end
88
+
89
+ def test_process_map
90
+ point = nil
91
+
92
+ assert_nothing_raised do
93
+ point = @processor.process( "hello", "type" => "map",
94
+ "description" => "blah" )
95
+ end
96
+
97
+ assert_equal "hello", point.name
98
+ assert_equal "blah", point.description
99
+ assert_instance_of Copland::ConfigurationPoint::MapConfigurationPoint, point
100
+ end
101
+
102
+ def test_process_bad_type
103
+ assert_raise( Copland::NoSuchRegisteredClassException ) do
104
+ @processor.process( "hello", "type" => "bogus",
105
+ "description" => "blah" )
106
+ end
107
+ end
108
+
109
+ def test_process_good_schema_reference
110
+ assert_nothing_raised do
111
+ point = @processor.process( "hello",
112
+ "type" => "map",
113
+ "description" => "blah",
114
+ "schema" => "name" )
115
+ end
116
+ end
117
+
118
+ def test_process_good_schema
119
+ assert_nothing_raised do
120
+ point = @processor.process( "hello",
121
+ "type" => "map",
122
+ "description" => "blah",
123
+ "schema" => {
124
+ "name" => "name.Schema",
125
+ "definition" => {
126
+ "hello" => {
127
+ "type" => "string"
128
+ }
129
+ }
130
+ } )
131
+ end
132
+ end
133
+
134
+ end
@@ -0,0 +1,104 @@
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/implementor'
39
+ require 'copland/instantiator'
40
+ require 'mock'
41
+ require 'yaml'
42
+
43
+ class TC_ImplementorProcessor < Test::Unit::TestCase
44
+
45
+ def setup
46
+ @processor = Copland::Configuration::YAML::ImplementorProcessor.new
47
+ end
48
+
49
+ def test_process_bad_type
50
+ point = MockServicePoint.new
51
+ assert_raise( Copland::Configuration::ParserError ) do
52
+ @processor.process( point, 15 )
53
+ end
54
+ end
55
+
56
+ def test_process_simple
57
+ point = MockServicePoint.new
58
+
59
+ assert_nothing_raised do
60
+ @processor.process( point, "something" )
61
+ end
62
+
63
+ assert_instance_of Copland::Instantiator::Simple, point.instantiator
64
+ end
65
+
66
+ def test_process_complex
67
+ point = MockServicePoint.new
68
+
69
+ assert_nothing_raised do
70
+ @processor.process( point, "factory" => "something" )
71
+ end
72
+
73
+ assert_instance_of Copland::Instantiator::Complex, point.instantiator
74
+ end
75
+
76
+ def test_process_complex_deyamlize_good
77
+ point = MockServicePoint.new
78
+
79
+ parms = {
80
+ "factory" => "something",
81
+ "class" => YAML::Syck::PrivateType.new( "real", 3.1415 ),
82
+ "items" => [
83
+ "a string",
84
+ YAML::Syck::PrivateType.new( "service", "copland.Registry" )
85
+ ],
86
+ "map" => {
87
+ "key1" => "a string",
88
+ "key2" => YAML::Syck::PrivateType.new( "configuration", "copland.Registry" )
89
+ }
90
+ }
91
+
92
+ assert_nothing_raised do
93
+ @processor.process( point, parms )
94
+ end
95
+
96
+ assert_instance_of Copland::Instantiator::Complex, point.instantiator
97
+ assert_equal "a string", point.instantiator.construction_parms['map'].value['key1'].value
98
+ assert_equal "service", point.instantiator.construction_parms['items'].value[1].type_id
99
+ assert_equal "hash", point.instantiator.construction_parms['map'].type_id
100
+ assert_equal "array", point.instantiator.construction_parms['items'].type_id
101
+ assert_equal "copland.Registry", point.instantiator.construction_parms['items'].value[1].value
102
+ end
103
+
104
+ end
@@ -0,0 +1,85 @@
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/interceptor'
39
+ require 'mock'
40
+
41
+ class TC_InterceptorProcessor < Test::Unit::TestCase
42
+
43
+ def setup
44
+ @processor = Copland::Configuration::YAML::InterceptorProcessor.new
45
+ end
46
+
47
+ def process_valid_test( definition )
48
+ point = MockServicePoint.new
49
+ assert_nothing_raised do
50
+ @processor.process( point, definition )
51
+ end
52
+ end
53
+ private :process_valid_test
54
+
55
+ def process_invalid_test( definition )
56
+ point = MockServicePoint.new
57
+ assert_raise( Copland::Configuration::ParserError ) do
58
+ @processor.process( point, definition )
59
+ end
60
+ end
61
+ private :process_invalid_test
62
+
63
+ def test_process_valid
64
+ process_valid_test "service" => "value"
65
+ process_valid_test "service" => "value", "before" => [ "a" ]
66
+ process_valid_test "service" => "value", "after" => [ "a" ]
67
+ process_valid_test "service" => "value", "before" => [ "b" ],
68
+ "after" => [ "a" ]
69
+ end
70
+
71
+ def test_process_missing_key
72
+ process_invalid_test Hash.new
73
+ process_invalid_test "before" => [ "a" ]
74
+ process_invalid_test "after" => [ "a" ]
75
+ end
76
+
77
+ def test_process
78
+ point = MockServicePoint.new
79
+ @processor.process( point, "service" => "hello" )
80
+
81
+ assert_equal 1, point.pending_interceptors.length
82
+ assert_equal "hello", point.pending_interceptors.first[ "service" ]
83
+ end
84
+
85
+ end