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_java_name.rb
CHANGED
@@ -2,107 +2,247 @@ require File.dirname(__FILE__) + '/setup'
|
|
2
2
|
require 'javaclass/java_name'
|
3
3
|
|
4
4
|
class TestString < Test::Unit::TestCase
|
5
|
+
|
5
6
|
def test_to_javaname
|
6
|
-
assert_equal(JavaClass::
|
7
|
+
assert_equal(JavaClass::JavaClassFileName, 'at/kugel/tool/Some.class'.to_javaname.class)
|
7
8
|
assert_equal('Some', 'Some'.to_javaname)
|
8
9
|
assert_equal('at/kugel/tool/Some.class', 'at/kugel/tool/Some.class'.to_javaname)
|
9
|
-
assert_equal("at
|
10
|
+
assert_equal("at/kugel/tool/Some", "at\\kugel\\tool\\Some.java".to_javaname)
|
10
11
|
assert_equal('at.kugel.tool.Some', 'at.kugel.tool.Some'.to_javaname)
|
12
|
+
assert_raise(ArgumentError) { 'abc/xyz.123'.to_javaname }
|
11
13
|
end
|
12
14
|
|
13
15
|
end
|
14
16
|
|
15
17
|
module TestJavaClass
|
16
|
-
|
18
|
+
|
19
|
+
class TestPackageLogic < Test::Unit::TestCase
|
20
|
+
include JavaClass::PackageLogic
|
21
|
+
|
17
22
|
def setup
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
|
23
|
+
@package = 'at.kugel.tool.'
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_same_or_subpackage_of_eh
|
27
|
+
assert(same_or_subpackage_of?(%w[ at.kugel ]))
|
28
|
+
assert(same_or_subpackage_of?(%w[ at.kugel.tool ]))
|
29
|
+
assert(!same_or_subpackage_of?(%w[ at.kugel.tool.some ]))
|
30
|
+
assert(same_or_subpackage_of?(%w[ java at.kugel ]))
|
31
|
+
|
32
|
+
@package = ''
|
33
|
+
assert(!same_or_subpackage_of?(%w[ at at.kugel ]))
|
22
34
|
end
|
23
35
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
36
|
+
def test_subpackage_of_eh
|
37
|
+
assert(subpackage_of?(%w[ at.kugel ]))
|
38
|
+
assert(subpackage_of?(%w[ at.kugel.tool ]))
|
39
|
+
assert(!subpackage_of?(%w[ at.kugel.tool.class ]))
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_in_jdk_eh
|
43
|
+
assert(!in_jdk?)
|
44
|
+
|
45
|
+
@package = 'java.lang'
|
46
|
+
assert(in_jdk?)
|
47
|
+
|
48
|
+
@package = '' # default
|
49
|
+
assert(!in_jdk?)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class TestSimpleNameLogic < Test::Unit::TestCase
|
55
|
+
include JavaClass::SimpleNameLogic
|
56
|
+
|
57
|
+
def setup
|
58
|
+
@simple_name = 'SomeClassWithMoreNames'
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_split_simple_name
|
62
|
+
assert_equal(['', 'SomeClassWithMoreNames'], split_simple_name(0))
|
63
|
+
assert_equal(['Some', 'ClassWithMoreNames'], split_simple_name(1))
|
64
|
+
assert_equal(['SomeClass', 'WithMoreNames'], split_simple_name(2))
|
65
|
+
assert_equal(['SomeClassWith', 'MoreNames'], split_simple_name(3))
|
66
|
+
assert_equal(['SomeClassWithMore', 'Names'], split_simple_name(4))
|
67
|
+
assert_equal(['SomeClassWithMoreNames', ''], split_simple_name(5))
|
68
|
+
assert_equal(['SomeClassWithMoreNames', ''], split_simple_name(6))
|
69
|
+
|
70
|
+
assert_equal(['SomeClassWithMoreNames', ''], split_simple_name(-1))
|
71
|
+
assert_equal(['SomeClassWithMore', 'Names'], split_simple_name(-2))
|
72
|
+
assert_equal(['SomeClassWith', 'MoreNames'], split_simple_name(-3))
|
73
|
+
assert_equal(['SomeClass', 'WithMoreNames'], split_simple_name(-4))
|
74
|
+
assert_equal(['Some', 'ClassWithMoreNames'], split_simple_name(-5))
|
75
|
+
assert_equal(['', 'SomeClassWithMoreNames'], split_simple_name(-6))
|
76
|
+
assert_equal(['', 'SomeClassWithMoreNames'], split_simple_name(-7))
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
class TestJavaQualifiedName < Test::Unit::TestCase
|
82
|
+
|
83
|
+
def setup
|
84
|
+
@simple_name = JavaClass::JavaQualifiedName.new('Some')
|
85
|
+
@qualified_name = JavaClass::JavaQualifiedName.new('at.kugel.tool.Some')
|
86
|
+
@frozen_name = JavaClass::JavaQualifiedName.new('at.kugel.tool.Some')
|
87
|
+
@frozen_name.freeze
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_class_new_invalid
|
91
|
+
assert_raise(ArgumentError) { JavaClass::JavaQualifiedName.new('at.kugel.tool/Some') }
|
92
|
+
assert_raise(ArgumentError) { JavaClass::JavaQualifiedName.new('at.kugel.tool.') }
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_class_new_caches
|
96
|
+
cn = JavaClass::JavaQualifiedName.new('at.kugel.tool.Some', 1, 2 )
|
97
|
+
assert_equal(1, cn.to_jvmname)
|
98
|
+
assert_equal(2, cn.to_class_file)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_package
|
102
|
+
assert_equal('', @simple_name.package)
|
103
|
+
assert_equal('at.kugel.tool', @qualified_name.package)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_simple_name
|
107
|
+
assert_equal('Some', @simple_name.simple_name)
|
108
|
+
assert_equal('Some', @qualified_name.simple_name)
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_full_name
|
112
|
+
assert_equal('Some', @simple_name.full_name)
|
113
|
+
assert_equal('at.kugel.tool.Some', @qualified_name.full_name)
|
29
114
|
end
|
30
115
|
|
31
116
|
def test_to_javaname
|
32
|
-
|
33
|
-
|
117
|
+
assert_same(@qualified_name, @qualified_name.to_javaname)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_to_classname
|
121
|
+
assert_same(@qualified_name, @qualified_name.to_classname)
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_to_jvmname
|
125
|
+
assert_equal('at/kugel/tool/Some', @qualified_name.to_jvmname)
|
126
|
+
assert_same(@qualified_name.to_jvmname, @qualified_name.to_jvmname) # is saved
|
127
|
+
|
128
|
+
assert_equal('at/kugel/tool/Some', @frozen_name.to_jvmname)
|
129
|
+
assert_not_same(@frozen_name.to_jvmname, @frozen_name.to_jvmname) # is not saved
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_to_java_file
|
133
|
+
assert_equal('at/kugel/tool/Some.java', @qualified_name.to_java_file)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_to_class_file
|
137
|
+
assert_equal('at/kugel/tool/Some.class', @qualified_name.to_class_file)
|
138
|
+
assert_same(@qualified_name.to_class_file, @qualified_name.to_class_file) # is saved
|
139
|
+
|
140
|
+
assert_equal('at/kugel/tool/Some.class', @frozen_name.to_class_file)
|
141
|
+
assert_not_same(@frozen_name.to_class_file, @frozen_name.to_class_file) # is not saved
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_hash_keys_needs_freeze
|
145
|
+
map = Hash.new # x (JavaQualifiedName) => anything
|
146
|
+
map[@qualified_name.freeze] = :anything
|
147
|
+
qn = map.keys[0]
|
148
|
+
assert_same(JavaClass::JavaQualifiedName, qn.class)
|
149
|
+
assert_equal('Some', qn.simple_name)
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
class TestJavaVMName < Test::Unit::TestCase
|
155
|
+
|
156
|
+
def setup
|
157
|
+
@jvm_path = JavaClass::JavaVMName.new('at/kugel/tool/SomeClassWithMoreNames')
|
158
|
+
#@jvm_method_name = JavaClass::JavaName.new('at/kugel/tool/Some.<init>')
|
159
|
+
@jvm_array_name = JavaClass::JavaVMName.new('[Ljava/lang/String;')
|
160
|
+
@jvm_atom_name = JavaClass::JavaVMName.new('[[[B')
|
161
|
+
@frozen_path = JavaClass::JavaVMName.new('at/kugel/tool/SomeClassWithMoreNames')
|
162
|
+
@frozen_path.freeze
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_to_classname
|
166
|
+
assert_equal('at.kugel.tool.SomeClassWithMoreNames', @jvm_path.to_classname)
|
167
|
+
#assert_equal('at.kugel.tool.Some', @jvm_method_name.to_classname)
|
168
|
+
assert_equal('java.lang.String', @jvm_array_name.to_classname)
|
169
|
+
assert_equal('java.lang.Byte', @jvm_atom_name.to_classname)
|
170
|
+
assert_equal('at.kugel.tool.SomeClassWithMoreNames', @frozen_path.to_classname)
|
34
171
|
end
|
35
172
|
|
36
173
|
def test_to_jvmname
|
37
|
-
assert_equal('
|
38
|
-
assert_equal('at/kugel/tool/Some', @
|
39
|
-
|
174
|
+
assert_equal('at/kugel/tool/SomeClassWithMoreNames', @jvm_path.to_jvmname)
|
175
|
+
#assert_equal('at/kugel/tool/Some', @jvm_method_name.to_jvmname)
|
176
|
+
assert_same(@jvm_path.to_jvmname, @jvm_path.to_jvmname)
|
40
177
|
end
|
41
178
|
|
42
179
|
def test_to_java_file
|
43
|
-
assert_equal('
|
44
|
-
assert_equal('at/kugel/tool/Some.java', @
|
45
|
-
assert_equal('at/kugel/tool/SomeClassWithMoreNames.java', @cm.to_java_file)
|
180
|
+
assert_equal('at/kugel/tool/SomeClassWithMoreNames.java', @jvm_path.to_java_file)
|
181
|
+
#assert_equal('at/kugel/tool/Some.java', @jvm_method_name.to_java_file)
|
46
182
|
end
|
47
183
|
|
48
184
|
def test_to_class_file
|
49
|
-
assert_equal('
|
50
|
-
assert_equal('at/kugel/tool/Some.class', @
|
51
|
-
assert_equal('at/kugel/tool/SomeClassWithMoreNames.class', @
|
185
|
+
assert_equal('at/kugel/tool/SomeClassWithMoreNames.class', @jvm_path.to_class_file)
|
186
|
+
#assert_equal('at/kugel/tool/Some.class', @jvm_method_name.to_class_file)
|
187
|
+
assert_equal('at/kugel/tool/SomeClassWithMoreNames.class', @frozen_path.to_class_file)
|
52
188
|
end
|
53
189
|
|
54
190
|
def test_full_name
|
55
|
-
assert_equal('
|
56
|
-
assert_equal('at.kugel.tool.Some', @
|
57
|
-
assert_equal('at.kugel.tool.SomeClassWithMoreNames', @cm.full_name)
|
191
|
+
assert_equal('at.kugel.tool.SomeClassWithMoreNames', @jvm_path.full_name)
|
192
|
+
#assert_equal('at.kugel.tool.Some', @jvm_method_name.full_name)
|
58
193
|
end
|
59
|
-
|
60
|
-
def
|
61
|
-
|
62
|
-
assert_equal(
|
63
|
-
assert_equal(
|
194
|
+
|
195
|
+
def test_array_eh
|
196
|
+
assert(!@jvm_path.array?)
|
197
|
+
assert_equal(1, @jvm_array_name.array?)
|
198
|
+
assert_equal(3, @jvm_atom_name.array?)
|
64
199
|
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
class TestJavaClassFile < Test::Unit::TestCase
|
65
204
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
assert_equal('Some.class', @cn.simple_name.to_class_file)
|
205
|
+
def setup
|
206
|
+
@win_file = JavaClass::JavaClassFileName.new("at\\kugel\\tool\\Some.class")
|
207
|
+
@class_file = JavaClass::JavaClassFileName.new('at/kugel/tool/Some.class')
|
208
|
+
@jdk_class_file = JavaClass::JavaClassFileName.new('java/lang/String.class')
|
209
|
+
@frozen_file = JavaClass::JavaClassFileName.new('at/kugel/tool/Some.class')
|
210
|
+
@frozen_file.freeze
|
73
211
|
end
|
74
212
|
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
213
|
+
def test_to_classname
|
214
|
+
assert_equal('at.kugel.tool.Some', @win_file.to_classname)
|
215
|
+
assert_equal('at.kugel.tool', @win_file.to_classname.package)
|
216
|
+
assert_equal('at.kugel.tool.Some', @class_file.to_classname)
|
217
|
+
assert_equal('java.lang.String', @jdk_class_file.to_classname)
|
218
|
+
assert_equal('at.kugel.tool.Some', @frozen_file.to_classname)
|
219
|
+
end
|
80
220
|
|
81
|
-
|
221
|
+
def test_to_javaname
|
222
|
+
assert(@class_file == @class_file.to_javaname)
|
223
|
+
assert(@class_file === @class_file.to_javaname)
|
82
224
|
end
|
83
225
|
|
84
|
-
def
|
85
|
-
|
86
|
-
|
87
|
-
|
226
|
+
def test_to_jvmname
|
227
|
+
assert_equal('at/kugel/tool/Some', @win_file.to_jvmname)
|
228
|
+
assert_equal('at/kugel/tool/Some', @class_file.to_jvmname)
|
229
|
+
assert_equal('at/kugel/tool/Some', @frozen_file.to_jvmname)
|
88
230
|
end
|
89
231
|
|
90
|
-
def
|
91
|
-
assert_equal(
|
92
|
-
assert_equal(
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
assert_equal(
|
97
|
-
assert_equal(
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
assert_equal(
|
103
|
-
assert_equal(
|
104
|
-
assert_equal(['', 'SomeClassWithMoreNames'], @cm.split_simple_name(-6))
|
105
|
-
assert_equal(['', 'SomeClassWithMoreNames'], @cm.split_simple_name(-7))
|
232
|
+
def test_to_java_file
|
233
|
+
assert_equal('at/kugel/tool/Some.java', @win_file.to_java_file)
|
234
|
+
assert_equal('at/kugel/tool/Some.java', @class_file.to_java_file)
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_to_class_file
|
238
|
+
assert_equal('at\\kugel\\tool\\Some.class', @win_file.to_class_file)
|
239
|
+
assert_equal('at/kugel/tool/Some.class', @class_file.to_class_file)
|
240
|
+
assert_equal('at/kugel/tool/Some.class', @frozen_file.to_class_file)
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_full_name
|
244
|
+
assert_equal('at.kugel.tool.Some', @win_file.full_name)
|
245
|
+
assert_equal('at.kugel.tool.Some', @class_file.full_name)
|
106
246
|
end
|
107
247
|
|
108
248
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/dsl/java_name_factory'
|
3
|
+
|
4
|
+
module TestJavaClass
|
5
|
+
module TestDsl
|
6
|
+
|
7
|
+
class TestJavaNameFactory < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include JavaClass::Dsl::JavaNameFactory
|
10
|
+
|
11
|
+
def test_java_class
|
12
|
+
assert_equal('java.lang.String', java.lang.String)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_java_package
|
16
|
+
assert_equal('java.lang', java.lang.*)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_java_result_is_javaname
|
20
|
+
assert_equal('java.lang.String', java.lang.String.full_name)
|
21
|
+
assert_equal('java.lang', java.lang.*.package)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_java_reserved_word
|
25
|
+
assert_raise(NoMethodError) { java.long.Class }
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_javax
|
29
|
+
assert_equal('javax.xml.Document', javax.xml.Document)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_method_missing
|
33
|
+
assert_equal('org.codecop.kata.PrimeFactors', org.codecop.kata.PrimeFactors)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_method_missing_no_java_identifier_character
|
37
|
+
assert_raise(NoMethodError) { java.lang.Signal! }
|
38
|
+
assert_raise(NoMethodError) { com.sun.Signal! }
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_method_missing_no_country_iso_code
|
42
|
+
assert_raise(NameError) { xx.cmp.Signal }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_method_missing_no_valid_subpackage
|
46
|
+
assert_raise(NoMethodError) { org.somePackage.Signal }
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/java_name_scanner'
|
3
|
+
|
4
|
+
module TestJavaClass
|
5
|
+
|
6
|
+
class TestJavaNameScanner < Test::Unit::TestCase
|
7
|
+
include JavaClass::JavaNameScanner
|
8
|
+
|
9
|
+
def test_scan_text_for_class_names
|
10
|
+
assert_equal([], scan_text_for_class_names(''))
|
11
|
+
assert_equal(['java.lang.String'], scan_text_for_class_names('java.lang.String'))
|
12
|
+
assert_equal(['java.lang.String'], scan_text_for_class_names("Bundle-Version: 1.0.0.qualifier\nBundle-Activator: java.lang.String\nBundle-ActivationPolicy: lazy"))
|
13
|
+
assert_equal(['java.lang.String'], scan_text_for_class_names(" <extension\n point=\"java.lang.String\">\n </extension>"))
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_scan_config_for_class_names
|
17
|
+
result = scan_config_for_class_names("#{TEST_DATA_PATH}/java_name_scanner")
|
18
|
+
assert_equal(2, result.size)
|
19
|
+
assert_equal('some.PrivilegeCheck', result[0])
|
20
|
+
assert_equal('some.plugin.Activator', result[1])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass'
|
3
|
+
|
4
|
+
module TestJavaClass
|
5
|
+
|
6
|
+
# Test the public API usage.
|
7
|
+
class TestJavaClassAPI < Test::Unit::TestCase # ZenTest SKIP
|
8
|
+
|
9
|
+
# See http://api.javaclass-rb.googlecode.com/hg/0.0.2/index.html
|
10
|
+
def test_usage_002
|
11
|
+
clazz = JavaClass.parse("#{TEST_DATA_PATH}/api/packagename/AccessFlagsTestPublic.class")
|
12
|
+
assert_not_nil(clazz)
|
13
|
+
assert_equal('50.0', clazz.version.to_s)
|
14
|
+
assert_equal('packagename/AccessFlagsTestPublic', clazz.constant_pool.items[1].to_s)
|
15
|
+
assert(clazz.access_flags.public?)
|
16
|
+
assert_equal('packagename/AccessFlagsTestPublic', clazz.this_class.to_s)
|
17
|
+
assert_equal('java/lang/Object', clazz.super_class.to_s)
|
18
|
+
assert_equal('java/lang/Object.<init>:()V', clazz.references.referenced_methods[0].to_s)
|
19
|
+
end
|
20
|
+
|
21
|
+
# See http://api.javaclass-rb.googlecode.com/hg/0.0.3/index.html
|
22
|
+
def test_usage_003
|
23
|
+
clazz = JavaClass.load_fs("#{TEST_DATA_PATH}/api/packagename/AccessFlagsTestPublic.class")
|
24
|
+
assert_not_nil(clazz)
|
25
|
+
|
26
|
+
classpath = JavaClass.classpath("#{TEST_DATA_PATH}/api")
|
27
|
+
clazz = JavaClass.load_cp('packagename/AccessFlagsTestPublic', classpath)
|
28
|
+
assert_not_nil(clazz)
|
29
|
+
|
30
|
+
assert_equal(50, clazz.version.major)
|
31
|
+
assert_equal(0, clazz.version.minor)
|
32
|
+
assert_equal('packagename/AccessFlagsTestPublic', clazz.constant_pool.items[1].to_s)
|
33
|
+
assert(clazz.access_flags.public?)
|
34
|
+
assert_equal('packagename/AccessFlagsTestPublic', clazz.this_class.to_s)
|
35
|
+
assert_equal('packagename/AccessFlagsTestPublic.java', clazz.this_class.to_java_file)
|
36
|
+
assert_equal('java/lang/Object', clazz.super_class.to_s)
|
37
|
+
assert_equal('java.lang.Object', clazz.super_class.to_classname)
|
38
|
+
assert_equal('java/lang/Object.<init>:()V', clazz.references.referenced_methods[0].to_s)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/test/test_list.rb
CHANGED
@@ -3,120 +3,134 @@ require 'javaclass/classlist/list'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClassList
|
6
|
-
|
6
|
+
|
7
7
|
class TestList < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
PACKAGE_CLASS = 'packagename/PackageClass.class'
|
10
10
|
PUBLIC_CLASS = 'packagename/PublicClass.class'
|
11
11
|
PUBLIC_INTERFACE = 'packagename/PublicInterface.class'
|
12
|
-
|
12
|
+
|
13
13
|
def setup
|
14
14
|
@list = JavaClass::ClassList::List.new
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def test_add_class
|
18
18
|
# fake methods for zentest, tested in all other tests
|
19
19
|
assert(true)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def test_packages
|
23
23
|
@list.add_class(PACKAGE_CLASS, false, 0)
|
24
|
-
@list.add_class(PUBLIC_CLASS,
|
25
|
-
|
26
|
-
@list.add_class(PUBLIC_CLASS,
|
27
|
-
@list.add_class(PUBLIC_INTERFACE,
|
28
|
-
|
24
|
+
@list.add_class(PUBLIC_CLASS, :public, 0)
|
25
|
+
|
26
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
27
|
+
@list.add_class(PUBLIC_INTERFACE, :public, 1)
|
28
|
+
|
29
29
|
packages = @list.packages
|
30
30
|
assert_equal(1, packages.size)
|
31
31
|
assert_equal('packagename', packages[0].name)
|
32
32
|
assert_equal([0,1], packages[0].version)
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def test_old_access_list
|
36
36
|
@list.add_class(PACKAGE_CLASS, false, 0)
|
37
|
-
@list.add_class(PUBLIC_CLASS,
|
37
|
+
@list.add_class(PUBLIC_CLASS, :public, 0)
|
38
38
|
assert_equal(["packagename.PackageClass [p] - \n"], @list.old_access_list)
|
39
|
-
|
39
|
+
|
40
40
|
@list.add_class(PACKAGE_CLASS, false, 1)
|
41
|
-
@list.add_class(PUBLIC_CLASS,
|
41
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
42
42
|
@list.add_class(PUBLIC_INTERFACE, false, 1)
|
43
43
|
assert_equal(["packagename.PublicInterface [1p] - \n"], @list.old_access_list)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def test_plain_class_list
|
47
47
|
@list.add_class(PACKAGE_CLASS, false, 0)
|
48
|
-
@list.add_class(PUBLIC_CLASS,
|
48
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
49
49
|
assert_equal(["packagename.PackageClass\n", "packagename.PublicClass\n"], @list.plain_class_list)
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def test_plain_class_list_block_given
|
53
53
|
@list.add_class(PACKAGE_CLASS, false, 0)
|
54
|
-
@list.add_class(PUBLIC_CLASS,
|
54
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
55
55
|
assert_equal(["packagename.PublicClass\n"], @list.plain_class_list { |c| c.public? })
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def test_full_class_list
|
59
59
|
@list.add_class(PACKAGE_CLASS, false, 0)
|
60
|
-
@list.add_class(PUBLIC_CLASS,
|
61
|
-
|
60
|
+
@list.add_class(PUBLIC_CLASS, :public, 0)
|
61
|
+
|
62
62
|
@list.add_class(PACKAGE_CLASS, false, 1)
|
63
|
-
@list.add_class(PUBLIC_CLASS,
|
64
|
-
@list.add_class(PUBLIC_INTERFACE,
|
65
|
-
|
63
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
64
|
+
@list.add_class(PUBLIC_INTERFACE, :public, 1)
|
65
|
+
|
66
66
|
@list.add_class(PACKAGE_CLASS, false, 2)
|
67
|
-
@list.add_class(PUBLIC_INTERFACE,
|
68
|
-
|
67
|
+
@list.add_class(PUBLIC_INTERFACE, :public, 2)
|
68
|
+
|
69
69
|
expected = [
|
70
|
-
"packagename.PackageClass [p] - \n",
|
70
|
+
"packagename.PackageClass [p] - \n",
|
71
71
|
"packagename.PublicClass [-1] - \n",
|
72
72
|
"packagename.PublicInterface [1] - \n"
|
73
73
|
]
|
74
74
|
result = @list.full_class_list
|
75
75
|
assert_equal(expected, result)
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
def test_parse_line
|
79
79
|
expected = [
|
80
|
-
"packagename.PackageClass [p] - \n",
|
80
|
+
"packagename.PackageClass [p] - \n",
|
81
81
|
"packagename.PublicClass [-1] - \n",
|
82
82
|
"packagename.PublicInterface [1] - \n"
|
83
83
|
]
|
84
|
-
|
84
|
+
|
85
85
|
expected.each {|line| @list.parse_line(line, 2) }
|
86
86
|
result = @list.full_class_list
|
87
87
|
assert_equal(expected, result)
|
88
88
|
end
|
89
|
-
|
90
|
-
def
|
89
|
+
|
90
|
+
def test_version_normal
|
91
91
|
@list.parse_line("javax.swing.HeaderParser [1] - \n", 1)
|
92
|
+
assert_equal([1], @list.version)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_version_only
|
92
96
|
@list.parse_line("javax.swing.HeaderParser [only 2] - \n", 3)
|
93
|
-
assert_equal([
|
97
|
+
assert_equal([2], @list.version)
|
94
98
|
end
|
95
|
-
|
99
|
+
|
100
|
+
def test_version_range
|
101
|
+
@list.parse_line("javax.swing.HeaderParser [3-4] - \n", 0)
|
102
|
+
assert_equal([3,4], @list.version)
|
103
|
+
end
|
104
|
+
|
96
105
|
def test_first_last_versions
|
97
|
-
@list.add_class(PUBLIC_CLASS,
|
98
|
-
@list.add_class(PUBLIC_CLASS,
|
99
|
-
@list.add_class(PUBLIC_INTERFACE,
|
106
|
+
@list.add_class(PUBLIC_CLASS, :public, 0)
|
107
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
108
|
+
@list.add_class(PUBLIC_INTERFACE, :public, 2)
|
100
109
|
assert_equal([0,2], @list.first_last_versions)
|
101
110
|
end
|
102
|
-
|
111
|
+
|
103
112
|
def test_size
|
104
|
-
@list.add_class(PUBLIC_CLASS,
|
113
|
+
@list.add_class(PUBLIC_CLASS, :public, 0)
|
105
114
|
assert_equal(1, @list.size)
|
106
|
-
@list.add_class(PUBLIC_CLASS,
|
115
|
+
@list.add_class(PUBLIC_CLASS, :public, 1)
|
107
116
|
assert_equal(1, @list.size)
|
108
|
-
|
109
|
-
@list.add_class(PUBLIC_INTERFACE,
|
117
|
+
|
118
|
+
@list.add_class(PUBLIC_INTERFACE, :public, 2)
|
110
119
|
assert_equal(2, @list.size)
|
111
120
|
end
|
112
|
-
|
121
|
+
|
113
122
|
def test_version_throws
|
114
123
|
@list.parse_line("javax.swing.HeaderParser [1] - \n", 4)
|
115
|
-
assert_raise(RuntimeError) do
|
124
|
+
assert_raise(RuntimeError) do
|
116
125
|
@list.parse_line("javax.swing.HeaderParser [only 2p] - \n", 4)
|
117
126
|
# occurs because 1-4 is already set in versions, so we cant set 2 again
|
118
127
|
end
|
119
128
|
end
|
129
|
+
|
130
|
+
def test_to_s
|
131
|
+
@list.add_class(PACKAGE_CLASS, false, 0)
|
132
|
+
assert_equal('packagename', @list.to_s)
|
133
|
+
end
|
120
134
|
|
121
135
|
end
|
122
136
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/dsl/loading_classpath'
|
3
|
+
require 'javaclass/classpath/composite_classpath'
|
4
|
+
|
5
|
+
module TestJavaClass
|
6
|
+
module TestDsl
|
7
|
+
|
8
|
+
class TestLoadDirective < Test::Unit::TestCase
|
9
|
+
extend JavaClass::Dsl::LoadDirective
|
10
|
+
|
11
|
+
def create_1
|
12
|
+
JavaClass::Classpath::CompositeClasspath.new('1')
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_2
|
16
|
+
JavaClass::Classpath::CompositeClasspath.new('2')
|
17
|
+
end
|
18
|
+
|
19
|
+
wrap_classpath :create_2
|
20
|
+
|
21
|
+
def test_wrap_classpath
|
22
|
+
cp = create_1
|
23
|
+
assert_equal('1', cp.to_s)
|
24
|
+
assert_equal(JavaClass::Classpath::CompositeClasspath, cp.class)
|
25
|
+
|
26
|
+
cp = create_2
|
27
|
+
assert_equal('2', cp.to_s)
|
28
|
+
assert_equal(JavaClass::Dsl::LoadingClasspath, cp.class)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|