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
@@ -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::JavaName, 'at/kugel/tool/Some.class'.to_javaname.class)
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\\kugel\\tool\\Some.java", "at\\kugel\\tool\\Some.java".to_javaname)
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
- class TestJavaName < Test::Unit::TestCase
18
+
19
+ class TestPackageLogic < Test::Unit::TestCase
20
+ include JavaClass::PackageLogic
21
+
17
22
  def setup
18
- @c0 = JavaClass::JavaName.new('Some')
19
- @cn = JavaClass::JavaName.new("at\\kugel\\tool\\Some.java")
20
- @cm = JavaClass::JavaName.new('at/kugel/tool/SomeClassWithMoreNames')
21
- @cs = JavaClass::JavaName.new('at/kugel/tool/Some.<init>')
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 test_to_classname
25
- assert_equal('Some', @c0.to_classname)
26
- assert_equal('at.kugel.tool.Some', @cn.to_classname)
27
- assert_equal('at.kugel.tool.SomeClassWithMoreNames', @cm.to_classname)
28
- assert_equal('at.kugel.tool.Some', @cs.to_classname)
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
- assert(@cn == @cn.to_javaname)
33
- assert(@cn === @cn.to_javaname)
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('Some', @c0.to_jvmname)
38
- assert_equal('at/kugel/tool/Some', @cn.to_jvmname)
39
- assert_equal('at/kugel/tool/SomeClassWithMoreNames', @cm.to_jvmname)
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('Some.java', @c0.to_java_file)
44
- assert_equal('at/kugel/tool/Some.java', @cn.to_java_file)
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('Some.class', @c0.to_class_file)
50
- assert_equal('at/kugel/tool/Some.class', @cn.to_class_file)
51
- assert_equal('at/kugel/tool/SomeClassWithMoreNames.class', @cm.to_class_file)
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('Some', @c0.full_name)
56
- assert_equal('at.kugel.tool.Some', @cn.full_name)
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 test_package
61
- assert_equal('', @c0.package)
62
- assert_equal('at.kugel.tool', @cn.package)
63
- assert_equal('at.kugel.tool', @cm.package)
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 test_simple_name
67
- assert_equal('Some', @c0.simple_name)
68
- assert_equal('Some', @cn.simple_name)
69
- assert_equal('SomeClassWithMoreNames', @cm.simple_name)
70
-
71
- # simple name is a classname itself
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 test_same_or_subpackage_of_eh
76
- assert(@cn.same_or_subpackage_of?(%w[ at.kugel ]))
77
- assert(@cn.same_or_subpackage_of?(%w[ at.kugel.tool ]))
78
- assert(!@cn.same_or_subpackage_of?(%w[ at.kugel.tool.some ]))
79
- assert(@cn.same_or_subpackage_of?(%w[ java at.kugel ]))
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
- assert(!@c0.same_or_subpackage_of?(%w[ at at.kugel ]))
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 test_subpackage_of_eh
85
- assert(@cn.subpackage_of?(%w[ at.kugel ]))
86
- assert(!@cn.subpackage_of?(%w[ at.kugel.tool ]))
87
- assert(!@cn.subpackage_of?(%w[ at.kugel.tool.some ]))
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 test_split_simple_name
91
- assert_equal(['', 'SomeClassWithMoreNames'], @cm.split_simple_name(0))
92
- assert_equal(['Some', 'ClassWithMoreNames'], @cm.split_simple_name(1))
93
- assert_equal(['SomeClass', 'WithMoreNames'], @cm.split_simple_name(2))
94
- assert_equal(['SomeClassWith', 'MoreNames'], @cm.split_simple_name(3))
95
- assert_equal(['SomeClassWithMore', 'Names'], @cm.split_simple_name(4))
96
- assert_equal(['SomeClassWithMoreNames', ''], @cm.split_simple_name(5))
97
- assert_equal(['SomeClassWithMoreNames', ''], @cm.split_simple_name(6))
98
-
99
- assert_equal(['SomeClassWithMoreNames', ''], @cm.split_simple_name(-1))
100
- assert_equal(['SomeClassWithMore', 'Names'], @cm.split_simple_name(-2))
101
- assert_equal(['SomeClassWith', 'MoreNames'], @cm.split_simple_name(-3))
102
- assert_equal(['SomeClass', 'WithMoreNames'], @cm.split_simple_name(-4))
103
- assert_equal(['Some', 'ClassWithMoreNames'], @cm.split_simple_name(-5))
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, true, 0)
25
-
26
- @list.add_class(PUBLIC_CLASS, true, 1)
27
- @list.add_class(PUBLIC_INTERFACE, true, 1)
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, true, 0)
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, true, 1)
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, true, 1)
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, true, 1)
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, true, 0)
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, true, 1)
64
- @list.add_class(PUBLIC_INTERFACE, true, 1)
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, true, 2)
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 test_version
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([1,2], @list.version)
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, true, 0)
98
- @list.add_class(PUBLIC_CLASS, true, 1)
99
- @list.add_class(PUBLIC_INTERFACE, true, 2)
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, true, 0)
113
+ @list.add_class(PUBLIC_CLASS, :public, 0)
105
114
  assert_equal(1, @list.size)
106
- @list.add_class(PUBLIC_CLASS, true, 1)
115
+ @list.add_class(PUBLIC_CLASS, :public, 1)
107
116
  assert_equal(1, @list.size)
108
-
109
- @list.add_class(PUBLIC_INTERFACE, true, 2)
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