s2container 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. data/Apache_Software_License_2.0.txt +202 -0
  2. data/ChangeLog +1 -0
  3. data/ChangeLog.ja +64 -0
  4. data/README +9 -0
  5. data/Rakefile +51 -0
  6. data/example/example01/example.rb +13 -0
  7. data/example/example01/run.rb +20 -0
  8. data/example/example02/example.rb +30 -0
  9. data/example/example02/run.rb +8 -0
  10. data/example/example03/example.rb +8 -0
  11. data/example/example03/run.rb +12 -0
  12. data/example/example04/example.rb +9 -0
  13. data/example/example04/run.rb +15 -0
  14. data/example/example05/example.rb +9 -0
  15. data/example/example05/run.rb +21 -0
  16. data/example/example06/example.rb +9 -0
  17. data/example/example06/run.rb +8 -0
  18. data/example/example07/example.rb +8 -0
  19. data/example/example07/run.rb +15 -0
  20. data/example/example08/example.rb +9 -0
  21. data/example/example08/run.rb +19 -0
  22. data/example/example09/example.rb +7 -0
  23. data/example/example09/run.rb +11 -0
  24. data/example/example10/example.rb +9 -0
  25. data/example/example10/run.rb +10 -0
  26. data/example/example11/example.rb +18 -0
  27. data/example/example11/run.rb +10 -0
  28. data/example/example12/example.rb +9 -0
  29. data/example/example12/run.rb +8 -0
  30. data/example/example13/example.rb +18 -0
  31. data/example/example13/example.sql +4 -0
  32. data/example/example13/run.rb +22 -0
  33. data/example/example13/sample.db +0 -0
  34. data/example/example14/example.db +0 -0
  35. data/example/example14/example.rb +57 -0
  36. data/example/example14/example.sql +50 -0
  37. data/example/example14/run1.rb +23 -0
  38. data/example/example14/run2.rb +28 -0
  39. data/example/example14/run3.rb +25 -0
  40. data/example/example14/run4.rb +23 -0
  41. data/example/example14/run5.rb +35 -0
  42. data/example/example15/example.rb +20 -0
  43. data/example/example15/run.rb +28 -0
  44. data/example/example16/example.rb +15 -0
  45. data/example/example16/run.rb +24 -0
  46. data/example/quickstart/quickstart1/quickstart.rb +10 -0
  47. data/example/quickstart/quickstart2/quickstart.rb +9 -0
  48. data/example/quickstart/quickstart3/quickstart.rb +9 -0
  49. data/example/quickstart/quickstart4/quickstart.rb +14 -0
  50. data/example/quickstart/quickstart5/quickstart.rb +21 -0
  51. data/example/quickstart/quickstart6/quickstart.rb +28 -0
  52. data/example/quickstart/quickstart7/quickstart.rb +18 -0
  53. data/lib/s2container.rb +25 -0
  54. data/lib/seasar/aop/aspect.rb +30 -0
  55. data/lib/seasar/aop/interceptor/trace-interceptor.rb +48 -0
  56. data/lib/seasar/aop/method-invocation.rb +57 -0
  57. data/lib/seasar/aop/pointcut.rb +53 -0
  58. data/lib/seasar/aop/s2aop-factory.rb +125 -0
  59. data/lib/seasar/aop.rb +29 -0
  60. data/lib/seasar/beans/abstract-property-desc.rb +59 -0
  61. data/lib/seasar/beans/attribute-accessor-desc.rb +60 -0
  62. data/lib/seasar/beans/bean-desc-factory.rb +68 -0
  63. data/lib/seasar/beans/bean-desc.rb +232 -0
  64. data/lib/seasar/beans/instance-variable-desc.rb +58 -0
  65. data/lib/seasar/beans.rb +29 -0
  66. data/lib/seasar/container/arg-def.rb +51 -0
  67. data/lib/seasar/container/aspect-def.rb +60 -0
  68. data/lib/seasar/container/aspect-info-def.rb +94 -0
  69. data/lib/seasar/container/assembler/abstract-assembler.rb +68 -0
  70. data/lib/seasar/container/assembler/auto-property-assembler.rb +57 -0
  71. data/lib/seasar/container/assembler/autobinding-auto-def.rb +55 -0
  72. data/lib/seasar/container/assembler/autobinding-def-factory.rb +57 -0
  73. data/lib/seasar/container/assembler/autobinding-none-def.rb +53 -0
  74. data/lib/seasar/container/assembler/manual-constructor-assembler.rb +67 -0
  75. data/lib/seasar/container/assembler/manual-property-assembler.rb +68 -0
  76. data/lib/seasar/container/autobinding-def.rb +36 -0
  77. data/lib/seasar/container/component-def.rb +229 -0
  78. data/lib/seasar/container/component-info-def.rb +117 -0
  79. data/lib/seasar/container/deployer/abstract-component-deployer.rb +47 -0
  80. data/lib/seasar/container/deployer/instance-def-factory.rb +56 -0
  81. data/lib/seasar/container/deployer/instance-outer-def.rb +44 -0
  82. data/lib/seasar/container/deployer/instance-prototype-def.rb +44 -0
  83. data/lib/seasar/container/deployer/instance-singleton-def.rb +42 -0
  84. data/lib/seasar/container/deployer/outer-component-deployer.rb +47 -0
  85. data/lib/seasar/container/deployer/prototype-component-deployer.rb +51 -0
  86. data/lib/seasar/container/deployer/singleton-component-deployer.rb +54 -0
  87. data/lib/seasar/container/exception/component-notfound-runtime-exception.rb +44 -0
  88. data/lib/seasar/container/exception/cyclic-reference-runtime-exception.rb +43 -0
  89. data/lib/seasar/container/exception/illegal-autobinding-def-runtime-exception.rb +43 -0
  90. data/lib/seasar/container/exception/illegal-instance-def-runtime-exception.rb +44 -0
  91. data/lib/seasar/container/exception/toomany-registration-runtime-exception.rb +46 -0
  92. data/lib/seasar/container/instance-def.rb +37 -0
  93. data/lib/seasar/container/outer-component-def.rb +34 -0
  94. data/lib/seasar/container/property-def.rb +43 -0
  95. data/lib/seasar/container/s2application-context.rb +447 -0
  96. data/lib/seasar/container/s2container-component-def.rb +41 -0
  97. data/lib/seasar/container/s2container.rb +308 -0
  98. data/lib/seasar/container/simple-component-def.rb +45 -0
  99. data/lib/seasar/container/toomany-registration-component-def.rb +69 -0
  100. data/lib/seasar/container.rb +143 -0
  101. data/lib/seasar/dbi/dbi-interceptor.rb +97 -0
  102. data/lib/seasar/dbi/paginate.rb +215 -0
  103. data/lib/seasar/dbi.rb +26 -0
  104. data/lib/seasar/exception/notyet-implemented-exception.rb +25 -0
  105. data/lib/seasar/exception/property-notfound-runtime-exception.rb +48 -0
  106. data/lib/seasar/exception/s2runtime-exception.rb +35 -0
  107. data/lib/seasar/exception/unsupported-operation-exception.rb +25 -0
  108. data/lib/seasar/exception.rb +27 -0
  109. data/lib/seasar/log/s2logger.rb +75 -0
  110. data/lib/seasar/log.rb +38 -0
  111. data/lib/seasar/util/class-util.rb +116 -0
  112. data/lib/seasar/util.rb +24 -0
  113. data/setup.rb +1585 -0
  114. data/test/seasar/aop/test_pointcut.rb +25 -0
  115. data/test/seasar/aop/test_s2aop_factory.rb +90 -0
  116. data/test/seasar/beans/test_bean-desc.rb +179 -0
  117. data/test/seasar/container/assembler/test_auto_property_assembler.rb +87 -0
  118. data/test/seasar/container/assembler/test_autobinding_def_factory.rb +22 -0
  119. data/test/seasar/container/assembler/test_manual_property_assembler.rb +59 -0
  120. data/test/seasar/container/assembler/test_manula_constructor_assembler.rb +59 -0
  121. data/test/seasar/container/assembler/test_proc_constructor_assembler.rb +61 -0
  122. data/test/seasar/container/deployer/test_instance_def_factory.rb +24 -0
  123. data/test/seasar/container/deployer/test_prototype-deployer.rb +25 -0
  124. data/test/seasar/container/deployer/test_singleton-component-deployer.rb +24 -0
  125. data/test/seasar/container/s2app_load_sample.rb +6 -0
  126. data/test/seasar/container/test_arg-def.rb +34 -0
  127. data/test/seasar/container/test_aspect-info-def.rb +85 -0
  128. data/test/seasar/container/test_component-def.rb +91 -0
  129. data/test/seasar/container/test_component-info-def.rb +88 -0
  130. data/test/seasar/container/test_s2application-context.rb +290 -0
  131. data/test/seasar/container/test_s2container.rb +268 -0
  132. data/test/seasar/dbi/test_paginate.rb +265 -0
  133. data/test/seasar/test_log.rb +20 -0
  134. data/test/seasar/test_util.rb +46 -0
  135. data/test/test-suite.rb +7 -0
  136. metadata +211 -0
@@ -0,0 +1,85 @@
1
+ require 'seasar/container/s2application-context'
2
+
3
+ module Seasar
4
+ module Container
5
+ class TC_AspectInfoDef < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_match_regexp
13
+ cd = ComponentDef.new(A, 'abc')
14
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => /ab/, :pointcut => nil)
15
+ assert(info.applicable?(cd))
16
+
17
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => /A/, :pointcut => nil)
18
+ assert(info.applicable?(cd))
19
+
20
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => /cde/, :pointcut => nil)
21
+ assert(!info.applicable?(cd))
22
+
23
+ cd = ComponentDef.new(A)
24
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => /ab/, :pointcut => nil)
25
+ assert(!info.applicable?(cd))
26
+ end
27
+
28
+ def test_match_class
29
+ cd = ComponentDef.new(A)
30
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => A, :pointcut => nil)
31
+ assert(info.applicable?(cd))
32
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => B, :pointcut => nil)
33
+ assert(!info.applicable?(cd))
34
+
35
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => A, :pointcut => nil)
36
+ cd = ComponentDef.new(B)
37
+ assert(!info.applicable?(cd))
38
+ cd = ComponentDef.new(A)
39
+ assert(info.applicable?(cd))
40
+ cd = ComponentDef.new(C)
41
+ assert(!info.applicable?(cd))
42
+ end
43
+
44
+ def test_match_module
45
+ cd = ComponentDef.new(D::A)
46
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => D, :pointcut => nil)
47
+ assert(info.applicable?(cd))
48
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => A, :pointcut => nil)
49
+ assert(!info.applicable?(cd))
50
+ end
51
+
52
+ def test_match_string
53
+ cd = ComponentDef.new(A, 'abc')
54
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => 'abc', :pointcut => nil)
55
+ assert(info.applicable?(cd))
56
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => 'c', :pointcut => nil)
57
+ assert(!info.applicable?(cd))
58
+
59
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => A, :pointcut => nil)
60
+ assert(info.applicable?(cd))
61
+ end
62
+
63
+ def test_match_symbol
64
+ cd = ComponentDef.new(A, :abc)
65
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => :abc, :pointcut => nil)
66
+ assert(info.applicable?(cd))
67
+ info = AspectInfoDef.new(:interceptor => 'trace', :pattern => :c, :pointcut => nil)
68
+ assert(!info.applicable?(cd))
69
+ end
70
+
71
+ class A
72
+ end
73
+
74
+ class B < A
75
+ end
76
+
77
+ class C
78
+ end
79
+
80
+ module D
81
+ class A; end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,91 @@
1
+ require 'seasar/container/component-def'
2
+
3
+ module Seasar
4
+ module Container
5
+ class TC_ComponentDef < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_instantiate
13
+ cd = Seasar::Container::ComponentDef.new(A, "a")
14
+ assert_equal(A, cd.component_class)
15
+ assert_equal("a", cd.component_name)
16
+
17
+ cd = Seasar::Container::ComponentDef.new(A)
18
+ assert_equal(A, cd.component_class)
19
+ assert_equal(:a, cd.component_name)
20
+ end
21
+
22
+ def test_get_component_deployer
23
+ cd = Seasar::Container::ComponentDef.new(A, "a")
24
+ assert_equal(Seasar::Container::Deployer::SingletonComponentDeployer,
25
+ cd.get_component_deployer.class)
26
+ end
27
+
28
+ def test_get_concreate_class
29
+ cd = Seasar::Container::ComponentDef.new(A, "a")
30
+ assert_equal(A, cd.get_concreate_class)
31
+ end
32
+
33
+ def test_get_component_deployer
34
+ begin
35
+ cd = Seasar::Container::ComponentDef.new(A, :a)
36
+ rescue => e
37
+ assert(e.instance_of?(TypeError))
38
+ assert_equal("component name must be String or nil.", e.message)
39
+ end
40
+ end
41
+
42
+ def test_onetime_proc
43
+ cd = Seasar::Container::ComponentDef.new(B, "b")
44
+ cd.onetime_proc = lambda {
45
+ b = B.new
46
+ b.name = "abc"
47
+ b
48
+ }
49
+ assert(cd.component.instance_of?(B))
50
+ assert_equal("abc", cd.component.name)
51
+ end
52
+
53
+ def test_proc_block
54
+ cd = Seasar::Container::ComponentDef.new(Proc, "b") {
55
+ next A.new
56
+ }
57
+ component = cd.get_component
58
+ assert(component.instance_of?(Proc))
59
+ assert(component.call.instance_of?(A))
60
+ end
61
+
62
+ def test_constructor_block
63
+ cd = Seasar::Container::ComponentDef.new(B, "b") {
64
+ next B.new
65
+ }
66
+ component = cd.get_component
67
+ assert(component.instance_of?(B))
68
+
69
+ cd = Seasar::Container::ComponentDef.new(B, "b") {
70
+ next A.new
71
+ }
72
+ begin
73
+ component = cd.get_component
74
+ rescue TypeError => e
75
+ assert(e.message.match(/^invalid instance found./))
76
+ end
77
+ end
78
+
79
+ class A
80
+ end
81
+
82
+ class B
83
+ def initialize
84
+ @name = "xyz"
85
+ end
86
+ attr_accessor :name
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,88 @@
1
+ require 'seasar/container/s2application-context'
2
+
3
+ module Seasar
4
+ module Container
5
+ class TC_ComponentInfoDef < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_accessor
13
+ info = ComponentInfoDef.new(:class => A, :name => "abc")
14
+ assert_equal("abc", info["@component_name"])
15
+ assert_equal("abc", info[:@component_name])
16
+ end
17
+
18
+ def test_match_regexp
19
+ info = ComponentInfoDef.new(:class => A, :name => "abc")
20
+ assert(info.match(/ab/))
21
+ assert(!info.match(/bcd/))
22
+ assert(info.match(/A/))
23
+ assert(info.match(/Seasar/))
24
+ assert(!info.match(/seasar/))
25
+
26
+ info = ComponentInfoDef.new(:class => A)
27
+ assert(!info.match(/abc/))
28
+ end
29
+
30
+ def test_match_class
31
+ info = ComponentInfoDef.new(:class => A, :name => "abc")
32
+ assert(info.match(A))
33
+ assert(!info.match(B))
34
+ assert(!info.match(C))
35
+
36
+ info = ComponentInfoDef.new(:class => B, :name => "abc")
37
+ assert(!info.match(A))
38
+ assert(info.match(B))
39
+ assert(!info.match(C))
40
+ end
41
+
42
+ def test_match_module
43
+ info = ComponentInfoDef.new(:class => D::A, :name => "abc")
44
+ assert(info.match(D))
45
+ assert(!info.match(A))
46
+ end
47
+
48
+ def test_match_string
49
+ info = ComponentInfoDef.new(:class => A, :name => "abc")
50
+ assert(info.match("abc"))
51
+ assert(!info.match("bcd"))
52
+
53
+ info = ComponentInfoDef.new(:class => A)
54
+ assert(!info.match("abc"))
55
+ assert(info.match(A))
56
+ end
57
+
58
+ def test_match_symbol
59
+ info = ComponentInfoDef.new(:class => A, :name => :abc)
60
+ assert(info.match(:abc))
61
+ assert(!info.match(:bcd))
62
+
63
+ info = ComponentInfoDef.new(:class => A)
64
+ assert(!info.match(:abc))
65
+ end
66
+
67
+ def test_auto_namespace
68
+ ComponentInfoDef.auto_namespace = true
69
+ info = ComponentInfoDef.new(:class => A)
70
+ assert('Seasar::Container::TC_ComponentInfoDef', info.namespace)
71
+ ComponentInfoDef.auto_namespace = false
72
+ end
73
+
74
+ class A
75
+ end
76
+
77
+ class B < A
78
+ end
79
+
80
+ class C
81
+ end
82
+
83
+ module D
84
+ class A; end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,290 @@
1
+ require 'seasar/container/s2application-context'
2
+
3
+ module Seasar
4
+ module Container
5
+ class TC_S2ApplicationContext < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_get
13
+ s2app.init
14
+ assert_equal(A, s2app.get(A).class)
15
+ assert_equal(A, s2app.get('a').class)
16
+ assert_equal(A, s2app.get('foo.a2', 'foo').class)
17
+ assert_equal(A, s2app.get('foo.bar.a3', 'foo').class)
18
+ assert_equal(A, s2app.get('a3', 'foo.bar').class)
19
+ assert_equal(A, s2app.get('a4', 'foo.bar.huga').class)
20
+ assert_equal(s2app.get('foo.bar.huga'), s2app.get('foo.bar.huga'))
21
+
22
+ s2app.init
23
+ assert_equal(A, s2app[A].class)
24
+ end
25
+
26
+ def test_get_by_symbol
27
+ s2app.init
28
+ assert_equal(J, s2app[J].class)
29
+ assert_equal(J, s2app[:j].class)
30
+ end
31
+
32
+ def test_di
33
+ s2app.init
34
+ s2app.register_aspect(:pattern => /b/, :interceptor => Seasar::Aop::Interceptor::TraceInterceptor.new)
35
+ s2app.get(C).b.foo
36
+ end
37
+
38
+ def test_aspect
39
+ s2app.register_aspect(:pattern => /b/, :interceptor => Seasar::Aop::Interceptor::TraceInterceptor.new)
40
+ s2app.get('b').foo
41
+
42
+ s2app.init
43
+ s2app.aspect(:pattern => /b/) {|invocation|
44
+ puts "before : foo"
45
+ invocation.proceed
46
+ puts "after : foo"
47
+ }
48
+ s2app.get('b').foo
49
+ end
50
+
51
+ def test_singleton
52
+ s2app.init
53
+ assert(s2app.get(C) == s2app.get(C))
54
+ end
55
+
56
+ def test_prototype
57
+ s2app.init
58
+ assert(s2app.get(D) != s2app.get(D))
59
+ end
60
+
61
+ def test_di_none
62
+ s2app.init
63
+ assert_equal(s2app.get(E).b, B)
64
+ end
65
+
66
+ def test_zzznamespaced_component
67
+ s2app.init
68
+ assert_equal(F, s2app.get(F).class)
69
+ assert_equal(F, s2app.get(F, 'namespace_f').class)
70
+ assert_equal(F, s2app.get('namespace_f.f').class)
71
+ end
72
+
73
+ def test_proc_component
74
+ s2app.init
75
+ g = s2app[G]
76
+ assert_equal(G, g.class)
77
+ assert_equal(10, g.val)
78
+ end
79
+
80
+ def test_onetime_proc
81
+ s2app.init
82
+ g = s2app.get(G) {
83
+ G.new(20)
84
+ }
85
+ assert_equal(G, g.class)
86
+ assert_equal(20, g.val)
87
+ g = s2app[G]
88
+ assert_equal(G, g.class)
89
+ assert_equal(10, g.val)
90
+ end
91
+
92
+ def test_include
93
+ s2app.init
94
+ s2app.include(H)
95
+ container = s2app.create
96
+ assert(container.has_component_def(H))
97
+ assert(!container.has_component_def(B))
98
+ end
99
+
100
+ def test_exclude
101
+ s2app.init
102
+ s2app.include('hi')
103
+ container = s2app.create
104
+ assert(container.has_component_def(H))
105
+ assert(container.has_component_def(I))
106
+
107
+ s2app.init
108
+ s2app.exclude(I)
109
+ container = s2app.create
110
+ assert(container.has_component_def(H))
111
+ assert(!container.has_component_def(I))
112
+
113
+ s2app.init
114
+ s2app.include('hi')
115
+ s2app.exclude(I)
116
+ container = s2app.create
117
+ assert(container.has_component_def(H))
118
+ assert(!container.has_component_def(I))
119
+ assert(!container.has_component_def(B))
120
+ end
121
+
122
+ def test_s2comp
123
+ begin
124
+ s2comp
125
+ rescue => e
126
+ assert(e.instance_of?(TypeError))
127
+ assert_equal("class not specified.", e.message)
128
+ end
129
+ end
130
+
131
+ def test_aspect_error
132
+ begin
133
+ s2app.aspect({})
134
+ rescue => e
135
+ assert(e.instance_of?(ArgumentError))
136
+ assert_equal("interceptor not specified.", e.message)
137
+ end
138
+ end
139
+
140
+ def test_select_by_include
141
+ s2app.init
142
+ s2app.include(J)
143
+ s2app.include(J)
144
+ s2app.include(J)
145
+ s2app.include(I)
146
+ s2app.include(I)
147
+ s2app.include(I)
148
+ infos = s2app.select_component_info_by_include(s2app.component_infos)
149
+ assert_equal(2, infos.size)
150
+ end
151
+
152
+ def test_selectors
153
+ s2app.init
154
+ s2app.select {|infos|
155
+ infos.select {|info| info.component_class == H}
156
+ }
157
+ s2app.select {|infos|
158
+ assert_equal(2, infos.size)
159
+ infos.select {|info| info.component_name == "h"}
160
+ }
161
+ container = s2app.create {|infos|
162
+ assert_equal(1, infos.size)
163
+ next infos
164
+ }
165
+
166
+ assert(container.has_component_def(H))
167
+ assert(!container.has_component_def(B))
168
+ end
169
+
170
+ def test_di_accessor
171
+ s2app.init
172
+ assert(s2app.get(K).l.is_a?(L))
173
+ end
174
+
175
+ def test_select_component_info_by_namespace
176
+ infos = []
177
+ infos << ComponentInfoDef.new(:namespace => 'a.b.c')
178
+ infos << ComponentInfoDef.new(:namespace => 'a.b.d')
179
+ infos << ComponentInfoDef.new(:namespace => 'a.e.f')
180
+ infos << ComponentInfoDef.new(:namespace => 'x.y.z')
181
+ assert(2, s2app.select_component_info_by_namespace(infos, %w[a.b]).size)
182
+ assert(1, s2app.select_component_info_by_namespace(infos, %w[a.e]).size)
183
+ assert(3, s2app.select_component_info_by_namespace(infos, %w[a]).size)
184
+ assert(3, s2app.select_component_info_by_namespace(infos, %w[a.b a.e]).size)
185
+ assert(2, s2app.select_component_info_by_namespace(infos, %w[a.e x.y]).size)
186
+ end
187
+
188
+ def test_create_singleton
189
+ s2app.init
190
+ c1 = s2app.create_singleton(%w[a.b a.c])
191
+ c2 = s2app.create_singleton(%w[a.c a.b])
192
+ assert(c1 == c2)
193
+ end
194
+
195
+ def test_snapshot
196
+ s2app.init
197
+ assert(!s2app.snapshot?)
198
+ app = s2app.snapshot
199
+ assert(app.snapshot?)
200
+ assert_equal(s2app.component_infos, app.component_infos)
201
+ assert_equal(s2app.aspect_infos, app.aspect_infos)
202
+ assert_raise(RuntimeError) {app.register('test')}
203
+ assert_raise(RuntimeError) {app.register_aspect('test')}
204
+ end
205
+
206
+ =begin
207
+ def test_z_reload
208
+ s2app.init(:force => true)
209
+ load File.join(File.dirname(__FILE__), 's2app_load_sample.rb')
210
+ assert_equal(2, s2app.component_infos.size)
211
+ load File.join(File.dirname(__FILE__), 's2app_load_sample.rb')
212
+ assert_equal(2, s2app.component_infos.size)
213
+ exit
214
+ end
215
+ =end
216
+ class A
217
+ s2component :name => 'a'
218
+ s2component :name => 'a2', :namespace => 'foo'
219
+ s2component :name => 'a3', :namespace => 'foo.bar'
220
+ s2component :name => 'a4', :namespace => 'foo.bar.huga'
221
+ def foo
222
+ puts "foo called."
223
+ end
224
+ end
225
+
226
+ class B
227
+ s2comp :name => 'b'
228
+ def foo
229
+ puts "foo called."
230
+ end
231
+ end
232
+
233
+ class C
234
+ s2component
235
+ def initialize
236
+ @b = B
237
+ end
238
+ attr_accessor :b
239
+ end
240
+
241
+ class D
242
+ s2component :instance => :prototype
243
+ end
244
+
245
+ class E
246
+ s2component :autobinding => :none
247
+ def initialize
248
+ @b = B
249
+ end
250
+ attr_accessor :b
251
+ end
252
+
253
+ class F
254
+ s2component :name => 'f', :namespace => 'namespace_f'
255
+ end
256
+
257
+ class G
258
+ s2component(:instance => :prototype) {
259
+ G.new(10)
260
+ }
261
+ def initialize(val)
262
+ @val = val
263
+ end
264
+ attr_accessor :val
265
+ end
266
+
267
+ class H
268
+ s2component :name => 'h'
269
+ s2component :name => 'hi'
270
+ end
271
+
272
+ class I
273
+ s2component :name => 'hi'
274
+ end
275
+
276
+ class J
277
+ s2component :name => :j
278
+ end
279
+
280
+ class K
281
+ s2component
282
+ attr_accessor :l
283
+ end
284
+
285
+ class L
286
+ s2component :name => :l
287
+ end
288
+ end
289
+ end
290
+ end