unageanu-javaclass 0.0.1 → 0.1.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.
- data/lib/javaclass/accessflag.rb +278 -278
- data/lib/javaclass/attribute.rb +1058 -1058
- data/lib/javaclass/base.rb +368 -368
- data/lib/javaclass/class.rb +281 -281
- data/lib/javaclass/constant.rb +520 -520
- data/lib/javaclass/member.rb +192 -192
- data/lib/javaclass/reader.rb +445 -445
- data/lib/javaclass.rb +7 -7
- data/sample/class_list.rb +38 -8
- data/sample/create_assert.rb +68 -68
- data/sample/sample.rb +26 -26
- data/sample/type_hierarchy.rb +93 -0
- data/test/test_access_flag.rb +205 -205
- data/test/test_attribute.rb +955 -955
- data/test/test_class.rb +90 -90
- data/test/test_constant.rb +830 -830
- data/test/test_member.rb +282 -282
- metadata +2 -1
data/test/test_class.rb
CHANGED
@@ -1,90 +1,90 @@
|
|
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
|
-
#=== Classのテスト
|
15
|
-
#
|
16
|
-
class ClassTest < Test::Unit::TestCase
|
17
|
-
|
18
|
-
include TestUtil
|
19
|
-
include ConstantFactory
|
20
|
-
|
21
|
-
def setup
|
22
|
-
end
|
23
|
-
|
24
|
-
def teardown
|
25
|
-
end
|
26
|
-
|
27
|
-
#
|
28
|
-
#=== 基本のクラスの解析テスト
|
29
|
-
#
|
30
|
-
def test_basic_parse
|
31
|
-
|
32
|
-
jc = get_class_from_resource( "/java_class/com/example/TestClass1.class")
|
33
|
-
assert_class( jc ) {|a|
|
34
|
-
assert_equal a.name, "com.example.TestClass1"
|
35
|
-
assert_equal a.super_class, "java.util.ArrayList"
|
36
|
-
assert_equal a.interfaces, ["java.io.Serializable", "java.io.Closeable"]
|
37
|
-
assert_equal a.signature, "<T:Ljava/lang/Object;X::Ljava/lang/Runnable;>Ljava/util/ArrayList<TT;>;Ljava/io/Serializable;Ljava/io/Closeable;"
|
38
|
-
assert_equal a.deprecated?, false
|
39
|
-
assert_equal a.source_file, "TestClass1.java"
|
40
|
-
assert_equal a.inner_classes.map{|c| "#{c.name}:#{c.inner_class.name}" },
|
41
|
-
[ ":com.example.TestClass1$1", "Hoo:com.example.TestClass1$Hoo", "Var:com.example.TestClass1$Var" ]
|
42
|
-
assert_equal a.enclosing_method, nil
|
43
|
-
assert_equal a.access_flag, ClassAccessFlag.new(
|
44
|
-
ClassAccessFlag::ACC_PUBLIC | ClassAccessFlag::ACC_FINAL | ClassAccessFlag::ACC_SUPER )
|
45
|
-
assert_equal a.fields.length, 10
|
46
|
-
assert_equal a.methods.length, 3
|
47
|
-
|
48
|
-
assert_equal a.find_method( "close" ).name, "close"
|
49
|
-
assert_equal a.find_method( "not found" ), nil
|
50
|
-
assert_equal a.find_method( "close", "void" ).name, "close"
|
51
|
-
assert_equal a.find_method( "close", "not" ), nil
|
52
|
-
assert_equal a.find_method( "close", "void", [] ).name, "close"
|
53
|
-
assert_equal a.find_method( "close", "void", ["not"] ), nil
|
54
|
-
|
55
|
-
assert_equal a.find_field( "stringConstant" ).name, "stringConstant"
|
56
|
-
assert_equal a.find_field( "not found" ), nil
|
57
|
-
}
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
#
|
62
|
-
#=== Constantの追加のテスト
|
63
|
-
#
|
64
|
-
def test_put_constant
|
65
|
-
|
66
|
-
jc = get_class_from_resource( "/java_class/com/example/TestClass1.class")
|
67
|
-
str_index = jc.put_constant( utf8("abc" ) )
|
68
|
-
puts str_index
|
69
|
-
assert_equal str_index, jc.put_constant( utf8("abc" ) ) # 同じindexが返される。
|
70
|
-
|
71
|
-
# バイト配列化→復元で同じ値が返されることを確認
|
72
|
-
assert_class( jc ) {|a|
|
73
|
-
assert_equal a.get_constant_value( str_index ), "abc"
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
def get_class_from_resource( path )
|
78
|
-
File.open( resource( path), "r" ) {|f|
|
79
|
-
JavaClass.from f
|
80
|
-
}
|
81
|
-
end
|
82
|
-
|
83
|
-
def assert_class( a, &block )
|
84
|
-
assert_to_byte_and_read a, block, proc {|io|
|
85
|
-
JavaClass.from( io )
|
86
|
-
}
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
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
|
+
#=== Classのテスト
|
15
|
+
#
|
16
|
+
class ClassTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
include TestUtil
|
19
|
+
include ConstantFactory
|
20
|
+
|
21
|
+
def setup
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
#=== 基本のクラスの解析テスト
|
29
|
+
#
|
30
|
+
def test_basic_parse
|
31
|
+
|
32
|
+
jc = get_class_from_resource( "/java_class/com/example/TestClass1.class")
|
33
|
+
assert_class( jc ) {|a|
|
34
|
+
assert_equal a.name, "com.example.TestClass1"
|
35
|
+
assert_equal a.super_class, "java.util.ArrayList"
|
36
|
+
assert_equal a.interfaces, ["java.io.Serializable", "java.io.Closeable"]
|
37
|
+
assert_equal a.signature, "<T:Ljava/lang/Object;X::Ljava/lang/Runnable;>Ljava/util/ArrayList<TT;>;Ljava/io/Serializable;Ljava/io/Closeable;"
|
38
|
+
assert_equal a.deprecated?, false
|
39
|
+
assert_equal a.source_file, "TestClass1.java"
|
40
|
+
assert_equal a.inner_classes.map{|c| "#{c.name}:#{c.inner_class.name}" },
|
41
|
+
[ ":com.example.TestClass1$1", "Hoo:com.example.TestClass1$Hoo", "Var:com.example.TestClass1$Var" ]
|
42
|
+
assert_equal a.enclosing_method, nil
|
43
|
+
assert_equal a.access_flag, ClassAccessFlag.new(
|
44
|
+
ClassAccessFlag::ACC_PUBLIC | ClassAccessFlag::ACC_FINAL | ClassAccessFlag::ACC_SUPER )
|
45
|
+
assert_equal a.fields.length, 10
|
46
|
+
assert_equal a.methods.length, 3
|
47
|
+
|
48
|
+
assert_equal a.find_method( "close" ).name, "close"
|
49
|
+
assert_equal a.find_method( "not found" ), nil
|
50
|
+
assert_equal a.find_method( "close", "void" ).name, "close"
|
51
|
+
assert_equal a.find_method( "close", "not" ), nil
|
52
|
+
assert_equal a.find_method( "close", "void", [] ).name, "close"
|
53
|
+
assert_equal a.find_method( "close", "void", ["not"] ), nil
|
54
|
+
|
55
|
+
assert_equal a.find_field( "stringConstant" ).name, "stringConstant"
|
56
|
+
assert_equal a.find_field( "not found" ), nil
|
57
|
+
}
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
#=== Constantの追加のテスト
|
63
|
+
#
|
64
|
+
def test_put_constant
|
65
|
+
|
66
|
+
jc = get_class_from_resource( "/java_class/com/example/TestClass1.class")
|
67
|
+
str_index = jc.put_constant( utf8("abc" ) )
|
68
|
+
puts str_index
|
69
|
+
assert_equal str_index, jc.put_constant( utf8("abc" ) ) # 同じindexが返される。
|
70
|
+
|
71
|
+
# バイト配列化→復元で同じ値が返されることを確認
|
72
|
+
assert_class( jc ) {|a|
|
73
|
+
assert_equal a.get_constant_value( str_index ), "abc"
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_class_from_resource( path )
|
78
|
+
File.open( resource( path), "r" ) {|f|
|
79
|
+
JavaClass.from f
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
def assert_class( a, &block )
|
84
|
+
assert_to_byte_and_read a, block, proc {|io|
|
85
|
+
JavaClass.from( io )
|
86
|
+
}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|