JML

org.jmlspecs.jmlunit
Class TestClassGenerator

java.lang.Object
  extended byorg.jmlspecs.jmlunit.TestClassGenerator
All Implemented Interfaces:
Constants, Constants, 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.61 $
Author:
Yoonsik Cheon, Gary T. Leavens

Class Specifications
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
protected  class TestClassGenerator.MethodInfo
          Common information needed from JMethodDeclarationType and CMethod in this class.
protected  class TestClassGenerator.MethodsIterator
          A composite control abstraction useful in this class.
private static class TestClassGenerator.NameGenerator
          A class for generating unique names for test methods.
private static class TestClassGenerator.Parameter
          A simple data structure class for storing information about a formal parameter.
 
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
private static long ACC_ALL
           
protected  Set fixtureTypes
          
protected  String generatorClassName
           
protected  String generatorPackageName
           
protected  boolean includeInherited
          Indicates whether tests are generated for all the inherited methods too.
private  TestClassGenerator.NameGenerator nameGen
          A name generator to generate unique names for test methods.
protected  String packageString
          The name of the package the generated class is in.
private  boolean requestedDeprecation
          Tell whether tests should be generated for deprecated methods.
private  long requestedVisibility
          
protected  String testClassName
          
protected  String testedPackageString
          The name of the package the type being tested is in.
protected  JTypeDeclarationType typeDecl
          The type declaration currently being translated.
protected  boolean useGenerator
           
private  FancyTabbedPrintWriter writer
          The writer where the generated test oracle classes are to be printed to.
 
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
TestClassGenerator(non_null JntOptions options)
          Constructs a new test oracle generator.
 
Model Method Summary
 
Model methods inherited from class java.lang.Object
hashValue
 
Method Summary
protected  String capitalize(non_null String s)
          Return a capitalized version of the argument
protected  void composeFailMessage(TestClassGenerator.MethodInfo mdecl, String mname, TestClassGenerator.Parameter[] params, TestClassGenerator.Parameter receiver, boolean isInstance, boolean isConstructor)
          Generates code that composes a message about the method and parameters.
private  TestClassGenerator.Parameter[] filterParameters(JFormalParameter[] p)
          Returns an array of original formal parameters, i.e., those not generated by the type checker.
protected static String fixtureVariableName(CType type)
          Returns a fixture variable name for the type named, type.
private  void generateNestedTestClassFor(TestClassGenerator.MethodInfo mdecl, String mname, String className, TestClassGenerator.Parameter[] params, TestClassGenerator.Parameter receiver, boolean isInstance, boolean isConstructor)
          Generates and prints a test class for the given method declaration, mdecl.
private  TestClassGenerator.Parameter[] generateParameters(CSpecializedType[] p)
          Returns an array of formal parameters for given parameter types, p.
protected  void generateTestClass(non_null JCompilationUnit cunit, non_null JTypeDeclarationType cdecl)
          Generates a test oracle class for the given class declaration, cdecl.
protected  String getPackageString()
          return the package string, if present.
protected  String getTestedPackageString()
          return the package string, if present.
private  boolean hasRequestedVisibility(long modifiers)
          Returns true if the given modifiers include an access modifier that has the same or widely visible than requested by the user.
protected  void indent()
          Indents one TAB_SIZE.
protected  void initializeFixture()
          Initialize the fixture to contain all of the types used as paramaeters in all the methods.
private static boolean isAbstract(long modifiers)
          Returns true if the argument has a public modifier.
private static boolean isPrivate(long modifiers)
          Returns true if the argument has a private modifier.
private static boolean isProtected(long modifiers)
          Returns true if the argument has a protected modifier.
private static boolean isPublic(long modifiers)
          Returns true if the argument has a public modifier.
protected static boolean isStatic(long modifiers)
          Returns true if the argument has a static modifier.
private  boolean isTestable(CMethod mdecl)
          Return true if the given inherited method can be tested.
private  boolean isTestable(JMethodDeclarationType mdecl)
          Return true if the given method declaration can be tested.
private  boolean isTestable(JTypeDeclarationType cdecl, String fileNameId)
          Returns true if the given type declaration is testable using the JML/JUnit approach.
private  String methodKind(TestClassGenerator.MethodInfo mdecl)
          Return the kind of method this is: either "method" or "constructor".
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(non_null Writer writer, non_null JCompilationUnit cunit, non_null JntOptions 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.
private  void printAddCallFor(String name)
          Prints a call to the appropriateaddTestSuiteFor$X method.
private  void printAddMethodFor(TestClassGenerator.MethodInfo mdecl, String mname, String className, TestClassGenerator.Parameter[] params, TestClassGenerator.Parameter receiver, boolean isInstance, boolean isConstructor)
          Prints a method to add the test cases for the given method to a test suite.
private  void printAddTestSuiteForEachMethod()
          Prints the addTestSuiteForEachMethod method, and the methods directly called by it and supporting nested classes.
private  void printAdvance(String iterVarStart)
          Print the advance of the given named iterator and closing bracket
private  void printBodyLoopControl(String mname, TestClassGenerator.Parameter param, int paramNum, int loopsThisSurrounds)
          Print the loop control statements for the body of adding tests for a method.
private  void printCharToString()
           
private  void printCheckHasData()
          Emit the a private method to check that the result of a call to get_receivers returned a non-null value (and note a test failure otherwise).
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 printImportStatements(JCompilationUnit cunit)
          Prints import statements.
private  void printInnerVarDecl(String mname, TestClassGenerator.Parameter param, int paramNum)
          Print the declaration of a final variable for this parameter.
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.
private  void printOneTest()
          Prints the nested OneTest class.
private  void printPackageStatement()
          Prints a package statement.
private  void printPrivateHelperMethods()
          Emit methods private to the generated class.
protected  void printSuite()
          Prints the suite() method.
private  void printTestClassArgumentDecl(TestClassGenerator.Parameter param)
          Print declaration of an argument.
private  void printTestClassConstrAssign(TestClassGenerator.Parameter param)
          Print the assignment of a parameter to a field.
private  void printTestClassDoCall(String mname, TestClassGenerator.Parameter[] params, TestClassGenerator.Parameter receiver, boolean isInstance, boolean isConstructor)
          Print the doCall method.
private  void printTestClassFailMessage(TestClassGenerator.MethodInfo mdecl, String mname, TestClassGenerator.Parameter[] params, TestClassGenerator.Parameter receiver, boolean isInstance, boolean isConstructor)
          Print the doCall method.
private  void printTestClassFieldDecl(TestClassGenerator.Parameter param, int paramNum)
          Print the declaration of a field for this parameter.
private  void printTestIsRACCompiled(JTypeDeclarationType cdecl)
          Prints test$IfRACCompiled method.
private  String testMethodClassName(String ident)
          Returns a unique test class name for the given method name.
private  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

writer

private FancyTabbedPrintWriter writer
The writer where the generated test oracle classes are to be printed to.

Specifications: non_null

typeDecl

protected JTypeDeclarationType typeDecl
The type declaration currently being translated.


testClassName

protected String testClassName


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.


fixtureTypes

protected Set fixtureTypes


nameGen

private TestClassGenerator.NameGenerator nameGen
A name generator to generate unique names for test methods.


requestedVisibility

private final long requestedVisibility

See Also:
#hasRequestedVisibility(int), isTestable(JMethodDeclarationType), isTestable(CMethod)

requestedDeprecation

private final boolean requestedDeprecation
Tell whether tests should be generated for deprecated methods. True means that tests for deprecated methods and constructors should be generated (the default option is false).

See Also:
isTestable(JMethodDeclarationType), isTestable(CMethod)

ACC_ALL

private static final long ACC_ALL

includeInherited

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


useGenerator

protected boolean useGenerator

generatorPackageName

protected String generatorPackageName

generatorClassName

protected String generatorClassName
Specifications: non_null
Constructor Detail

TestClassGenerator

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

Method Detail

perform

public void perform(non_null Writer writer,
                    non_null JCompilationUnit cunit,
                    non_null JntOptions 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.

Specifications:
requires cunit != null&&writer != null;
assignable (* the contents of fixtureTypes *);

printFileHeader

protected void printFileHeader()
Prints a file header message.


printImportStatements

protected void printImportStatements(JCompilationUnit cunit)
Prints import statements.


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(non_null JCompilationUnit cunit,
                                 non_null JTypeDeclarationType cdecl)
Generates a test oracle class for the given class declaration, cdecl.

Specifications:
assignable (* the contents of fixtureTypes *);

initializeFixture

protected void initializeFixture()
Initialize the fixture to contain all of the types used as paramaeters in all the methods.

Specifications:
assignable fixtureTypes.objectState;

methodKind

private String methodKind(TestClassGenerator.MethodInfo mdecl)
Return the kind of method this is: either "method" or "constructor".


printConstructor

protected void printConstructor()
Prints a boilerplate constructor.


printMain

protected void printMain()
Prints a boilerplate main method.


printSuite

protected void printSuite()
Prints the suite() method.


printOneTest

private void printOneTest()
Prints the nested OneTest class.


printAddTestSuiteForEachMethod

private void printAddTestSuiteForEachMethod()
Prints the addTestSuiteForEachMethod method, and the methods directly called by it and supporting nested classes.


printAddCallFor

private void printAddCallFor(String name)
Prints a call to the appropriateaddTestSuiteFor$X method.

Specifications:
requires name != null;

printAddMethodFor

private void printAddMethodFor(TestClassGenerator.MethodInfo mdecl,
                               String mname,
                               String className,
                               TestClassGenerator.Parameter[] params,
                               TestClassGenerator.Parameter receiver,
                               boolean isInstance,
                               boolean isConstructor)
Prints a method to add the test cases for the given method to a test suite.

Specifications:
requires mdecl != null;

printBodyLoopControl

private void printBodyLoopControl(String mname,
                                  TestClassGenerator.Parameter param,
                                  int paramNum,
                                  int loopsThisSurrounds)
Print the loop control statements for the body of adding tests for a method.


printInnerVarDecl

private void printInnerVarDecl(String mname,
                               TestClassGenerator.Parameter param,
                               int paramNum)
Print the declaration of a final variable for this parameter.


printAdvance

private void printAdvance(String iterVarStart)
Print the advance of the given named iterator and closing bracket


generateNestedTestClassFor

private void generateNestedTestClassFor(TestClassGenerator.MethodInfo mdecl,
                                        String mname,
                                        String className,
                                        TestClassGenerator.Parameter[] params,
                                        TestClassGenerator.Parameter receiver,
                                        boolean isInstance,
                                        boolean isConstructor)
Generates and prints a test class for the given method declaration, mdecl.


printTestClassFieldDecl

private void printTestClassFieldDecl(TestClassGenerator.Parameter param,
                                     int paramNum)
Print the declaration of a field for this parameter.


printTestClassArgumentDecl

private void printTestClassArgumentDecl(TestClassGenerator.Parameter param)
Print declaration of an argument.


printTestClassConstrAssign

private void printTestClassConstrAssign(TestClassGenerator.Parameter param)
Print the assignment of a parameter to a field.


printTestClassDoCall

private void printTestClassDoCall(String mname,
                                  TestClassGenerator.Parameter[] params,
                                  TestClassGenerator.Parameter receiver,
                                  boolean isInstance,
                                  boolean isConstructor)
Print the doCall method.


printTestClassFailMessage

private void printTestClassFailMessage(TestClassGenerator.MethodInfo mdecl,
                                       String mname,
                                       TestClassGenerator.Parameter[] params,
                                       TestClassGenerator.Parameter receiver,
                                       boolean isInstance,
                                       boolean isConstructor)
Print the doCall method.


getPackageString

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


getTestedPackageString

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


printTestIsRACCompiled

private void printTestIsRACCompiled(JTypeDeclarationType cdecl)
Prints test$IfRACCompiled method. The purpose of this method is to test to see if the code for the class under test, at least has been compiled with the JML runtime assertion checker. If not, then no testing is going to happen.


printPackageStatement

private void printPackageStatement()
Prints a package statement.


fixtureVariableName

protected static final String fixtureVariableName(CType type)
Returns a fixture variable name for the type named, type. The convention is to prefix the string "v" to the type name.


isTestable

private boolean isTestable(JTypeDeclarationType cdecl,
                           String fileNameId)
Returns true if the given type declaration is testable using the JML/JUnit approach. All non-private classes and interfaces are are testable.


isTestable

private boolean isTestable(JMethodDeclarationType mdecl)
Return true if the given method declaration can be tested. Static and non-static (instance) methods of public or package visibility and public constructors of non-abstract classes are testable. However particular, the main method and non-public constructors are not testable.


isTestable

private boolean isTestable(CMethod mdecl)
Return true if the given inherited method can be tested.


hasRequestedVisibility

private boolean hasRequestedVisibility(long modifiers)
Returns true if the given modifiers include an access modifier that has the same or widely visible than requested by the user.


printPrivateHelperMethods

private void printPrivateHelperMethods()
Emit methods private to the generated class.


printCheckHasData

private void printCheckHasData()
Emit the a private method to check that the result of a call to get_receivers returned a non-null value (and note a test failure otherwise).


printCharToString

private void printCharToString()

composeFailMessage

protected void composeFailMessage(TestClassGenerator.MethodInfo mdecl,
                                  String mname,
                                  TestClassGenerator.Parameter[] params,
                                  TestClassGenerator.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.


filterParameters

private TestClassGenerator.Parameter[] filterParameters(JFormalParameter[] p)
Returns an array of original formal parameters, i.e., those not generated by the type checker.

Specifications:
requires p != null;
ensures \result != null;

generateParameters

private TestClassGenerator.Parameter[] generateParameters(CSpecializedType[] p)
Returns an array of formal parameters for given parameter types, p.

Specifications:
requires p != null;
ensures \result != null;

capitalize

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


testMethodName

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


testMethodClassName

private String testMethodClassName(String ident)
Returns a unique test class name for the given method name.


isStatic

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


isPrivate

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


isPublic

private static final boolean isPublic(long modifiers)
Returns true if the argument has a public modifier.


isProtected

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


isAbstract

private static final boolean isAbstract(long modifiers)
Returns true if the argument has a public modifier.


methodsIter

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

Specifications:
assignable \nothing;
ensures \fresh(\result );

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.


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.