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.
Files changed (175) hide show
  1. data/Rakefile +67 -56
  2. data/Readme.txt +42 -39
  3. data/example_task.rb +172 -0
  4. data/examples/check_interface_names.rb +44 -0
  5. data/examples/corpus.rb +19 -0
  6. data/examples/count_classes_in_modules.rb +38 -0
  7. data/examples/cumulative_dependencies.rb +39 -0
  8. data/examples/find_all_imported_types.rb +44 -0
  9. data/examples/find_referenced_modules.rb +53 -0
  10. data/examples/find_unreferenced_classes.rb +65 -0
  11. data/examples/generate_class_lists.rb +67 -43
  12. data/examples/profiler_scratchpad.rb +33 -0
  13. data/examples/simple_usage.rb +42 -0
  14. data/history.txt +29 -7
  15. data/javaclass.gemspec +31 -0
  16. data/lib/javaclass/adder_tree.rb +92 -0
  17. data/lib/javaclass/analyse/dependencies.rb +52 -0
  18. data/lib/javaclass/{metric/metrics.txt → analyse/ideas.txt} +2 -2
  19. data/lib/javaclass/analyse/transitive_dependencies.rb +52 -0
  20. data/lib/javaclass/classfile/access_flag_constants.rb +24 -0
  21. data/lib/javaclass/classfile/access_flags.rb +49 -26
  22. data/lib/javaclass/classfile/class_format_error.rb +37 -0
  23. data/lib/javaclass/classfile/class_magic.rb +16 -8
  24. data/lib/javaclass/classfile/class_version.rb +19 -25
  25. data/lib/javaclass/classfile/constant_pool.rb +110 -45
  26. data/lib/javaclass/classfile/constants/base.rb +33 -12
  27. data/lib/javaclass/classfile/constants/double_reference.rb +55 -41
  28. data/lib/javaclass/classfile/constants/single_reference.rb +29 -21
  29. data/lib/javaclass/classfile/constants/value.rb +43 -33
  30. data/lib/javaclass/classfile/java_class_header.rb +72 -46
  31. data/lib/javaclass/classfile/java_class_header_as_java_name.rb +33 -0
  32. data/lib/javaclass/classfile/java_class_header_shortcuts.rb +19 -0
  33. data/lib/javaclass/classfile/references.rb +21 -19
  34. data/lib/javaclass/classlist/class_entry.rb +26 -27
  35. data/lib/javaclass/classlist/jar_searcher.rb +34 -25
  36. data/lib/javaclass/classlist/list.rb +31 -31
  37. data/lib/javaclass/classlist/package_entry.rb +25 -24
  38. data/lib/javaclass/classpath/any_classpath.rb +48 -0
  39. data/lib/javaclass/classpath/class_not_found_error.rb +20 -0
  40. data/lib/javaclass/classpath/classpaths.txt +2 -2
  41. data/lib/javaclass/classpath/composite_classpath.rb +56 -54
  42. data/lib/javaclass/classpath/convention_classpath.rb +38 -0
  43. data/lib/javaclass/classpath/eclipse_classpath.rb +74 -0
  44. data/lib/javaclass/classpath/factory.rb +65 -0
  45. data/lib/javaclass/classpath/file_classpath.rb +47 -0
  46. data/lib/javaclass/classpath/folder_classpath.rb +42 -44
  47. data/lib/javaclass/classpath/jar_classpath.rb +91 -52
  48. data/lib/javaclass/classpath/java_home_classpath.rb +24 -13
  49. data/lib/javaclass/classpath/maven_classpath.rb +44 -0
  50. data/lib/javaclass/classpath/temporary_unpacker.rb +111 -0
  51. data/lib/javaclass/classpath/tracking_classpath.rb +144 -0
  52. data/lib/javaclass/classscanner/ideas.txt +3 -0
  53. data/lib/javaclass/classscanner/imported_types.rb +29 -0
  54. data/lib/javaclass/classscanner/scanners.rb +29 -0
  55. data/lib/javaclass/delegate_directive.rb +15 -0
  56. data/lib/javaclass/dsl/caching_classpath.rb +38 -0
  57. data/lib/javaclass/dsl/classpath_analysers.rb +27 -0
  58. data/lib/javaclass/dsl/java_name_factory.rb +79 -0
  59. data/lib/javaclass/dsl/loader.rb +42 -0
  60. data/lib/javaclass/dsl/loading_classpath.rb +53 -0
  61. data/lib/javaclass/dsl/mixin.rb +54 -0
  62. data/lib/javaclass/gems/zip_file.rb +154 -0
  63. data/lib/javaclass/java_language.rb +50 -0
  64. data/lib/javaclass/java_name.rb +329 -55
  65. data/lib/javaclass/java_name_scanner.rb +95 -0
  66. data/lib/javaclass/resources/iso_3166_countries.txt +240 -0
  67. data/lib/javaclass/resources/jdk0_packages.txt +6 -0
  68. data/lib/javaclass/resources/jdk1_packages.txt +6 -0
  69. data/lib/javaclass/resources/jdk2_packages.txt +4 -0
  70. data/lib/javaclass/resources/jdk3_packages.txt +6 -0
  71. data/lib/javaclass/resources/jdk4_packages.txt +22 -0
  72. data/lib/javaclass/resources/jdk5_packages.txt +5 -0
  73. data/lib/javaclass/resources/jdk6_packages.txt +7 -0
  74. data/lib/javaclass/resources/jdk7_packages.txt +0 -0
  75. data/lib/javaclass/resources/jdk_packages.txt +53 -0
  76. data/lib/javaclass/resources/reserved_words.txt +50 -0
  77. data/lib/javaclass/string_hexdump.rb +76 -0
  78. data/lib/javaclass/string_ux.rb +21 -10
  79. data/lib/javaclass.rb +16 -41
  80. data/license.txt +28 -0
  81. data/planned.txt +13 -0
  82. data/test/data/Object_102.class +0 -0
  83. data/test/data/Runnable_102.class +0 -0
  84. data/test/data/access_flags/AccessFlagsTestAnnotation.class +0 -0
  85. data/test/data/access_flags/AccessFlagsTestAnnotation.java +3 -0
  86. data/test/data/access_flags/AccessFlagsTestEnum$1.class +0 -0
  87. data/test/data/access_flags/AccessFlagsTestEnum.class +0 -0
  88. data/test/data/access_flags/AccessFlagsTestEnum.java +6 -0
  89. data/test/data/access_flags/AccessFlagsTestInner$1.class +0 -0
  90. data/test/data/access_flags/AccessFlagsTestInner$2.class +0 -0
  91. data/test/data/access_flags/AccessFlagsTestInner.class +0 -0
  92. data/test/data/access_flags/AccessFlagsTestInner.java +13 -0
  93. data/test/data/access_flags/AccessFlagsTestPackage.class +0 -0
  94. data/test/data/access_flags/AccessFlagsTestPackage.java +1 -1
  95. data/test/data/api/packagename/AccessFlagsTestPublic.class +0 -0
  96. data/test/data/class_version/ClassVersionTest17.class +0 -0
  97. data/test/data/class_version/make.bat +6 -2
  98. data/test/data/eclipse_classpath/classes/ClassVersionTest12.class +0 -0
  99. data/test/data/eclipse_classpath/lib/JarClasspathTest.jar +0 -0
  100. data/test/data/eclipse_classpath/test-classes/ClassVersionTest13.class +0 -0
  101. data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/ClassVersionTest10.class +0 -0
  102. data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/package/ClassVersionTest11.class +0 -0
  103. data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
  104. data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
  105. data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
  106. data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
  107. data/test/data/jar_classpath/make.bat +6 -2
  108. data/test/data/jar_searcher/BrokenRunnable_102.class +0 -0
  109. data/test/data/java_home_classpath/jdk118/lib/classes.zip +0 -0
  110. data/test/data/java_name_scanner/META-INF/MANIFEST.MF +12 -0
  111. data/test/data/java_name_scanner/plugin.xml +18 -0
  112. data/test/data/maven_classpath/module/pom.xml +8 -0
  113. data/test/data/maven_classpath/module/target/classes/ClassVersionTest12.class +0 -0
  114. data/test/data/maven_classpath/pom.xml +8 -0
  115. data/test/data/maven_classpath/target/classes/ClassVersionTest10.class +0 -0
  116. data/test/data/maven_classpath/target/test-classes/ClassVersionTest11.class +0 -0
  117. data/test/data/transitive_dependencies/A.class +0 -0
  118. data/test/data/transitive_dependencies/A.java +5 -0
  119. data/test/data/transitive_dependencies/B.class +0 -0
  120. data/test/data/transitive_dependencies/B.java +3 -0
  121. data/test/data/transitive_dependencies/C.class +0 -0
  122. data/test/data/transitive_dependencies/C.java +3 -0
  123. data/test/data/transitive_dependencies/Start.class +0 -0
  124. data/test/data/transitive_dependencies/Start.java +4 -0
  125. data/test/data/transitive_dependencies/make.bat +3 -0
  126. data/test/data/zip_file/commons-math-2.2-broken.zip +0 -0
  127. data/test/data/zip_file/regenerated-with-7zip.zip +0 -0
  128. data/test/data/zip_file/regenerated-with-jar.zip +0 -0
  129. data/test/dot_classpath.rb +33 -0
  130. data/test/logging_folder_classpath.rb +19 -0
  131. data/test/setup.rb +1 -1
  132. data/test/test_access_flags.rb +58 -32
  133. data/test/test_adder_tree.rb +78 -0
  134. data/test/test_any_classpath.rb +39 -0
  135. data/test/test_base.rb +9 -7
  136. data/test/test_caching_classpath.rb +41 -0
  137. data/test/test_class_entry.rb +60 -60
  138. data/test/test_class_magic.rb +31 -0
  139. data/test/test_class_version.rb +25 -25
  140. data/test/test_composite_classpath.rb +22 -23
  141. data/test/test_constant_pool.rb +37 -13
  142. data/test/test_convention_classpath.rb +39 -0
  143. data/test/test_eclipse_classpath.rb +73 -0
  144. data/test/test_factory.rb +61 -0
  145. data/test/test_folder_classpath.rb +26 -10
  146. data/test/test_imported_types.rb +34 -0
  147. data/test/test_jar_classpath.rb +29 -14
  148. data/test/test_jar_searcher.rb +27 -14
  149. data/test/test_java_class_header.rb +22 -10
  150. data/test/test_java_class_header_as_java_name.rb +41 -0
  151. data/test/test_java_home_classpath.rb +17 -11
  152. data/test/test_java_name.rb +204 -64
  153. data/test/test_java_name_factory.rb +52 -0
  154. data/test/test_java_name_scanner.rb +24 -0
  155. data/test/test_javaclass_api.rb +43 -0
  156. data/test/test_list.rb +58 -44
  157. data/test/test_load_directive.rb +34 -0
  158. data/test/test_maven_classpath.rb +46 -0
  159. data/test/test_package_entry.rb +27 -22
  160. data/test/test_references.rb +14 -14
  161. data/test/test_string_hexdump.rb +24 -0
  162. data/test/test_string_ux.rb +18 -106
  163. data/test/test_tracking_classpath.rb +112 -0
  164. data/test/test_transitive_dependencies.rb +31 -0
  165. data/test/test_unpacking_jar_classpath.rb +43 -0
  166. data/test/test_zip_file.rb +33 -0
  167. data/test/ts_all_tests.rb +80 -18
  168. data/thanks.txt +2 -0
  169. metadata +151 -22
  170. data/lib/javaclass/classpath/port_ClassPathEntry.java +0 -202
  171. data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +0 -311
  172. data/lib/javaclass/classpath/port_DirectoryRepository.java +0 -24
  173. data/lib/javaclass/metric/ccd.rb +0 -68
  174. data/lib/javaclass/metric/class_usage.rb +0 -41
  175. 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/JarClasspathTestFolder")
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
@@ -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
@@ -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