Rubernate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,188 @@
1
+ $:.unshift(File.expand_path('../../..', __FILE__)) unless
2
+ $:.include?(File.expand_path('../../..', __FILE__))
3
+
4
+ require 'rubernate/fixtures'
5
+
6
+ class Rubernate::Memory::RuntimeTest < Test::Unit::TestCase
7
+ include Rubernate
8
+ include Memory
9
+ include FixtureClasses
10
+
11
+ def setup
12
+ @factory = RuntimeFactory.new
13
+ @runtime = @factory.create
14
+ Rubernate.runtime_factory = @factory
15
+ end
16
+
17
+ # Runtime Interface Tests
18
+ def test_integration
19
+ k1, k2 = nil
20
+ Rubernate.session {|runtime|
21
+ o1, o2 = C1.new.attach, C2.new.attach
22
+ o1.p1, o2.p1 = 'o1.p1', o1
23
+ k1, k2 = o1.primary_key, o2.primary_key
24
+ }
25
+ Rubernate.session {|runtime|
26
+ o1, o2 = runtime.find_by_pk(k1), runtime.find_by_pk(k2)
27
+ assert_equal C1, o1.class
28
+ assert_equal 'o1.p1', o1.p1
29
+ assert_equal 'o1.p1', o2.p1.p1
30
+ }
31
+ end
32
+
33
+ # Interface Tests
34
+ def test_load_by_pk
35
+ assert_nil @runtime.load_by_pk(1)
36
+ o, o.peer = C4.new(1), Peer.new
37
+ @runtime.save o
38
+ o = @runtime.load_by_pk(1)
39
+ assert_equal C4, o.class
40
+ assert_equal 1, o.primary_key
41
+ assert_nil @runtime.load_by_pk(2)
42
+ end
43
+
44
+ def test_load_by_query_all
45
+ o1, o1.peer, o1.p1 = C1.new, Peer.new, 'o1.p1'
46
+ o2, o2.peer, o2.p1, o2.p2 = C2.new, Peer.new, 'o2.p1', o1
47
+ @runtime.create o1
48
+ @runtime.create o2
49
+ result = @runtime.load_by_query "all"
50
+ assert_equal 2, result.size
51
+ l1 = result.find {|item| item.class == C1}
52
+ l2 = result.find {|item| item.class == C2}
53
+ assert_not_nil l1
54
+ assert_not_nil l2
55
+ assert_equal o1.primary_key, l1.primary_key
56
+ assert_equal o2.primary_key, l2.primary_key
57
+ assert_equal 'o1.p1', l1.p1
58
+ assert_equal 'o2.p1', l2.p1
59
+ assert_equal l1, l2.p2
60
+ assert_equal 'o1.p1', l2.p2.p1
61
+ assert l1.equal?(l2.p2)
62
+ end
63
+
64
+ def test_create
65
+ o, o.peer = C2.new, Peer.new
66
+ assert_nil o.primary_key
67
+ @runtime.create o
68
+ assert_not_nil o.primary_key
69
+ assert_not_nil o.peer
70
+ end
71
+
72
+ def test_create_find
73
+ o, o.p1 = C2.new, 'o.p1'
74
+ @runtime.create o
75
+ o = @runtime.find_by_pk o.primary_key
76
+ assert_equal 'o.p1', o.p1
77
+ end
78
+
79
+ def test_load_created
80
+ o, o.peer = C2.new, Peer.new
81
+ @runtime.create o
82
+ o = @runtime.load_by_pk o.primary_key
83
+ assert_not_nil o
84
+ assert !o.peer.dirty?
85
+ assert !o.dirty?
86
+ end
87
+
88
+ def test_create_dirty
89
+ o1, o1.peer = C2.new, Peer.new
90
+ @runtime.create o1
91
+ assert_not_nil o1.peer
92
+ assert !o1.peer.dirty?
93
+ end
94
+
95
+ def test_save
96
+ o, o.peer = C4.new(1), Peer.new
97
+ o.p1, o.p2 = C4.new(2), {'k1' => C4.new(3)}
98
+ @runtime.save o
99
+ o = @runtime.load_by_pk 1
100
+ assert_not_nil o
101
+ assert_not_nil o.peer
102
+ assert_equal 2, o.peer.size
103
+ assert_equal 2, o.p1.primary_key
104
+ assert_equal 3, o.p2['k1'].primary_key
105
+ end
106
+
107
+ def test_delete
108
+ o, o.peer = C1.new, Peer.new
109
+ @runtime.create o
110
+ pk = o.primary_key
111
+ @runtime.delete o
112
+ assert_nil @runtime.load_by_pk(pk)
113
+ end
114
+
115
+
116
+ # Internal Tests
117
+ def test_reference_eq
118
+ r1, r2, r3 = ref(1, C1), ref(1, C1), ref(1, C2)
119
+ assert_equal r1, r1
120
+ assert_equal r1, r2
121
+ assert_not_equal r1, r3
122
+ end
123
+
124
+ def test_save_peer
125
+ obj, obj.peer = C4.new(1), Peer.new
126
+ obj.p1, obj.p2 = 2, [C4.new(2)]
127
+ data = @runtime.save_peer obj.peer
128
+ assert_equal({:p1 => 2, :p2 => [ref(2, C4)]}, data)
129
+ end
130
+
131
+ def test_save_param_simple
132
+ p = @runtime.save_param "test"
133
+ assert_equal "test", p
134
+
135
+ p = @runtime.save_param 1
136
+ assert_equal 1, p
137
+
138
+ p = @runtime.save_param C4.new(3)
139
+ assert_equal Reference, p.class
140
+ assert_equal 3, p.primary_key
141
+ assert_equal C4, p.object_class
142
+ end
143
+
144
+ def test_save_param_array
145
+ p = @runtime.save_param [C4.new(1), C4.new(2)]
146
+ assert_equal [ref(1, C4), ref(2, C4)], p
147
+ p = @runtime.save_param []
148
+ assert_equal [], p
149
+ end
150
+
151
+ def test_save_param_hash
152
+ p = @runtime.save_param('k1' => C4.new(1), 2 => C4.new(2))
153
+ assert_equal({'k1' => ref(1, C4), 2 => ref(2, C4)}, p)
154
+ assert_not_equal({'k1' => ref(2, C4), 2 => ref(2, C4)}, p)
155
+ p = @runtime.save_param({})
156
+ assert_equal({}, p)
157
+ end
158
+
159
+ def test_load_peer_simple
160
+ peer = @runtime.load_peer(:p1 => 2)
161
+ assert_equal 1, peer.size
162
+ assert_equal 2, peer[:p1]
163
+ end
164
+
165
+ def test_load_peer_hash
166
+ peer = @runtime.load_peer(:p1 => 2, :p2 => {'key', ref(3, C1)})
167
+ assert_equal 1, peer[:p2].size
168
+ assert_equal C1, peer[:p2]['key'].class
169
+ assert_equal 3, peer[:p2]['key'].primary_key
170
+ end
171
+
172
+ def test_load_peer_array
173
+ peer = @runtime.load_peer(:p1 => 2, :p2 => [ref(3, C1)])
174
+ assert_equal 1, peer[:p2].size
175
+ assert_equal C1, peer[:p2][0].class
176
+ assert_equal 3, peer[:p2][0].primary_key
177
+ end
178
+
179
+ def test_find_by_pk_dirty
180
+ pk = nil
181
+ Rubernate.session {o = C1.new.attach; o.p1 = 'v'; pk = o.primary_key}
182
+ Rubernate.session {o = find_by_pk pk; assert !o.dirty?; assert_equal 'v', o.p1}
183
+ end
184
+
185
+ def ref pk, klass
186
+ Reference.new pk, klass
187
+ end
188
+ end
@@ -0,0 +1,176 @@
1
+ $:.unshift(File.expand_path('../..', __FILE__)) unless
2
+ $:.include?(File.expand_path('../..', __FILE__))
3
+
4
+ require 'rubernate/fixtures'
5
+
6
+ class Rubernate::QueriesGenericTest < Test::Unit::TestCase
7
+ include Rubernate::Queries
8
+ include FixtureClasses
9
+
10
+ def setup
11
+ @factory = Factory.new
12
+ end
13
+
14
+ def query *q_text, &q_block
15
+ if block_given?
16
+ @factory.query(&q_block)
17
+ else
18
+ @factory.query q_text[0]
19
+ end
20
+ end
21
+
22
+ def once str, substr
23
+ lidx, ridx = str.index(substr), str.rindex(substr)
24
+ lidx and lidx == ridx
25
+ end
26
+
27
+ def assert_once string, tokens
28
+ tokens = [tokens] unless tokens.is_a? Array
29
+ for token in tokens
30
+ assert once(string, token), "'#{token}' must occurse only once in \n'#{string}'"
31
+ end
32
+ end
33
+
34
+ def test_query_simplest
35
+ q = query 'Select :o; Where o.p1.int == 1'
36
+ sql = q.to_sql.downcase
37
+ assert_once sql, [ 'select o_.* from', 'r_objects o_', 'r_params o_p1',
38
+ 'o_.object_pk = o_p1.object_pk', 'o_p1.name = \'p1\'']
39
+ end
40
+
41
+ def test_query_join_by_int
42
+ q = query "Select :o, :p; Where(o.p1.int == p.p2.int)"
43
+ sql = q.to_sql.downcase
44
+ assert_once sql, [ 'r_objects p_', 'r_params p_p2', 'r_objects o_', 'r_params o_p1',
45
+ 'o_.object_pk = o_p1.object_pk', 'p_.object_pk = p_p2.object_pk',
46
+ 'o_p1.int_value = p_p2.int_value', 'o_p1.name = \'p1\'',
47
+ 'p_p2.name = \'p2\'' ]
48
+ end
49
+
50
+ def test_query_filter_by_int
51
+ q = query {Select :o; Where(o.p1.int == 1)}
52
+ sql = q.to_sql.downcase
53
+ assert_once sql, ['o_p1.int_value = 1', 'o_p1.name = \'p1\'']
54
+ end
55
+
56
+ def test_query_filter_by_nil
57
+ q = query 'Select :o; Where(o.p1.int.is_nil)'
58
+ sql = q.to_sql.downcase
59
+ assert_once sql, ['o_p1.int_value is null', 'o_p1.name = \'p1\'']
60
+ q = query 'Select :o; Where(o.p1.int.is_not_nil)'
61
+ sql = q.to_sql.downcase
62
+ assert_once sql, ['o_p1.int_value is not null']
63
+ end
64
+
65
+ def test_query_and
66
+ q = query 'Select :o; Where And(o.p1.int == 1, o.p2.int == 2)'
67
+ sql = q.to_sql.downcase
68
+ assert_once sql, ['o_p1.int_value = 1', 'o_.object_pk = o_p2.object_pk']
69
+ end
70
+
71
+ def test_query_less_greater
72
+ q = query 'Select :o; Where And(o.p1.int < 1, o.p2.int > 2)'
73
+ sql = q.to_sql.downcase
74
+ assert_once sql, ['o_p1.int_value < 1', 'o_p2.int_value > 2']
75
+ end
76
+
77
+ def test_query_or
78
+ q = query 'Select :o; Where (Or o.p1.int == 1, o.p2.int == 2)'
79
+ sql = q.to_sql.downcase
80
+ assert_once sql, ['o_p1.int_value = 1', 'o_p1.int_value = 1', 'or']
81
+ end
82
+
83
+ def test_query_and_or
84
+ q = query 'Select :o; Where Or((And o.p1.int == 1, o.p2.int == 2), (o.p1.int == 3))'
85
+ sql = q.to_sql.downcase
86
+ assert_once sql, ['o_p1.int_value = 1', 'o_p2.int_value = 2', 'o_p1.int_value = 3', 'or']
87
+ end
88
+
89
+ def test_query_ref_equality
90
+ q = query 'Select :o, :t; Where Or(o.p1 == t, t.p2.int > 10)'
91
+ sql = q.to_sql.downcase
92
+ assert_once sql, 'o_p1.ref_value = t_.object_pk'
93
+ end
94
+
95
+ def test_query_is_int
96
+ q = query {Select :o; Where o.p1.is_int}
97
+ sql = q.to_sql.downcase
98
+ assert_once sql, 'o_p1.flags = 1'
99
+ end
100
+
101
+ def test_array_index
102
+ q = query {Select :o, :t; Where(o.p[3] == t)}
103
+ sql = q.to_sql.downcase
104
+ assert_once sql, ['o_.object_pk = o_p.object_pk', 'o_p.int_value = 3',
105
+ 'o_p.ref_value = t_.object_pk']
106
+ end
107
+
108
+ def test_array_param_index
109
+ q = query {Select :o, :t; Where(o.p[:index] == t)}
110
+ sql = q.to_sql.downcase
111
+ assert_once sql, ['o_.object_pk = o_p.object_pk', 'o_p.int_value = ?',
112
+ 'o_p.ref_value = t_.object_pk']
113
+ end
114
+
115
+ def test_not_expr
116
+ q = query {Select :o; Where(Not(o.p.int == 1))}
117
+ sql = q.to_sql.downcase
118
+ assert_once sql, 'not (o_p.int_value = 1)'
119
+ end
120
+
121
+ def test_markers
122
+ q = query {Select :o; Where(o.p1.int == :v1, o.p2 == :r2)}
123
+ sql = q.to_sql.downcase
124
+ assert_once sql, ['o_p1.int_value = ?', 'o_p2.ref_value = ?']
125
+ assert_equal [:v1, :r2], q.markers
126
+ end
127
+
128
+ def test_no_markers
129
+ q = query {Select :o; Where(o.p1.int == 1)}
130
+ assert_equal [], q.markers
131
+ end
132
+
133
+ def test_class_equal
134
+ q = query {Select :o; Where(o.klass == C1)}
135
+ sql = q.to_sql
136
+ assert_once sql, ['r_objects o', 'o_.object_class = \'FixtureClasses::C1\'']
137
+ end
138
+
139
+ def test_expr_in
140
+ q = query {Select :o; Where(In(o.p1.int, [1, 2, 3]))}
141
+ sql = q.to_sql.downcase
142
+ assert_once sql, 'o_p1.int_value in (1, 2, 3)'
143
+ end
144
+
145
+ def test_order_by
146
+ q = query {Select :o; Where o.klass == C1; OrderBy o.p1.int}
147
+ sql = q.to_sql.downcase
148
+ assert_once sql, 'order by o_p1.int_value'
149
+ end
150
+
151
+ def test_in_subclasses
152
+ q = query 'Select :o; Where In(o.klass, FixtureClasses::C1.subclasses)'
153
+ assert_once q.to_sql, %w{o_.object_class FixtureClasses::C2 FixtureClasses::C4}
154
+ end
155
+
156
+ def test_derived
157
+ q = query 'Select :o; Where o.derived(FixtureClasses::C1)'
158
+ q.to_sql
159
+ assert_once q.to_sql, %w{FixtureClasses::C1 FixtureClasses::C2 FixtureClasses::C4}
160
+
161
+ q = query 'Select :o; Where o.derived(FixtureClasses::C4)'
162
+ assert_once q.to_sql, %w{FixtureClasses::C4}
163
+ end
164
+
165
+ def test_param_name
166
+ q = query {Select :o; Where o.name.str == :name}
167
+ assert_once q.to_sql, ["o_name.name = 'name'", 'o_name.str_value = ?']
168
+ end
169
+
170
+ def test_eq_equivalence
171
+ q0 = query {Select :o; Where o.p1 == :ref}
172
+ q1 = query {Select :o; Where Eq(o.p1, :ref)}
173
+ assert_equal q0.to_sql, q1.to_sql
174
+ assert_equal q0.markers, q1.markers
175
+ end
176
+ end
@@ -0,0 +1,326 @@
1
+ $:.unshift(File.expand_path('../..', __FILE__)) unless
2
+ $:.include?(File.expand_path('../..', __FILE__))
3
+
4
+ require 'rubernate/fixtures'
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::RuntimeFactory.new
18
+ @runtime = @factory.create
19
+ Rubernate.runtime_factory = @factory
20
+ Thread.current[:on_save] = Thread.current[:on_load] = nil
21
+ end
22
+
23
+ def test_include
24
+ assert !C0.include?(Entity)
25
+ assert C1.include?(Entity)
26
+ assert C2.include?(Entity)
27
+ assert C3.include?(Entity)
28
+ assert !C0.new.kind_of?(Entity)
29
+ assert C1.new.kind_of?(Entity)
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=)
40
+ 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
64
+ def runtime.close
65
+ Thread.current[:close_test] = 'not_passed'
66
+ end
67
+ def runtime.failed
68
+ Thread.current[:failed_test] = 'passed'
69
+ end
70
+ raise Rubernate::ObjectNotFoundException.new(1)
71
+ }
72
+ }
73
+ assert_equal 'passed', Thread.current[:close_test]
74
+ assert_equal 'passed', Thread.current[:failed_test]
75
+ assert_nil 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
81
+
82
+ @runtime.create o1
83
+ @runtime.create o2
84
+
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
97
+
98
+ @runtime.create o1
99
+ @runtime.create o2
100
+
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|
125
+ 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
159
+
160
+ def test_attach_remove # TODO:...
161
+ Rubernate.session {
162
+ o = C1.new.attach
163
+ o.remove!
164
+ }
165
+ end
166
+ end
167
+
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?
175
+
176
+ p[:p1] = 'test'
177
+ assert p.dirty?
178
+
179
+ p.dirty = false
180
+ assert_equal false, p.dirty?
181
+
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]
239
+ end
240
+ end
241
+
242
+ class Rubernate::BaseRuntimeTest < Test::Unit::TestCase
243
+ include Rubernate
244
+ include FixtureClasses
245
+
246
+ def setup
247
+ @factory = Rubernate::Memory::RuntimeFactory.new
248
+ @runtime = @factory.create
249
+ Rubernate.runtime_factory = @factory
250
+ Thread.current[:on_save] = Thread.current[:on_load] = nil
251
+ end
252
+
253
+ def test_instantiate
254
+ object = @runtime.instantiate 1, C1
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
262
+ o1 = @runtime.instantiate 1, C1
263
+
264
+ assert o0.equal?(o1)
265
+ assert_equal o0, o1
266
+ end
267
+
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
279
+ 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
285
+ end
286
+ end
287
+
288
+ def test_instantiate_invalid_class
289
+ @runtime.instantiate 1, C1
290
+ assert_raise(RuntimeError) { @runtime.instantiate 1, C2 }
291
+ end
292
+
293
+ def test_modified
294
+ Rubernate.session {|runtime|
295
+ assert_equal 0, runtime.modified.size
296
+ o, o.p1 = C1.new.attach, 'o.p1'
297
+ assert_equal [o], runtime.modified
298
+ }
299
+ end
300
+
301
+ def test_ensure
302
+ o = C1.new
303
+ assert_nothing_raised() {o.p1}
304
+ o, o.peer = C1.new, nil
305
+ assert_raise(NoMethodError) {o.p1}
306
+ o, o.peer = C1.new, Peer.new
307
+ assert_nothing_raised() {o.p1}
308
+ end
309
+
310
+ def test_flush_modified_find
311
+ Rubernate.session {|runtime|
312
+ o1, o1.p1 = C1.new.attach, 'o1.p1'
313
+ assert_equal [o1], runtime.modified
314
+ runtime.find_by_query "all"
315
+ assert_equal 0, runtime.modified.size
316
+ }
317
+ end
318
+
319
+ def test_fluch_modified_close
320
+ Rubernate.session {|runtime| o, o.p1 = C1.new.attach, 'o.p1' }
321
+ Rubernate.session {|runtime|
322
+ o = * runtime.find_by_query("sql: all")
323
+ assert_equal 'o.p1', o.p1
324
+ }
325
+ end
326
+ end