javaclass 0.4.1 → 0.4.2

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 (54) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +188 -194
  3. data/Readme.txt +33 -29
  4. data/examples/generate_class_lists.rb +16 -9
  5. data/history.txt +15 -4
  6. data/javaclass.gemspec +10 -8
  7. data/lib/generated/examples/chart_class_dependencies.txt +35 -0
  8. data/lib/generated/examples/chart_module_dependencies.txt +43 -0
  9. data/lib/generated/examples/check_interface_names.txt +36 -0
  10. data/lib/generated/examples/count_classes_in_modules.txt +31 -0
  11. data/lib/generated/examples/cumulative_dependencies.txt +28 -0
  12. data/lib/generated/examples/find_all_imported_types.txt +38 -0
  13. data/lib/generated/examples/find_incoming_dependency_graph.txt +73 -0
  14. data/lib/generated/examples/find_layers_of_modules.txt +70 -0
  15. data/lib/generated/examples/find_referenced_modules.txt +41 -0
  16. data/lib/generated/examples/find_unreferenced_classes.txt +66 -0
  17. data/lib/generated/examples/generate_class_lists.txt +53 -0
  18. data/lib/generated/examples/show_jar_api.txt +64 -0
  19. data/lib/generated/examples/simple_usage.txt +38 -0
  20. data/lib/javaclass/classfile/access_flag_constants.rb +32 -5
  21. data/lib/javaclass/classfile/access_flags.rb +39 -20
  22. data/lib/javaclass/classfile/attributes/attributes.rb +134 -0
  23. data/lib/javaclass/classfile/class_access_flags.rb +37 -0
  24. data/lib/javaclass/classfile/class_file_attributes.rb +62 -0
  25. data/lib/javaclass/classfile/class_version.rb +0 -1
  26. data/lib/javaclass/classfile/constant_pool.rb +17 -11
  27. data/lib/javaclass/classfile/constants/single_reference.rb +53 -0
  28. data/lib/javaclass/classfile/fields.rb +37 -0
  29. data/lib/javaclass/classfile/java_class_header.rb +22 -13
  30. data/lib/javaclass/classfile/java_class_header_shortcuts.rb +6 -2
  31. data/lib/javaclass/classfile/methods.rb +37 -0
  32. data/lib/javaclass/classlist/jar_searcher.rb +38 -4
  33. data/lib/javaclass/classpath/temporary_unpacker.rb +1 -1
  34. data/lib/javaclass/string_hexdump.rb +1 -1
  35. data/license.txt +7 -7
  36. data/test/data/access_flags/{AccessFlagsTestInner$1.class → AccessFlagsTestAnonym$1.class} +0 -0
  37. data/test/data/access_flags/{AccessFlagsTestInner.class → AccessFlagsTestAnonym.class} +0 -0
  38. data/test/data/access_flags/AccessFlagsTestAnonym.java +9 -0
  39. data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +1 -0
  40. data/test/data/constant_pool/Java8_JavaFX_Animation$1_Tag15.class +0 -0
  41. data/test/data/constant_pool/Java9_Activation_module-info_Tag20.class +0 -0
  42. data/test/data/jar_searcher/JarClassListTest.jar +0 -0
  43. data/test/data/jar_searcher/PublicClass.java +44 -1
  44. data/test/data/jar_searcher/make.bat +1 -2
  45. data/test/{test_access_flags.rb → test_class_access_flags.rb} +91 -93
  46. data/test/test_class_file_attributes.rb +57 -0
  47. data/test/test_constant_pool.rb +31 -0
  48. data/test/test_jar_searcher.rb +40 -7
  49. data/test/test_javaclass_api.rb +2 -2
  50. data/test/test_string_hexdump.rb +4 -1
  51. data/test/ts_all_tests.rb +4 -2
  52. metadata +100 -116
  53. data/test/data/access_flags/AccessFlagsTestInner$2.class +0 -0
  54. data/test/data/access_flags/AccessFlagsTestInner.java +0 -13
@@ -37,7 +37,7 @@ module JavaClass
37
37
  def create_temporary_folder
38
38
  folder = File.join(find_temp_folder, "temp_#{File.basename(@jarfile)}_#{Time.now.to_i.to_s}")
39
39
  FileUtils.mkdir_p(folder)
40
- at_exit { FileUtils.rm_r(folder) }
40
+ at_exit { FileUtils.rm_r(folder) if File.exist? folder }
41
41
  @folder = folder
42
42
  end
43
43
 
@@ -18,7 +18,7 @@ class String
18
18
 
19
19
  [ offset + columns, previous_lines + [line] ]
20
20
  }
21
- offset, lines = *output
21
+ lines = output[1]
22
22
  lines.join
23
23
  end
24
24
 
@@ -1,4 +1,4 @@
1
- === BSD License
1
+ === BSD 2-Clause "Simplified" License
2
2
 
3
3
  Copyright (c) 2009, Peter Kofler.
4
4
  All rights reserved.
@@ -15,14 +15,14 @@ modification, are permitted provided that the following conditions are met:
15
15
 
16
16
  <b>
17
17
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
- AND ANY EXPRESS OR IMPLIEDWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
19
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR APARTICULAR PURPOSE
20
20
  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
- LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF
21
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
23
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
- INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OROTHERWISE)
24
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
26
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
- POSSIBILITY OF SUCHDAMAGE.
27
+ POSSIBILITY OF SUCH DAMAGE.
28
28
  </b>
@@ -0,0 +1,9 @@
1
+ package packagename;
2
+
3
+ public class AccessFlagsTestAnonym {
4
+
5
+ private Runnable anonymous = new Runnable() {
6
+ public void run() { }
7
+ };
8
+
9
+ }
@@ -1,4 +1,5 @@
1
1
  public class packagename.AccessFlagsTestPublic extends java.lang.Object
2
+ SourceFile: "AccessFlagsTestPublic.java"
2
3
  minor version: 0
3
4
  major version: 50
4
5
  Constant pool:
@@ -2,11 +2,54 @@ package packagename;
2
2
 
3
3
  public class PublicClass {
4
4
 
5
- class InnerClass {
5
+ private class PublicClass_PrivateInnerClass {
6
6
  }
7
7
 
8
+ private static class PublicClass_StaticPrivateInnerClass {
9
+ }
10
+
11
+ class PublicClass_PackageInnerClass {
12
+ }
13
+
14
+ static class PublicClass_StaticPackageInnerClass {
15
+ }
16
+
17
+ public class PublicClass_PublicInnerClass {
18
+ }
19
+
20
+ public static class PublicClass_StaticPublicInnerClass {
21
+ }
22
+
23
+ void named() {
24
+ class Method_PackageInnerClass {
25
+ }
26
+ }
27
+
28
+ void anonymous() {
29
+ new Runnable() {
30
+ public void run() {
31
+ }
32
+ };
33
+ }
8
34
  }
9
35
 
10
36
  class PackageClass {
11
37
 
38
+ private class PackageClass_PrivateInnerClass {
39
+ }
40
+
41
+ private static class PackageClass_StaticPrivateInnerClass {
42
+ }
43
+
44
+ class PackageClass_PackageInnerClass {
45
+ }
46
+
47
+ static class PackageClass_StaticPackageInnerClass {
48
+ }
49
+
50
+ public class PackageClass_PublicInnerClass {
51
+ }
52
+
53
+ public static class PackageClass_StaticPublicInnerClass {
54
+ }
12
55
  }
@@ -1,4 +1,3 @@
1
- del *.class
2
1
  del *.jar
3
2
 
4
3
  md classes
@@ -7,7 +6,7 @@ cd classes
7
6
  jar -cf ..\JarClassListTest.jar *
8
7
  cd ..
9
8
 
10
- copy classes\packagename\*.class .
9
+ rem copy classes\packagename\*.class .
11
10
 
12
11
  rmdir /S /Q classes
13
12
  pause
@@ -1,94 +1,92 @@
1
- require File.dirname(__FILE__) + '/setup'
2
- require 'javaclass/classfile/java_class_header'
3
-
4
- module TestJavaClass
5
- module TestClassFile
6
-
7
- class TestAccessFlags < Test::Unit::TestCase
8
-
9
- def setup
10
- %w[Public Package Abstract Interface Final Enum Annotation
11
- Public$Inner Public$StaticInner Public$InnerInterface Enum$1 Inner Inner$1 Inner$2].each do |t|
12
- binary_data = load_class("access_flags/AccessFlagsTest#{t}")
13
- clazz = JavaClass::ClassFile::JavaClassHeader.new(binary_data)
14
- variable_name = t.sub(/Public\$/, 'public_').
15
- sub(/Inner\$1/, 'anonymous').
16
- sub(/Inner\$2/, 'static_anonymous').
17
- sub(/Enum\$1/, 'enum_inner').
18
- downcase
19
- eval("@#{variable_name} = clazz.access_flags")
20
- end
21
- end
22
-
23
- def test_flags_hex
24
- assert_equal('0021', @public.flags_hex)
25
- assert_equal('0020', @package.flags_hex)
26
- end
27
-
28
- def test_accessible_eh
29
- assert(@public.accessible?)
30
- assert(!@package.accessible?)
31
- end
32
-
33
- def test_public_eh
34
- assert(@public.public?)
35
- assert(!@package.public?)
36
- end
37
-
38
- def test_interface_eh
39
- assert(!@public.interface?)
40
- assert(!@abstract.interface?)
41
- assert(@interface.interface?)
42
- assert(@public_innerinterface.interface?)
43
- assert(@annotation.interface?)
44
- end
45
-
46
- def test_abstract_eh
47
- assert(!@public.abstract?)
48
- assert(@abstract.abstract?)
49
- assert(@interface.abstract?)
50
- assert(@public_innerinterface.abstract?)
51
- assert(@annotation.abstract?)
52
- end
53
-
54
- def test_final_eh
55
- assert(!@public.final?)
56
- assert(!@abstract.final?)
57
- assert(!@interface.final?)
58
- assert(@final.final?)
59
- assert(!@enum.final?) # because we have a inner class
60
- assert(@enum_inner.final?)
61
- end
62
-
63
- def test_enum_eh
64
- assert(!@public.enum?)
65
- assert(@enum.enum?)
66
- assert(@enum_inner.enum?)
67
- end
68
-
69
- # def test_inner_eh
70
- # assert(!@public.inner?)
71
- # assert(!@public_inner.inner?)
72
- # assert(!@inner.inner?)
73
- # assert(!@anonymous.inner?)
74
- # assert(!@static_anonymous.inner?)
75
- # assert(!@enum_inner.inner?)
76
- # end
77
-
78
- def test_annotation_eh
79
- assert(!@public.annotation?)
80
- assert(!@public_innerinterface.annotation?)
81
- assert(!@interface.annotation?)
82
- assert(@annotation.annotation?)
83
- end
84
-
85
- def test_class_new_jdk10_fix
86
- flags = JavaClass::ClassFile::JavaClassHeader.new(load_class('Runnable_102')).access_flags
87
- assert(flags.abstract?)
88
- assert(flags.interface?)
89
- end
90
-
91
- end
92
-
93
- end
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classfile/java_class_header'
3
+
4
+ module TestJavaClass
5
+ module TestClassFile
6
+
7
+ class TestClassAccessFlags < Test::Unit::TestCase
8
+
9
+ def setup
10
+ %w[Public Package Abstract Interface Final Enum Annotation
11
+ Public$InnerInterface Enum$1 Anonym$1].each do |t|
12
+ binary_data = load_class("access_flags/AccessFlagsTest#{t}")
13
+ clazz = JavaClass::ClassFile::JavaClassHeader.new(binary_data)
14
+ variable_name = t.sub(/Public\$/, 'public_').
15
+ sub(/Anonym\$1/, 'anonymous').
16
+ sub(/Enum\$1/, 'enum_inner').
17
+ downcase
18
+ eval("@#{variable_name} = clazz.access_flags")
19
+ end
20
+ end
21
+
22
+ def test_flags_hex
23
+ assert_equal('0021', @public.flags_hex)
24
+ assert_equal('0020', @package.flags_hex)
25
+ end
26
+
27
+ def test_accessible_eh
28
+ assert(@public.accessible?)
29
+ assert(!@package.accessible?)
30
+ end
31
+
32
+ def test_public_eh
33
+ assert(@public.public?)
34
+ assert(!@package.public?)
35
+ end
36
+
37
+ def test_interface_eh
38
+ assert(!@public.interface?)
39
+ assert(!@abstract.interface?)
40
+ assert(@interface.interface?)
41
+ assert(@public_innerinterface.interface?)
42
+ assert(@public_innerinterface.interface_class?)
43
+ assert(@annotation.interface?)
44
+ assert(!@annotation.interface_class?)
45
+ end
46
+
47
+ def test_abstract_eh
48
+ assert(!@public.abstract?)
49
+ assert(@abstract.abstract?)
50
+ assert(@interface.abstract?)
51
+ assert(@public_innerinterface.abstract?)
52
+ assert(@annotation.abstract?)
53
+ end
54
+
55
+ def test_final_eh
56
+ assert(!@public.final?)
57
+ assert(!@abstract.final?)
58
+ assert(!@interface.final?)
59
+ assert(@final.final?)
60
+ assert(!@enum.final?) # because we have a inner class
61
+ assert(@enum_inner.final?)
62
+ end
63
+
64
+ def test_enum_eh
65
+ assert(!@public.enum?)
66
+ assert(@enum.enum?)
67
+ assert(@enum_inner.enum?)
68
+ end
69
+
70
+ def test_annotation_eh
71
+ assert(!@public.annotation?)
72
+ assert(!@public_innerinterface.annotation?)
73
+ assert(!@interface.annotation?)
74
+ assert(@annotation.annotation?)
75
+ end
76
+
77
+ def test_synthetic_eh
78
+ assert(!@public.synthetic?)
79
+ # assert(@anonymous.synthetic?) # should be but is not, hmm
80
+ # assert(@enum_inner.synthetic?)
81
+ end
82
+
83
+ def test_class_new_jdk10_fix
84
+ flags = JavaClass::ClassFile::JavaClassHeader.new(load_class('Runnable_102')).access_flags
85
+ assert(flags.abstract?)
86
+ assert(flags.interface?)
87
+ end
88
+
89
+ end
90
+
91
+ end
94
92
  end
@@ -0,0 +1,57 @@
1
+ require File.dirname(__FILE__) + '/setup'
2
+ require 'javaclass/classfile/java_class_header'
3
+
4
+ module TestJavaClass
5
+ module TestClassFile
6
+
7
+ class TestClassFileAttributes < Test::Unit::TestCase
8
+
9
+ def setup
10
+ %w[Public Public$Inner Public$StaticInner Public$InnerInterface Enum$1 Anonym$1].each do |t|
11
+ binary_data = load_class("access_flags/AccessFlagsTest#{t}")
12
+ clazz = JavaClass::ClassFile::JavaClassHeader.new(binary_data)
13
+ variable_name = t.sub(/Public\$/, 'public_').
14
+ sub(/Anonym\$1/, 'anonymous').
15
+ sub(/Enum\$1/, 'enum_inner').
16
+ downcase
17
+ eval("@#{variable_name} = clazz.attributes")
18
+ end
19
+ end
20
+
21
+ def test_inner_eh
22
+ assert(!@public.inner_class?)
23
+ assert(@public_inner.inner_class?)
24
+ assert(@public_staticinner.inner_class?)
25
+ assert(@public_innerinterface.inner_class?)
26
+ assert(@anonymous.inner_class?)
27
+ assert(@enum_inner.inner_class?)
28
+ end
29
+
30
+ def test_static_inner_eh
31
+ assert(!@public_inner.static_inner_class?)
32
+ assert(@public_staticinner.static_inner_class?)
33
+ assert(@public_innerinterface.static_inner_class?)
34
+ assert(!@anonymous.static_inner_class?)
35
+ assert(@enum_inner.static_inner_class?)
36
+ end
37
+
38
+ def test_anonymous_eh
39
+ assert(!@public.anonymous?)
40
+ assert(!@public_inner.anonymous?)
41
+ assert(@anonymous.anonymous?)
42
+ assert(@enum_inner.anonymous?)
43
+ end
44
+
45
+ def test_source_file
46
+ assert_equal('AccessFlagsTestPublic.java', @public.source_file)
47
+ assert_equal('AccessFlagsTestPublic.java', @public_inner.source_file)
48
+ end
49
+
50
+ def test_outer_class
51
+ assert_equal('packagename/AccessFlagsTestPublic', @public.outer_class)
52
+ assert_equal('packagename/AccessFlagsTestPublic', @public_inner.outer_class)
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -116,6 +116,37 @@ const #43 = Asciz java/lang/Runnable;'
116
116
  JavaClass::ClassFile::ConstantPool.new(data)
117
117
  }
118
118
  end
119
+
120
+ def test_java_8_tag_15
121
+ @cp = JavaClass::ClassFile::ConstantPool.new(load_class('constant_pool/Java8_JavaFX_Animation$1_Tag15'))
122
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::METHOD_HANDLE_TAG)
123
+ assert_equal(2, found.size)
124
+ assert_equal('MethodHandle', found[0].name)
125
+
126
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::METHOD_TYPE_TAG)
127
+ assert_equal(2, found.size)
128
+ assert_equal('MethodType', found[0].name)
129
+ assert_equal('()Ljava/lang/Object;', found[0].method_type_value)
130
+
131
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::INVOKE_DYNAMIC_TAG)
132
+ assert_equal(1, found.size)
133
+ assert_equal('InvokeDynamic', found[0].name)
134
+ assert_equal('run:(Ljavafx/animation/Animation$1;J)Ljava/security/PrivilegedAction;', found[0].name_and_type_value)
135
+ end
136
+
137
+ def test_java_9_tag_20
138
+ @cp = JavaClass::ClassFile::ConstantPool.new(load_class('constant_pool/Java9_Activation_module-info_Tag20'))
139
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::MODULE_TAG)
140
+ assert_equal(4, found.size)
141
+ assert_equal('Module', found[0].name)
142
+ assert_equal('java.activation', found[0].name_value)
143
+
144
+ found = @cp.find(JavaClass::ClassFile::ConstantPool::PACKAGE_TAG)
145
+ assert_equal(2, found.size)
146
+ assert_equal('Package', found[1].name)
147
+ assert_equal('javax/activation', found[1].name_value)
148
+ end
149
+
119
150
  end
120
151
 
121
152
  end
@@ -9,7 +9,8 @@ module TestJavaClass
9
9
  class TestJarSearcher < Test::Unit::TestCase
10
10
 
11
11
  PACKAGE_CLASS = "packagename/PackageClass.class"
12
- INNER_CLASS = "packagename/PublicClass$InnerClass.class"
12
+ INNER_CLASS = "packagename/PublicClass$PublicClass_PackageInnerClass.class"
13
+ PUBLIC_INNER_CLASS = "packagename/PackageClass$PackageClass_PublicInnerClass.class"
13
14
  PUBLIC_CLASS = "packagename/PublicClass.class"
14
15
  PUBLIC_INTERFACE = "packagename/PublicInterface.class"
15
16
  CLASSES = [INNER_CLASS, PUBLIC_CLASS, PUBLIC_INTERFACE, PACKAGE_CLASS]
@@ -44,14 +45,15 @@ module TestJavaClass
44
45
  end
45
46
 
46
47
  def test_public_eh
47
- @cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
48
+ @cpe = create_jar_searcher
48
49
  assert(!@cs.public?(@cpe, PACKAGE_CLASS))
49
50
  assert(!@cs.public?(@cpe, INNER_CLASS))
50
51
  assert(@cs.public?(@cpe, PUBLIC_CLASS))
52
+ assert(@cs.public?(@cpe, PUBLIC_INNER_CLASS))
51
53
  end
52
-
54
+
53
55
  def test_public_eh_fails
54
- @cpe = JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
56
+ @cpe = create_jar_searcher
55
57
  assert_raise(JavaClass::Classpath::ClassNotFoundError){ @cs.public?(@cpe, 'NonExistingClass') }
56
58
 
57
59
  @cpe = JavaClass::Classpath::FolderClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher"))
@@ -59,7 +61,11 @@ module TestJavaClass
59
61
  @cs.public?(@cpe, 'BrokenRunnable_102')
60
62
  }
61
63
  end
62
-
64
+
65
+ def create_jar_searcher
66
+ JavaClass::Classpath::JarClasspath.new(File.expand_path("#{TEST_DATA_PATH}/jar_searcher/JarClassListTest.jar"))
67
+ end
68
+
63
69
  class MockList # ZenTest SKIP mock class
64
70
  attr_reader :versions
65
71
  attr_reader :modifiers
@@ -81,9 +87,16 @@ module TestJavaClass
81
87
  def size
82
88
  @entries.size
83
89
  end
90
+
91
+ def to_s
92
+ @entries.join("\n")
93
+ end
84
94
  end
85
95
 
86
- def test_compile_list
96
+ def test_compile_list_no_inner_classes
97
+ # @cs.skip_inner_classes = true # default
98
+ # @cs.skip_package_classes = false # default
99
+
87
100
  list = @cs.compile_list(2, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
88
101
 
89
102
  assert_equal(3, list.size)
@@ -92,14 +105,34 @@ module TestJavaClass
92
105
  assert_equal([2, 2, 2], list.versions)
93
106
  end
94
107
 
95
- def test_skip_package_classes_equals
108
+ def test_compile_list_no_inner_no_package_classes
109
+ # @cs.skip_inner_classes = true # default
96
110
  @cs.skip_package_classes = true
111
+
97
112
  list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
98
113
 
99
114
  assert_equal(2, list.size)
100
115
  assert_equal([PUBLIC_CLASS, PUBLIC_INTERFACE], list.entries)
101
116
  end
102
117
 
118
+ def test_compile_list_all_public_and_package_classes
119
+ @cs.skip_inner_classes = false
120
+ # @cs.skip_package_classes = false # default
121
+
122
+ list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
123
+
124
+ assert_equal(3 + 2 + 2, list.size) # 3 files, 2 static inner in public, 2 static inner in package
125
+ end
126
+
127
+ def test_compile_list_all_public_and_no_package_classes
128
+ @cs.skip_inner_classes = false
129
+ @cs.skip_package_classes = true
130
+
131
+ list = @cs.compile_list(3, "#{TEST_DATA_PATH}/jar_searcher", MockList.new )
132
+
133
+ assert_equal(2 + 1, list.size) # 2 files, 1 public static inner in public
134
+ end
135
+
103
136
  end
104
137
 
105
138
  end