UTJML

edu.utep.cs.utjml.rat
Class TestClassGenerator

java.lang.Object
  extended by edu.utep.cs.utjml.rat.TestClassGenerator
All Implemented Interfaces:
Constants
Direct Known Subclasses:
TestDataClassGenerator

public class TestClassGenerator
extends Object
implements Constants

A class for generating JML/JUnit test driver classes. An object of this class can generate a JML/JUnit test oracle class from an object of JCompilationUnit.

Version:
$Revision: 1.4 $
Author:
Yoonsik Cheon, Gary T. Leavens

Nested Class Summary
protected  class TestClassGenerator.MethodsIterator
          A composite control abstraction useful in this class.
protected static class TestClassGenerator.NameGenerator
          A class for generating unique names for test methods.
 
Field Summary
protected  boolean includeInherited
          Indicates whether tests are generated for all the inherited methods too.
protected  String packageString
          The name of the package the generated class is in.
protected  String testClassName
          The test class name currently being generated.
protected  String testedPackageString
          The name of the package the type being tested is in.
protected  JTypeDeclarationType typeDecl
          The type declaration currently being translated.
 
Fields inherited from interface edu.utep.cs.utjml.rat.Constants
DOT_JAVA, PKG_JMLRAC, PKG_JMLUNIT, PKG_JUNIT, TEST_CLASS_FILE_NAME_POSTFIX, TEST_CLASS_NAME_POSTFIX, TEST_DATA_FILE_NAME_POSTFIX, TEST_DATA_NAME_POSTFIX, TEST_METHOD_NAME_PREFIX
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
TestClassGenerator(RatOptions options)
          Constructs a new test oracle generator.
 
Method Summary
protected  String capitalize(String s)
          Return a capitalized version of the argument
protected  void composeFailMessage(MethodInfo mdecl, String mname, edu.utep.cs.utjml.rat.Parameter[] params, edu.utep.cs.utjml.rat.Parameter receiver, boolean isInstance, boolean isConstructor)
          Generates code that composes a message about the method and parameters.
protected  void composeMessage(String method, edu.utep.cs.utjml.rat.Parameter[] params, boolean isInstance, boolean isConstructor)
          Generates code that composes a message about the method and parameters.
protected  void generateTestClass(JCompilationUnit cunit, JTypeDeclarationType cdecl)
          Generates a test oracle class for the given class declaration, cdecl.
protected  void generateTestMethod(MethodInfo mdecl)
          Generates and prints a test method for the given method declaration, mdecl.
protected  String getPackageString()
          return the package string, if present.
protected  String getTestedPackageString()
          return the package string, if present.
protected  void indent()
          Indents one TAB_SIZE.
protected static boolean isStatic(long modifiers)
          Returns true if the argument has a static modifier.
protected  String methodSig(MethodInfo mdecl)
           
protected  TestClassGenerator.MethodsIterator methodsIter()
          Return a new methods iterator for the methods that should be checked.
protected  void newLine()
          Prints a line separator.
 void perform(Writer writer, JCompilationUnit cunit, RatOptions options)
          Generates a JML/JUnit test oracle class for the given compilation unit.
protected  void print(Object s)
          Prints the given object.
protected  void print(String s)
          Prints the given string.
protected  void printClassHeader()
          Prints the class header of test oracle class.
protected  void printClassJavadoc()
          Prints a javadoc comment for the current class.
protected  void printConstructor()
          Prints a boilerplate constructor.
protected  void printFileHeader()
          Prints a file header message.
protected  void println(Object s)
          Prints the given object with a trailing line separator.
protected  void printlnIn(Object s)
          Prints the given object with one TAB_SIZE indentation and a trailing line separator.
protected  void printMain()
          Prints a boilerplate main method.
protected  void printSuite()
          Prints a boilerplate suite method.
protected  void printTestMethods()
          Generates and prints test methods for all testable methods in the current class delcaration.
protected  String testMethodName(String ident)
          Returns a unique test method name for the given method name.
protected  void undent()
          Und-ndents one TAB_SIZE.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

typeDecl

protected JTypeDeclarationType typeDecl
The type declaration currently being translated.


testClassName

protected String testClassName
The test class name currently being generated.

 invariant typeDecl != null ==> 
   testClassName.equals(typeDecl.ident() + TEST_CLASS_NAME_POSTFIX);
 


packageString

protected String packageString
The name of the package the generated class is in.


testedPackageString

protected String testedPackageString
The name of the package the type being tested is in.


includeInherited

protected final boolean includeInherited
Indicates whether tests are generated for all the inherited methods too.

Constructor Detail

TestClassGenerator

public TestClassGenerator(RatOptions options)
Constructs a new test oracle generator.

Method Detail

perform

public void perform(Writer writer,
                    JCompilationUnit cunit,
                    RatOptions options)
Generates a JML/JUnit test oracle class for the given compilation unit. The generated test oracle class is written in the Java source code form to the given writer object.

 requires cunit != null && writer != null;
 


printFileHeader

protected void printFileHeader()
Prints a file header message.


printClassJavadoc

protected void printClassJavadoc()
Prints a javadoc comment for the current class.


printClassHeader

protected void printClassHeader()
Prints the class header of test oracle class.


generateTestClass

protected void generateTestClass(JCompilationUnit cunit,
                                 JTypeDeclarationType cdecl)
Generates a test oracle class for the given class declaration, cdecl.


methodsIter

protected TestClassGenerator.MethodsIterator methodsIter()
Return a new methods iterator for the methods that should be checked.


printTestMethods

protected void printTestMethods()
Generates and prints test methods for all testable methods in the current class delcaration.


generateTestMethod

protected void generateTestMethod(MethodInfo mdecl)
Generates and prints a test method for the given method declaration, mdecl.


methodSig

protected String methodSig(MethodInfo mdecl)

composeMessage

protected void composeMessage(String method,
                              edu.utep.cs.utjml.rat.Parameter[] params,
                              boolean isInstance,
                              boolean isConstructor)
Generates code that composes a message about the method and parameters. The code declares a String variable msg and the generated message is contained in that variable in the generated code.


printConstructor

protected void printConstructor()
Prints a boilerplate constructor.


printMain

protected void printMain()
Prints a boilerplate main method.


printSuite

protected void printSuite()
Prints a boilerplate suite method.


getPackageString

protected String getPackageString()
return the package string, if present.


getTestedPackageString

protected String getTestedPackageString()
return the package string, if present.


composeFailMessage

protected void composeFailMessage(MethodInfo mdecl,
                                  String mname,
                                  edu.utep.cs.utjml.rat.Parameter[] params,
                                  edu.utep.cs.utjml.rat.Parameter receiver,
                                  boolean isInstance,
                                  boolean isConstructor)
Generates code that composes a message about the method and parameters. The code declares a String variable msg and the generated message is contained in that variable in the generated code.


capitalize

protected String capitalize(String s)
Return a capitalized version of the argument


testMethodName

protected String testMethodName(String ident)
Returns a unique test method name for the given method name.


isStatic

protected static final boolean isStatic(long modifiers)
Returns true if the argument has a static modifier.


indent

protected final void indent()
Indents one TAB_SIZE.


undent

protected final void undent()
Und-ndents one TAB_SIZE.


print

protected void print(Object s)
Prints the given object.


print

protected void print(String s)
Prints the given string.


println

protected void println(Object s)
Prints the given object with a trailing line separator.


printlnIn

protected void printlnIn(Object s)
Prints the given object with one TAB_SIZE indentation and a trailing line separator.


newLine

protected void newLine()
Prints a line separator.


UTJML

UTJML is Copyright (C) 2004-2006 by University of Texas at El Paso and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the JML project.