javaclass 0.0.2 → 0.0.3
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/Rakefile +208 -23
- data/Readme.txt +56 -19
- data/examples/generate_class_lists.rb +61 -0
- data/history.txt +13 -19
- data/lib/javaclass/classfile/access_flags.rb +52 -0
- data/lib/javaclass/classfile/class_magic.rb +29 -0
- data/lib/javaclass/classfile/class_version.rb +67 -0
- data/lib/javaclass/classfile/constant_pool.rb +91 -0
- data/lib/javaclass/classfile/constants/base.rb +33 -0
- data/lib/javaclass/classfile/constants/double_reference.rb +99 -0
- data/lib/javaclass/classfile/constants/single_reference.rb +65 -0
- data/lib/javaclass/classfile/constants/value.rb +116 -0
- data/lib/javaclass/classfile/java_class_header.rb +102 -0
- data/lib/javaclass/classfile/references.rb +43 -0
- data/lib/javaclass/classlist/class_entry.rb +89 -0
- data/lib/javaclass/classlist/jar_searcher.rb +69 -0
- data/lib/javaclass/classlist/list.rb +126 -0
- data/lib/javaclass/classlist/package_entry.rb +87 -0
- data/lib/javaclass/classpath/classpaths.txt +2 -0
- data/lib/javaclass/classpath/composite_classpath.rb +99 -0
- data/lib/javaclass/classpath/folder_classpath.rb +83 -0
- data/lib/javaclass/classpath/jar_classpath.rb +100 -0
- data/lib/javaclass/classpath/java_home_classpath.rb +40 -0
- data/lib/javaclass/classpath/port_ClassPathEntry.java +202 -0
- data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +311 -0
- data/lib/javaclass/classpath/port_DirectoryRepository.java +24 -0
- data/lib/javaclass/java_name.rb +90 -0
- data/lib/javaclass/metric/ccd.rb +68 -0
- data/lib/javaclass/metric/class_usage.rb +41 -0
- data/lib/javaclass/metric/metrics.txt +15 -0
- data/lib/javaclass.rb +44 -11
- data/test/data/ShortClientData$1-4000Wert.class +0 -0
- data/test/data/{AccessFlagsTestAbstract.class → access_flags/AccessFlagsTestAbstract.class} +0 -0
- data/test/data/{AccessFlagsTestAbstract.java → access_flags/AccessFlagsTestAbstract.java} +0 -0
- data/test/data/{AccessFlagsTestFinal.class → access_flags/AccessFlagsTestFinal.class} +0 -0
- data/test/data/{AccessFlagsTestFinal.java → access_flags/AccessFlagsTestFinal.java} +0 -0
- data/test/data/{AccessFlagsTestInterface.class → access_flags/AccessFlagsTestInterface.class} +0 -0
- data/test/data/{AccessFlagsTestInterface.java → access_flags/AccessFlagsTestInterface.java} +0 -0
- data/test/data/{AccessFlagsTestPackage.class → access_flags/AccessFlagsTestPackage.class} +0 -0
- data/test/data/{AccessFlagsTestPackage.java → access_flags/AccessFlagsTestPackage.java} +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$Inner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$StaticInner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic.java +11 -0
- data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +29 -0
- data/test/data/{makeAccessFlagsTest.bat → access_flags/make.bat} +0 -0
- data/test/data/{ClassVersionTest.java → class_version/ClassVersionTest.java} +0 -0
- data/test/data/{ClassVersionTest10.class → class_version/ClassVersionTest10.class} +0 -0
- data/test/data/{ClassVersionTest11.class → class_version/ClassVersionTest11.class} +0 -0
- data/test/data/{ClassVersionTest12.class → class_version/ClassVersionTest12.class} +0 -0
- data/test/data/{ClassVersionTest13.class → class_version/ClassVersionTest13.class} +0 -0
- data/test/data/{ClassVersionTest14.class → class_version/ClassVersionTest14.class} +0 -0
- data/test/data/{ClassVersionTest15.class → class_version/ClassVersionTest15.class} +0 -0
- data/test/data/{ClassVersionTest16.class → class_version/ClassVersionTest16.class} +0 -0
- data/test/data/{makeClassVersionTest.bat → class_version/make.bat} +0 -0
- data/test/data/{ConstantPoolTest.class → constant_pool/ConstantPoolTest.class} +0 -0
- data/test/data/{ConstantPoolTest.java → constant_pool/ConstantPoolTest.java} +0 -0
- data/test/data/{makeConstantPoolTest.bat → constant_pool/make.bat} +0 -0
- data/test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class +0 -0
- data/test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class +0 -0
- data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
- data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
- data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
- data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
- data/test/data/jar_classpath/make.bat +24 -0
- data/test/data/jar_searcher/JarClassListTest.jar +0 -0
- data/test/data/jar_searcher/PublicClass.java +12 -0
- data/test/data/jar_searcher/PublicInterface.java +5 -0
- data/test/data/jar_searcher/make.bat +13 -0
- data/test/data/java_home_classpath/jdk/jre/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/jre/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/jre-ext/lib/ext/ext.jar +0 -0
- data/test/data/java_home_classpath/jre-ext/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/make.bat +13 -0
- data/test/data/references/ReferencesTest.class +0 -0
- data/test/data/references/ReferencesTest.java +12 -0
- data/test/data/references/make.bat +5 -0
- data/test/setup.rb +6 -5
- data/test/test_access_flags.rb +59 -44
- data/test/test_base.rb +20 -15
- data/test/test_class_entry.rb +198 -0
- data/test/test_class_version.rb +48 -46
- data/test/test_composite_classpath.rb +68 -0
- data/test/test_constant_pool.rb +49 -41
- data/test/test_folder_classpath.rb +45 -0
- data/test/test_jar_classpath.rb +57 -0
- data/test/test_jar_searcher.rb +93 -0
- data/test/test_java_class_header.rb +34 -22
- data/test/test_java_home_classpath.rb +50 -0
- data/test/test_java_name.rb +110 -0
- data/test/test_javaclass.rb +22 -0
- data/test/test_list.rb +123 -0
- data/test/test_package_entry.rb +91 -0
- data/test/test_references.rb +38 -20
- data/test/test_string_ux.rb +99 -2
- data/test/ts_all_tests.rb +42 -21
- metadata +171 -50
- data/lib/javaclass/access_flags.rb +0 -44
- data/lib/javaclass/class_magic.rb +0 -27
- data/lib/javaclass/class_version.rb +0 -65
- data/lib/javaclass/constant_pool.rb +0 -85
- data/lib/javaclass/constants/base.rb +0 -31
- data/lib/javaclass/constants/double_reference.rb +0 -81
- data/lib/javaclass/constants/single_reference.rb +0 -58
- data/lib/javaclass/constants/value.rb +0 -114
- data/lib/javaclass/java_class_header.rb +0 -88
- data/lib/javaclass/references.rb +0 -31
- data/test/data/AccessFlagsTestPublic$InnerClass.class +0 -0
- data/test/data/AccessFlagsTestPublic.class +0 -0
- data/test/data/AccessFlagsTestPublic.java +0 -7
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
|
2
|
+
require 'javaclass/classlist/class_entry'
|
|
3
|
+
|
|
4
|
+
module TestJavaClass
|
|
5
|
+
module TestClassList
|
|
6
|
+
|
|
7
|
+
class TestClassEntry < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
attr_reader :version
|
|
10
|
+
|
|
11
|
+
def test_update
|
|
12
|
+
# fake methods for zentest, tested in all other tests
|
|
13
|
+
assert(true)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_public_eh
|
|
17
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
|
|
18
|
+
assert(ce.public?)
|
|
19
|
+
|
|
20
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
|
|
21
|
+
assert(!ce.public?)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_version
|
|
25
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
|
|
26
|
+
assert_equal([0], ce.version)
|
|
27
|
+
|
|
28
|
+
ce.update(1)
|
|
29
|
+
assert_equal([0,1], ce.version)
|
|
30
|
+
|
|
31
|
+
ce.update(2)
|
|
32
|
+
assert_equal([0,1,2], ce.version)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_to_full_qualified_s_first
|
|
36
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
|
|
37
|
+
|
|
38
|
+
# new class in 0
|
|
39
|
+
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,0))
|
|
40
|
+
# class only in 0, package in 1
|
|
41
|
+
assert_equal("pkg.Class [only 0] - \n", ce.to_full_qualified_s(0,1))
|
|
42
|
+
# class also in 1
|
|
43
|
+
ce.update(1)
|
|
44
|
+
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,1))
|
|
45
|
+
# dropped in 2
|
|
46
|
+
assert_equal("pkg.Class [-1] - \n", ce.to_full_qualified_s(0,2))
|
|
47
|
+
# class also in 2
|
|
48
|
+
ce.update(2)
|
|
49
|
+
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,2))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_to_full_qualified_s_package
|
|
53
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
|
|
54
|
+
# new class in 0
|
|
55
|
+
assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,0))
|
|
56
|
+
# class only in 0, package in 1
|
|
57
|
+
assert_equal("pkg.Class [only 0p] - \n", ce.to_full_qualified_s(0,1))
|
|
58
|
+
# class also in 1
|
|
59
|
+
ce.update(1)
|
|
60
|
+
assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,1))
|
|
61
|
+
# dropped in 2
|
|
62
|
+
assert_equal("pkg.Class [-1p] - \n", ce.to_full_qualified_s(0,2))
|
|
63
|
+
# class also in 2
|
|
64
|
+
ce.update(2)
|
|
65
|
+
assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,2))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_to_full_qualified_s_later
|
|
69
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 1)
|
|
70
|
+
|
|
71
|
+
# list is only for 1
|
|
72
|
+
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(1,1))
|
|
73
|
+
# new class in 1
|
|
74
|
+
assert_equal("pkg.Class [1] - \n", ce.to_full_qualified_s(0,1))
|
|
75
|
+
# new class in 1, not in 2
|
|
76
|
+
assert_equal("pkg.Class [only 1] - \n", ce.to_full_qualified_s(0,2))
|
|
77
|
+
# new class in 1, also in 2
|
|
78
|
+
ce.update(2)
|
|
79
|
+
assert_equal("pkg.Class [1] - \n", ce.to_full_qualified_s(0,2))
|
|
80
|
+
# dropped in 3
|
|
81
|
+
assert_equal("pkg.Class [1-2] - \n", ce.to_full_qualified_s(0,3))
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_to_full_qualified_s_later_package
|
|
85
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 1)
|
|
86
|
+
|
|
87
|
+
# list is only for 1
|
|
88
|
+
assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(1,1))
|
|
89
|
+
# new class in 1
|
|
90
|
+
assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(0,1))
|
|
91
|
+
# new class in 1, not in 2
|
|
92
|
+
assert_equal("pkg.Class [only 1p] - \n", ce.to_full_qualified_s(0,2))
|
|
93
|
+
# new class in 1, also in 2
|
|
94
|
+
ce.update(2)
|
|
95
|
+
assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(0,2))
|
|
96
|
+
# dropped in 3
|
|
97
|
+
assert_equal("pkg.Class [1-2p] - \n", ce.to_full_qualified_s(0,3))
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_to_package_shortcut_s
|
|
101
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', true, 0)
|
|
102
|
+
|
|
103
|
+
# new class in 0
|
|
104
|
+
@version = [0]
|
|
105
|
+
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
|
106
|
+
|
|
107
|
+
# class only in 0, package in 1
|
|
108
|
+
@version = [0,1]
|
|
109
|
+
assert_equal(" Class2 [only 0] - \n", ce.to_package_shortcut_s)
|
|
110
|
+
|
|
111
|
+
# class also in 1
|
|
112
|
+
ce.update(1)
|
|
113
|
+
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
|
114
|
+
|
|
115
|
+
# class dropped in 2, package exists
|
|
116
|
+
@version = [0,1,2]
|
|
117
|
+
assert_equal(" Class2 [-1] - \n", ce.to_package_shortcut_s)
|
|
118
|
+
|
|
119
|
+
# class also in 2
|
|
120
|
+
ce.update(2)
|
|
121
|
+
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_to_package_shortcut_s_package
|
|
125
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 0)
|
|
126
|
+
|
|
127
|
+
# new class in 0
|
|
128
|
+
@version = [0]
|
|
129
|
+
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
|
130
|
+
|
|
131
|
+
# class only in 0, package in 1
|
|
132
|
+
@version = [0,1]
|
|
133
|
+
assert_equal(" Class2 [only 0p] - \n", ce.to_package_shortcut_s)
|
|
134
|
+
|
|
135
|
+
# class also in 1
|
|
136
|
+
ce.update(1)
|
|
137
|
+
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
|
138
|
+
|
|
139
|
+
# class dropped in 2, package exists
|
|
140
|
+
@version = [0,1,2]
|
|
141
|
+
assert_equal(" Class2 [-1p] - \n", ce.to_package_shortcut_s)
|
|
142
|
+
|
|
143
|
+
# class also in 2
|
|
144
|
+
ce.update(2)
|
|
145
|
+
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_to_package_shortcut_s_later
|
|
149
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', true, 1)
|
|
150
|
+
|
|
151
|
+
# list is only for 1
|
|
152
|
+
@version = [1]
|
|
153
|
+
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
|
154
|
+
|
|
155
|
+
# new class in 1
|
|
156
|
+
@version = [0,1]
|
|
157
|
+
assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
|
|
158
|
+
|
|
159
|
+
# new class in 1, not in 2
|
|
160
|
+
@version = [0,1,2]
|
|
161
|
+
assert_equal(" Class2 [only 1] - \n", ce.to_package_shortcut_s)
|
|
162
|
+
|
|
163
|
+
# new class in 1, also in 2
|
|
164
|
+
ce.update(2)
|
|
165
|
+
assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
|
|
166
|
+
|
|
167
|
+
# new class in 1 and 2, not in 3
|
|
168
|
+
@version = [0,1,2,3]
|
|
169
|
+
assert_equal(" Class2 [1-2] - \n", ce.to_package_shortcut_s)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def test_to_package_shortcut_s_later_package
|
|
173
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 1)
|
|
174
|
+
|
|
175
|
+
# list is only for 1
|
|
176
|
+
@version = [1]
|
|
177
|
+
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
|
178
|
+
|
|
179
|
+
# new class in 1
|
|
180
|
+
@version = [0,1]
|
|
181
|
+
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
|
182
|
+
|
|
183
|
+
# new class in 1, not in 2
|
|
184
|
+
@version = [0,1,2]
|
|
185
|
+
assert_equal(" Class2 [only 1p] - \n", ce.to_package_shortcut_s)
|
|
186
|
+
|
|
187
|
+
# new class in 1, also in 2
|
|
188
|
+
ce.update(2)
|
|
189
|
+
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
|
190
|
+
|
|
191
|
+
# new class in 1 and 2, not in 3
|
|
192
|
+
@version = [0,1,2,3]
|
|
193
|
+
assert_equal(" Class2 [1-2p] - \n", ce.to_package_shortcut_s)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
data/test/test_class_version.rb
CHANGED
|
@@ -1,59 +1,61 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/setup'
|
|
2
|
-
require 'javaclass/class_version'
|
|
2
|
+
require 'javaclass/classfile/class_version'
|
|
3
3
|
|
|
4
4
|
module TestJavaClass
|
|
5
|
-
|
|
6
|
-
class TestClassVersion < Test::Unit::TestCase
|
|
5
|
+
module TestClassFile
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
class TestClassVersion < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@v = (0..6).collect do |i|
|
|
11
|
+
JavaClass::ClassFile::ClassVersion.new(load_class("class_version/ClassVersionTest1#{i}"))
|
|
12
|
+
end
|
|
11
13
|
end
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
|
|
15
|
+
# Assert the list of +v+ against the list of _expectations_ when invoking the given block.
|
|
16
|
+
def assert_classes(expectations)
|
|
17
|
+
expectations.values_at.each do |i|
|
|
18
|
+
assert_equal(expectations[i], yield(@v[i]), "#{i}. element")
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def test_major
|
|
22
|
-
assert_classes([45, 45, 46, 47, 48, 49, 50]) {|v| v.major}
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def test_minor
|
|
26
|
-
assert_classes([3, 3, 0, 0, 0, 0, 0]) {|v| v.minor}
|
|
27
|
-
assert_equal(3, @v[1].minor) # shouldn't it be > 45.3
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def test_to_s
|
|
31
|
-
assert_equal('50.0', @v[6].to_s)
|
|
32
|
-
assert_equal('45.3', @v[0].to_s)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def test_dump
|
|
36
|
-
assert_equal([" minor version: 0", " major version: 50"], @v[6].dump)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def test_to_f
|
|
40
|
-
assert_equal(50.0, @v[6].to_f)
|
|
41
|
-
assert_equal(45.3, @v[0].to_f)
|
|
42
21
|
|
|
43
|
-
|
|
44
|
-
|
|
22
|
+
def test_major
|
|
23
|
+
assert_classes([45, 45, 46, 47, 48, 49, 50]) {|v| v.major}
|
|
24
|
+
end
|
|
45
25
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
26
|
+
def test_minor
|
|
27
|
+
assert_classes([3, 3, 0, 0, 0, 0, 0]) {|v| v.minor}
|
|
28
|
+
assert_equal(3, @v[1].minor) # shouldn't it be > 45.3
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_to_s
|
|
32
|
+
assert_equal('50.0', @v[6].to_s)
|
|
33
|
+
assert_equal('45.3', @v[0].to_s)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_dump
|
|
37
|
+
assert_equal([' minor version: 0', ' major version: 50'], @v[6].dump)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_to_f
|
|
41
|
+
assert_equal(50.0, @v[6].to_f)
|
|
42
|
+
assert_equal(45.3, @v[0].to_f)
|
|
43
|
+
|
|
44
|
+
v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
|
|
45
|
+
assert_equal(50.255, v.to_f)
|
|
46
|
+
|
|
47
|
+
v = JavaClass::ClassFile::ClassVersion.new("....\xff\xff\0002")
|
|
48
|
+
assert_equal(50.65535, v.to_f)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_jdk_version
|
|
52
|
+
assert_classes(%w[1.0 1.0 1.2 1.3 1.4 1.5 1.6]) {|v| v.jdk_version}
|
|
53
|
+
|
|
54
|
+
v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
|
|
55
|
+
assert_equal('unknown', v.jdk_version)
|
|
56
|
+
end
|
|
52
57
|
|
|
53
|
-
v = JavaClass::ClassVersion.new("....\000\xff\0002")
|
|
54
|
-
assert_equal('unknown', v.jdk_version)
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
end
|
|
58
|
-
|
|
59
61
|
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
|
2
|
+
require 'javaclass/classpath/composite_classpath'
|
|
3
|
+
|
|
4
|
+
module TestJavaClass
|
|
5
|
+
module TestClasspath
|
|
6
|
+
|
|
7
|
+
class TestCompositeClasspath < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@cpe = JavaClass::Classpath::CompositeClasspath.new
|
|
11
|
+
@cpe.add_file_name "#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_add_element
|
|
15
|
+
# fake methods for zentest, tested in setup and add_file_name
|
|
16
|
+
assert(true)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_add_file_name
|
|
20
|
+
@cpe.add_file_name "#{TEST_DATA_PATH}/folder_classpath/JarClasspathTestFolder"
|
|
21
|
+
assert_equal(2+1+2, @cpe.count)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_additional_classpath
|
|
25
|
+
assert_equal([], @cpe.additional_classpath)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_jar_eh
|
|
29
|
+
assert(!@cpe.jar?)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_count
|
|
33
|
+
assert_equal(2+1, @cpe.count)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_elements
|
|
37
|
+
assert_equal(2, @cpe.elements.size)
|
|
38
|
+
assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.jar", @cpe.elements[1].to_s)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_includes_eh
|
|
42
|
+
assert(@cpe.includes?('ClassVersionTest11.class'))
|
|
43
|
+
assert(@cpe.includes?('ClassVersionTest11'))
|
|
44
|
+
assert(@cpe.includes?('ClassVersionTest10.class'))
|
|
45
|
+
assert(@cpe.includes?('ClassVersionTest10'))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_load_binary
|
|
49
|
+
assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('ClassVersionTest11'))
|
|
50
|
+
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
|
51
|
+
assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('package/ClassVersionTest11.class'))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_names
|
|
55
|
+
assert_equal(['ClassVersionTest11.class', 'ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_find_jars
|
|
59
|
+
@cpe = JavaClass::Classpath::CompositeClasspath.new
|
|
60
|
+
@cpe.find_jars("#{TEST_DATA_PATH}/jar_classpath")
|
|
61
|
+
assert_equal(4, @cpe.elements.size)
|
|
62
|
+
assert_equal(File.expand_path("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.zip"), @cpe.elements[1].to_s)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
data/test/test_constant_pool.rb
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/setup'
|
|
2
|
-
require 'javaclass/constant_pool'
|
|
2
|
+
require 'javaclass/classfile/constant_pool'
|
|
3
3
|
|
|
4
4
|
module TestJavaClass
|
|
5
|
-
|
|
6
|
-
class TestConstantPool < Test::Unit::TestCase
|
|
5
|
+
module TestClassFile
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
class TestConstantPool < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
# 1.6.0_11 javap.exe output of test class, only tweaked the float value a bit...
|
|
10
|
+
JAVAP_OUTPUT = ' Constant pool:
|
|
10
11
|
const #1 = Method #15.#33; // java/lang/Object."<init>":()V
|
|
11
12
|
const #2 = String #34; // String field
|
|
12
13
|
const #3 = Field #14.#35; // ConstantPoolTest.stringField:Ljava/lang/String;
|
|
@@ -48,43 +49,50 @@ const #40 = NameAndType #27:#28;// doubleField:D
|
|
|
48
49
|
const #41 = Asciz ConstantPoolTest;
|
|
49
50
|
const #42 = Asciz java/lang/Object;
|
|
50
51
|
const #43 = Asciz java/lang/Runnable;'
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
52
|
+
|
|
53
|
+
def setup
|
|
54
|
+
@cp = JavaClass::ClassFile::ConstantPool.new(load_class('constant_pool/ConstantPoolTest'))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_index
|
|
58
|
+
assert_equal('Method', @cp[1].name)
|
|
59
|
+
assert_equal('Field', @cp[10].name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_size
|
|
63
|
+
assert_equal(331, @cp.size)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_item_count
|
|
67
|
+
assert_equal(43, @cp.item_count)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_dump
|
|
71
|
+
# puts @cp.dump.join("\n")
|
|
72
|
+
assert_equal(JAVAP_OUTPUT.gsub(/ +/, ' ').gsub(/"</, '<').gsub(/>"/, '>'), @cp.dump.join("\n").gsub(/( |\t)+/,' '))
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_items
|
|
76
|
+
pool = @cp.items
|
|
77
|
+
assert_equal(41, pool.size) # 2 double
|
|
78
|
+
assert_equal('Method', pool[0].name)
|
|
79
|
+
assert_equal('stringField', pool[14].value)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_find
|
|
83
|
+
found = @cp.find(JavaClass::ClassFile::ConstantPool::STRING_TAG)
|
|
84
|
+
assert_equal(1, found.size)
|
|
85
|
+
assert_equal('String', found[0].name)
|
|
86
|
+
assert_equal(34, found[0].string_index)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_strings
|
|
90
|
+
found = @cp.strings
|
|
91
|
+
assert_equal(1, found.size)
|
|
92
|
+
assert_equal('String', found[0].name)
|
|
93
|
+
end
|
|
94
|
+
|
|
86
95
|
end
|
|
87
96
|
|
|
88
97
|
end
|
|
89
|
-
|
|
90
98
|
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
|
2
|
+
require 'javaclass/classpath/folder_classpath'
|
|
3
|
+
|
|
4
|
+
module TestJavaClass
|
|
5
|
+
module TestClasspath
|
|
6
|
+
|
|
7
|
+
class TestFolderClasspath < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@cpe = JavaClass::Classpath::FolderClasspath.new("#{TEST_DATA_PATH}/folder_classpath/JarClasspathTestFolder")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_count
|
|
14
|
+
assert_equal(2, @cpe.count)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_additional_classpath
|
|
18
|
+
assert_equal([], @cpe.additional_classpath)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_jar_eh
|
|
22
|
+
assert(!@cpe.jar?)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_includes_eh
|
|
26
|
+
assert(@cpe.includes?('ClassVersionTest10.class'))
|
|
27
|
+
assert(@cpe.includes?('ClassVersionTest10'))
|
|
28
|
+
assert(!@cpe.includes?('ClassVersionTest11.class'))
|
|
29
|
+
assert(!@cpe.includes?('ClassVersionTest11'))
|
|
30
|
+
assert(@cpe.includes?('package/ClassVersionTest11.class'))
|
|
31
|
+
assert(@cpe.includes?('package/ClassVersionTest11'))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_load_binary
|
|
35
|
+
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_names
|
|
39
|
+
assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
|
2
|
+
require 'javaclass/classpath/jar_classpath'
|
|
3
|
+
|
|
4
|
+
module TestJavaClass
|
|
5
|
+
module TestClasspath
|
|
6
|
+
|
|
7
|
+
class TestJarClasspath < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@folder = "#{TEST_DATA_PATH}/jar_classpath"
|
|
11
|
+
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.jar")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_count
|
|
15
|
+
assert_equal(2, @cpe.count)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_additional_classpath
|
|
19
|
+
assert_equal([], @cpe.additional_classpath)
|
|
20
|
+
|
|
21
|
+
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTestManifest.jar")
|
|
22
|
+
assert_equal(["#{@folder}/JarClasspathTest.jar"], @cpe.additional_classpath)
|
|
23
|
+
|
|
24
|
+
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTestMultiManifest.jar")
|
|
25
|
+
assert_equal(["#{@folder}/lib/httpunit-1.6.2.jar", "#{@folder}/lib/nekohtml-0.9.1.jar",
|
|
26
|
+
"#{@folder}/lib/xercesImpl-2.5.jar", "#{@folder}/lib/js-1.5R4.1.jar"], @cpe.additional_classpath)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_jar_eh
|
|
30
|
+
assert(@cpe.jar?)
|
|
31
|
+
|
|
32
|
+
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
|
|
33
|
+
assert(!@cpe.jar?)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_includes_eh
|
|
37
|
+
assert(@cpe.includes?('ClassVersionTest10.class'))
|
|
38
|
+
assert(@cpe.includes?('ClassVersionTest10'))
|
|
39
|
+
assert(!@cpe.includes?('ClassVersionTest11.class'))
|
|
40
|
+
assert(!@cpe.includes?('ClassVersionTest11'))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_load_binary
|
|
44
|
+
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
|
45
|
+
|
|
46
|
+
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
|
|
47
|
+
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_names
|
|
51
|
+
assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
|
2
|
+
require 'javaclass/classlist/jar_searcher'
|
|
3
|
+
require 'javaclass/classpath/jar_classpath'
|
|
4
|
+
|
|
5
|
+
module TestJavaClass
|
|
6
|
+
module TestClassList
|
|
7
|
+
class TestJarSearcher < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
PACKAGE_CLASS = "packagename/PackageClass.class"
|
|
10
|
+
INNER_CLASS = "packagename/PublicClass$InnerClass.class"
|
|
11
|
+
PUBLIC_CLASS = "packagename/PublicClass.class"
|
|
12
|
+
PUBLIC_INTERFACE = "packagename/PublicInterface.class"
|
|
13
|
+
CLASSES = [INNER_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE, PACKAGE_CLASS]
|
|
14
|
+
|
|
15
|
+
def setup
|
|
16
|
+
@cs = JavaClass::ClassList::JarSearcher.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_filter_classes
|
|
20
|
+
@cs.skip_inner_classes = false
|
|
21
|
+
classes = @cs.filter_classes(CLASSES)
|
|
22
|
+
assert_equal(4, classes.size)
|
|
23
|
+
assert_equal(INNER_CLASS, classes[0])
|
|
24
|
+
assert_equal(PUBLIC_CLASS, classes[1])
|
|
25
|
+
assert_equal(PUBLIC_INTERFACE, classes[2])
|
|
26
|
+
assert_equal(PACKAGE_CLASS, classes[3])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_skip_inner_classes_equals
|
|
30
|
+
# @cs.skip_inner_classes = true # default
|
|
31
|
+
classes = @cs.filter_classes(CLASSES)
|
|
32
|
+
assert_equal(3, classes.size)
|
|
33
|
+
assert_equal(PUBLIC_CLASS, classes[0])
|
|
34
|
+
assert_equal(PUBLIC_INTERFACE, classes[1])
|
|
35
|
+
assert_equal(PACKAGE_CLASS, classes[2])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_filters_equals
|
|
39
|
+
@cs.filters = ['packagename/']
|
|
40
|
+
classes = @cs.filter_classes(CLASSES)
|
|
41
|
+
assert_equal(0, classes.size)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_public_eh
|
|
45
|
+
@cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
|
|
46
|
+
assert(!@cs.public?(@cpe, PACKAGE_CLASS))
|
|
47
|
+
assert(!@cs.public?(@cpe, INNER_CLASS))
|
|
48
|
+
assert(@cs.public?(@cpe, PUBLIC_CLASS))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class MockList # ZenTest SKIP mock class
|
|
52
|
+
attr_reader :versions
|
|
53
|
+
attr_reader :modifiers
|
|
54
|
+
attr_reader :entries
|
|
55
|
+
def initialize
|
|
56
|
+
@versions = []
|
|
57
|
+
@modifiers = []
|
|
58
|
+
@size = 0
|
|
59
|
+
@entries = []
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def add_class(entry, is_public, version)
|
|
63
|
+
@entries << entry
|
|
64
|
+
@modifiers << is_public
|
|
65
|
+
@versions << version
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def size
|
|
69
|
+
@entries.size
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_compile_list
|
|
74
|
+
list = @cs.compile_list(2, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
|
|
75
|
+
|
|
76
|
+
assert_equal(3, list.size)
|
|
77
|
+
assert_equal([PACKAGE_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
|
|
78
|
+
assert_equal([false, true, true], list.modifiers)
|
|
79
|
+
assert_equal([2, 2, 2], list.versions)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_skip_package_classes_equals
|
|
83
|
+
@cs.skip_package_classes = true
|
|
84
|
+
list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
|
|
85
|
+
|
|
86
|
+
assert_equal(2, list.size)
|
|
87
|
+
assert_equal([PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
end
|