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,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
+