javaclass 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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