javaclass 0.0.2 → 0.0.3

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 (111) hide show
  1. data/Rakefile +208 -23
  2. data/Readme.txt +56 -19
  3. data/examples/generate_class_lists.rb +61 -0
  4. data/history.txt +13 -19
  5. data/lib/javaclass/classfile/access_flags.rb +52 -0
  6. data/lib/javaclass/classfile/class_magic.rb +29 -0
  7. data/lib/javaclass/classfile/class_version.rb +67 -0
  8. data/lib/javaclass/classfile/constant_pool.rb +91 -0
  9. data/lib/javaclass/classfile/constants/base.rb +33 -0
  10. data/lib/javaclass/classfile/constants/double_reference.rb +99 -0
  11. data/lib/javaclass/classfile/constants/single_reference.rb +65 -0
  12. data/lib/javaclass/classfile/constants/value.rb +116 -0
  13. data/lib/javaclass/classfile/java_class_header.rb +102 -0
  14. data/lib/javaclass/classfile/references.rb +43 -0
  15. data/lib/javaclass/classlist/class_entry.rb +89 -0
  16. data/lib/javaclass/classlist/jar_searcher.rb +69 -0
  17. data/lib/javaclass/classlist/list.rb +126 -0
  18. data/lib/javaclass/classlist/package_entry.rb +87 -0
  19. data/lib/javaclass/classpath/classpaths.txt +2 -0
  20. data/lib/javaclass/classpath/composite_classpath.rb +99 -0
  21. data/lib/javaclass/classpath/folder_classpath.rb +83 -0
  22. data/lib/javaclass/classpath/jar_classpath.rb +100 -0
  23. data/lib/javaclass/classpath/java_home_classpath.rb +40 -0
  24. data/lib/javaclass/classpath/port_ClassPathEntry.java +202 -0
  25. data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +311 -0
  26. data/lib/javaclass/classpath/port_DirectoryRepository.java +24 -0
  27. data/lib/javaclass/java_name.rb +90 -0
  28. data/lib/javaclass/metric/ccd.rb +68 -0
  29. data/lib/javaclass/metric/class_usage.rb +41 -0
  30. data/lib/javaclass/metric/metrics.txt +15 -0
  31. data/lib/javaclass.rb +44 -11
  32. data/test/data/ShortClientData$1-4000Wert.class +0 -0
  33. data/test/data/{AccessFlagsTestAbstract.class → access_flags/AccessFlagsTestAbstract.class} +0 -0
  34. data/test/data/{AccessFlagsTestAbstract.java → access_flags/AccessFlagsTestAbstract.java} +0 -0
  35. data/test/data/{AccessFlagsTestFinal.class → access_flags/AccessFlagsTestFinal.class} +0 -0
  36. data/test/data/{AccessFlagsTestFinal.java → access_flags/AccessFlagsTestFinal.java} +0 -0
  37. data/test/data/{AccessFlagsTestInterface.class → access_flags/AccessFlagsTestInterface.class} +0 -0
  38. data/test/data/{AccessFlagsTestInterface.java → access_flags/AccessFlagsTestInterface.java} +0 -0
  39. data/test/data/{AccessFlagsTestPackage.class → access_flags/AccessFlagsTestPackage.class} +0 -0
  40. data/test/data/{AccessFlagsTestPackage.java → access_flags/AccessFlagsTestPackage.java} +0 -0
  41. data/test/data/access_flags/AccessFlagsTestPublic$Inner.class +0 -0
  42. data/test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class +0 -0
  43. data/test/data/access_flags/AccessFlagsTestPublic$StaticInner.class +0 -0
  44. data/test/data/access_flags/AccessFlagsTestPublic.class +0 -0
  45. data/test/data/access_flags/AccessFlagsTestPublic.java +11 -0
  46. data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +29 -0
  47. data/test/data/{makeAccessFlagsTest.bat → access_flags/make.bat} +0 -0
  48. data/test/data/{ClassVersionTest.java → class_version/ClassVersionTest.java} +0 -0
  49. data/test/data/{ClassVersionTest10.class → class_version/ClassVersionTest10.class} +0 -0
  50. data/test/data/{ClassVersionTest11.class → class_version/ClassVersionTest11.class} +0 -0
  51. data/test/data/{ClassVersionTest12.class → class_version/ClassVersionTest12.class} +0 -0
  52. data/test/data/{ClassVersionTest13.class → class_version/ClassVersionTest13.class} +0 -0
  53. data/test/data/{ClassVersionTest14.class → class_version/ClassVersionTest14.class} +0 -0
  54. data/test/data/{ClassVersionTest15.class → class_version/ClassVersionTest15.class} +0 -0
  55. data/test/data/{ClassVersionTest16.class → class_version/ClassVersionTest16.class} +0 -0
  56. data/test/data/{makeClassVersionTest.bat → class_version/make.bat} +0 -0
  57. data/test/data/{ConstantPoolTest.class → constant_pool/ConstantPoolTest.class} +0 -0
  58. data/test/data/{ConstantPoolTest.java → constant_pool/ConstantPoolTest.java} +0 -0
  59. data/test/data/{makeConstantPoolTest.bat → constant_pool/make.bat} +0 -0
  60. data/test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class +0 -0
  61. data/test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class +0 -0
  62. data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
  63. data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
  64. data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
  65. data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
  66. data/test/data/jar_classpath/make.bat +24 -0
  67. data/test/data/jar_searcher/JarClassListTest.jar +0 -0
  68. data/test/data/jar_searcher/PublicClass.java +12 -0
  69. data/test/data/jar_searcher/PublicInterface.java +5 -0
  70. data/test/data/jar_searcher/make.bat +13 -0
  71. data/test/data/java_home_classpath/jdk/jre/lib/rt.jar +0 -0
  72. data/test/data/java_home_classpath/jre/lib/rt.jar +0 -0
  73. data/test/data/java_home_classpath/jre-ext/lib/ext/ext.jar +0 -0
  74. data/test/data/java_home_classpath/jre-ext/lib/rt.jar +0 -0
  75. data/test/data/java_home_classpath/make.bat +13 -0
  76. data/test/data/references/ReferencesTest.class +0 -0
  77. data/test/data/references/ReferencesTest.java +12 -0
  78. data/test/data/references/make.bat +5 -0
  79. data/test/setup.rb +6 -5
  80. data/test/test_access_flags.rb +59 -44
  81. data/test/test_base.rb +20 -15
  82. data/test/test_class_entry.rb +198 -0
  83. data/test/test_class_version.rb +48 -46
  84. data/test/test_composite_classpath.rb +68 -0
  85. data/test/test_constant_pool.rb +49 -41
  86. data/test/test_folder_classpath.rb +45 -0
  87. data/test/test_jar_classpath.rb +57 -0
  88. data/test/test_jar_searcher.rb +93 -0
  89. data/test/test_java_class_header.rb +34 -22
  90. data/test/test_java_home_classpath.rb +50 -0
  91. data/test/test_java_name.rb +110 -0
  92. data/test/test_javaclass.rb +22 -0
  93. data/test/test_list.rb +123 -0
  94. data/test/test_package_entry.rb +91 -0
  95. data/test/test_references.rb +38 -20
  96. data/test/test_string_ux.rb +99 -2
  97. data/test/ts_all_tests.rb +42 -21
  98. metadata +171 -50
  99. data/lib/javaclass/access_flags.rb +0 -44
  100. data/lib/javaclass/class_magic.rb +0 -27
  101. data/lib/javaclass/class_version.rb +0 -65
  102. data/lib/javaclass/constant_pool.rb +0 -85
  103. data/lib/javaclass/constants/base.rb +0 -31
  104. data/lib/javaclass/constants/double_reference.rb +0 -81
  105. data/lib/javaclass/constants/single_reference.rb +0 -58
  106. data/lib/javaclass/constants/value.rb +0 -114
  107. data/lib/javaclass/java_class_header.rb +0 -88
  108. data/lib/javaclass/references.rb +0 -31
  109. data/test/data/AccessFlagsTestPublic$InnerClass.class +0 -0
  110. data/test/data/AccessFlagsTestPublic.class +0 -0
  111. data/test/data/AccessFlagsTestPublic.java +0 -7
@@ -0,0 +1,198 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classlist/class_entry'
3
+
4
+ module TestJavaClass
5
+ module TestClassList
6
+
7
+ class TestClassEntry < Test::Unit::TestCase
8
+
9
+ attr_reader :version
10
+
11
+ def test_update
12
+ # fake methods for zentest, tested in all other tests
13
+ assert(true)
14
+ end
15
+
16
+ def test_public_eh
17
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
18
+ assert(ce.public?)
19
+
20
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
21
+ assert(!ce.public?)
22
+ end
23
+
24
+ def test_version
25
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
26
+ assert_equal([0], ce.version)
27
+
28
+ ce.update(1)
29
+ assert_equal([0,1], ce.version)
30
+
31
+ ce.update(2)
32
+ assert_equal([0,1,2], ce.version)
33
+ end
34
+
35
+ def test_to_full_qualified_s_first
36
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 0)
37
+
38
+ # new class in 0
39
+ assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,0))
40
+ # class only in 0, package in 1
41
+ assert_equal("pkg.Class [only 0] - \n", ce.to_full_qualified_s(0,1))
42
+ # class also in 1
43
+ ce.update(1)
44
+ assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,1))
45
+ # dropped in 2
46
+ assert_equal("pkg.Class [-1] - \n", ce.to_full_qualified_s(0,2))
47
+ # class also in 2
48
+ ce.update(2)
49
+ assert_equal("pkg.Class - \n", ce.to_full_qualified_s(0,2))
50
+ end
51
+
52
+ def test_to_full_qualified_s_package
53
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 0)
54
+ # new class in 0
55
+ assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,0))
56
+ # class only in 0, package in 1
57
+ assert_equal("pkg.Class [only 0p] - \n", ce.to_full_qualified_s(0,1))
58
+ # class also in 1
59
+ ce.update(1)
60
+ assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,1))
61
+ # dropped in 2
62
+ assert_equal("pkg.Class [-1p] - \n", ce.to_full_qualified_s(0,2))
63
+ # class also in 2
64
+ ce.update(2)
65
+ assert_equal("pkg.Class [p] - \n", ce.to_full_qualified_s(0,2))
66
+ end
67
+
68
+ def test_to_full_qualified_s_later
69
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', true, 1)
70
+
71
+ # list is only for 1
72
+ assert_equal("pkg.Class - \n", ce.to_full_qualified_s(1,1))
73
+ # new class in 1
74
+ assert_equal("pkg.Class [1] - \n", ce.to_full_qualified_s(0,1))
75
+ # new class in 1, not in 2
76
+ assert_equal("pkg.Class [only 1] - \n", ce.to_full_qualified_s(0,2))
77
+ # new class in 1, also in 2
78
+ ce.update(2)
79
+ assert_equal("pkg.Class [1] - \n", ce.to_full_qualified_s(0,2))
80
+ # dropped in 3
81
+ assert_equal("pkg.Class [1-2] - \n", ce.to_full_qualified_s(0,3))
82
+ end
83
+
84
+ def test_to_full_qualified_s_later_package
85
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg.Class', false, 1)
86
+
87
+ # list is only for 1
88
+ assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(1,1))
89
+ # new class in 1
90
+ assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(0,1))
91
+ # new class in 1, not in 2
92
+ assert_equal("pkg.Class [only 1p] - \n", ce.to_full_qualified_s(0,2))
93
+ # new class in 1, also in 2
94
+ ce.update(2)
95
+ assert_equal("pkg.Class [1p] - \n", ce.to_full_qualified_s(0,2))
96
+ # dropped in 3
97
+ assert_equal("pkg.Class [1-2p] - \n", ce.to_full_qualified_s(0,3))
98
+ end
99
+
100
+ def test_to_package_shortcut_s
101
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', true, 0)
102
+
103
+ # new class in 0
104
+ @version = [0]
105
+ assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
106
+
107
+ # class only in 0, package in 1
108
+ @version = [0,1]
109
+ assert_equal(" Class2 [only 0] - \n", ce.to_package_shortcut_s)
110
+
111
+ # class also in 1
112
+ ce.update(1)
113
+ assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
114
+
115
+ # class dropped in 2, package exists
116
+ @version = [0,1,2]
117
+ assert_equal(" Class2 [-1] - \n", ce.to_package_shortcut_s)
118
+
119
+ # class also in 2
120
+ ce.update(2)
121
+ assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
122
+ end
123
+
124
+ def test_to_package_shortcut_s_package
125
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 0)
126
+
127
+ # new class in 0
128
+ @version = [0]
129
+ assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
130
+
131
+ # class only in 0, package in 1
132
+ @version = [0,1]
133
+ assert_equal(" Class2 [only 0p] - \n", ce.to_package_shortcut_s)
134
+
135
+ # class also in 1
136
+ ce.update(1)
137
+ assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
138
+
139
+ # class dropped in 2, package exists
140
+ @version = [0,1,2]
141
+ assert_equal(" Class2 [-1p] - \n", ce.to_package_shortcut_s)
142
+
143
+ # class also in 2
144
+ ce.update(2)
145
+ assert_equal(" Class2 [p] - \n", ce.to_package_shortcut_s)
146
+ end
147
+
148
+ def test_to_package_shortcut_s_later
149
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', true, 1)
150
+
151
+ # list is only for 1
152
+ @version = [1]
153
+ assert_equal(" Class2 - \n", ce.to_package_shortcut_s)
154
+
155
+ # new class in 1
156
+ @version = [0,1]
157
+ assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
158
+
159
+ # new class in 1, not in 2
160
+ @version = [0,1,2]
161
+ assert_equal(" Class2 [only 1] - \n", ce.to_package_shortcut_s)
162
+
163
+ # new class in 1, also in 2
164
+ ce.update(2)
165
+ assert_equal(" Class2 [1] - \n", ce.to_package_shortcut_s)
166
+
167
+ # new class in 1 and 2, not in 3
168
+ @version = [0,1,2,3]
169
+ assert_equal(" Class2 [1-2] - \n", ce.to_package_shortcut_s)
170
+ end
171
+
172
+ def test_to_package_shortcut_s_later_package
173
+ ce = JavaClass::ClassList::ClassEntry.new(self, 'pkg2.Class2', false, 1)
174
+
175
+ # list is only for 1
176
+ @version = [1]
177
+ assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
178
+
179
+ # new class in 1
180
+ @version = [0,1]
181
+ assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
182
+
183
+ # new class in 1, not in 2
184
+ @version = [0,1,2]
185
+ assert_equal(" Class2 [only 1p] - \n", ce.to_package_shortcut_s)
186
+
187
+ # new class in 1, also in 2
188
+ ce.update(2)
189
+ assert_equal(" Class2 [1p] - \n", ce.to_package_shortcut_s)
190
+
191
+ # new class in 1 and 2, not in 3
192
+ @version = [0,1,2,3]
193
+ assert_equal(" Class2 [1-2p] - \n", ce.to_package_shortcut_s)
194
+ end
195
+
196
+ end
197
+ end
198
+ end
@@ -1,59 +1,61 @@
1
1
  require File.dirname(__FILE__) + '/setup'
2
- require 'javaclass/class_version'
2
+ require 'javaclass/classfile/class_version'
3
3
 
4
4
  module TestJavaClass
5
-
6
- class TestClassVersion < Test::Unit::TestCase
5
+ module TestClassFile
7
6
 
8
- def setup
9
- @v = (0..6).collect do |i|
10
- JavaClass::ClassVersion.new(load_class("ClassVersionTest1#{i}"))
7
+ class TestClassVersion < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @v = (0..6).collect do |i|
11
+ JavaClass::ClassFile::ClassVersion.new(load_class("class_version/ClassVersionTest1#{i}"))
12
+ end
11
13
  end
12
- end
13
-
14
- # Assert the list of +v+ against the list of _expectations_ when invoking the given block.
15
- def assert_classes(expectations)
16
- expectations.values_at.each do |i|
17
- assert_equal(expectations[i], yield(@v[i]), "#{i}. element")
14
+
15
+ # Assert the list of +v+ against the list of _expectations_ when invoking the given block.
16
+ def assert_classes(expectations)
17
+ expectations.values_at.each do |i|
18
+ assert_equal(expectations[i], yield(@v[i]), "#{i}. element")
19
+ end
18
20
  end
19
- end
20
-
21
- def test_major
22
- assert_classes([45, 45, 46, 47, 48, 49, 50]) {|v| v.major}
23
- end
24
-
25
- def test_minor
26
- assert_classes([3, 3, 0, 0, 0, 0, 0]) {|v| v.minor}
27
- assert_equal(3, @v[1].minor) # shouldn't it be > 45.3
28
- end
29
-
30
- def test_to_s
31
- assert_equal('50.0', @v[6].to_s)
32
- assert_equal('45.3', @v[0].to_s)
33
- end
34
-
35
- def test_dump
36
- assert_equal([" minor version: 0", " major version: 50"], @v[6].dump)
37
- end
38
-
39
- def test_to_f
40
- assert_equal(50.0, @v[6].to_f)
41
- assert_equal(45.3, @v[0].to_f)
42
21
 
43
- v = JavaClass::ClassVersion.new("....\000\xff\0002")
44
- assert_equal(50.255, v.to_f)
22
+ def test_major
23
+ assert_classes([45, 45, 46, 47, 48, 49, 50]) {|v| v.major}
24
+ end
45
25
 
46
- v = JavaClass::ClassVersion.new("....\xff\xff\0002")
47
- assert_equal(50.65535, v.to_f)
48
- end
49
-
50
- def test_jdk_version
51
- assert_classes(%w[1.0 1.0 1.2 1.3 1.4 1.5 1.6]) {|v| v.jdk_version}
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
29
+ end
30
+
31
+ def test_to_s
32
+ assert_equal('50.0', @v[6].to_s)
33
+ assert_equal('45.3', @v[0].to_s)
34
+ end
35
+
36
+ def test_dump
37
+ assert_equal([' minor version: 0', ' major version: 50'], @v[6].dump)
38
+ end
39
+
40
+ def test_to_f
41
+ assert_equal(50.0, @v[6].to_f)
42
+ assert_equal(45.3, @v[0].to_f)
43
+
44
+ v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
45
+ assert_equal(50.255, v.to_f)
46
+
47
+ v = JavaClass::ClassFile::ClassVersion.new("....\xff\xff\0002")
48
+ assert_equal(50.65535, v.to_f)
49
+ end
50
+
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
+
54
+ v = JavaClass::ClassFile::ClassVersion.new("....\000\xff\0002")
55
+ assert_equal('unknown', v.jdk_version)
56
+ end
52
57
 
53
- v = JavaClass::ClassVersion.new("....\000\xff\0002")
54
- assert_equal('unknown', v.jdk_version)
55
58
  end
56
59
 
57
60
  end
58
-
59
61
  end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classpath/composite_classpath'
3
+
4
+ module TestJavaClass
5
+ module TestClasspath
6
+
7
+ class TestCompositeClasspath < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @cpe = JavaClass::Classpath::CompositeClasspath.new
11
+ @cpe.add_file_name "#{TEST_DATA_PATH}/jar_classpath/JarClasspathTestManifest.jar"
12
+ end
13
+
14
+ def test_add_element
15
+ # fake methods for zentest, tested in setup and add_file_name
16
+ assert(true)
17
+ end
18
+
19
+ def test_add_file_name
20
+ @cpe.add_file_name "#{TEST_DATA_PATH}/folder_classpath/JarClasspathTestFolder"
21
+ assert_equal(2+1+2, @cpe.count)
22
+ end
23
+
24
+ def test_additional_classpath
25
+ assert_equal([], @cpe.additional_classpath)
26
+ end
27
+
28
+ def test_jar_eh
29
+ assert(!@cpe.jar?)
30
+ end
31
+
32
+ def test_count
33
+ assert_equal(2+1, @cpe.count)
34
+ end
35
+
36
+ def test_elements
37
+ assert_equal(2, @cpe.elements.size)
38
+ assert_equal("#{TEST_DATA_PATH}/jar_classpath/JarClasspathTest.jar", @cpe.elements[1].to_s)
39
+ end
40
+
41
+ def test_includes_eh
42
+ assert(@cpe.includes?('ClassVersionTest11.class'))
43
+ assert(@cpe.includes?('ClassVersionTest11'))
44
+ assert(@cpe.includes?('ClassVersionTest10.class'))
45
+ assert(@cpe.includes?('ClassVersionTest10'))
46
+ end
47
+
48
+ def test_load_binary
49
+ assert_equal(load_class('class_version/ClassVersionTest11'), @cpe.load_binary('ClassVersionTest11'))
50
+ 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'))
52
+ end
53
+
54
+ def test_names
55
+ assert_equal(['ClassVersionTest11.class', 'ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
56
+ end
57
+
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
+
67
+ end
68
+ end
@@ -1,12 +1,13 @@
1
1
  require File.dirname(__FILE__) + '/setup'
2
- require 'javaclass/constant_pool'
2
+ require 'javaclass/classfile/constant_pool'
3
3
 
4
4
  module TestJavaClass
5
-
6
- class TestConstantPool < Test::Unit::TestCase
5
+ module TestClassFile
7
6
 
8
- # 1.6.0_11 javap.exe output of test class, only tweaked the float value a bit...
9
- JAVAP_OUTPUT = ' Constant pool:
7
+ class TestConstantPool < Test::Unit::TestCase
8
+
9
+ # 1.6.0_11 javap.exe output of test class, only tweaked the float value a bit...
10
+ JAVAP_OUTPUT = ' Constant pool:
10
11
  const #1 = Method #15.#33; // java/lang/Object."<init>":()V
11
12
  const #2 = String #34; // String field
12
13
  const #3 = Field #14.#35; // ConstantPoolTest.stringField:Ljava/lang/String;
@@ -48,43 +49,50 @@ const #40 = NameAndType #27:#28;// doubleField:D
48
49
  const #41 = Asciz ConstantPoolTest;
49
50
  const #42 = Asciz java/lang/Object;
50
51
  const #43 = Asciz java/lang/Runnable;'
51
-
52
- def setup
53
- @cp = JavaClass::ConstantPool.new(load_class('ConstantPoolTest'))
54
- end
55
-
56
- def test_index
57
- assert_equal('Method', @cp[1].name)
58
- assert_equal('Field', @cp[10].name)
59
- end
60
-
61
- def test_size
62
- assert_equal(331, @cp.size)
63
- end
64
-
65
- def test_item_count
66
- assert_equal(43, @cp.item_count)
67
- end
68
-
69
- def test_dump
70
- # puts @cp.dump.join("\n")
71
- assert_equal(JAVAP_OUTPUT.gsub(/ +/,' ').gsub(/"</,'<').gsub(/>"/,'>'), @cp.dump.join("\n").gsub(/( |\t)+/,' '))
72
- end
73
-
74
- def test_items
75
- pool = @cp.items
76
- assert_equal(41, pool.size) # 2 double
77
- assert_equal('Method', pool[0].name)
78
- assert_equal('stringField', pool[14].value)
79
- end
80
-
81
- def test_find
82
- found = @cp.find(JavaClass::ConstantPool::STRING_TAG)
83
- assert_equal(1, found.size)
84
- assert_equal('String', found[0].name)
85
- assert_equal(34, found[0].string_index)
52
+
53
+ def setup
54
+ @cp = JavaClass::ClassFile::ConstantPool.new(load_class('constant_pool/ConstantPoolTest'))
55
+ end
56
+
57
+ def test_index
58
+ assert_equal('Method', @cp[1].name)
59
+ assert_equal('Field', @cp[10].name)
60
+ end
61
+
62
+ def test_size
63
+ assert_equal(331, @cp.size)
64
+ end
65
+
66
+ def test_item_count
67
+ assert_equal(43, @cp.item_count)
68
+ end
69
+
70
+ def test_dump
71
+ # puts @cp.dump.join("\n")
72
+ assert_equal(JAVAP_OUTPUT.gsub(/ +/, ' ').gsub(/"</, '<').gsub(/>"/, '>'), @cp.dump.join("\n").gsub(/( |\t)+/,' '))
73
+ end
74
+
75
+ def test_items
76
+ pool = @cp.items
77
+ assert_equal(41, pool.size) # 2 double
78
+ assert_equal('Method', pool[0].name)
79
+ assert_equal('stringField', pool[14].value)
80
+ end
81
+
82
+ def test_find
83
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::STRING_TAG)
84
+ assert_equal(1, found.size)
85
+ assert_equal('String', found[0].name)
86
+ assert_equal(34, found[0].string_index)
87
+ end
88
+
89
+ def test_strings
90
+ found = @cp.strings
91
+ assert_equal(1, found.size)
92
+ assert_equal('String', found[0].name)
93
+ end
94
+
86
95
  end
87
96
 
88
97
  end
89
-
90
98
  end
@@ -0,0 +1,45 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classpath/folder_classpath'
3
+
4
+ module TestJavaClass
5
+ module TestClasspath
6
+
7
+ class TestFolderClasspath < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @cpe = JavaClass::Classpath::FolderClasspath.new("#{TEST_DATA_PATH}/folder_classpath/JarClasspathTestFolder")
11
+ end
12
+
13
+ def test_count
14
+ assert_equal(2, @cpe.count)
15
+ end
16
+
17
+ def test_additional_classpath
18
+ assert_equal([], @cpe.additional_classpath)
19
+ end
20
+
21
+ def test_jar_eh
22
+ assert(!@cpe.jar?)
23
+ end
24
+
25
+ def test_includes_eh
26
+ assert(@cpe.includes?('ClassVersionTest10.class'))
27
+ assert(@cpe.includes?('ClassVersionTest10'))
28
+ assert(!@cpe.includes?('ClassVersionTest11.class'))
29
+ assert(!@cpe.includes?('ClassVersionTest11'))
30
+ assert(@cpe.includes?('package/ClassVersionTest11.class'))
31
+ assert(@cpe.includes?('package/ClassVersionTest11'))
32
+ end
33
+
34
+ def test_load_binary
35
+ assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
36
+ end
37
+
38
+ def test_names
39
+ assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,57 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classpath/jar_classpath'
3
+
4
+ module TestJavaClass
5
+ module TestClasspath
6
+
7
+ class TestJarClasspath < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @folder = "#{TEST_DATA_PATH}/jar_classpath"
11
+ @cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.jar")
12
+ end
13
+
14
+ def test_count
15
+ assert_equal(2, @cpe.count)
16
+ end
17
+
18
+ def test_additional_classpath
19
+ assert_equal([], @cpe.additional_classpath)
20
+
21
+ @cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTestManifest.jar")
22
+ assert_equal(["#{@folder}/JarClasspathTest.jar"], @cpe.additional_classpath)
23
+
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",
26
+ "#{@folder}/lib/xercesImpl-2.5.jar", "#{@folder}/lib/js-1.5R4.1.jar"], @cpe.additional_classpath)
27
+ end
28
+
29
+ def test_jar_eh
30
+ assert(@cpe.jar?)
31
+
32
+ @cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
33
+ assert(!@cpe.jar?)
34
+ end
35
+
36
+ def test_includes_eh
37
+ assert(@cpe.includes?('ClassVersionTest10.class'))
38
+ assert(@cpe.includes?('ClassVersionTest10'))
39
+ assert(!@cpe.includes?('ClassVersionTest11.class'))
40
+ assert(!@cpe.includes?('ClassVersionTest11'))
41
+ end
42
+
43
+ def test_load_binary
44
+ assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
45
+
46
+ @cpe = JavaClass::Classpath::JarClasspath.new("#{@folder}/JarClasspathTest.zip")
47
+ assert_equal(load_class('class_version/ClassVersionTest10'), @cpe.load_binary('ClassVersionTest10'))
48
+ end
49
+
50
+ def test_names
51
+ assert_equal(['ClassVersionTest10.class', 'package/ClassVersionTest11.class'], @cpe.names)
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,93 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classlist/jar_searcher'
3
+ require 'javaclass/classpath/jar_classpath'
4
+
5
+ module TestJavaClass
6
+ module TestClassList
7
+ class TestJarSearcher < Test::Unit::TestCase
8
+
9
+ PACKAGE_CLASS = "packagename/PackageClass.class"
10
+ INNER_CLASS = "packagename/PublicClass$InnerClass.class"
11
+ PUBLIC_CLASS = "packagename/PublicClass.class"
12
+ PUBLIC_INTERFACE = "packagename/PublicInterface.class"
13
+ CLASSES = [INNER_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE, PACKAGE_CLASS]
14
+
15
+ def setup
16
+ @cs = JavaClass::ClassList::JarSearcher.new
17
+ end
18
+
19
+ def test_filter_classes
20
+ @cs.skip_inner_classes = false
21
+ classes = @cs.filter_classes(CLASSES)
22
+ assert_equal(4, classes.size)
23
+ assert_equal(INNER_CLASS, classes[0])
24
+ assert_equal(PUBLIC_CLASS, classes[1])
25
+ assert_equal(PUBLIC_INTERFACE, classes[2])
26
+ assert_equal(PACKAGE_CLASS, classes[3])
27
+ end
28
+
29
+ def test_skip_inner_classes_equals
30
+ # @cs.skip_inner_classes = true # default
31
+ classes = @cs.filter_classes(CLASSES)
32
+ assert_equal(3, classes.size)
33
+ assert_equal(PUBLIC_CLASS, classes[0])
34
+ assert_equal(PUBLIC_INTERFACE, classes[1])
35
+ assert_equal(PACKAGE_CLASS, classes[2])
36
+ end
37
+
38
+ def test_filters_equals
39
+ @cs.filters = ['packagename/']
40
+ classes = @cs.filter_classes(CLASSES)
41
+ assert_equal(0, classes.size)
42
+ end
43
+
44
+ def test_public_eh
45
+ @cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
46
+ assert(!@cs.public?(@cpe, PACKAGE_CLASS))
47
+ assert(!@cs.public?(@cpe, INNER_CLASS))
48
+ assert(@cs.public?(@cpe, PUBLIC_CLASS))
49
+ end
50
+
51
+ class MockList # ZenTest SKIP mock class
52
+ attr_reader :versions
53
+ attr_reader :modifiers
54
+ attr_reader :entries
55
+ def initialize
56
+ @versions = []
57
+ @modifiers = []
58
+ @size = 0
59
+ @entries = []
60
+ end
61
+
62
+ def add_class(entry, is_public, version)
63
+ @entries << entry
64
+ @modifiers << is_public
65
+ @versions << version
66
+ end
67
+
68
+ def size
69
+ @entries.size
70
+ end
71
+ end
72
+
73
+ def test_compile_list
74
+ list = @cs.compile_list(2, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
75
+
76
+ assert_equal(3, list.size)
77
+ assert_equal([PACKAGE_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
78
+ assert_equal([false, true, true], list.modifiers)
79
+ assert_equal([2, 2, 2], list.versions)
80
+ end
81
+
82
+ def test_skip_package_classes_equals
83
+ @cs.skip_package_classes = true
84
+ list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
85
+
86
+ assert_equal(2, list.size)
87
+ assert_equal([PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+ end