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,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