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
@@ -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', true, 0)
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', true, 0)
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', true, 0)
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', true, 1)
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', true, 0)
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', true, 1)
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
@@ -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..6).collect do |i|
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 +v+ against the list of _expectations_ when invoking the given block.
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.values_at.each do |i|
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/JarClasspathTestFolder"
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
- assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('package/ClassVersionTest11.class'))
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
- def test_find_jars
59
- @cpe = JavaClass::Classpath::CompositeClasspath.new
60
- @cpe.find_jars("#{TEST_DATA_PATH}/jar_classpath")
61
- assert_equal(4, @cpe.elements.size)
62
- assert_equal(File.expand_path("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.zip"), @cpe.elements[1].to_s)
63
- end
64
-
65
- end
66
-
64
+ end unless defined? TestCompositeClasspath
65
+
67
66
  end
68
- end
67
+ end
@@ -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+022f;
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