unageanu-javaclass 0.0.1

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.
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