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,41 @@
1
+ # add the lib to the load path
2
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
3
+
4
+ # TODO cleanup this code fragment and make a proper class
5
+
6
+ require 'javaclass'
7
+ include JavaClass
8
+
9
+ JDK_PACKAGES = %w| java javax.accessibility javax.activity javax.crypto javax.imageio javax.jnlp javax.management
10
+ javax.naming javax.net javax.print javax.rmi javax.script javax.security.auth javax.security.cert
11
+ javax.security.sasl javax.sound.midi javax.sound.sampled javax.sql javax.swing javax.transaction
12
+ javax.xml org.ietf.jgss org.w3c.dom org.xml.sax|.collect { |pkg| /^#{pkg}\./ }
13
+
14
+ def in_jdk?(name)
15
+ JDK_PACKAGES.find { |regex| name =~ regex } != nil
16
+ end
17
+
18
+ def imported_types(classes)
19
+ own_classes = classes.names.collect { |name| name.gsub('/', '.').sub(/\.class$/, '')}.sort
20
+
21
+ imported = classes.names.collect do |name|
22
+ clazz = JavaClassHeader.new(classes.load_binary(name))
23
+ clazz.references.used_classes.collect { |c| c.to_s.gsub('/', '.') }
24
+ end.flatten.uniq.sort
25
+
26
+ imported.reject { |name| in_jdk?(name) } - own_classes
27
+ end
28
+
29
+ # TODO detect and read spring XML configs?
30
+
31
+ classes = JavaClass::Classpath::FolderClasspath.new("./target/classes")
32
+ own = classes.names.collect { |name| name.gsub('/', '.').sub(/\.class$/, '')}.sort
33
+ used = imported_types(classes)
34
+ puts "---------- used types"
35
+ puts used
36
+
37
+ test_classes = JavaClass::Classpath::FolderClasspath.new("./target/test-classes")
38
+ test = imported_types(test_classes) - own - used
39
+ puts "---------- for tests"
40
+ puts test
41
+
@@ -0,0 +1,15 @@
1
+ === Metrics
2
+
3
+ * "metric" if all referencing classes of a class is another package, propose moving it there.
4
+ * "Greed Detector"
5
+ * count outgoing references (usage) per method
6
+ * which signatures are called how often
7
+ * maybe move current method there?
8
+ * CRSS Metric
9
+ * CCD
10
+
11
+ * {Chidamber and Kemerer Java Metrics (ckjm)}[http://www.spinellis.gr/sw/ckjm/]
12
+ * {The CRSS Metric for Package Design Quality}[http://crpit.com/confpapers/CRPITV62Melton2.pdf]
13
+
14
+ * {Evolutionary architecture and emergent design: Emergent design through metrics}[http://www.ibm.com/developerworks/java/library/j-eaed6/]
15
+
data/lib/javaclass.rb CHANGED
@@ -1,14 +1,47 @@
1
- require 'javaclass/java_class_header'
1
+ require 'javaclass/classfile/java_class_header'
2
+ require 'javaclass/classpath/java_home_classpath'
3
+ require 'javaclass/classpath/composite_classpath'
2
4
 
3
- # Parse and disassemble Java class files, similar to the +javap+ command.
5
+ # Main entry point for class file parsing.
4
6
  # Author:: Peter Kofler
5
- # See:: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
6
- # See:: http://en.wikipedia.org/wiki/Class_(file_format)
7
- module JavaClass
8
-
9
- # Read and disassemble the given class called _name_ (full file name).
10
- def self.parse(name)
11
- JavaClassHeader.new(File.open(name, 'rb') {|io| io.read } )
12
- end
13
-
7
+ module JavaClass
8
+
9
+ # Read and disassemble the given class from _filename_ (full file name).
10
+ def self.load_fs(filename)
11
+ disassemble(File.open(filename, 'rb') { |io| io.read } )
12
+ end
13
+
14
+ def self.parse(filename)
15
+ warn 'Deprecated method JavaClass::parse will be removed in next release. Use method load_fs instead.'
16
+ load_fs(filename)
17
+ end
18
+
19
+ # Read and disassemble the given class _classname_ from _classpath_ .
20
+ def self.load_cp(classname, classpath)
21
+ disassemble(classpath.load_binary(classname))
22
+ end
23
+
24
+ # Read and disassemble the given class inside _data_ (byte data).
25
+ def self.disassemble(data)
26
+ ClassFile::JavaClassHeader.new(data)
27
+ end
28
+
29
+ # Parse the given path variable _path_ and return a chain of class path elements.
30
+ def self.classpath(path)
31
+ full_classpath(nil, path)
32
+ end
33
+
34
+ # Parse and scan the system classpath. Needs +JAVA_HOME+ set. Uses environment +CLASSPATH+ if set.
35
+ def self.environment_classpath
36
+ full_classpath(ENV['JAVA_HOME'], ENV['CLASSPATH'])
37
+ end
38
+
39
+ # Parse the given path variable _path_ and return a chain of class path elements together with _javahome_ if any.
40
+ def self.full_classpath(javahome, path='')
41
+ cp = Classpath::CompositeClasspath.new
42
+ cp.add_element(Classpath::JavaHomeClasspath.new(javahome)) if javahome
43
+ path.split(File::PATH_SEPARATOR).each { |cpe| cp.add_file_name(cpe) } if path
44
+ cp
45
+ end
46
+
14
47
  end
@@ -0,0 +1,11 @@
1
+ package packagename;
2
+
3
+ public class AccessFlagsTestPublic {
4
+
5
+ private class Inner { }
6
+
7
+ static class StaticInner { }
8
+
9
+ interface InnerInterface { }
10
+
11
+ }
@@ -0,0 +1,29 @@
1
+ public class packagename.AccessFlagsTestPublic extends java.lang.Object
2
+ minor version: 0
3
+ major version: 50
4
+ Constant pool:
5
+ const #1 = Method #3.#17; // java/lang/Object."<init>":()V
6
+ const #2 = class #18; // packagename/AccessFlagsTestPublic
7
+ const #3 = class #19; // java/lang/Object
8
+ const #4 = class #20; // packagename/AccessFlagsTestPublic$InnerInterface
9
+ const #5 = Asciz InnerInterface;
10
+ const #6 = Asciz InnerClasses;
11
+ const #7 = class #21; // packagename/AccessFlagsTestPublic$StaticInner
12
+ const #8 = Asciz StaticInner;
13
+ const #9 = class #22; // packagename/AccessFlagsTestPublic$Inner
14
+ const #10 = Asciz Inner;
15
+ const #11 = Asciz <init>;
16
+ const #12 = Asciz ()V;
17
+ const #13 = Asciz Code;
18
+ const #14 = Asciz LineNumberTable;
19
+ const #15 = Asciz SourceFile;
20
+ const #16 = Asciz AccessFlagsTestPublic.java;
21
+ const #17 = NameAndType #11:#12;// "<init>":()V
22
+ const #18 = Asciz packagename/AccessFlagsTestPublic;
23
+ const #19 = Asciz java/lang/Object;
24
+ const #20 = Asciz packagename/AccessFlagsTestPublic$InnerInterface;
25
+ const #21 = Asciz packagename/AccessFlagsTestPublic$StaticInner;
26
+ const #22 = Asciz packagename/AccessFlagsTestPublic$Inner;
27
+
28
+ {
29
+ }
@@ -0,0 +1,24 @@
1
+ if exist JarClasspathTest*.* del JarClasspathTest*.*
2
+
3
+ md JarClasspathTestFolder\package
4
+ copy ..\class_version\ClassVersionTest10.class JarClasspathTestFolder
5
+ copy ..\class_version\ClassVersionTest11.class JarClasspathTestFolder\package
6
+
7
+ cd JarClasspathTestFolder
8
+ jar -cf ..\JarClasspathTest.jar .
9
+ cd ..
10
+
11
+ call winzip -a JarClasspathTest.zip ClassVersionTest10.class
12
+
13
+ echo Class-Path: JarClasspathTest.jar > manifest.txt
14
+ jar -cfm JarClasspathTestManifest.jar manifest.txt ClassVersionTest11.class
15
+ del manifest.txt
16
+
17
+ echo Version: 1.0.0> manifest.txt
18
+ echo Main-Class: at.kugel.tool.disconnect.Main>> manifest.txt
19
+ echo Class-Path: lib/httpunit-1.6.2.jar lib/nekohtml-0.9.1.jar >> manifest.txt
20
+ echo lib/xercesImpl-2.5.jar lib/js-1.5R4.1.jar>> manifest.txt
21
+ jar -cfm JarClasspathTestMultiManifest.jar manifest.txt ClassVersionTest11.class
22
+ del manifest.txt
23
+
24
+ pause
@@ -0,0 +1,12 @@
1
+ package packagename;
2
+
3
+ public class PublicClass {
4
+
5
+ class InnerClass {
6
+ }
7
+
8
+ }
9
+
10
+ class PackageClass {
11
+
12
+ }
@@ -0,0 +1,5 @@
1
+ package packagename;
2
+
3
+ public interface PublicInterface {
4
+
5
+ }
@@ -0,0 +1,13 @@
1
+ del *.class
2
+ del *.jar
3
+
4
+ md classes
5
+ javac -d classes *.java
6
+ cd classes
7
+ jar -cf ..\JarClassListTest.jar *
8
+ cd ..
9
+
10
+ copy classes\packagename\*.class .
11
+
12
+ rmdir /S /Q classes
13
+ pause
@@ -0,0 +1,13 @@
1
+ if exist JavaHomeClasspathTest\nul rmdir /S /Q JavaHomeClasspathTest
2
+
3
+ md JavaHomeClasspathTest\jdk\jre\lib
4
+ jar -cf JavaHomeClasspathTest\jdk\jre\lib\rt.jar ..\class_version\ClassVersionTest10.class
5
+
6
+ md JavaHomeClasspathTest\jre\lib
7
+ jar -cf JavaHomeClasspathTest\jre\lib\rt.jar ..\class_version\ClassVersionTest10.class
8
+
9
+ md JavaHomeClasspathTest\jre-ext\lib\ext
10
+ jar -cf JavaHomeClasspathTest\jre-ext\lib\rt.jar ..\class_version\ClassVersionTest10.class
11
+ jar -cf JavaHomeClasspathTest\jre-ext\lib\ext\ext.jar ..\class_version\ClassVersionTest11.class
12
+
13
+ pause
@@ -0,0 +1,12 @@
1
+ public class ReferencesTest {
2
+
3
+ private ReferencesTest field; // self reference
4
+
5
+ public ReferencesTest() {
6
+ super(); // Object is super class, also has ctor
7
+ field.x();
8
+ }
9
+
10
+ public void x() { }
11
+
12
+ }
@@ -0,0 +1,5 @@
1
+ if exist ReferencesTest.class del ReferencesTest.class
2
+
3
+ javac -g:none ReferencesTest.java
4
+
5
+ pause
data/test/setup.rb CHANGED
@@ -1,4 +1,8 @@
1
- require 'test/unit'
1
+ require 'test/unit'
2
+ require 'test/unit/testcase'
3
+
4
+ # Base require of tests.
5
+ # Author:: Peter Kofler
2
6
 
3
7
  # add the lib to the load path
4
8
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
@@ -7,8 +11,5 @@ TEST_DATA_PATH = File.join(File.dirname(__FILE__), 'data')
7
11
 
8
12
  # Load the binary class data of given _name_ from the test path.
9
13
  def load_class(name)
10
- File.open("#{TEST_DATA_PATH}/#{name}.class", 'rb') {|io| io.read }
14
+ File.open("#{TEST_DATA_PATH}/#{name}.class", 'rb') {|io| io.read }
11
15
  end
12
-
13
- # require 'javaclass'
14
- # require File.join(File.dirname(__FILE__), %w[.. lib javaclass])
@@ -1,53 +1,68 @@
1
1
  require File.dirname(__FILE__) + '/setup'
2
- require 'javaclass/java_class_header'
2
+ require 'javaclass/classfile/java_class_header'
3
3
 
4
4
  module TestJavaClass
5
-
6
- class TestAccessFlags < Test::Unit::TestCase
5
+ module TestClassFile
7
6
 
8
- def setup
9
- @cls = {}
10
- %w[Public Package Abstract Interface Final].each do |t|
11
- eval("@#{t.downcase} = JavaClass::JavaClassHeader.new(load_class('AccessFlagsTest#{t}')).access_flags")
7
+ class TestAccessFlags < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @cls = {}
11
+ %w[Public Package Abstract Interface Final Public$Inner Public$StaticInner Public$InnerInterface].each do |t|
12
+ eval("@#{t.sub(/Public\$/, '').downcase} = JavaClass::ClassFile::JavaClassHeader.new(load_class('access_flags/AccessFlagsTest#{t}')).access_flags")
13
+ end
12
14
  end
13
- end
14
-
15
- def test_accessible_eh
16
- assert(@public.accessible?)
17
- assert(!@package.accessible?)
18
- assert(@abstract.accessible?)
19
- assert(@interface.accessible?)
20
- assert(@final.accessible?)
21
- end
22
-
23
- def test_public_eh
24
- assert(@public.public?)
25
- end
26
-
27
- def test_interface_eh
28
- assert(!@public.interface?)
29
- assert(!@package.interface?)
30
- assert(!@abstract.interface?)
31
- assert(@interface.interface?)
32
- assert(!@final.interface?)
33
- end
34
-
35
- def test_abstract_eh
36
- assert(!@public.abstract?)
37
- assert(!@package.abstract?)
38
- assert(@abstract.abstract?)
39
- assert(@interface.abstract?)
40
- assert(!@final.abstract?)
41
- end
42
-
43
- def test_final_eh
44
- assert(!@public.final?)
45
- assert(!@package.final?)
46
- assert(!@abstract.final?)
47
- assert(!@interface.final?)
48
- assert(@final.final?)
15
+
16
+ def test_accessible_eh
17
+ assert(@public.accessible?)
18
+ assert(!@package.accessible?)
19
+ assert(@abstract.accessible?)
20
+ assert(@interface.accessible?)
21
+ assert(@final.accessible?)
22
+ end
23
+
24
+ def test_public_eh
25
+ assert(@public.public?)
26
+ end
27
+
28
+ def test_interface_eh
29
+ assert(!@public.interface?)
30
+ assert(!@package.interface?)
31
+ assert(!@abstract.interface?)
32
+ assert(@interface.interface?)
33
+ assert(!@final.interface?)
34
+ assert(@innerinterface.interface?)
35
+ end
36
+
37
+ def test_abstract_eh
38
+ assert(!@public.abstract?)
39
+ assert(!@package.abstract?)
40
+ assert(@abstract.abstract?)
41
+ assert(@interface.abstract?)
42
+ assert(!@final.abstract?)
43
+ assert(@innerinterface.abstract?)
44
+ end
45
+
46
+ def test_final_eh
47
+ assert(!@public.final?)
48
+ assert(!@package.final?)
49
+ assert(!@abstract.final?)
50
+ assert(!@interface.final?)
51
+ assert(@final.final?)
52
+ end
53
+
54
+ # def test_inner_eh
55
+ # assert(!@public.inner?)
56
+ # assert(!@package.inner?)
57
+ # assert(!@abstract.inner?)
58
+ # assert(!@interface.inner?)
59
+ # assert(!@final.inner?)
60
+ # assert(@inner.inner?)
61
+ # assert(@staticinner.inner?)
62
+ # assert(@innerinterface.inner?)
63
+ # end
64
+
49
65
  end
50
66
 
51
67
  end
52
-
53
68
  end
data/test/test_base.rb CHANGED
@@ -1,22 +1,27 @@
1
1
  require File.dirname(__FILE__) + '/setup'
2
- require 'javaclass/constants/base'
2
+ require 'javaclass/classfile/constants/base'
3
3
 
4
4
  module TestJavaClass
5
-
6
- class TestConstantBase < Test::Unit::TestCase
7
-
8
- class ConstantClass < JavaClass::Constants::Base;
9
- def initialize(name=nil); super(name); end
10
- end
11
-
12
- def test_name
13
- v = ConstantClass.new
14
- assert_equal("Class", v.name)
5
+ module TestClassFile
6
+ module TestConstants
7
+
8
+ class TestBase < Test::Unit::TestCase
9
+
10
+ class ConstantClass < JavaClass::ClassFile::Constants::Base; # ZenTest SKIP mock class
11
+ def initialize(name=nil); super(name); end
12
+ end
13
+
14
+ def test_name
15
+ v = ConstantClass.new
16
+ assert_equal('Class', v.name)
17
+
18
+ v = ConstantClass.new('Bubu')
19
+ assert_equal('Bubu', v.name)
20
+ end
21
+
22
+ end
15
23
 
16
- v = ConstantClass.new("Bubu")
17
- assert_equal("Bubu", v.name)
18
24
  end
19
-
20
25
  end
21
-
22
26
  end
27
+