Rubernate 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,329 +3,379 @@ $:.unshift(File.expand_path('../..', __FILE__)) unless
3
3
 
4
4
  require 'rubernate/fixtures'
5
5
 
6
- # Make methods instantiate and modified visible for test purposes.
7
- class Rubernate::Runtime
8
- public :instantiate, :modified
9
- end
10
-
11
- class Rubernate::RubernateTest < Test::Unit::TestCase
12
- include FixtureClasses
13
- include Rubernate
14
- include Rubernate::DBI
15
-
16
- def setup
17
- @factory = Rubernate::Memory::Configuration.new
18
- @runtime = @factory.create
19
- Rubernate.configuration = @factory
20
- Thread.current[:on_save] = Thread.current[:on_load] = nil
21
- end
22
-
23
- def test_include
24
- assert !C0.include?(Persistent)
25
- assert C1.include?(Persistent)
26
- assert C2.include?(Persistent)
27
- assert C3.include?(Persistent)
28
- assert !C0.new.kind_of?(Persistent)
29
- assert C1.new.kind_of?(Persistent)
30
- end
31
-
32
- def test_properties
33
- assert !C1.method_defined?(:p2)
34
- assert C1.method_defined?(:p1)
35
- assert C1.method_defined?(:p1=)
36
- assert C2.method_defined?(:p2)
37
- assert C2.method_defined?(:p2=)
38
- assert C3.method_defined?(:p0)
39
- assert C3.method_defined?(:p0=)
6
+ module Rubernate
7
+ # Make methods instantiate and modified visible for test purposes.
8
+ class Runtime
9
+ public :instantiate, :modified, :lazy_factory
40
10
  end
41
-
42
- def test_objects_eq
43
- o1, o2, o3, o4 = C4.new(1), C4.new(1), C4.new(2), C1.new
44
- assert_equal o1, o1
45
- assert_equal o1, o2
46
- assert_not_equal o1, o3
47
- assert_not_equal o1, o4
48
- assert_equal o4, o4
49
- end
50
-
51
- def test_session
52
- assert !Rubernate.session?
53
- Rubernate.session{ assert Rubernate.runtime; assert Rubernate.session? }
54
- Rubernate.session{ |runtime|
55
- assert runtime
56
- def runtime.close
57
- Thread.current[:close_test] = 'passed'
58
- end
59
- }
60
- assert_equal 'passed', Thread.current[:close_test]
61
- assert_raise(Rubernate::ObjectNotFoundException) {
62
- Rubernate.session { |runtime|
63
- assert runtime
11
+
12
+ class RubernateTest < Test::Unit::TestCase
13
+ include FixtureClasses
14
+ include Rubernate
15
+ include Rubernate::DBI
16
+
17
+ def setup
18
+ @factory = Rubernate::Memory::Configuration.new
19
+ @runtime = @factory.create
20
+ Rubernate.configuration = @factory
21
+ Thread.current[:on_save] = Thread.current[:on_load] = nil
22
+ end
23
+
24
+ def test_include
25
+ assert !C0.include?(Persistent)
26
+ assert C1.include?(Persistent)
27
+ assert C2.include?(Persistent)
28
+ assert C3.include?(Persistent)
29
+ assert !C0.new.kind_of?(Persistent)
30
+ assert C1.new.kind_of?(Persistent)
31
+ end
32
+
33
+ def test_properties
34
+ assert !C1.method_defined?(:p2)
35
+ assert C1.method_defined?(:p1)
36
+ assert C1.method_defined?(:p1=)
37
+ assert C2.method_defined?(:p2)
38
+ assert C2.method_defined?(:p2=)
39
+ assert C3.method_defined?(:p0)
40
+ assert C3.method_defined?(:p0=)
41
+ end
42
+
43
+ def test_objects_eq
44
+ o1, o2, o3, o4 = C4.new(1), C4.new(1), C4.new(2), C1.new
45
+ assert_equal o1, o1
46
+ assert_equal o1, o2
47
+ assert_not_equal o1, o3
48
+ assert_not_equal o1, o4
49
+ assert_equal o4, o4
50
+ end
51
+
52
+ def test_session
53
+ assert !Rubernate.session?
54
+ Rubernate.session{ assert Rubernate.runtime; assert Rubernate.session? }
55
+ Rubernate.session{ |runtime|
56
+ assert runtime
64
57
  def runtime.close
65
- Thread.current[:close_test] = 'not_passed'
66
- end
67
- def runtime.failed
68
- Thread.current[:failed_test] = 'passed'
58
+ Thread.current[:close_test] = 'passed'
69
59
  end
70
- raise Rubernate::ObjectNotFoundException.new(1)
71
60
  }
72
- }
73
- assert_equal 'passed', Thread.current[:close_test]
74
- assert_equal 'passed', Thread.current[:failed_test]
75
- assert_raise(RuntimeError) {Rubernate.runtime}
76
- end
77
-
78
- def test_find_and_load
79
- o1, o1.peer, o1.p1 = C1.new, Peer.new, 'o1.p1'
80
- o2, o2.peer, o2.p1 = C2.new, Peer.new, o1
61
+ assert_equal 'passed', Thread.current[:close_test]
62
+ assert_raise(Rubernate::ObjectNotFoundException) {
63
+ Rubernate.session { |runtime|
64
+ assert runtime
65
+ def runtime.close
66
+ Thread.current[:close_test] = 'not_passed'
67
+ end
68
+ def runtime.failed
69
+ Thread.current[:failed_test] = 'passed'
70
+ end
71
+ raise Rubernate::ObjectNotFoundException.new(1)
72
+ }
73
+ }
74
+ assert_equal 'passed', Thread.current[:close_test]
75
+ assert_equal 'passed', Thread.current[:failed_test]
76
+ assert_raise(RuntimeError) {Rubernate.runtime}
77
+ end
81
78
 
82
- @runtime.create o1
83
- @runtime.create o2
79
+ def test_find_and_load
80
+ o1, o1.__peer, o1.p1 = C1.new, Peer.new, 'o1.p1'
81
+ o2, o2.__peer, o2.p1 = C2.new, Peer.new, o1
82
+
83
+ @runtime.create o1
84
+ @runtime.create o2
85
+
86
+ Rubernate.session { |runtime|
87
+ o2 = runtime.find_by_pk o2.primary_key
88
+ o1 = o2.p1
89
+ assert o1.equal?(runtime.find_by_pk(o1.primary_key))
90
+ runtime.find_by_pk o1.primary_key, true
91
+ assert_not_nil o1.__peer
92
+ }
93
+ end
84
94
 
85
- Rubernate.session { |runtime|
86
- o2 = runtime.find_by_pk o2.primary_key
87
- o1 = o2.p1
88
- assert o1.equal?(runtime.find_by_pk(o1.primary_key))
89
- runtime.find_by_pk o1.primary_key, true
90
- assert_not_nil o1.peer
91
- }
92
- end
93
-
94
- def test_ensure_loaded
95
- o1, o1.p1 = C1.new, 'o1.p1'
96
- o2, o2.p1 = C2.new, o1
95
+ def test_ensure_loaded
96
+ o1, o1.p1 = C1.new, 'o1.p1'
97
+ o2, o2.p1 = C2.new, o1
98
+
99
+ @runtime.create o1
100
+ @runtime.create o2
101
+
102
+ Rubernate.session do |runtime|
103
+ o2 = runtime.find_by_pk o2.primary_key
104
+ o1 = o2.p1
105
+ assert_equal 'o1.p1', o1.p1
106
+ end
107
+ end
108
+
109
+ def test_peer_creation
110
+ o = C1.new
111
+ assert_nil o.__peer
112
+ o.p1 = 'o.p1'
113
+ p = o.__peer
114
+ assert p
115
+ assert_equal 'o.p1', o.p1
116
+ assert p.equal?(o.__peer) # Peer must not be changed
117
+ end
97
118
 
98
- @runtime.create o1
99
- @runtime.create o2
119
+ def test_peer_assign
120
+ o = C1.new
121
+ l1, l2 = LazyLoader.new, LazyLoader.new
122
+ o.__peer = l1
123
+ o.__peer = l2
124
+ assert_equal l1, o.__peer
125
+
126
+ p1, p2 = Peer.new, Peer.new
127
+ o.__peer = p1
128
+ assert_equal p1, o.__peer
129
+ o.__peer = p2
130
+ assert_equal p2, o.__peer
131
+ o.__peer = l1
132
+ assert_equal p2, o.__peer
133
+ end
100
134
 
101
- Rubernate.session { |runtime|
102
- o2 = runtime.find_by_pk o2.primary_key
103
- o1 = o2.p1
104
- assert_equal 'o1.p1', o1.p1
105
- }
106
- end
107
-
108
- def test_attach
109
- o1 = C1.new
110
- Rubernate.session {|runtime|
111
- runtime.attach o1
112
- f1 = runtime.find_by_pk(o1.primary_key)
113
- assert o1.equal?(f1)
114
- }
115
- end
116
-
117
- def test_equal
118
- o1, o1.primary_key = C1.new, 1
119
- o2, o2.primary_key = C1.new, 1
120
- assert_equal o1, o2
121
- end
122
-
123
- def test_ensure_attach
124
- Rubernate.session {|runtime|
135
+ def test_attach
125
136
  o1 = C1.new
126
- runtime.attach o1
127
- o1.p1 = 'o1.p1'
128
- assert o1.peer.dirty?
129
- }
130
- end
131
-
132
- def test_on_load
133
- pk = Rubernate.session {o = C3.new.attach; o.primary_key}
134
- assert_nil Thread.current[:on_load]
135
- Rubernate.session {
136
- o = find_by_pk pk
137
- assert_not_nil Thread.current[:on_load]
138
- }
139
- end
140
-
141
- def test_on_load_session
142
- pk = nil
143
- Rubernate.session{|runtime| o = C3.new.attach; pk = o.primary_key}
144
- Rubernate.session{|runtime|
145
- o = runtime.find_by_pk pk
146
- assert_equal o, Thread.current[:on_load]
147
- }
148
- end
149
-
150
- def test_on_save
151
- o = nil
152
- Rubernate.session{|runtime|
153
- o = C3.new.attach
154
- assert_nil Thread.current[:on_save]
155
- o.p0 = 'o.p0'
156
- }
157
- assert_equal o, Thread.current[:on_save]
158
- end
137
+ Rubernate.session {|runtime|
138
+ runtime.attach o1
139
+ f1 = runtime.find_by_pk(o1.primary_key)
140
+ assert o1.equal?(f1)
141
+ }
142
+ end
143
+
144
+ def test_equal
145
+ o1, o1.primary_key = C1.new, 1
146
+ o2, o2.primary_key = C1.new, 1
147
+ assert_equal o1, o2
148
+ end
149
+
150
+ def test_ensure_attach
151
+ Rubernate.session {|runtime|
152
+ o1 = C1.new
153
+ runtime.attach o1
154
+ o1.p1 = 'o1.p1'
155
+ assert o1.__peer.dirty?
156
+ }
157
+ end
158
+
159
+ def test_on_load
160
+ pk = Rubernate.session {o = C3.new.attach; o.primary_key}
161
+ assert_nil Thread.current[:on_load]
162
+ Rubernate.session {
163
+ o = find_by_pk pk
164
+ assert_not_nil Thread.current[:on_load]
165
+ }
166
+ end
167
+
168
+ def test_on_load_session
169
+ pk = nil
170
+ Rubernate.session{|runtime| o = C3.new.attach; pk = o.primary_key}
171
+ Rubernate.session{|runtime|
172
+ o = runtime.find_by_pk pk
173
+ assert_equal o, Thread.current[:on_load]
174
+ }
175
+ end
176
+
177
+ def test_on_save
178
+ o = nil
179
+ Rubernate.session{|runtime|
180
+ o = C3.new.attach
181
+ assert_nil Thread.current[:on_save]
182
+ o.p0 = 'o.p0'
183
+ }
184
+ assert_equal o, Thread.current[:on_save]
185
+ end
159
186
 
160
- def test_attach_remove # TODO:...
161
- Rubernate.session {
162
- o = C1.new.attach
163
- o.remove!
164
- }
187
+ def test_attach_remove # TODO:...
188
+ Rubernate.session {
189
+ o = C1.new.attach
190
+ o.remove!
191
+ }
192
+ end
165
193
  end
166
- end
167
194
 
168
- class Rubernate::PeerTest < Test::Unit::TestCase
169
- include Rubernate
170
- include FixtureClasses
171
-
172
- def test_peer_dirty
173
- p = Peer.new
174
- assert_equal false, p.dirty?
195
+ class PeerTest < Test::Unit::TestCase
196
+ include Rubernate
197
+ include FixtureClasses
175
198
 
176
- p[:p1] = 'test'
177
- assert p.dirty?
199
+ def test_peer_dirty
200
+ p = Peer.new
201
+ assert_equal false, p.dirty?
202
+
203
+ p[:p1] = 'test'
204
+ assert p.dirty?
205
+
206
+ p.dirty = false
207
+ assert_equal false, p.dirty?
208
+
209
+ p[:p1] = nil
210
+ assert p.dirty?
211
+ end
178
212
 
179
- p.dirty = false
180
- assert_equal false, p.dirty?
213
+ def test_peer_dirty_array
214
+ peer = Peer.new
215
+ assert !peer.dirty?
216
+ peer[:a] = []
217
+ assert peer.dirty?
218
+ peer.dirty = false
219
+ peer[:a] << C4.new(1)
220
+ assert peer.dirty?
221
+ peer.dirty = false
222
+ assert !peer.dirty?
223
+ end
181
224
 
182
- p[:p1] = nil
183
- assert p.dirty?
184
- end
185
-
186
- def test_peer_dirty_array
187
- peer = Peer.new
188
- assert !peer.dirty?
189
- peer[:a] = []
190
- assert peer.dirty?
191
- peer.dirty = false
192
- peer[:a] << C4.new(1)
193
- assert peer.dirty?
194
- peer.dirty = false
195
- assert !peer.dirty?
196
- end
197
-
198
- def test_peer_dirty_hash
199
- peer = Peer.new
200
- peer[:h] = {'key1' => 'value1'}
201
- assert peer.dirty?
202
- peer.dirty = false
203
- assert !peer.dirty?
204
- peer[:h]['key2'] = 'value2'
205
- assert peer.dirty?
206
- peer[:h]['key2'] = 'value2.1'
207
- assert peer.dirty?
208
- peer.dirty = false
209
- peer[:h]['key2'] = nil
210
- assert peer.dirty?
211
- peer.dirty = false
212
- peer[:h].delete 'key2'
213
- assert peer.dirty?
214
- end
215
-
216
- def test_peer_dirty_hash2
217
- peer = Peer.new
218
- peer[:h] = {'key1' => C4.new(1)}
219
- peer.dirty = false
220
- peer[:h]['key1'] = C4.new 1
221
- assert !peer.dirty?
222
- peer.dirty = false
223
- peer[:h] = {'key1' => C4.new(1)}
224
- assert !peer.dirty?
225
- end
226
-
227
- def test_peer_container
228
- a = [1]
229
- a.extend Peer::Container
230
- a.memorize!
231
- assert_nil a.recall
232
- a << 2
233
- assert_not_nil a.recall
234
- a.memorize!
235
- assert_nil a.recall
236
- a.collect! { |i| i * 2 }
237
- assert_not_nil a.recall
238
- assert_equal 4, a[1]
225
+ def test_peer_dirty_hash
226
+ peer = Peer.new
227
+ peer[:h] = {'key1' => 'value1'}
228
+ assert peer.dirty?
229
+ peer.dirty = false
230
+ assert !peer.dirty?
231
+ peer[:h]['key2'] = 'value2'
232
+ assert peer.dirty?
233
+ peer[:h]['key2'] = 'value2.1'
234
+ assert peer.dirty?
235
+ peer.dirty = false
236
+ peer[:h]['key2'] = nil
237
+ assert peer.dirty?
238
+ peer.dirty = false
239
+ peer[:h].delete 'key2'
240
+ assert peer.dirty?
241
+ end
242
+
243
+ def test_peer_dirty_hash2
244
+ peer = Peer.new
245
+ peer[:h] = {'key1' => C4.new(1)}
246
+ peer.dirty = false
247
+ peer[:h]['key1'] = C4.new 1
248
+ assert !peer.dirty?
249
+ peer.dirty = false
250
+ peer[:h] = {'key1' => C4.new(1)}
251
+ assert !peer.dirty?
252
+ end
253
+
254
+ def test_peer_container
255
+ a = [1]
256
+ a.extend Peer::Container
257
+ a.memorize!
258
+ assert_nil a.recall
259
+ a << 2
260
+ assert_not_nil a.recall
261
+ a.memorize!
262
+ assert_nil a.recall
263
+ a.collect! { |i| i * 2 }
264
+ assert_not_nil a.recall
265
+ assert_equal 4, a[1]
266
+ end
239
267
  end
240
- end
241
268
 
242
- class Rubernate::BaseRuntimeTest < Test::Unit::TestCase
243
- include Rubernate
244
- include FixtureClasses
245
-
246
- def setup
247
- @factory = Rubernate::Memory::Configuration.new
248
- @runtime = @factory.create
249
- Rubernate.configuration = @factory
250
- Thread.current[:on_save] = Thread.current[:on_load] = nil
251
- end
252
-
253
- def test_instantiate
254
- object = @runtime.instantiate 1, C1.name
255
- assert object
256
- assert_equal 1, object.primary_key
257
- assert_equal C1, object.class
258
- end
259
-
260
- def test_instantiate_existing
261
- o0 = @runtime.instantiate 1, C1.name
262
- o1 = @runtime.instantiate 1, C1.name
269
+ class Rubernate::BaseRuntimeTest < Test::Unit::TestCase
270
+ include Rubernate
271
+ include FixtureClasses
272
+
273
+ def setup
274
+ @factory = Rubernate::Memory::Configuration.new
275
+ @runtime = @factory.create
276
+ Rubernate.configuration = @factory
277
+ Thread.current[:on_save] = Thread.current[:on_load] = nil
278
+ end
279
+
280
+ def test_instantiate
281
+ object = @runtime.instantiate 1, C1.name
282
+ assert object
283
+ assert_equal 1, object.primary_key
284
+ assert_equal C1, object.class
285
+ end
286
+
287
+ def test_instantiate_existing
288
+ o0 = @runtime.instantiate 1, C1.name
289
+ o1 = @runtime.instantiate 1, C1.name
263
290
 
264
- assert o0.equal?(o1)
265
- assert_equal o0, o1
266
- end
291
+ assert o0.equal?(o1)
292
+ assert_equal o0, o1
293
+ end
267
294
 
268
- def test_instantiate_by_finder
269
- pk = nil
270
- Rubernate.session do
271
- o = C1.new.attach
272
- pk = o.primary_key
273
- o_ = find_by_pk pk
274
- assert_equal o, o_
275
- assert_equal o.object_id, o_.object_id
276
- o__ = find_by_query('all')[0]
277
- assert_equal o, o__
278
- assert_equal o.object_id, o__.object_id
295
+ def test_instantiate_by_finder
296
+ pk = nil
297
+ Rubernate.session do
298
+ o = C1.new.attach
299
+ pk = o.primary_key
300
+ o_ = find_by_pk pk
301
+ assert_equal o, o_
302
+ assert_equal o.object_id, o_.object_id
303
+ o__ = find_by_query('all')[0]
304
+ assert_equal o, o__
305
+ assert_equal o.object_id, o__.object_id
306
+ end
307
+ Rubernate.session do
308
+ o_ = find_by_pk pk
309
+ o__ = find_by_query('all')[0]
310
+ assert_equal o_, o__
311
+ assert_equal o_.object_id, o__.object_id
312
+ end
279
313
  end
280
- Rubernate.session do
281
- o_ = find_by_pk pk
282
- o__ = find_by_query('all')[0]
283
- assert_equal o_, o__
284
- assert_equal o_.object_id, o__.object_id
314
+
315
+ def test_instantiate_fake_class
316
+ @factory.database = {27 => ['NoSuchClass', {}]}
317
+ Rubernate.session do
318
+ o = find_by_pk 27
319
+ assert_equal DummyPersistent, o.class
320
+ assert_equal 27, o.primary_key
321
+ assert_raise(ObjectLoadError) {o.test}
322
+ end
285
323
  end
286
- end
287
324
 
288
- def test_instantiate_fake_class
289
- @factory.database = {27 => ['NoSuchClass', {}]}
290
- Rubernate.session do
291
- o = find_by_pk 27
292
- assert_equal DummyPersistent, o.class
293
- assert_equal 27, o.primary_key
294
- assert_raise(ObjectLoadError) {o.test}
325
+ def test_modified
326
+ Rubernate.session do |runtime|
327
+ assert_equal 0, runtime.modified.size
328
+ o, o.p1 = C1.new.attach, 'o.p1'
329
+ assert_equal [o], runtime.modified
330
+ end
331
+ end
332
+
333
+ def test_flush_modified_find
334
+ Rubernate.session do |runtime|
335
+ o1, o1.p1 = C1.new.attach, 'o1.p1'
336
+ assert_equal [o1], runtime.modified
337
+ runtime.find_by_query "all"
338
+ assert_equal 0, runtime.modified.size
339
+ end
340
+ end
341
+
342
+ def test_fluch_modified_close
343
+ Rubernate.session {|runtime| o, o.p1 = C1.new.attach, 'o.p1' }
344
+ Rubernate.session do |runtime|
345
+ o = * runtime.find_by_query("sql: all")
346
+ assert_equal 'o.p1', o.p1
347
+ end
348
+ end
349
+
350
+ def test_settings
351
+ assert Rubernate.settings
352
+ Rubernate.settings[:g_prop] = 'g0'
353
+ Rubernate.session do |runtime|
354
+ assert_equal 'g0', Rubernate.settings[:g_prop]
355
+ assert_equal 'g0', Rubernate.runtime.settings[:g_prop]
356
+ Rubernate.settings[:g_prop] = 'g1'
357
+ assert_equal 'g0', Rubernate.runtime.settings[:g_prop]
358
+ Rubernate.runtime.settings[:r_prop] = 'r0'
359
+ end
360
+ Rubernate.session do |runtime|
361
+ assert_equal 'g1', Rubernate.settings[:g_prop]
362
+ assert_equal 'g1', Rubernate.runtime.settings[:g_prop]
363
+ assert_nil Rubernate.runtime.settings[:r_prop]
364
+ end
365
+ end
366
+
367
+ def test_lazy_factory
368
+ Rubernate.settings[:lazy_load] = :collection
369
+ Rubernate.session do |rt|
370
+ lf = rt.lazy_factory
371
+ f1 = lf.create 1, :p
372
+ assert f1
373
+ f2 = lf.create 2, :p
374
+ f3 = lf.create 1, :p
375
+ assert_equal f1, f3
376
+ assert_not_equal f1, f2
377
+ assert f1.is_a?(ParamLazyLoader)
378
+ end
295
379
  end
296
380
  end
297
-
298
- def test_modified
299
- Rubernate.session {|runtime|
300
- assert_equal 0, runtime.modified.size
301
- o, o.p1 = C1.new.attach, 'o.p1'
302
- assert_equal [o], runtime.modified
303
- }
304
- end
305
-
306
- def test_ensure
307
- o = C1.new
308
- assert_nothing_raised() {o.p1}
309
- o, o.peer = C1.new, nil
310
- assert_raise(RuntimeError) {o.p1}
311
- o, o.peer = C1.new, Peer.new
312
- assert_nothing_raised() {o.p1}
313
- end
314
-
315
- def test_flush_modified_find
316
- Rubernate.session {|runtime|
317
- o1, o1.p1 = C1.new.attach, 'o1.p1'
318
- assert_equal [o1], runtime.modified
319
- runtime.find_by_query "all"
320
- assert_equal 0, runtime.modified.size
321
- }
322
- end
323
-
324
- def test_fluch_modified_close
325
- Rubernate.session {|runtime| o, o.p1 = C1.new.attach, 'o.p1' }
326
- Rubernate.session {|runtime|
327
- o = * runtime.find_by_query("sql: all")
328
- assert_equal 'o.p1', o.p1
329
- }
330
- end
331
- end
381
+ end