Rubernate 0.1.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.
@@ -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