JML

org.jmlspecs.jmlunit
Class TestDataClassGenerator

java.lang.Object
  extended byorg.jmlspecs.jmlunit.TestClassGenerator
      extended byorg.jmlspecs.jmlunit.TestDataClassGenerator
All Implemented Interfaces:
Constants, Constants, Constants

public class TestDataClassGenerator
extends TestClassGenerator
implements Constants

A class for generating JML/JUnit test data classes. A test data class must be used to specify test data for a JML/JUnit test oracle class generated by the class TestClassGenerator.

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

Class Specifications

Specifications inherited from class TestClassGenerator
invariant this.typeDecl != null ==> this.testClassName.equals(this.typeDecl.ident()+"_JML_Test");
invariant this.fixtureTypes != null&&( \forall java.lang.Object o; this.fixtureTypes.contains(o); o != null&&o instanceof org.multijava.mjc.CType);
private invariant this.requestedVisibility == 1||this.requestedVisibility == 4||this.requestedVisibility == org.jmlspecs.jmlunit.TestClassGenerator.ACC_ALL;

Specifications inherited from class Object
represents objectState <- org.jmlspecs.lang.JMLDataGroup.IT;
public represents _getClass <- \typeof(this);

Specifications inherited from interface Constants
invariant "junit.framework.".length() > 0 ==> "junit.framework.".charAt("junit.framework.".length()) == 46;
invariant "org.jmlspecs.jmlrac.runtime.".length() > 0 ==> "org.jmlspecs.jmlrac.runtime.".charAt("org.jmlspecs.jmlrac.runtime.".length()) == 46;
invariant "org.jmlspecs.jmlunit.".length() > 0 ==> "org.jmlspecs.jmlunit.".charAt("org.jmlspecs.jmlunit.".length()) == 46;
invariant "org.jmlspecs.jmlunit.strategies.".length() > 0 ==> "org.jmlspecs.jmlunit.strategies.".charAt("org.jmlspecs.jmlunit.".length()) == 46;

Specifications inherited from interface Constants
public invariant true;

Nested Class Summary
 
Nested classes inherited from class org.jmlspecs.jmlunit.TestClassGenerator
TestClassGenerator.MethodInfo, TestClassGenerator.MethodsIterator
 
Model Field Summary
 
Model fields inherited from class java.lang.Object
_getClass, objectState, theString
 
Ghost Field Summary
 
Ghost fields inherited from class java.lang.Object
objectTimesFinalized, owner
 
Field Summary
 
Fields inherited from class org.jmlspecs.jmlunit.TestClassGenerator
fixtureTypes, generatorClassName, generatorPackageName, includeInherited, packageString, testClassName, testedPackageString, typeDecl, useGenerator
 
Fields inherited from interface org.jmlspecs.jmlunit.Constants
DOT_JAVA, PKG_JMLRAC, PKG_JMLUNIT, PKG_JUNIT, PKG_STRATEGIES, 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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_ldc2_w, opc_ldc_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
TestDataClassGenerator(JntOptions options)
          Constructs a new test data class generator object.
 
Model Method Summary
 
Model methods inherited from class java.lang.Object
hashValue
 
Method Summary
static String defaultValue(non_null CType type)
          Returns the default value of the type type.
private  CExpressionContextType expr_context(CClass selfClass)
          Compute a context for use in testing whether a method exists in the given class.
protected  void generateTestClass(non_null JCompilationUnit cunit, non_null JTypeDeclarationType cdecl)
          Generates a test data class for the given class, cdecl.
 boolean hasCloneMethod(CClass selfClass)
          Does the given CClass have a clone method?
protected  void initializeFixture()
          Initialize the fixture to contain all of the types used as paramaeters in all the methods.
private  boolean isImmutableType(non_null CType type, non_null String typeName)
          Is the given type an immutable type?
private  void print_get_X_MethodDecl(String varName, String typeName, String defaultValue, boolean isImmutableType, boolean hasCloneMethod)
          Prints the declaration of the get_X method.
private  void print_size_X_MethodDecl(String varName, String typeName, boolean isImmutableType, boolean hasCloneMethod)
          Prints the declaration of the size_X method.
protected  void printBigComment()
          Print the big comment in the body explaining how to edit the code to provide test data.
protected  void printClassHeader()
          Prints the class header of test case class.
protected  void printClassJavadoc()
          Prints a javadoc comment for the current class.
private  void printDataProvisionCode(CType type)
          Prints the declaration of the vTiter method as well as the sample strategy for the given type.
protected  void printDataProvisionMethods()
          Prints declarations of the vTiter methods, as well as sample strategy declarations for.
private  void printEmptyTestSuiteForMethod()
          Print the declaration of the emptyTestSuiteFor method.
protected  void printImportStatements(JCompilationUnit cunit)
          Prints import statements.
private  void printIteratorProvisionMethod(String varName, String typeName, boolean isPrimitive, boolean isImmutableType, boolean hasCloneMethod)
          Print the declaration of the vTiter method for the given type.
private  void printOverallTestSuiteMethod()
          Print the declaration of the overallTestSuite method.
private  void printProvideIteratorComment(String typeName)
           
private  void printStrategyGuess(CType type, String varName, String typeName, boolean isPrimitive, boolean isImmutable, boolean hasCloneMethod)
          Print the declaration of the default strategy for the given type.
protected  void printSuiteFactoryMethods()
          Print the factory method declarations.
 
Methods inherited from class org.jmlspecs.jmlunit.TestClassGenerator
capitalize, composeFailMessage, fixtureVariableName, getPackageString, getTestedPackageString, indent, isStatic, methodsIter, newLine, perform, print, print, printConstructor, printFileHeader, println, printlnIn, printMain, printSuite, undent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TestDataClassGenerator

public TestDataClassGenerator(JntOptions options)
Constructs a new test data class generator object.

Method Detail

printImportStatements

protected void printImportStatements(JCompilationUnit cunit)
Prints import statements.

Overrides:
printImportStatements in class TestClassGenerator
Specifications inherited from overridden method in class TestClassGenerator:
      --- None ---

printClassJavadoc

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

Overrides:
printClassJavadoc in class TestClassGenerator
Specifications inherited from overridden method in class TestClassGenerator:
      --- None ---

generateTestClass

protected void generateTestClass(non_null JCompilationUnit cunit,
                                 non_null JTypeDeclarationType cdecl)
Generates a test data class for the given class, cdecl. This method is overridden here to generate a data case class instead of a test oracle class.

Overrides:
generateTestClass in class TestClassGenerator
Specifications inherited from overridden method generateTestClass(JCompilationUnit cunit, JTypeDeclarationType cdecl) in class TestClassGenerator:
assignable (* the contents of fixtureTypes *);

printClassHeader

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

Overrides:
printClassHeader in class TestClassGenerator
Specifications inherited from overridden method in class TestClassGenerator:
      --- None ---

printSuiteFactoryMethods

protected void printSuiteFactoryMethods()
Print the factory method declarations.


printOverallTestSuiteMethod

private void printOverallTestSuiteMethod()
Print the declaration of the overallTestSuite method.


printEmptyTestSuiteForMethod

private void printEmptyTestSuiteForMethod()
Print the declaration of the emptyTestSuiteFor method.


printBigComment

protected void printBigComment()
Print the big comment in the body explaining how to edit the code to provide test data.


initializeFixture

protected void initializeFixture()
Description copied from class: TestClassGenerator
Initialize the fixture to contain all of the types used as paramaeters in all the methods.

Overrides:
initializeFixture in class TestClassGenerator
Specifications inherited from overridden method in class TestClassGenerator:
assignable fixtureTypes.objectState;

printDataProvisionMethods

protected void printDataProvisionMethods()
Prints declarations of the vTiter methods, as well as sample strategy declarations for.


printDataProvisionCode

private void printDataProvisionCode(CType type)
Prints the declaration of the vTiter method as well as the sample strategy for the given type.

Specifications:
requires type != null;

printIteratorProvisionMethod

private void printIteratorProvisionMethod(String varName,
                                          String typeName,
                                          boolean isPrimitive,
                                          boolean isImmutableType,
                                          boolean hasCloneMethod)
Print the declaration of the vTiter method for the given type.


printProvideIteratorComment

private void printProvideIteratorComment(String typeName)

printStrategyGuess

private void printStrategyGuess(CType type,
                                String varName,
                                String typeName,
                                boolean isPrimitive,
                                boolean isImmutable,
                                boolean hasCloneMethod)
Print the declaration of the default strategy for the given type.


print_size_X_MethodDecl

private void print_size_X_MethodDecl(String varName,
                                     String typeName,
                                     boolean isImmutableType,
                                     boolean hasCloneMethod)
Prints the declaration of the size_X method.

Specifications:
requires varName != null&&typeName != null;

print_get_X_MethodDecl

private void print_get_X_MethodDecl(String varName,
                                    String typeName,
                                    String defaultValue,
                                    boolean isImmutableType,
                                    boolean hasCloneMethod)
Prints the declaration of the get_X method.

Specifications:
requires varName != null&&typeName != null;

isImmutableType

private boolean isImmutableType(non_null CType type,
                                non_null String typeName)
Is the given type an immutable type?

Specifications:
requires (* typeName is the same as type.toString *);

expr_context

private CExpressionContextType expr_context(CClass selfClass)
Compute a context for use in testing whether a method exists in the given class.


hasCloneMethod

public boolean hasCloneMethod(CClass selfClass)
Does the given CClass have a clone method? (Thanks to Curtis Clifton for help with this.)


defaultValue

public static String defaultValue(non_null CType type)
Returns the default value of the type type. I.e., 0 for numerical types, false for boolean, empty array for array types, and null for other types.


JML

JML is Copyright (C) 1998-2002 by Iowa State University 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 MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.