javaclass 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classpath/factory'
|
3
|
+
require 'test/dot_classpath'
|
4
|
+
|
5
|
+
module TestJavaClass
|
6
|
+
module TestClasspath
|
7
|
+
|
8
|
+
class TestFactory < Test::Unit::TestCase
|
9
|
+
include DotClasspath
|
10
|
+
include JavaClass::Classpath::Factory
|
11
|
+
|
12
|
+
def test_full_classpath
|
13
|
+
cp = full_classpath("#{TEST_DATA_PATH}/java_home_classpath/jre-ext",
|
14
|
+
"#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar#{File::PATH_SEPARATOR}#{TEST_DATA_PATH}/folder_classpath/classes")
|
15
|
+
elem = cp.elements
|
16
|
+
assert_equal(5, elem.size)
|
17
|
+
assert_equal("#{TEST_DATA_PATH}/java_home_classpath/jre-ext/lib/rt.jar", elem[0].to_s)
|
18
|
+
assert_equal("#{TEST_DATA_PATH}/java_home_classpath/jre-ext/lib/ext/ext.jar", elem[1].to_s)
|
19
|
+
assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar", elem[2].to_s)
|
20
|
+
assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.jar", elem[3].to_s)
|
21
|
+
assert_equal("#{TEST_DATA_PATH}/folder_classpath/classes", elem[4].to_s)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_environment_classpath
|
25
|
+
jh = ENV['JAVA_HOME']
|
26
|
+
clp = ENV['CLASSPATH']
|
27
|
+
begin
|
28
|
+
ENV['JAVA_HOME'] = "#{TEST_DATA_PATH}/java_home_classpath/jdk"
|
29
|
+
ENV['CLASSPATH'] = "#{TEST_DATA_PATH}/folder_classpath/classes"
|
30
|
+
|
31
|
+
cp = environment_classpath
|
32
|
+
elem = cp.elements
|
33
|
+
assert_equal(2, elem.size) # rt.jar and classes folder
|
34
|
+
|
35
|
+
ensure
|
36
|
+
ENV['JAVA_HOME'] = jh
|
37
|
+
ENV['CLASSPATH'] = clp
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_workspace_first_level
|
42
|
+
cp = workspace("#{TEST_DATA_PATH}/maven_classpath")
|
43
|
+
elem = cp.elements
|
44
|
+
assert_equal(3, elem.size) # 2+1 folder Maven
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_workspace_second_level
|
48
|
+
create_dot_classpath
|
49
|
+
begin
|
50
|
+
cp = workspace("#{TEST_DATA_PATH}")
|
51
|
+
elem = cp.elements
|
52
|
+
assert_equal(7, elem.size) # 2 folder + 1 jar Eclipse, 2+1 folder Maven, folder plain
|
53
|
+
ensure
|
54
|
+
remove_dot_classpath
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
@@ -3,25 +3,25 @@ require 'javaclass/classpath/folder_classpath'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClasspath
|
6
|
-
|
6
|
+
|
7
7
|
class TestFolderClasspath < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
|
-
@cpe = JavaClass::Classpath::FolderClasspath.new("#{TEST_DATA_PATH}/folder_classpath/
|
10
|
+
@cpe = JavaClass::Classpath::FolderClasspath.new("#{TEST_DATA_PATH}/folder_classpath/classes")
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def test_count
|
14
14
|
assert_equal(2, @cpe.count)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def test_additional_classpath
|
18
18
|
assert_equal([], @cpe.additional_classpath)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def test_jar_eh
|
22
22
|
assert(!@cpe.jar?)
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def test_includes_eh
|
26
26
|
assert(@cpe.includes?('ClassVersionTest10.class'))
|
27
27
|
assert(@cpe.includes?('ClassVersionTest10'))
|
@@ -30,16 +30,32 @@ module TestJavaClass
|
|
30
30
|
assert(@cpe.includes?('package/ClassVersionTest11.class'))
|
31
31
|
assert(@cpe.includes?('package/ClassVersionTest11'))
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def test_load_binary
|
35
35
|
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
36
|
+
|
37
|
+
assert_raise(JavaClass::Classpath::ClassNotFoundError) {
|
38
|
+
@cpe.load_binary('NonExistingClass')
|
39
|
+
}
|
36
40
|
end
|
37
|
-
|
41
|
+
|
38
42
|
def test_names
|
39
43
|
assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
44
|
+
assert_equal(['ClassVersionTest10.class'], @cpe.names { |n| n=~ /10/ })
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_elements
|
48
|
+
assert_equal(1, @cpe.elements.size)
|
49
|
+
assert_equal(@cpe.to_s, @cpe.elements[0].to_s)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_class_new_invalid
|
53
|
+
assert_raise(IOError) {
|
54
|
+
JavaClass::Classpath::FolderClasspath.new("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.jar")
|
55
|
+
}
|
40
56
|
end
|
41
57
|
|
42
|
-
end
|
58
|
+
end unless defined? TestFolderClasspath
|
43
59
|
|
44
60
|
end
|
45
61
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classfile/java_class_header'
|
3
|
+
require 'javaclass/classscanner/imported_types'
|
4
|
+
|
5
|
+
module TestJavaClass
|
6
|
+
module TestClassScanner
|
7
|
+
|
8
|
+
class TestImportedTypes < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@public = JavaClass::ClassScanner::ImportedTypes.new(
|
12
|
+
JavaClass::ClassFile::JavaClassHeader.new(
|
13
|
+
load_class('access_flags/AccessFlagsTestPublic')))
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_imported_types
|
17
|
+
types = ['java.lang.Object',
|
18
|
+
'packagename.AccessFlagsTestPublic$Inner',
|
19
|
+
'packagename.AccessFlagsTestPublic$InnerInterface',
|
20
|
+
'packagename.AccessFlagsTestPublic$StaticInner', ]
|
21
|
+
assert_equal(types, @public.imported_types)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_imported_3rd_party_types
|
25
|
+
types = ['packagename.AccessFlagsTestPublic$Inner',
|
26
|
+
'packagename.AccessFlagsTestPublic$InnerInterface',
|
27
|
+
'packagename.AccessFlagsTestPublic$StaticInner', ]
|
28
|
+
assert_equal(types, @public.imported_3rd_party_types)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
data/test/test_jar_classpath.rb
CHANGED
@@ -3,55 +3,70 @@ require 'javaclass/classpath/jar_classpath'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClasspath
|
6
|
-
|
6
|
+
|
7
7
|
class TestJarClasspath < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
10
|
@folder = "#{TEST_DATA_PATH}/jar_classpath"
|
11
11
|
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.jar")
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def test_count
|
15
15
|
assert_equal(2, @cpe.count)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def test_additional_classpath
|
19
19
|
assert_equal([], @cpe.additional_classpath)
|
20
|
-
|
20
|
+
|
21
21
|
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTestManifest.jar")
|
22
22
|
assert_equal(["#{@folder}/JarClasspathTest.jar"], @cpe.additional_classpath)
|
23
|
-
|
23
|
+
|
24
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",
|
25
|
+
assert_equal(["#{@folder}/lib/httpunit-1.6.2.jar", "#{@folder}/lib/nekohtml-0.9.1.jar",
|
26
26
|
"#{@folder}/lib/xercesImpl-2.5.jar", "#{@folder}/lib/js-1.5R4.1.jar"], @cpe.additional_classpath)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def test_jar_eh
|
30
30
|
assert(@cpe.jar?)
|
31
|
-
|
31
|
+
|
32
32
|
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
|
33
33
|
assert(!@cpe.jar?)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def test_includes_eh
|
37
37
|
assert(@cpe.includes?('ClassVersionTest10.class'))
|
38
38
|
assert(@cpe.includes?('ClassVersionTest10'))
|
39
39
|
assert(!@cpe.includes?('ClassVersionTest11.class'))
|
40
40
|
assert(!@cpe.includes?('ClassVersionTest11'))
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def test_load_binary
|
44
44
|
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
45
|
+
assert_raise(JavaClass::Classpath::ClassNotFoundError) {
|
46
|
+
@cpe.load_binary('NonExistingClass')
|
47
|
+
}
|
45
48
|
|
46
49
|
@cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
|
47
50
|
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
48
51
|
end
|
49
|
-
|
52
|
+
|
50
53
|
def test_names
|
51
54
|
assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
|
55
|
+
assert_equal(['package/ClassVersionTest11.class'], @cpe.names { |n| n=~ /11/ })
|
52
56
|
end
|
53
|
-
|
57
|
+
|
58
|
+
def test_elements
|
59
|
+
assert_equal(1, @cpe.elements.size)
|
60
|
+
assert_equal(@cpe.to_s, @cpe.elements[0].to_s)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_class_new_invalid
|
64
|
+
assert_raise(IOError) {
|
65
|
+
JavaClass::Classpath::JarClasspath.new("#{TEST_DATA_PATH}/folder_classpath")
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
54
69
|
end
|
55
|
-
|
70
|
+
|
56
71
|
end
|
57
72
|
end
|
data/test/test_jar_searcher.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/setup'
|
2
2
|
require 'javaclass/classlist/jar_searcher'
|
3
|
+
require 'javaclass/classpath/folder_classpath'
|
3
4
|
require 'javaclass/classpath/jar_classpath'
|
4
5
|
|
5
6
|
module TestJavaClass
|
6
7
|
module TestClassList
|
8
|
+
|
7
9
|
class TestJarSearcher < Test::Unit::TestCase
|
8
|
-
|
10
|
+
|
9
11
|
PACKAGE_CLASS = "packagename/PackageClass.class"
|
10
12
|
INNER_CLASS = "packagename/PublicClass$InnerClass.class"
|
11
13
|
PUBLIC_CLASS = "packagename/PublicClass.class"
|
12
14
|
PUBLIC_INTERFACE = "packagename/PublicInterface.class"
|
13
15
|
CLASSES = [INNER_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE, PACKAGE_CLASS]
|
14
|
-
|
16
|
+
|
15
17
|
def setup
|
16
18
|
@cs = JavaClass::ClassList::JarSearcher.new
|
17
19
|
end
|
18
|
-
|
20
|
+
|
19
21
|
def test_filter_classes
|
20
22
|
@cs.skip_inner_classes = false
|
21
23
|
classes = @cs.filter_classes(CLASSES)
|
@@ -25,7 +27,7 @@ module TestJavaClass
|
|
25
27
|
assert_equal(PUBLIC_INTERFACE, classes[2])
|
26
28
|
assert_equal(PACKAGE_CLASS, classes[3])
|
27
29
|
end
|
28
|
-
|
30
|
+
|
29
31
|
def test_skip_inner_classes_equals
|
30
32
|
# @cs.skip_inner_classes = true # default
|
31
33
|
classes = @cs.filter_classes(CLASSES)
|
@@ -34,60 +36,71 @@ module TestJavaClass
|
|
34
36
|
assert_equal(PUBLIC_INTERFACE, classes[1])
|
35
37
|
assert_equal(PACKAGE_CLASS, classes[2])
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
def test_filters_equals
|
39
41
|
@cs.filters = ['packagename/']
|
40
42
|
classes = @cs.filter_classes(CLASSES)
|
41
43
|
assert_equal(0, classes.size)
|
42
44
|
end
|
43
|
-
|
45
|
+
|
44
46
|
def test_public_eh
|
45
47
|
@cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
|
46
48
|
assert(!@cs.public?(@cpe, PACKAGE_CLASS))
|
47
49
|
assert(!@cs.public?(@cpe, INNER_CLASS))
|
48
50
|
assert(@cs.public?(@cpe, PUBLIC_CLASS))
|
49
51
|
end
|
52
|
+
|
53
|
+
def test_public_eh_fails
|
54
|
+
@cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
|
55
|
+
assert_raise(JavaClass::Classpath::ClassNotFoundError){ @cs.public?(@cpe, 'NonExistingClass') }
|
56
|
+
|
57
|
+
@cpe = JavaClass::Classpath::FolderClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher"))
|
58
|
+
assert_raise(JavaClass::ClassFile::ClassFormatError) {
|
59
|
+
@cs.public?(@cpe, 'BrokenRunnable_102')
|
60
|
+
}
|
61
|
+
end
|
50
62
|
|
51
63
|
class MockList # ZenTest SKIP mock class
|
52
64
|
attr_reader :versions
|
53
65
|
attr_reader :modifiers
|
54
66
|
attr_reader :entries
|
67
|
+
|
55
68
|
def initialize
|
56
69
|
@versions = []
|
57
70
|
@modifiers = []
|
58
71
|
@size = 0
|
59
72
|
@entries = []
|
60
73
|
end
|
61
|
-
|
74
|
+
|
62
75
|
def add_class(entry, is_public, version)
|
63
76
|
@entries << entry
|
64
77
|
@modifiers << is_public
|
65
78
|
@versions << version
|
66
79
|
end
|
67
|
-
|
80
|
+
|
68
81
|
def size
|
69
82
|
@entries.size
|
70
83
|
end
|
71
84
|
end
|
72
|
-
|
85
|
+
|
73
86
|
def test_compile_list
|
74
87
|
list = @cs.compile_list(2, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
|
75
|
-
|
88
|
+
|
76
89
|
assert_equal(3, list.size)
|
77
90
|
assert_equal([PACKAGE_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
|
78
91
|
assert_equal([false, true, true], list.modifiers)
|
79
92
|
assert_equal([2, 2, 2], list.versions)
|
80
93
|
end
|
81
|
-
|
94
|
+
|
82
95
|
def test_skip_package_classes_equals
|
83
96
|
@cs.skip_package_classes = true
|
84
97
|
list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
|
85
|
-
|
98
|
+
|
86
99
|
assert_equal(2, list.size)
|
87
100
|
assert_equal([PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
|
88
101
|
end
|
89
|
-
|
102
|
+
|
90
103
|
end
|
91
|
-
|
104
|
+
|
92
105
|
end
|
93
106
|
end
|
@@ -3,40 +3,52 @@ require 'javaclass/classfile/java_class_header'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClassFile
|
6
|
-
|
6
|
+
|
7
7
|
class TestJavaClassHeader < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
10
|
@public = JavaClass::ClassFile::JavaClassHeader.new(load_class('access_flags/AccessFlagsTestPublic'))
|
11
|
+
@package = JavaClass::ClassFile::JavaClassHeader.new(load_class('access_flags/AccessFlagsTestPackage'))
|
12
|
+
@object = JavaClass::ClassFile::JavaClassHeader.new(load_class('Object_102'))
|
11
13
|
end
|
12
|
-
|
14
|
+
|
13
15
|
def test_magic
|
14
16
|
assert(@public.magic.valid?)
|
15
17
|
end
|
16
|
-
|
18
|
+
|
17
19
|
def test_version
|
18
20
|
assert_equal('50.0', @public.version.to_s) # JDK 6
|
19
21
|
end
|
20
|
-
|
22
|
+
|
21
23
|
def test_this_class
|
22
24
|
assert_equal('packagename/AccessFlagsTestPublic', @public.this_class)
|
23
25
|
end
|
24
|
-
|
26
|
+
|
25
27
|
def test_super_class
|
26
28
|
assert_equal('java/lang/Object', @public.super_class)
|
29
|
+
assert_nil(@object.super_class)
|
27
30
|
end
|
28
|
-
|
31
|
+
|
32
|
+
def test_interfaces
|
33
|
+
interfaces = @public.interfaces
|
34
|
+
assert_equal(0, interfaces.size)
|
35
|
+
|
36
|
+
interfaces = @package.interfaces
|
37
|
+
assert_equal(1, interfaces.size)
|
38
|
+
assert_equal('packagename/AccessFlagsTestInterface', interfaces[0].class_name)
|
39
|
+
end
|
40
|
+
|
29
41
|
def test_dump
|
30
42
|
expected = File.open("#{TEST_DATA_PATH}/access_flags/AccessFlagsTestPublic_javap.txt", 'r') {|io| io.read }
|
31
43
|
assert_equal(expected.gsub(/\s+/, ' ').gsub(/"</, '<').gsub(/>"/, '>'), @public.dump.join("\n").gsub(/\s+/, ' '))
|
32
44
|
end
|
33
|
-
|
45
|
+
|
34
46
|
# --- fake methods for zentest, tested in separate test case ---
|
35
47
|
def test_access_flags; assert(true); end
|
36
48
|
def test_constant_pool() assert(true); end
|
37
49
|
def test_references() assert(true); end
|
38
|
-
|
50
|
+
|
39
51
|
end
|
40
|
-
|
52
|
+
|
41
53
|
end
|
42
54
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/setup'
|
2
|
+
require 'javaclass/classfile/java_class_header'
|
3
|
+
require 'javaclass/classfile/java_class_header_as_java_name'
|
4
|
+
|
5
|
+
module TestJavaClass
|
6
|
+
module TestClassFile
|
7
|
+
|
8
|
+
class TestJavaClassHeaderAsJavaName < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@clazz = JavaClass::ClassFile::JavaClassHeader.new(load_class('access_flags/AccessFlagsTestPublic'))
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_this_class
|
15
|
+
assert_equal('packagename/AccessFlagsTestPublic', @clazz.this_class)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_to_classname
|
19
|
+
assert_equal('packagename.AccessFlagsTestPublic', @clazz.to_classname)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_full_name
|
23
|
+
assert_equal('packagename.AccessFlagsTestPublic', @clazz.full_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_package
|
27
|
+
assert_equal('packagename', @clazz.package)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_simple_name
|
31
|
+
assert_equal('AccessFlagsTestPublic', @clazz.simple_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_in_jdk_eh
|
35
|
+
assert(!@clazz.in_jdk?)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -3,48 +3,54 @@ require 'javaclass/classpath/java_home_classpath'
|
|
3
3
|
|
4
4
|
module TestJavaClass
|
5
5
|
module TestClasspath
|
6
|
-
|
6
|
+
|
7
7
|
class TestJavaHomeClasspath < Test::Unit::TestCase
|
8
|
-
|
8
|
+
|
9
9
|
def setup
|
10
10
|
@folder = "#{TEST_DATA_PATH}/java_home_classpath"
|
11
11
|
@cpe = JavaClass::Classpath::JavaHomeClasspath.new("#{@folder}/jre")
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def test_integration_count
|
15
15
|
assert_equal(1, @cpe.count)
|
16
16
|
|
17
17
|
@cpe = JavaClass::Classpath::JavaHomeClasspath.new("#{@folder}/jdk")
|
18
18
|
assert_equal(1, @cpe.count)
|
19
|
+
|
20
|
+
@cpe = JavaClass::Classpath::JavaHomeClasspath.new("#{@folder}/jdk118")
|
21
|
+
assert_equal(1, @cpe.count)
|
19
22
|
end
|
20
|
-
|
23
|
+
|
21
24
|
def test_additional_classpath
|
22
25
|
assert_equal([], @cpe.additional_classpath)
|
23
|
-
|
26
|
+
|
24
27
|
@cpe = JavaClass::Classpath::JavaHomeClasspath.new("#{@folder}/jre-ext")
|
25
28
|
assert_equal(["#{@folder}/jre-ext/lib/ext/ext.jar"], @cpe.additional_classpath)
|
26
29
|
end
|
27
|
-
|
30
|
+
|
28
31
|
def test_integration_jar_eh
|
29
32
|
assert(@cpe.jar?)
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
def test_integration_includes_eh
|
33
36
|
assert(@cpe.includes?('ClassVersionTest10.class'))
|
34
37
|
assert(@cpe.includes?('ClassVersionTest10'))
|
35
38
|
assert(!@cpe.includes?('ClassVersionTest11.class'))
|
36
39
|
assert(!@cpe.includes?('ClassVersionTest11'))
|
37
40
|
end
|
38
|
-
|
41
|
+
|
39
42
|
def test_integration_load_binary
|
40
43
|
assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
|
41
44
|
end
|
42
|
-
|
45
|
+
|
43
46
|
def test_integration_names
|
44
47
|
assert_equal(['ClassVersionTest10.class'], @cpe.names)
|
45
48
|
end
|
46
|
-
|
49
|
+
|
50
|
+
def test_class_new_invalid
|
51
|
+
assert_raise(IOError) { JavaClass::Classpath::JavaHomeClasspath.new("#{@folder}/non_existing_folder") }
|
52
|
+
end
|
47
53
|
end
|
48
|
-
|
54
|
+
|
49
55
|
end
|
50
56
|
end
|