javaclass 0.0.3 → 0.0.4
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 +67 -56
- data/Readme.txt +42 -39
- data/example_task.rb +172 -0
- data/examples/check_interface_names.rb +44 -0
- data/examples/corpus.rb +19 -0
- data/examples/count_classes_in_modules.rb +38 -0
- data/examples/cumulative_dependencies.rb +39 -0
- data/examples/find_all_imported_types.rb +44 -0
- data/examples/find_referenced_modules.rb +53 -0
- data/examples/find_unreferenced_classes.rb +65 -0
- data/examples/generate_class_lists.rb +67 -43
- data/examples/profiler_scratchpad.rb +33 -0
- data/examples/simple_usage.rb +42 -0
- data/history.txt +29 -7
- data/javaclass.gemspec +31 -0
- data/lib/javaclass/adder_tree.rb +92 -0
- data/lib/javaclass/analyse/dependencies.rb +52 -0
- data/lib/javaclass/{metric/metrics.txt → analyse/ideas.txt} +2 -2
- data/lib/javaclass/analyse/transitive_dependencies.rb +52 -0
- data/lib/javaclass/classfile/access_flag_constants.rb +24 -0
- data/lib/javaclass/classfile/access_flags.rb +49 -26
- data/lib/javaclass/classfile/class_format_error.rb +37 -0
- data/lib/javaclass/classfile/class_magic.rb +16 -8
- data/lib/javaclass/classfile/class_version.rb +19 -25
- data/lib/javaclass/classfile/constant_pool.rb +110 -45
- data/lib/javaclass/classfile/constants/base.rb +33 -12
- data/lib/javaclass/classfile/constants/double_reference.rb +55 -41
- data/lib/javaclass/classfile/constants/single_reference.rb +29 -21
- data/lib/javaclass/classfile/constants/value.rb +43 -33
- data/lib/javaclass/classfile/java_class_header.rb +72 -46
- data/lib/javaclass/classfile/java_class_header_as_java_name.rb +33 -0
- data/lib/javaclass/classfile/java_class_header_shortcuts.rb +19 -0
- data/lib/javaclass/classfile/references.rb +21 -19
- data/lib/javaclass/classlist/class_entry.rb +26 -27
- data/lib/javaclass/classlist/jar_searcher.rb +34 -25
- data/lib/javaclass/classlist/list.rb +31 -31
- data/lib/javaclass/classlist/package_entry.rb +25 -24
- data/lib/javaclass/classpath/any_classpath.rb +48 -0
- data/lib/javaclass/classpath/class_not_found_error.rb +20 -0
- data/lib/javaclass/classpath/classpaths.txt +2 -2
- data/lib/javaclass/classpath/composite_classpath.rb +56 -54
- data/lib/javaclass/classpath/convention_classpath.rb +38 -0
- data/lib/javaclass/classpath/eclipse_classpath.rb +74 -0
- data/lib/javaclass/classpath/factory.rb +65 -0
- data/lib/javaclass/classpath/file_classpath.rb +47 -0
- data/lib/javaclass/classpath/folder_classpath.rb +42 -44
- data/lib/javaclass/classpath/jar_classpath.rb +91 -52
- data/lib/javaclass/classpath/java_home_classpath.rb +24 -13
- data/lib/javaclass/classpath/maven_classpath.rb +44 -0
- data/lib/javaclass/classpath/temporary_unpacker.rb +111 -0
- data/lib/javaclass/classpath/tracking_classpath.rb +144 -0
- data/lib/javaclass/classscanner/ideas.txt +3 -0
- data/lib/javaclass/classscanner/imported_types.rb +29 -0
- data/lib/javaclass/classscanner/scanners.rb +29 -0
- data/lib/javaclass/delegate_directive.rb +15 -0
- data/lib/javaclass/dsl/caching_classpath.rb +38 -0
- data/lib/javaclass/dsl/classpath_analysers.rb +27 -0
- data/lib/javaclass/dsl/java_name_factory.rb +79 -0
- data/lib/javaclass/dsl/loader.rb +42 -0
- data/lib/javaclass/dsl/loading_classpath.rb +53 -0
- data/lib/javaclass/dsl/mixin.rb +54 -0
- data/lib/javaclass/gems/zip_file.rb +154 -0
- data/lib/javaclass/java_language.rb +50 -0
- data/lib/javaclass/java_name.rb +329 -55
- data/lib/javaclass/java_name_scanner.rb +95 -0
- data/lib/javaclass/resources/iso_3166_countries.txt +240 -0
- data/lib/javaclass/resources/jdk0_packages.txt +6 -0
- data/lib/javaclass/resources/jdk1_packages.txt +6 -0
- data/lib/javaclass/resources/jdk2_packages.txt +4 -0
- data/lib/javaclass/resources/jdk3_packages.txt +6 -0
- data/lib/javaclass/resources/jdk4_packages.txt +22 -0
- data/lib/javaclass/resources/jdk5_packages.txt +5 -0
- data/lib/javaclass/resources/jdk6_packages.txt +7 -0
- data/lib/javaclass/resources/jdk7_packages.txt +0 -0
- data/lib/javaclass/resources/jdk_packages.txt +53 -0
- data/lib/javaclass/resources/reserved_words.txt +50 -0
- data/lib/javaclass/string_hexdump.rb +76 -0
- data/lib/javaclass/string_ux.rb +21 -10
- data/lib/javaclass.rb +16 -41
- data/license.txt +28 -0
- data/planned.txt +13 -0
- data/test/data/Object_102.class +0 -0
- data/test/data/Runnable_102.class +0 -0
- data/test/data/access_flags/AccessFlagsTestAnnotation.class +0 -0
- data/test/data/access_flags/AccessFlagsTestAnnotation.java +3 -0
- data/test/data/access_flags/AccessFlagsTestEnum$1.class +0 -0
- data/test/data/access_flags/AccessFlagsTestEnum.class +0 -0
- data/test/data/access_flags/AccessFlagsTestEnum.java +6 -0
- data/test/data/access_flags/AccessFlagsTestInner$1.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner$2.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner.java +13 -0
- data/test/data/access_flags/AccessFlagsTestPackage.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPackage.java +1 -1
- data/test/data/api/packagename/AccessFlagsTestPublic.class +0 -0
- data/test/data/class_version/ClassVersionTest17.class +0 -0
- data/test/data/class_version/make.bat +6 -2
- data/test/data/eclipse_classpath/classes/ClassVersionTest12.class +0 -0
- data/test/data/eclipse_classpath/lib/JarClasspathTest.jar +0 -0
- data/test/data/eclipse_classpath/test-classes/ClassVersionTest13.class +0 -0
- data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/ClassVersionTest10.class +0 -0
- data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/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 +6 -2
- data/test/data/jar_searcher/BrokenRunnable_102.class +0 -0
- data/test/data/java_home_classpath/jdk118/lib/classes.zip +0 -0
- data/test/data/java_name_scanner/META-INF/MANIFEST.MF +12 -0
- data/test/data/java_name_scanner/plugin.xml +18 -0
- data/test/data/maven_classpath/module/pom.xml +8 -0
- data/test/data/maven_classpath/module/target/classes/ClassVersionTest12.class +0 -0
- data/test/data/maven_classpath/pom.xml +8 -0
- data/test/data/maven_classpath/target/classes/ClassVersionTest10.class +0 -0
- data/test/data/maven_classpath/target/test-classes/ClassVersionTest11.class +0 -0
- data/test/data/transitive_dependencies/A.class +0 -0
- data/test/data/transitive_dependencies/A.java +5 -0
- data/test/data/transitive_dependencies/B.class +0 -0
- data/test/data/transitive_dependencies/B.java +3 -0
- data/test/data/transitive_dependencies/C.class +0 -0
- data/test/data/transitive_dependencies/C.java +3 -0
- data/test/data/transitive_dependencies/Start.class +0 -0
- data/test/data/transitive_dependencies/Start.java +4 -0
- data/test/data/transitive_dependencies/make.bat +3 -0
- data/test/data/zip_file/commons-math-2.2-broken.zip +0 -0
- data/test/data/zip_file/regenerated-with-7zip.zip +0 -0
- data/test/data/zip_file/regenerated-with-jar.zip +0 -0
- data/test/dot_classpath.rb +33 -0
- data/test/logging_folder_classpath.rb +19 -0
- data/test/setup.rb +1 -1
- data/test/test_access_flags.rb +58 -32
- data/test/test_adder_tree.rb +78 -0
- data/test/test_any_classpath.rb +39 -0
- data/test/test_base.rb +9 -7
- data/test/test_caching_classpath.rb +41 -0
- data/test/test_class_entry.rb +60 -60
- data/test/test_class_magic.rb +31 -0
- data/test/test_class_version.rb +25 -25
- data/test/test_composite_classpath.rb +22 -23
- data/test/test_constant_pool.rb +37 -13
- data/test/test_convention_classpath.rb +39 -0
- data/test/test_eclipse_classpath.rb +73 -0
- data/test/test_factory.rb +61 -0
- data/test/test_folder_classpath.rb +26 -10
- data/test/test_imported_types.rb +34 -0
- data/test/test_jar_classpath.rb +29 -14
- data/test/test_jar_searcher.rb +27 -14
- data/test/test_java_class_header.rb +22 -10
- data/test/test_java_class_header_as_java_name.rb +41 -0
- data/test/test_java_home_classpath.rb +17 -11
- data/test/test_java_name.rb +204 -64
- data/test/test_java_name_factory.rb +52 -0
- data/test/test_java_name_scanner.rb +24 -0
- data/test/test_javaclass_api.rb +43 -0
- data/test/test_list.rb +58 -44
- data/test/test_load_directive.rb +34 -0
- data/test/test_maven_classpath.rb +46 -0
- data/test/test_package_entry.rb +27 -22
- data/test/test_references.rb +14 -14
- data/test/test_string_hexdump.rb +24 -0
- data/test/test_string_ux.rb +18 -106
- data/test/test_tracking_classpath.rb +112 -0
- data/test/test_transitive_dependencies.rb +31 -0
- data/test/test_unpacking_jar_classpath.rb +43 -0
- data/test/test_zip_file.rb +33 -0
- data/test/ts_all_tests.rb +80 -18
- data/thanks.txt +2 -0
- metadata +151 -22
- data/lib/javaclass/classpath/port_ClassPathEntry.java +0 -202
- data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +0 -311
- data/lib/javaclass/classpath/port_DirectoryRepository.java +0 -24
- data/lib/javaclass/metric/ccd.rb +0 -68
- data/lib/javaclass/metric/class_usage.rb +0 -41
- data/test/test_javaclass.rb +0 -22
data/test/test_class_entry.rb
CHANGED
@@ -3,26 +3,26 @@ require 'javaclass/classlist/class_entry'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClassList
|
6
|
-
|
6
|
+
|
7
7
|
class TestClassEntry < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
attr_reader :version
|
10
|
-
|
10
|
+
|
11
11
|
def test_update
|
12
12
|
# fake methods for zentest, tested in all other tests
|
13
13
|
assert(true)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def test_public_eh
|
17
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class',
|
17
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', :public, 0)
|
18
18
|
assert(ce.public?)
|
19
|
-
|
19
|
+
|
20
20
|
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
|
21
21
|
assert(!ce.public?)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def test_version
|
25
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class',
|
25
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', :public, 0)
|
26
26
|
assert_equal([0], ce.version)
|
27
27
|
|
28
28
|
ce.update(1)
|
@@ -31,10 +31,10 @@ module TestJavaClass
|
|
31
31
|
ce.update(2)
|
32
32
|
assert_equal([0,1,2], ce.version)
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def test_to_full_qualified_s_first
|
36
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class',
|
37
|
-
|
36
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', :public, 0)
|
37
|
+
|
38
38
|
# new class in 0
|
39
39
|
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,0))
|
40
40
|
# class only in 0, package in 1
|
@@ -43,12 +43,12 @@ module TestJavaClass
|
|
43
43
|
ce.update(1)
|
44
44
|
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,1))
|
45
45
|
# dropped in 2
|
46
|
-
assert_equal("pkg.Class [-1] - \n", ce.to_full_qualified_s(0,2))
|
46
|
+
assert_equal("pkg.Class [-1] - \n", ce.to_full_qualified_s(0,2))
|
47
47
|
# class also in 2
|
48
48
|
ce.update(2)
|
49
49
|
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,2))
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def test_to_full_qualified_s_package
|
53
53
|
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
|
54
54
|
# new class in 0
|
@@ -59,15 +59,15 @@ module TestJavaClass
|
|
59
59
|
ce.update(1)
|
60
60
|
assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,1))
|
61
61
|
# dropped in 2
|
62
|
-
assert_equal("pkg.Class [-1p] - \n", ce.to_full_qualified_s(0,2))
|
62
|
+
assert_equal("pkg.Class [-1p] - \n", ce.to_full_qualified_s(0,2))
|
63
63
|
# class also in 2
|
64
64
|
ce.update(2)
|
65
65
|
assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,2))
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
def test_to_full_qualified_s_later
|
69
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class',
|
70
|
-
|
69
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', :public, 1)
|
70
|
+
|
71
71
|
# list is only for 1
|
72
72
|
assert_equal("pkg.Class - \n", ce.to_full_qualified_s(1,1))
|
73
73
|
# new class in 1
|
@@ -80,10 +80,10 @@ module TestJavaClass
|
|
80
80
|
# dropped in 3
|
81
81
|
assert_equal("pkg.Class [1-2] - \n", ce.to_full_qualified_s(0,3))
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
def test_to_full_qualified_s_later_package
|
85
85
|
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 1)
|
86
|
-
|
86
|
+
|
87
87
|
# list is only for 1
|
88
88
|
assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(1,1))
|
89
89
|
# new class in 1
|
@@ -96,103 +96,103 @@ module TestJavaClass
|
|
96
96
|
# dropped in 3
|
97
97
|
assert_equal("pkg.Class [1-2p] - \n", ce.to_full_qualified_s(0,3))
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
100
|
def test_to_package_shortcut_s
|
101
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2',
|
102
|
-
|
101
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', :public, 0)
|
102
|
+
|
103
103
|
# new class in 0
|
104
|
-
@version = [0]
|
104
|
+
@version = [0]
|
105
105
|
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
106
|
-
|
106
|
+
|
107
107
|
# class only in 0, package in 1
|
108
|
-
@version = [0,1]
|
108
|
+
@version = [0,1]
|
109
109
|
assert_equal(" Class2 [only 0] - \n", ce.to_package_shortcut_s)
|
110
|
-
|
110
|
+
|
111
111
|
# class also in 1
|
112
112
|
ce.update(1)
|
113
113
|
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
114
|
-
|
114
|
+
|
115
115
|
# class dropped in 2, package exists
|
116
|
-
@version = [0,1,2]
|
116
|
+
@version = [0,1,2]
|
117
117
|
assert_equal(" Class2 [-1] - \n", ce.to_package_shortcut_s)
|
118
|
-
|
118
|
+
|
119
119
|
# class also in 2
|
120
120
|
ce.update(2)
|
121
121
|
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
def test_to_package_shortcut_s_package
|
125
125
|
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 0)
|
126
|
-
|
126
|
+
|
127
127
|
# new class in 0
|
128
|
-
@version = [0]
|
128
|
+
@version = [0]
|
129
129
|
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
130
|
-
|
130
|
+
|
131
131
|
# class only in 0, package in 1
|
132
|
-
@version = [0,1]
|
132
|
+
@version = [0,1]
|
133
133
|
assert_equal(" Class2 [only 0p] - \n", ce.to_package_shortcut_s)
|
134
|
-
|
134
|
+
|
135
135
|
# class also in 1
|
136
136
|
ce.update(1)
|
137
137
|
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
138
|
-
|
138
|
+
|
139
139
|
# class dropped in 2, package exists
|
140
|
-
@version = [0,1,2]
|
140
|
+
@version = [0,1,2]
|
141
141
|
assert_equal(" Class2 [-1p] - \n", ce.to_package_shortcut_s)
|
142
|
-
|
142
|
+
|
143
143
|
# class also in 2
|
144
144
|
ce.update(2)
|
145
145
|
assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
def test_to_package_shortcut_s_later
|
149
|
-
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2',
|
150
|
-
|
149
|
+
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', :public, 1)
|
150
|
+
|
151
151
|
# list is only for 1
|
152
|
-
@version = [1]
|
152
|
+
@version = [1]
|
153
153
|
assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
|
154
|
-
|
154
|
+
|
155
155
|
# new class in 1
|
156
|
-
@version = [0,1]
|
156
|
+
@version = [0,1]
|
157
157
|
assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
|
158
|
-
|
158
|
+
|
159
159
|
# new class in 1, not in 2
|
160
|
-
@version = [0,1,2]
|
160
|
+
@version = [0,1,2]
|
161
161
|
assert_equal(" Class2 [only 1] - \n", ce.to_package_shortcut_s)
|
162
|
-
|
162
|
+
|
163
163
|
# new class in 1, also in 2
|
164
164
|
ce.update(2)
|
165
165
|
assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
|
166
|
-
|
166
|
+
|
167
167
|
# new class in 1 and 2, not in 3
|
168
|
-
@version = [0,1,2,3]
|
168
|
+
@version = [0,1,2,3]
|
169
169
|
assert_equal(" Class2 [1-2] - \n", ce.to_package_shortcut_s)
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
def test_to_package_shortcut_s_later_package
|
173
173
|
ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 1)
|
174
|
-
|
174
|
+
|
175
175
|
# list is only for 1
|
176
|
-
@version = [1]
|
176
|
+
@version = [1]
|
177
177
|
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
178
|
-
|
178
|
+
|
179
179
|
# new class in 1
|
180
|
-
@version = [0,1]
|
180
|
+
@version = [0,1]
|
181
181
|
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
182
|
-
|
182
|
+
|
183
183
|
# new class in 1, not in 2
|
184
|
-
@version = [0,1,2]
|
184
|
+
@version = [0,1,2]
|
185
185
|
assert_equal(" Class2 [only 1p] - \n", ce.to_package_shortcut_s)
|
186
|
-
|
186
|
+
|
187
187
|
# new class in 1, also in 2
|
188
188
|
ce.update(2)
|
189
189
|
assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
|
190
|
-
|
190
|
+
|
191
191
|
# new class in 1 and 2, not in 3
|
192
|
-
@version = [0,1,2,3]
|
192
|
+
@version = [0,1,2,3]
|
193
193
|
assert_equal(" Class2 [1-2p] - \n", ce.to_package_shortcut_s)
|
194
194
|
end
|
195
|
-
|
195
|
+
|
196
196
|
end
|
197
197
|
end
|
198
198
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classfile/class_magic'
|
3
|
+
|
4
|
+
module TestJavaClass
|
5
|
+
module TestClassFile
|
6
|
+
|
7
|
+
class TestClassMagic < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@magic = JavaClass::ClassFile::ClassMagic.new(load_class('Object_102'))
|
11
|
+
@wrong = JavaClass::ClassFile::ClassMagic.new("\xCA\xFE\xBA\xBF")
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_valid_eh
|
15
|
+
assert(@magic.valid?)
|
16
|
+
assert(!@wrong.valid?)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_bytes
|
20
|
+
assert_equal("\xCA\xFE\xBA\xBE", @magic.bytes)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_check
|
24
|
+
@magic.check # ok
|
25
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError) { @wrong.check }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/test/test_class_version.rb
CHANGED
@@ -3,59 +3,59 @@ require 'javaclass/classfile/class_version'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClassFile
|
6
|
-
|
6
|
+
|
7
7
|
class TestClassVersion < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
|
-
@v = (0..
|
11
|
-
JavaClass::ClassFile::ClassVersion.new(load_class("class_version/ClassVersionTest1#{i}"))
|
10
|
+
@v = (0..7).collect do |i|
|
11
|
+
JavaClass::ClassFile::ClassVersion.new(load_class("class_version/ClassVersionTest1#{i}"))
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
15
|
-
# Assert the list of
|
14
|
+
|
15
|
+
# Assert the list of +@v+ against the list of _expectations_ when invoking the given block.
|
16
16
|
def assert_classes(expectations)
|
17
|
-
expectations.
|
18
|
-
assert_equal(expectations[i], yield(@v[i]), "#{i}. element")
|
17
|
+
(0...expectations.size).each do |i|
|
18
|
+
assert_equal(expectations[i], yield(@v[i]), "#{i}. element is wrong")
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def test_major
|
23
|
-
assert_classes([45, 45, 46, 47, 48, 49, 50]) {|v| v.major}
|
23
|
+
assert_classes([45, 45, 46, 47, 48, 49, 50, 51]) { |v| v.major }
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
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
|
27
|
+
assert_classes([3, 3, 0, 0, 0, 0, 0, 0]) {|v| v.minor}
|
28
|
+
assert_equal(3, @v[1].minor) # shouldn't it be > 45.3, so JDK 1.1 still generates 1.0 byte code
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def test_to_s
|
32
32
|
assert_equal('50.0', @v[6].to_s)
|
33
33
|
assert_equal('45.3', @v[0].to_s)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def test_dump
|
37
37
|
assert_equal([' minor version: 0', ' major version: 50'], @v[6].dump)
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def test_to_f
|
41
41
|
assert_equal(50.0, @v[6].to_f)
|
42
42
|
assert_equal(45.3, @v[0].to_f)
|
43
|
-
|
43
|
+
|
44
44
|
v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
|
45
|
-
assert_equal(50.255, v.to_f)
|
46
|
-
|
45
|
+
assert_equal(50.255, v.to_f)
|
46
|
+
|
47
47
|
v = JavaClass::ClassFile::ClassVersion.new("....\xff\xff\0002")
|
48
|
-
assert_equal(50.65535, v.to_f)
|
48
|
+
assert_equal(50.65535, v.to_f)
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
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
|
-
|
52
|
+
assert_classes(%w[1.0 1.0 1.2 1.3 1.4 1.5 1.6 1.7]) { |v| v.jdk_version }
|
53
|
+
|
54
54
|
v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
|
55
55
|
assert_equal('unknown', v.jdk_version)
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
end
|
61
61
|
end
|
@@ -3,66 +3,65 @@ require 'javaclass/classpath/composite_classpath'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClasspath
|
6
|
-
|
6
|
+
|
7
7
|
class TestCompositeClasspath < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
10
|
@cpe = JavaClass::Classpath::CompositeClasspath.new
|
11
11
|
@cpe.add_file_name "#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar"
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def test_add_element
|
15
15
|
# fake methods for zentest, tested in setup and add_file_name
|
16
16
|
assert(true)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def test_add_file_name
|
20
|
-
@cpe.add_file_name "#{TEST_DATA_PATH}/folder_classpath/
|
20
|
+
@cpe.add_file_name "#{TEST_DATA_PATH}/folder_classpath/classes"
|
21
21
|
assert_equal(2+1+2, @cpe.count)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def test_additional_classpath
|
25
25
|
assert_equal([], @cpe.additional_classpath)
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def test_jar_eh
|
29
29
|
assert(!@cpe.jar?)
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def test_count
|
33
33
|
assert_equal(2+1, @cpe.count)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def test_elements
|
37
37
|
assert_equal(2, @cpe.elements.size)
|
38
|
+
assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar", @cpe.elements[0].to_s)
|
38
39
|
assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.jar", @cpe.elements[1].to_s)
|
39
40
|
end
|
40
|
-
|
41
|
+
|
41
42
|
def test_includes_eh
|
42
43
|
assert(@cpe.includes?('ClassVersionTest11.class'))
|
43
44
|
assert(@cpe.includes?('ClassVersionTest11'))
|
44
45
|
assert(@cpe.includes?('ClassVersionTest10.class'))
|
45
46
|
assert(@cpe.includes?('ClassVersionTest10'))
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
def test_load_binary
|
50
|
+
# JarClasspathTestManifest.jar
|
51
|
+
assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('package/ClassVersionTest11.class'))
|
52
|
+
# JarClasspathTest.jar
|
49
53
|
assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('ClassVersionTest11'))
|
50
54
|
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
51
|
-
|
55
|
+
|
56
|
+
assert_raise(JavaClass::Classpath::ClassNotFoundError) { @cpe.load_binary('NonExisting') }
|
52
57
|
end
|
53
|
-
|
58
|
+
|
54
59
|
def test_names
|
55
60
|
assert_equal(['ClassVersionTest11.class', 'ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
61
|
+
assert_equal(['ClassVersionTest11.class', 'package/ClassVersionTest11.class'], @cpe.names { |n| n=~ /11/ })
|
56
62
|
end
|
57
63
|
|
58
|
-
|
59
|
-
|
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
|
-
|
64
|
+
end unless defined? TestCompositeClasspath
|
65
|
+
|
67
66
|
end
|
68
|
-
end
|
67
|
+
end
|
data/test/test_constant_pool.rb
CHANGED
@@ -3,9 +3,9 @@ require 'javaclass/classfile/constant_pool'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClassFile
|
6
|
-
|
6
|
+
|
7
7
|
class TestConstantPool < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
# 1.6.0_11 javap.exe output of test class, only tweaked the float value a bit...
|
10
10
|
JAVAP_OUTPUT = ' Constant pool:
|
11
11
|
const #1 = Method #15.#33; // java/lang/Object."<init>":()V
|
@@ -13,7 +13,7 @@ const #2 = String #34; // String field
|
|
13
13
|
const #3 = Field #14.#35; // ConstantPoolTest.stringField:Ljava/lang/String;
|
14
14
|
const #4 = InterfaceMethod #16.#36; // java/lang/Runnable.run:()V
|
15
15
|
const #5 = Field #14.#37; // ConstantPoolTest.intField:I
|
16
|
-
const #6 = float 3.14158995322368e+
|
16
|
+
const #6 = float 3.14158995322368e+22f;
|
17
17
|
const #7 = Field #14.#38; // ConstantPoolTest.floatField:F
|
18
18
|
const #8 = long 99999999l;
|
19
19
|
const #10 = Field #14.#39; // ConstantPoolTest.longField:J
|
@@ -49,50 +49,74 @@ const #40 = NameAndType #27:#28;// doubleField:D
|
|
49
49
|
const #41 = Asciz ConstantPoolTest;
|
50
50
|
const #42 = Asciz java/lang/Object;
|
51
51
|
const #43 = Asciz java/lang/Runnable;'
|
52
|
-
|
52
|
+
|
53
53
|
def setup
|
54
54
|
@cp = JavaClass::ClassFile::ConstantPool.new(load_class('constant_pool/ConstantPoolTest'))
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def test_index
|
58
58
|
assert_equal('Method', @cp[1].name)
|
59
59
|
assert_equal('Field', @cp[10].name)
|
60
|
+
assert_raise(IndexError) { @cp[-1] }
|
61
|
+
assert_raise(IndexError) { @cp[44] }
|
60
62
|
end
|
61
|
-
|
63
|
+
|
62
64
|
def test_size
|
63
65
|
assert_equal(331, @cp.size)
|
64
66
|
end
|
65
|
-
|
67
|
+
|
66
68
|
def test_item_count
|
67
69
|
assert_equal(43, @cp.item_count)
|
68
70
|
end
|
69
|
-
|
71
|
+
|
70
72
|
def test_dump
|
71
73
|
# puts @cp.dump.join("\n")
|
72
74
|
assert_equal(JAVAP_OUTPUT.gsub(/ +/, ' ').gsub(/"</, '<').gsub(/>"/, '>'), @cp.dump.join("\n").gsub(/( |\t)+/,' '))
|
73
75
|
end
|
74
|
-
|
76
|
+
|
75
77
|
def test_items
|
76
78
|
pool = @cp.items
|
77
79
|
assert_equal(41, pool.size) # 2 double
|
78
80
|
assert_equal('Method', pool[0].name)
|
79
81
|
assert_equal('stringField', pool[14].value)
|
80
82
|
end
|
81
|
-
|
83
|
+
|
82
84
|
def test_find
|
83
85
|
found = @cp.find(JavaClass::ClassFile::ConstantPool::STRING_TAG)
|
84
86
|
assert_equal(1, found.size)
|
85
87
|
assert_equal('String', found[0].name)
|
86
88
|
assert_equal(34, found[0].string_index)
|
87
89
|
end
|
88
|
-
|
90
|
+
|
89
91
|
def test_strings
|
90
92
|
found = @cp.strings
|
91
93
|
assert_equal(1, found.size)
|
92
94
|
assert_equal('String', found[0].name)
|
93
95
|
end
|
94
|
-
|
96
|
+
|
97
|
+
def test_class_item
|
98
|
+
assert_equal('ConstantPoolTest', @cp.class_item(14).to_s)
|
99
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError) { @cp.class_item(13) }
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_field_item
|
103
|
+
assert_equal('ConstantPoolTest', @cp.field_item(3).class_name)
|
104
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError) { @cp.field_item(4) }
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_method_item
|
108
|
+
assert_equal('java/lang/Object', @cp.method_item(1).class_name)
|
109
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError) { @cp.method_item(3) }
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_class_new_invalid_type
|
113
|
+
data = load_class('constant_pool/ConstantPoolTest')
|
114
|
+
data[10] = '*'; # 42, was 10
|
115
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError){
|
116
|
+
JavaClass::ClassFile::ConstantPool.new(data)
|
117
|
+
}
|
118
|
+
end
|
95
119
|
end
|
96
|
-
|
120
|
+
|
97
121
|
end
|
98
122
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classpath/convention_classpath'
|
3
|
+
|
4
|
+
module TestJavaClass
|
5
|
+
module TestClasspath
|
6
|
+
|
7
|
+
class TestConventionClasspath < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@folder = "#{TEST_DATA_PATH}/eclipse_classpath"
|
11
|
+
@cpe = JavaClass::Classpath::ConventionClasspath.new(@folder)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_class_valid_location_eh
|
15
|
+
assert(JavaClass::Classpath::ConventionClasspath.valid_location?("#{TEST_DATA_PATH}/eclipse_classpath"))
|
16
|
+
assert(JavaClass::Classpath::ConventionClasspath.valid_location?("#{TEST_DATA_PATH}/folder_classpath"))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_class_valid_location_eh_no_pom
|
20
|
+
assert(!JavaClass::Classpath::ConventionClasspath.valid_location?("#{TEST_DATA_PATH}/jar_classpath"))
|
21
|
+
assert(!JavaClass::Classpath::ConventionClasspath.valid_location?("#{TEST_DATA_PATH}/not_existing_folder"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_count
|
25
|
+
assert_equal(1, @cpe.count)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_additional_classpath
|
29
|
+
assert_equal(["#{@folder}/lib/JarClasspathTest.jar"], @cpe.additional_classpath)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_includes_eh
|
33
|
+
assert(@cpe.includes?('ClassVersionTest12.class'))
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classpath/eclipse_classpath'
|
3
|
+
require 'test/dot_classpath'
|
4
|
+
|
5
|
+
module TestJavaClass
|
6
|
+
module TestClasspath
|
7
|
+
|
8
|
+
class TestEclipseClasspath < Test::Unit::TestCase
|
9
|
+
include DotClasspath
|
10
|
+
|
11
|
+
def setup
|
12
|
+
create_dot_classpath
|
13
|
+
@cpe = JavaClass::Classpath::EclipseClasspath.new(eclipse_classpath)
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
remove_dot_classpath
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_class_valid_location_eh
|
21
|
+
assert(JavaClass::Classpath::EclipseClasspath.valid_location?(eclipse_classpath))
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_class_valid_location_eh_invalid
|
25
|
+
assert(!JavaClass::Classpath::EclipseClasspath.valid_location?("#{TEST_DATA_PATH}/folder_classpath"))
|
26
|
+
assert(!JavaClass::Classpath::EclipseClasspath.valid_location?("#{TEST_DATA_PATH}/not_existing_folder"))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_count
|
30
|
+
assert_equal(4, @cpe.count)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_elements
|
34
|
+
assert_equal(3, @cpe.elements.size)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_includes_eh
|
38
|
+
assert(@cpe.includes?('ClassVersionTest10.class'))
|
39
|
+
assert(@cpe.includes?('package/ClassVersionTest11.class'))
|
40
|
+
assert(@cpe.includes?('ClassVersionTest12.class'))
|
41
|
+
assert(@cpe.includes?('ClassVersionTest13.class'))
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_class_skip_lib
|
45
|
+
JavaClass::Classpath::EclipseClasspath.skip_lib
|
46
|
+
cpe = JavaClass::Classpath::EclipseClasspath.new(eclipse_classpath)
|
47
|
+
JavaClass::Classpath::EclipseClasspath.skip_lib(false)
|
48
|
+
assert(!cpe.includes?('ClassVersionTest10.class'))
|
49
|
+
assert(cpe.includes?('ClassVersionTest12.class'))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_class_add_variable
|
53
|
+
begin
|
54
|
+
JavaClass::Classpath::EclipseClasspath.add_variable("TEST", TEST_DATA_PATH)
|
55
|
+
|
56
|
+
cpe = JavaClass::Classpath::EclipseClasspath.new(eclipse_classpath)
|
57
|
+
assert(cpe.includes?('ClassVersionTest10.class'))
|
58
|
+
|
59
|
+
ensure
|
60
|
+
JavaClass::Classpath::EclipseClasspath.add_variable("TEST", nil)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_class_new_invalid
|
65
|
+
assert_raise(IOError) {
|
66
|
+
JavaClass::Classpath::EclipseClasspath.new("#{TEST_DATA_PATH}/folder_classpath")
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|