unageanu-javaclass 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/ChangeLog +0 -0
  2. data/README +4 -0
  3. data/lib/javaclass/accessflag.rb +279 -0
  4. data/lib/javaclass/attribute.rb +1061 -0
  5. data/lib/javaclass/base.rb +369 -0
  6. data/lib/javaclass/class.rb +282 -0
  7. data/lib/javaclass/constant.rb +522 -0
  8. data/lib/javaclass/member.rb +194 -0
  9. data/lib/javaclass/reader.rb +449 -0
  10. data/lib/javaclass.rb +8 -0
  11. data/sample/class_list.rb +22 -0
  12. data/sample/create_assert.rb +69 -0
  13. data/sample/java_class/HelloWorld.class +0 -0
  14. data/sample/java_class/com/example/Constants.class +0 -0
  15. data/sample/java_class/com/example/Deprecated.class +0 -0
  16. data/sample/java_class/com/example/InnerClass$1.class +0 -0
  17. data/sample/java_class/com/example/InnerClass$BasicInnerClass.class +0 -0
  18. data/sample/java_class/com/example/InnerClass$StaticInnerClass$InnerInnerClass.class +0 -0
  19. data/sample/java_class/com/example/InnerClass$StaticInnerClass$StaticInnerInnerClass.class +0 -0
  20. data/sample/java_class/com/example/InnerClass$StaticInnerClass.class +0 -0
  21. data/sample/java_class/com/example/InnerClass.class +0 -0
  22. data/sample/java_class/com/example/InnerClassImpl$1.class +0 -0
  23. data/sample/java_class/com/example/InnerClassImpl$1MethodInnerClass.class +0 -0
  24. data/sample/java_class/com/example/InnerClassImpl$2.class +0 -0
  25. data/sample/java_class/com/example/InnerClassImpl$BasicInnerClass2.class +0 -0
  26. data/sample/java_class/com/example/InnerClassImpl$StaticInnerClass2.class +0 -0
  27. data/sample/java_class/com/example/InnerClassImpl.class +0 -0
  28. data/sample/java_class/com/example/Kitten.class +0 -0
  29. data/sample/java_class/com/example/ThrowsException.class +0 -0
  30. data/sample/java_class/com/example/annotation/Annotated.class +0 -0
  31. data/sample/java_class/com/example/annotation/AnnotatedMethod$A.class +0 -0
  32. data/sample/java_class/com/example/annotation/AnnotatedMethod$B.class +0 -0
  33. data/sample/java_class/com/example/annotation/AnnotatedMethod$C.class +0 -0
  34. data/sample/java_class/com/example/annotation/AnnotatedMethod.class +0 -0
  35. data/sample/java_class/com/example/annotation/ClassAnnotationA.class +0 -0
  36. data/sample/java_class/com/example/annotation/HasDefaultValue.class +0 -0
  37. data/sample/java_class/com/example/annotation/RuntimeAnnotationA.class +0 -0
  38. data/sample/java_class/com/example/annotation/RuntimeAnnotationB.class +0 -0
  39. data/sample/java_class/com/example/annotation/RuntimeAnnotationC.class +0 -0
  40. data/sample/java_class/com/example/annotation/SourceAnnotationA.class +0 -0
  41. data/sample/java_class/com/example/types/TypeVariables.class +0 -0
  42. data/sample/java_src/HelloWorld.java +6 -0
  43. data/sample/java_src/com/example/Constants.java +45 -0
  44. data/sample/java_src/com/example/Deprecated.java +16 -0
  45. data/sample/java_src/com/example/InnerClass.java +23 -0
  46. data/sample/java_src/com/example/InnerClassImpl.java +31 -0
  47. data/sample/java_src/com/example/Kitten.java +78 -0
  48. data/sample/java_src/com/example/ThrowsException.java +12 -0
  49. data/sample/java_src/com/example/annotation/Annotated.java +47 -0
  50. data/sample/java_src/com/example/annotation/AnnotatedMethod.java +18 -0
  51. data/sample/java_src/com/example/annotation/ClassAnnotationA.java +10 -0
  52. data/sample/java_src/com/example/annotation/HasDefaultValue.java +10 -0
  53. data/sample/java_src/com/example/annotation/RuntimeAnnotationA.java +15 -0
  54. data/sample/java_src/com/example/annotation/RuntimeAnnotationB.java +10 -0
  55. data/sample/java_src/com/example/annotation/RuntimeAnnotationC.java +8 -0
  56. data/sample/java_src/com/example/annotation/SourceAnnotationA.java +10 -0
  57. data/sample/java_src/com/example/types/TypeVariables.java +19 -0
  58. data/sample/sample.rb +27 -0
  59. data/test/all-tests.rb +32 -0
  60. data/test/java_class/com/example/TestClass1$1.class +0 -0
  61. data/test/java_class/com/example/TestClass1$Hoo.class +0 -0
  62. data/test/java_class/com/example/TestClass1$Var.class +0 -0
  63. data/test/java_class/com/example/TestClass1.class +0 -0
  64. data/test/java_src/com/example/TestClass1.java +28 -0
  65. data/test/test_access_flag.rb +205 -0
  66. data/test/test_attribute.rb +955 -0
  67. data/test/test_class.rb +90 -0
  68. data/test/test_constant.rb +830 -0
  69. data/test/test_member.rb +282 -0
  70. data/test/test_util.rb +20 -0
  71. metadata +157 -0
@@ -0,0 +1,830 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $: << "../lib"
4
+
5
+ require "test/unit"
6
+ require "javaclass"
7
+ require "test_util"
8
+
9
+ require "javaclass"
10
+
11
+ module JavaClass
12
+
13
+ #
14
+ #===UTF8Constantのテスト
15
+ #
16
+ class UTF8ConstantTest < Test::Unit::TestCase
17
+
18
+ def setup
19
+ @java_class = JavaClass::Class.new
20
+ end
21
+
22
+ def teardown
23
+ end
24
+
25
+ #
26
+ #=== 基本動作のテスト
27
+ #
28
+ def test_basic
29
+
30
+ c = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "abc" )
31
+ assert_equal( c.bytes, "abc" )
32
+ assert_equal( c.to_s, "\"abc\"" )
33
+ assert_equal( c.to_bytes, [0x01, 0x00, 0x03, 0x61, 0x62, 0x63] )
34
+ assert_equal( c.dump, "01000361 6263" )
35
+
36
+ # バイト配列に変換して再構築
37
+ c2 = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
38
+ assert_equal( c2.bytes, "abc" )
39
+ assert_equal( c2.to_s, "\"abc\"" )
40
+ assert_equal( c2.to_bytes, [0x01, 0x00, 0x03, 0x61, 0x62, 0x63] )
41
+ assert_equal( c2.dump, "01000361 6263" )
42
+
43
+ c.bytes = "bbbbb"
44
+ assert_equal( c.bytes, "bbbbb" )
45
+ assert_equal( c.to_s, "\"bbbbb\"" )
46
+ assert_equal( c.to_bytes, [0x01, 0x00, 0x05, 0x62, 0x62, 0x62, 0x62, 0x62] )
47
+ assert_equal( c.dump, "01000562 62626262" )
48
+
49
+ # 日本語を含む
50
+ c.bytes = "あいう"
51
+ assert_equal( c.bytes, "あいう" )
52
+ assert_equal( c.to_s, "\"あいう\"" )
53
+ assert_equal( c.to_bytes, [0x01, 0x00, 0x09, 0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84, 0xe3, 0x81, 0x86] )
54
+ assert_equal( c.dump, "010009E3 8182E381 84E38186" )
55
+
56
+ c2 = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
57
+ assert_equal( c2.bytes, "あいう" )
58
+ assert_equal( c2.to_s, "\"あいう\"" )
59
+ assert_equal( c2.to_bytes, [0x01, 0x00, 0x09, 0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84, 0xe3, 0x81, 0x86] )
60
+ assert_equal( c2.dump, "010009E3 8182E381 84E38186" )
61
+
62
+ end
63
+
64
+ #
65
+ #=== equalsのテスト。
66
+ #
67
+ def test_equals()
68
+ c = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "abc" )
69
+ c2 = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "abb" )
70
+ c3 = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
71
+ c4 = UTF8Constant.new( @java_class, Constant::CONSTANT_Class, "abc" )
72
+
73
+ assert_not_equal( c, c2 )
74
+ assert_equal( c, c3 )
75
+ assert_not_equal( c2, c3 )
76
+ assert_not_equal( c, c4 )
77
+ end
78
+
79
+ end
80
+
81
+ #
82
+ #==IntegerConstantのテスト
83
+ #
84
+ class IntegerConstantTest < Test::Unit::TestCase
85
+
86
+ def setup
87
+ @java_class = JavaClass::Class.new
88
+ end
89
+
90
+ def teardown
91
+ end
92
+
93
+ #
94
+ #=== 基本動作のテスト
95
+ #
96
+ def test_basic
97
+
98
+ # 正の整数
99
+ c = IntegerConstant.new( @java_class, Constant::CONSTANT_Integer, 100 )
100
+ assert_equal( c.bytes, 100 )
101
+ assert_equal( c.to_s, "100" )
102
+ assert_equal( c.to_bytes, [0x03, 0x00, 0x00, 0x00, 0x64] )
103
+ assert_equal( c.dump, "03000000 64" )
104
+
105
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
106
+ assert_equal( c.bytes, 100 )
107
+ assert_equal( c.to_s, "100" )
108
+ assert_equal( c.to_bytes, [0x03, 0x00, 0x00, 0x00, 0x64] )
109
+ assert_equal( c.dump, "03000000 64" )
110
+
111
+ # 負の整数
112
+ c.bytes = -100
113
+ assert_equal( c.bytes, -100 )
114
+ assert_equal( c.to_s, "-100" )
115
+ assert_equal( c.to_bytes, [0x03, 0xFF, 0xFF, 0xFF, 0x9C] )
116
+ assert_equal( c.dump, "03FFFFFF 9C" )
117
+
118
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
119
+ assert_equal( c.bytes, -100 )
120
+ assert_equal( c.to_s, "-100" )
121
+ assert_equal( c.to_bytes, [0x03, 0xFF, 0xFF, 0xFF, 0x9C] )
122
+ assert_equal( c.dump, "03FFFFFF 9C" )
123
+
124
+ # 最大値
125
+ c.bytes = 2147483647
126
+ assert_equal( c.bytes, 2147483647 )
127
+ assert_equal( c.to_s, "2147483647" )
128
+ assert_equal( c.to_bytes, [0x03, 0x7F, 0xFF, 0xFF, 0xFF] )
129
+ assert_equal( c.dump, "037FFFFF FF" )
130
+
131
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
132
+ assert_equal( c.bytes, 2147483647 )
133
+ assert_equal( c.to_s, "2147483647" )
134
+ assert_equal( c.to_bytes, [0x03, 0x7F, 0xFF, 0xFF, 0xFF] )
135
+ assert_equal( c.dump, "037FFFFF FF" )
136
+
137
+ # 最小値
138
+ c.bytes = -2147483648
139
+ assert_equal( c.bytes, -2147483648 )
140
+ assert_equal( c.to_s, "-2147483648" )
141
+ assert_equal( c.to_bytes, [0x03, 0x80, 0x00, 0x00, 0x00] )
142
+ assert_equal( c.dump, "03800000 00" )
143
+
144
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
145
+ assert_equal( c.bytes, -2147483648 )
146
+ assert_equal( c.to_s, "-2147483648" )
147
+ assert_equal( c.to_bytes, [0x03, 0x80, 0x00, 0x00, 0x00] )
148
+ assert_equal( c.dump, "03800000 00" )
149
+
150
+ # 0
151
+ c.bytes = 0
152
+ assert_equal( c.bytes, 0 )
153
+ assert_equal( c.to_s, "0" )
154
+ assert_equal( c.to_bytes, [0x03, 0x00, 0x00, 0x00, 0x00] )
155
+ assert_equal( c.dump, "03000000 00" )
156
+
157
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
158
+ assert_equal( c.bytes, 0 )
159
+ assert_equal( c.to_s, "0" )
160
+ assert_equal( c.to_bytes, [0x03, 0x00, 0x00, 0x00, 0x00] )
161
+ assert_equal( c.dump, "03000000 00" )
162
+
163
+ end
164
+
165
+ #
166
+ #=== 閾値チェックのテスト
167
+ #
168
+ def test_range_error
169
+ [2147483648, -2147483649].each {|i|
170
+ JavaClass::assert_range_error {
171
+ c = IntegerConstant.new( @java_class, Constant::CONSTANT_Integer, 0 )
172
+ c.bytes = i
173
+ }
174
+ }
175
+ end
176
+
177
+ end
178
+
179
+ #
180
+ #==LongConstantのテスト
181
+ #
182
+ class LongConstantTest < Test::Unit::TestCase
183
+
184
+ def setup
185
+ @java_class = JavaClass::Class.new
186
+ end
187
+
188
+ def teardown
189
+ end
190
+
191
+ #
192
+ #=== 基本動作のテスト
193
+ #
194
+ def test_basic
195
+
196
+ # 正の整数
197
+ c = LongConstant.new( @java_class, Constant::CONSTANT_Long, 100 )
198
+ assert_equal( c.bytes, 100 )
199
+ assert_equal( c.to_s, "100L" )
200
+ assert_equal( c.to_bytes, [0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64] )
201
+ assert_equal( c.dump, "05000000 00000000 64" )
202
+
203
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
204
+ assert_equal( c.bytes, 100 )
205
+ assert_equal( c.to_s, "100L" )
206
+ assert_equal( c.to_bytes, [0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64] )
207
+ assert_equal( c.dump, "05000000 00000000 64" )
208
+
209
+ # 負の整数
210
+ c.bytes = -100
211
+ assert_equal( c.bytes, -100 )
212
+ assert_equal( c.to_s, "-100L" )
213
+ assert_equal( c.to_bytes, [0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C] )
214
+ assert_equal( c.dump, "05FFFFFF FFFFFFFF 9C" )
215
+
216
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
217
+ assert_equal( c.bytes, -100 )
218
+ assert_equal( c.to_s, "-100L" )
219
+ assert_equal( c.to_bytes, [0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C] )
220
+ assert_equal( c.dump, "05FFFFFF FFFFFFFF 9C" )
221
+
222
+ # 最大値
223
+ c.bytes = 9223372036854775807
224
+ assert_equal( c.bytes, 9223372036854775807 )
225
+ assert_equal( c.to_s, "9223372036854775807L" )
226
+ assert_equal( c.to_bytes, [0x05, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] )
227
+ assert_equal( c.dump, "057FFFFF FFFFFFFF FF" )
228
+
229
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
230
+ assert_equal( c.bytes, 9223372036854775807 )
231
+ assert_equal( c.to_s, "9223372036854775807L" )
232
+ assert_equal( c.to_bytes, [0x05, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] )
233
+ assert_equal( c.dump, "057FFFFF FFFFFFFF FF" )
234
+
235
+ # 最小値
236
+ c.bytes = -9223372036854775808
237
+ assert_equal( c.bytes, -9223372036854775808 )
238
+ assert_equal( c.to_s, "-9223372036854775808L" )
239
+ assert_equal( c.to_bytes, [0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
240
+ assert_equal( c.dump, "05800000 00000000 00" )
241
+
242
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
243
+ assert_equal( c.bytes, -9223372036854775808 )
244
+ assert_equal( c.to_s, "-9223372036854775808L" )
245
+ assert_equal( c.to_bytes, [0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
246
+ assert_equal( c.dump, "05800000 00000000 00" )
247
+
248
+ # 0
249
+ c.bytes = 0
250
+ assert_equal( c.bytes, 0 )
251
+ assert_equal( c.to_s, "0L" )
252
+ assert_equal( c.to_bytes, [0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
253
+ assert_equal( c.dump, "05000000 00000000 00" )
254
+
255
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
256
+ assert_equal( c.bytes, 0 )
257
+ assert_equal( c.to_s, "0L" )
258
+ assert_equal( c.to_bytes, [0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
259
+ assert_equal( c.dump, "05000000 00000000 00" )
260
+
261
+ end
262
+
263
+ #
264
+ #=== 閾値チェックのテスト
265
+ #
266
+ def test_range_error
267
+ [9223372036854775808, -9223372036854775809].each {|i|
268
+ JavaClass::assert_range_error {
269
+ c = LongConstant.new( @java_class, Constant::CONSTANT_Long, 0 )
270
+ c.bytes = i
271
+ }
272
+ }
273
+ end
274
+
275
+ end
276
+
277
+ #
278
+ #==FloatConstantのテスト
279
+ #
280
+ class FloatConstantTest < Test::Unit::TestCase
281
+
282
+ def setup
283
+ @java_class = JavaClass::Class.new
284
+ end
285
+
286
+ def teardown
287
+ end
288
+
289
+ #
290
+ #=== 基本動作のテスト
291
+ #
292
+ def test_basic
293
+
294
+ # 正の数
295
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0x41840000 )
296
+ assert_equal( c.bytes.to_s, "16.5" )
297
+ assert_equal( c.to_s, "16.5F" )
298
+ assert_equal( c.to_bytes, [0x04, 0x41, 0x84, 0x00, 0x00] )
299
+ assert_equal( c.dump, "04418400 00" )
300
+
301
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
302
+ assert_equal( c.bytes.to_s, "16.5" )
303
+ assert_equal( c.to_s, "16.5F" )
304
+ assert_equal( c.to_bytes, [0x04, 0x41, 0x84, 0x00, 0x00] )
305
+ assert_equal( c.dump, "04418400 00" )
306
+
307
+ # 負の数
308
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0xC1840000 )
309
+ assert_equal( c.bytes.to_s, "-16.5" )
310
+ assert_equal( c.to_s, "-16.5F" )
311
+ assert_equal( c.to_bytes, [0x04, 0xC1, 0x84, 0x00, 0x00] )
312
+ assert_equal( c.dump, "04C18400 00" )
313
+
314
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
315
+ assert_equal( c.bytes.to_s, "-16.5" )
316
+ assert_equal( c.to_s, "-16.5F" )
317
+ assert_equal( c.to_bytes, [0x04, 0xC1, 0x84, 0x00, 0x00] )
318
+ assert_equal( c.dump, "04C18400 00" )
319
+
320
+ # 0
321
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0x00000000 )
322
+ assert_equal( c.bytes.to_s, "0.0" )
323
+ assert_equal( c.to_s, "0.0F" )
324
+ assert_equal( c.to_bytes, [0x04, 0x00, 0x00, 0x00, 0x00] )
325
+ assert_equal( c.dump, "04000000 00" )
326
+
327
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
328
+ assert_equal( c.bytes.to_s, "0.0" )
329
+ assert_equal( c.to_s, "0.0F" )
330
+ assert_equal( c.to_bytes, [0x04, 0x00, 0x00, 0x00, 0x00] )
331
+ assert_equal( c.dump, "04000000 00" )
332
+
333
+ # NaN
334
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0x7FC00000 )
335
+ assert_equal( c.bytes.to_s, "NaN" )
336
+ assert_equal( c.to_s, "NaN" )
337
+ assert_equal( c.to_bytes, [0x04, 0x7F, 0xC0, 0x00, 0x00] )
338
+ assert_equal( c.dump, "047FC000 00" )
339
+
340
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
341
+ assert_equal( c.bytes.to_s, "NaN" )
342
+ assert_equal( c.to_s, "NaN" )
343
+ assert_equal( c.to_bytes, [0x04, 0x7F, 0xC0, 0x00, 0x00] )
344
+ assert_equal( c.dump, "047FC000 00" )
345
+
346
+ # Infinity
347
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0x7F800000 )
348
+ assert_equal( c.bytes.to_s, "Infinity" )
349
+ assert_equal( c.to_s, "Infinity" )
350
+ assert_equal( c.to_bytes, [0x04, 0x7F, 0x80, 0x00, 0x00] )
351
+ assert_equal( c.dump, "047F8000 00" )
352
+
353
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
354
+ assert_equal( c.bytes.to_s, "Infinity" )
355
+ assert_equal( c.to_s, "Infinity" )
356
+ assert_equal( c.to_bytes, [0x04, 0x7F, 0x80, 0x00, 0x00] )
357
+ assert_equal( c.dump, "047F8000 00" )
358
+
359
+ # -Infinity
360
+ c = FloatConstant.new( @java_class, Constant::CONSTANT_Float, 0xFF800000 )
361
+ assert_equal( c.bytes.to_s, "-Infinity" )
362
+ assert_equal( c.to_s, "-Infinity" )
363
+ assert_equal( c.to_bytes, [0x04, 0xFF, 0x80, 0x00, 0x00] )
364
+ assert_equal( c.dump, "04FF8000 00" )
365
+
366
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
367
+ assert_equal( c.bytes.to_s, "-Infinity" )
368
+ assert_equal( c.to_s, "-Infinity" )
369
+ assert_equal( c.to_bytes, [0x04, 0xFF, 0x80, 0x00, 0x00] )
370
+ assert_equal( c.dump, "04FF8000 00" )
371
+
372
+ end
373
+
374
+ end
375
+
376
+ #
377
+ #==DoubleConstantのテスト
378
+ #
379
+ class DoubleConstantTest < Test::Unit::TestCase
380
+
381
+ def setup
382
+ @java_class = JavaClass::Class.new
383
+ end
384
+
385
+ def teardown
386
+ end
387
+
388
+ #
389
+ #=== 基本動作のテスト
390
+ #
391
+ def test_basic
392
+
393
+ # 正の数
394
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0x4030800000000000 )
395
+ assert_equal( c.bytes.to_s, "16.5" )
396
+ assert_equal( c.to_s, "16.5D" )
397
+ assert_equal( c.to_bytes, [0x06, 0x40, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00] )
398
+ assert_equal( c.dump, "06403080 00000000 00" )
399
+
400
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
401
+ assert_equal( c.bytes.to_s, "16.5" )
402
+ assert_equal( c.to_s, "16.5D" )
403
+ assert_equal( c.to_bytes, [0x06, 0x40, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00] )
404
+ assert_equal( c.dump, "06403080 00000000 00" )
405
+
406
+ # 負の数
407
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0xC030800000000000 )
408
+ assert_equal( c.bytes.to_s, "-16.5" )
409
+ assert_equal( c.to_s, "-16.5D" )
410
+ assert_equal( c.to_bytes, [0x06, 0xC0, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00] )
411
+ assert_equal( c.dump, "06C03080 00000000 00" )
412
+
413
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
414
+ assert_equal( c.bytes.to_s, "-16.5" )
415
+ assert_equal( c.to_s, "-16.5D" )
416
+ assert_equal( c.to_bytes, [0x06, 0xC0, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00] )
417
+ assert_equal( c.dump, "06C03080 00000000 00" )
418
+
419
+ # 0
420
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0x0000000000000000 )
421
+ assert_equal( c.bytes.to_s, "0.0" )
422
+ assert_equal( c.to_s, "0.0D" )
423
+ assert_equal( c.to_bytes, [0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
424
+ assert_equal( c.dump, "06000000 00000000 00" )
425
+
426
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
427
+ assert_equal( c.bytes.to_s, "0.0" )
428
+ assert_equal( c.to_s, "0.0D" )
429
+ assert_equal( c.to_bytes, [0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
430
+ assert_equal( c.dump, "06000000 00000000 00" )
431
+
432
+ # Nan
433
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0x7FF8000000000000 )
434
+ assert_equal( c.bytes.to_s, "NaN" )
435
+ assert_equal( c.to_s, "NaN" )
436
+ assert_equal( c.to_bytes, [0x06, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
437
+ assert_equal( c.dump, "067FF800 00000000 00" )
438
+
439
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
440
+ assert_equal( c.bytes.to_s, "NaN" )
441
+ assert_equal( c.to_s, "NaN" )
442
+ assert_equal( c.to_bytes, [0x06, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
443
+ assert_equal( c.dump, "067FF800 00000000 00" )
444
+
445
+ # Infinity
446
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0x7FF0000000000000 )
447
+ assert_equal( c.bytes.to_s, "Infinity" )
448
+ assert_equal( c.to_s, "Infinity" )
449
+ assert_equal( c.to_bytes, [0x06, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
450
+ assert_equal( c.dump, "067FF000 00000000 00" )
451
+
452
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
453
+ assert_equal( c.bytes.to_s, "Infinity" )
454
+ assert_equal( c.to_s, "Infinity" )
455
+ assert_equal( c.to_bytes, [0x06, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
456
+ assert_equal( c.dump, "067FF000 00000000 00" )
457
+
458
+ # -Infinity
459
+ c = DoubleConstant.new( @java_class, Constant::CONSTANT_Double, 0xFFF0000000000000 )
460
+ assert_equal( c.bytes.to_s, "-Infinity" )
461
+ assert_equal( c.to_s, "-Infinity" )
462
+ assert_equal( c.to_bytes, [0x06, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
463
+ assert_equal( c.dump, "06FFF000 00000000 00" )
464
+
465
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
466
+ assert_equal( c.bytes.to_s, "-Infinity" )
467
+ assert_equal( c.to_s, "-Infinity" )
468
+ assert_equal( c.to_bytes, [0x06, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] )
469
+ assert_equal( c.dump, "06FFF000 00000000 00" )
470
+
471
+ end
472
+
473
+ end
474
+
475
+
476
+ #
477
+ #===StringConstantのテスト
478
+ #
479
+ class StringConstantTest < Test::Unit::TestCase
480
+
481
+ def setup
482
+ @java_class = JavaClass::Class.new
483
+ # 0番は登録しておくが使われない。
484
+ @java_class.constant_pool[0] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "xxx" )
485
+ @java_class.constant_pool[1] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "aaa" )
486
+ @java_class.constant_pool[10] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "bbb" )
487
+ end
488
+
489
+ def teardown
490
+ end
491
+
492
+ #
493
+ #=== 基本動作のテスト
494
+ #
495
+ def test_basic
496
+
497
+ c = StringConstant.new( @java_class, Constant::CONSTANT_String, 1 )
498
+ assert_equal( c.bytes, "aaa" )
499
+ assert_equal( c.to_s, "\"aaa\"" )
500
+ assert_equal( c.string_index, 1 )
501
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x01] )
502
+ assert_equal( c.dump, "080001" )
503
+
504
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
505
+ assert_equal( c.bytes, "aaa" )
506
+ assert_equal( c.to_s, "\"aaa\"" )
507
+ assert_equal( c.string_index, 1 )
508
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x01] )
509
+ assert_equal( c.dump, "080001" )
510
+
511
+ c.string_index = 10
512
+ assert_equal( c.bytes, "bbb" )
513
+ assert_equal( c.to_s, "\"bbb\"" )
514
+ assert_equal( c.string_index, 10 )
515
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x0a] )
516
+ assert_equal( c.dump, "08000A" )
517
+
518
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
519
+ assert_equal( c.bytes, "bbb" )
520
+ assert_equal( c.to_s, "\"bbb\"" )
521
+ assert_equal( c.string_index, 10 )
522
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x0a] )
523
+ assert_equal( c.dump, "08000A" )
524
+
525
+ # 0番はnull扱い。
526
+ c.string_index = 0
527
+ assert_equal( c.bytes, nil )
528
+ assert_equal( c.to_s, "null" )
529
+ assert_equal( c.string_index, 0 )
530
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x00] )
531
+ assert_equal( c.dump, "080000" )
532
+
533
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
534
+ assert_equal( c.bytes, nil )
535
+ assert_equal( c.to_s, "null" )
536
+ assert_equal( c.string_index, 0 )
537
+ assert_equal( c.to_bytes, [0x08, 0x00, 0x00] )
538
+ assert_equal( c.dump, "080000" )
539
+ end
540
+ end
541
+
542
+ #
543
+ #===NameAndTypeConstantのテスト
544
+ #
545
+ class NameAndTypeConstantTest < Test::Unit::TestCase
546
+
547
+ def setup
548
+ @java_class = JavaClass::Class.new
549
+ @java_class.constant_pool[1] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "aaa" )
550
+ @java_class.constant_pool[2] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "bbb" )
551
+ @java_class.constant_pool[10] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "I" )
552
+ @java_class.constant_pool[11] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "[I" )
553
+ end
554
+
555
+ def teardown
556
+ end
557
+
558
+ #
559
+ #=== 基本動作のテスト
560
+ #
561
+ def test_basic
562
+
563
+ c = NameAndTypeConstant.new( @java_class, Constant::CONSTANT_NameAndType, 1, 10 )
564
+ assert_equal( c.name, "aaa" )
565
+ assert_equal( c.descriptor, "I")
566
+ assert_equal( c.name_index, 1 )
567
+ assert_equal( c.descriptor_index, 10 )
568
+ assert_equal( c.to_bytes, [0x0c, 0x00, 0x01, 0x00, 0x0a] )
569
+ assert_equal( c.dump, "0C000100 0A" )
570
+
571
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
572
+ assert_equal( c.name, "aaa" )
573
+ assert_equal( c.descriptor, "I")
574
+ assert_equal( c.name_index, 1 )
575
+ assert_equal( c.descriptor_index, 10 )
576
+ assert_equal( c.to_bytes, [0x0c, 0x00, 0x01, 0x00, 0x0a] )
577
+ assert_equal( c.dump, "0C000100 0A" )
578
+
579
+ c.name_index = 2
580
+ c.descriptor_index = 11
581
+ assert_equal( c.name, "bbb" )
582
+ assert_equal( c.descriptor, "[I")
583
+ assert_equal( c.name_index, 2 )
584
+ assert_equal( c.descriptor_index, 11 )
585
+ assert_equal( c.to_bytes, [0x0c, 0x00, 0x02, 0x00, 0x0b] )
586
+ assert_equal( c.dump, "0C000200 0B" )
587
+
588
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
589
+ assert_equal( c.name, "bbb" )
590
+ assert_equal( c.descriptor, "[I")
591
+ assert_equal( c.name_index, 2 )
592
+ assert_equal( c.descriptor_index, 11 )
593
+ assert_equal( c.to_bytes, [0x0c, 0x00, 0x02, 0x00, 0x0b] )
594
+ assert_equal( c.dump, "0C000200 0B" )
595
+ end
596
+ end
597
+
598
+ #
599
+ #===ClassConstantのテスト
600
+ #
601
+ class ClassConstantTest < Test::Unit::TestCase
602
+
603
+ def setup
604
+ @java_class = JavaClass::Class.new
605
+ @java_class.constant_pool[1] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "java/lang/Object" )
606
+ @java_class.constant_pool[2] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "java/util/List" )
607
+ end
608
+
609
+ def teardown
610
+ end
611
+
612
+ #
613
+ #=== 基本動作のテスト
614
+ #
615
+ def test_basic
616
+
617
+ c = ClassConstant.new( @java_class, Constant::CONSTANT_Class, 1 )
618
+ assert_equal( c.name, "java.lang.Object" )
619
+ assert_equal( c.name_index, 1 )
620
+ assert_equal( c.to_bytes, [0x07, 0x00, 0x01] )
621
+ assert_equal( c.dump, "070001" )
622
+
623
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
624
+ assert_equal( c.name, "java.lang.Object" )
625
+ assert_equal( c.name_index, 1 )
626
+ assert_equal( c.to_bytes, [0x07, 0x00, 0x01] )
627
+ assert_equal( c.dump, "070001" )
628
+
629
+ c.name_index = 2
630
+ assert_equal( c.name, "java.util.List" )
631
+ assert_equal( c.name_index, 2 )
632
+ assert_equal( c.to_bytes, [0x07, 0x00, 0x02] )
633
+ assert_equal( c.dump, "070002" )
634
+
635
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
636
+ assert_equal( c.name, "java.util.List" )
637
+ assert_equal( c.name_index, 2 )
638
+ assert_equal( c.to_bytes, [0x07, 0x00, 0x02] )
639
+ assert_equal( c.dump, "070002" )
640
+ end
641
+ end
642
+
643
+ #
644
+ #===MemberRefConstantのテスト
645
+ #
646
+ class MemberRefConstantTest < Test::Unit::TestCase
647
+
648
+ def setup
649
+ @java_class = JavaClass::Class.new
650
+ @java_class.constant_pool[1] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "aaa" )
651
+ @java_class.constant_pool[2] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "bbb" )
652
+ @java_class.constant_pool[10] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "I" )
653
+ @java_class.constant_pool[11] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "[I" )
654
+ @java_class.constant_pool[21] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "java/lang/Object" )
655
+ @java_class.constant_pool[22] = UTF8Constant.new( @java_class, Constant::CONSTANT_Utf8, "java/util/List" )
656
+ @java_class.constant_pool[31] = ClassConstant.new( @java_class, Constant::CONSTANT_Class, 21 )
657
+ @java_class.constant_pool[32] = ClassConstant.new( @java_class, Constant::CONSTANT_Class, 22 )
658
+ @java_class.constant_pool[41] = NameAndTypeConstant.new( @java_class, Constant::CONSTANT_NameAndType, 1, 10)
659
+ @java_class.constant_pool[42] = NameAndTypeConstant.new( @java_class, Constant::CONSTANT_NameAndType, 2, 11)
660
+ end
661
+
662
+ def teardown
663
+ end
664
+
665
+ #
666
+ #=== FieldRefConstantの基本動作のテスト
667
+ #
668
+ def test_field_ref
669
+
670
+ c = FieldRefConstant.new( @java_class, Constant::CONSTANT_Fieldref, 31, 41 )
671
+ assert_equal( c.class_name.name, "java.lang.Object" )
672
+ assert_equal( c.name_and_type.name, "aaa")
673
+ assert_equal( c.class_name_index, 31 )
674
+ assert_equal( c.name_and_type_index, 41 )
675
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x1F, 0x00, 0x29] )
676
+ assert_equal( c.dump, "09001F00 29" )
677
+
678
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
679
+ assert_equal( c.class_name.name, "java.lang.Object" )
680
+ assert_equal( c.name_and_type.name, "aaa")
681
+ assert_equal( c.class_name_index, 31 )
682
+ assert_equal( c.name_and_type_index, 41 )
683
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x1F, 0x00, 0x29] )
684
+ assert_equal( c.dump, "09001F00 29" )
685
+
686
+ c.class_name_index = 32
687
+ c.name_and_type_index = 42
688
+ assert_equal( c.class_name.name, "java.util.List" )
689
+ assert_equal( c.name_and_type.name, "bbb")
690
+ assert_equal( c.class_name_index, 32 )
691
+ assert_equal( c.name_and_type_index, 42 )
692
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x20, 0x00, 0x2a] )
693
+ assert_equal( c.dump, "09002000 2A" )
694
+
695
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
696
+ assert_equal( c.class_name.name, "java.util.List" )
697
+ assert_equal( c.name_and_type.name, "bbb")
698
+ assert_equal( c.class_name_index, 32 )
699
+ assert_equal( c.name_and_type_index, 42 )
700
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x20, 0x00, 0x2a] )
701
+ assert_equal( c.dump, "09002000 2A" )
702
+ end
703
+
704
+ #
705
+ #=== MethodRefConstantの基本動作のテスト
706
+ #
707
+ def test_method_ref
708
+
709
+ c = MethodRefConstant.new( @java_class, Constant::CONSTANT_Methodref, 31, 41 )
710
+ assert_equal( c.class_name.name, "java.lang.Object" )
711
+ assert_equal( c.name_and_type.name, "aaa")
712
+ assert_equal( c.class_name_index, 31 )
713
+ assert_equal( c.name_and_type_index, 41 )
714
+ assert_equal( c.to_bytes, [0x0A, 0x00, 0x1F, 0x00, 0x29] )
715
+ assert_equal( c.dump, "0A001F00 29" )
716
+
717
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
718
+ assert_equal( c.class_name.name, "java.lang.Object" )
719
+ assert_equal( c.name_and_type.name, "aaa")
720
+ assert_equal( c.class_name_index, 31 )
721
+ assert_equal( c.name_and_type_index, 41 )
722
+ assert_equal( c.to_bytes, [0x0A, 0x00, 0x1F, 0x00, 0x29] )
723
+ assert_equal( c.dump, "0A001F00 29" )
724
+
725
+ c.class_name_index = 32
726
+ c.name_and_type_index = 42
727
+ assert_equal( c.class_name.name, "java.util.List" )
728
+ assert_equal( c.name_and_type.name, "bbb")
729
+ assert_equal( c.class_name_index, 32 )
730
+ assert_equal( c.name_and_type_index, 42 )
731
+ assert_equal( c.to_bytes, [0x0A, 0x00, 0x20, 0x00, 0x2a] )
732
+ assert_equal( c.dump, "0A002000 2A" )
733
+
734
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
735
+ assert_equal( c.class_name.name, "java.util.List" )
736
+ assert_equal( c.name_and_type.name, "bbb")
737
+ assert_equal( c.class_name_index, 32 )
738
+ assert_equal( c.name_and_type_index, 42 )
739
+ assert_equal( c.to_bytes, [0x0A, 0x00, 0x20, 0x00, 0x2a] )
740
+ assert_equal( c.dump, "0A002000 2A" )
741
+ end
742
+
743
+ #
744
+ #=== InterfaceMethodRefConstantの基本動作のテスト
745
+ #
746
+ def test_interface_method_ref
747
+
748
+ c = InterfaceMethodRefConstant.new( @java_class, Constant::CONSTANT_InterfaceMethodref, 31, 41 )
749
+ assert_equal( c.class_name.name, "java.lang.Object" )
750
+ assert_equal( c.name_and_type.name, "aaa")
751
+ assert_equal( c.class_name_index, 31 )
752
+ assert_equal( c.name_and_type_index, 41 )
753
+ assert_equal( c.to_bytes, [0x0B, 0x00, 0x1F, 0x00, 0x29] )
754
+ assert_equal( c.dump, "0B001F00 29" )
755
+
756
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
757
+ assert_equal( c.class_name.name, "java.lang.Object" )
758
+ assert_equal( c.name_and_type.name, "aaa")
759
+ assert_equal( c.class_name_index, 31 )
760
+ assert_equal( c.name_and_type_index, 41 )
761
+ assert_equal( c.to_bytes, [0x0B, 0x00, 0x1F, 0x00, 0x29] )
762
+ assert_equal( c.dump, "0B001F00 29" )
763
+
764
+ c.class_name_index = 32
765
+ c.name_and_type_index = 42
766
+ assert_equal( c.class_name.name, "java.util.List" )
767
+ assert_equal( c.name_and_type.name, "bbb")
768
+ assert_equal( c.class_name_index, 32 )
769
+ assert_equal( c.name_and_type_index, 42 )
770
+ assert_equal( c.to_bytes, [0x0B, 0x00, 0x20, 0x00, 0x2a] )
771
+ assert_equal( c.dump, "0B002000 2A" )
772
+
773
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
774
+ assert_equal( c.class_name.name, "java.util.List" )
775
+ assert_equal( c.name_and_type.name, "bbb")
776
+ assert_equal( c.class_name_index, 32 )
777
+ assert_equal( c.name_and_type_index, 42 )
778
+ assert_equal( c.to_bytes, [0x0B, 0x00, 0x20, 0x00, 0x2a] )
779
+ assert_equal( c.dump, "0B002000 2A" )
780
+ end
781
+
782
+ #
783
+ #=== FieldRefConstantの基本動作のテスト
784
+ #
785
+ def test_field_ref
786
+
787
+ c = FieldRefConstant.new( @java_class, Constant::CONSTANT_Fieldref, 31, 41 )
788
+ assert_equal( c.class_name.name, "java.lang.Object" )
789
+ assert_equal( c.name_and_type.name, "aaa")
790
+ assert_equal( c.class_name_index, 31 )
791
+ assert_equal( c.name_and_type_index, 41 )
792
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x1F, 0x00, 0x29] )
793
+ assert_equal( c.dump, "09001F00 29" )
794
+
795
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
796
+ assert_equal( c.class_name.name, "java.lang.Object" )
797
+ assert_equal( c.name_and_type.name, "aaa")
798
+ assert_equal( c.class_name_index, 31 )
799
+ assert_equal( c.name_and_type_index, 41 )
800
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x1F, 0x00, 0x29] )
801
+ assert_equal( c.dump, "09001F00 29" )
802
+
803
+ c.class_name_index = 32
804
+ c.name_and_type_index = 42
805
+ assert_equal( c.class_name.name, "java.util.List" )
806
+ assert_equal( c.name_and_type.name, "bbb")
807
+ assert_equal( c.class_name_index, 32 )
808
+ assert_equal( c.name_and_type_index, 42 )
809
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x20, 0x00, 0x2a] )
810
+ assert_equal( c.dump, "09002000 2A" )
811
+
812
+ c = JavaClass.read_constant( ArrayIO.new( c.to_bytes ), @java_class )
813
+ assert_equal( c.class_name.name, "java.util.List" )
814
+ assert_equal( c.name_and_type.name, "bbb")
815
+ assert_equal( c.class_name_index, 32 )
816
+ assert_equal( c.name_and_type_index, 42 )
817
+ assert_equal( c.to_bytes, [0x09, 0x00, 0x20, 0x00, 0x2a] )
818
+ assert_equal( c.dump, "09002000 2A" )
819
+ end
820
+ end
821
+
822
+ module_function
823
+ def assert_range_error( &block )
824
+ begin
825
+ block.call
826
+ fail()
827
+ rescue RangeError
828
+ end
829
+ end
830
+ end