edu.rice.cs.drjava.model.junit
Class DefaultJUnitModel

java.lang.Object
  extended by edu.rice.cs.drjava.model.junit.DefaultJUnitModel
All Implemented Interfaces:
JUnitModel, JUnitModelCallback

public class DefaultJUnitModel
extends Object
implements JUnitModel, JUnitModelCallback

Manages unit testing via JUnit.

Version:
$Id: DefaultJUnitModel.java 4691 2008-12-02 23:33:27Z dlsmith $

Constructor Summary
DefaultJUnitModel(MainJVM jvm, CompilerModel compilerModel, GlobalModel model)
          Main constructor.
 
Method Summary
 void addListener(JUnitListener listener)
          Add a JUnitListener to the model.
 void classFileError(ClassFileError e)
          Called to indicate that an illegal class file was encountered
 Iterable<File> getClassPath()
          Returns the current classpath in use by the JUnit JVM, in the form of a path-separator delimited string.
 File getFileForClassName(String className)
          Called when the JUnitTestManager wants to open a file that is not currently open.
 SwingDocument getJUnitDocument()
          Used only for testing.
 JUnitErrorModel getJUnitErrorModel()
          Gets the JUnitErrorModel, which contains error info for the last test run.
 boolean isTestInProgress()
           
 void junit(OpenDefinitionsDocument doc)
          Runs JUnit on the current document.
 void junitAll()
          Creates a JUnit test suite over all currently open documents and runs it.
 void junitDocs(List<OpenDefinitionsDocument> lod)
          Runs JUnit over a list of documents.
 void junitJVMReady()
          Called when the JVM used for unit tests has registered.
 void junitProject()
          Creates a JUnit test suite over all currently open documents and runs it.
 void nonTestCase(boolean isTestAll)
          Called from the JUnitTestManager if its given className is not a test case.
 void removeAllListeners()
          Removes all JUnitListeners from this model.
 void removeListener(JUnitListener listener)
          Remove a JUnitListener from the model.
 void resetJUnitErrors()
          Resets the junit error state to have no errors.
 void setForceTestSuffix(boolean b)
          set the forceTestSuffix flag that forces class names in projects to end in "Test
 void testEnded(String testName, boolean wasSuccessful, boolean causedError)
          Called when a particular test has ended.
 void testStarted(String testName)
          Called when a particular test is started.
 void testSuiteEnded(JUnitError[] errors)
          Called when a full suite of tests has finished running.
 void testSuiteStarted(int numTests)
          Called to indicate that a suite of tests has started running.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultJUnitModel

public DefaultJUnitModel(MainJVM jvm,
                         CompilerModel compilerModel,
                         GlobalModel model)
Main constructor.

Parameters:
jvm - RMI interface to a secondary JVM for running tests
compilerModel - the CompilerModel, used only as a lock to prevent simultaneous test and compile
model - used only for getSourceFile
Method Detail

setForceTestSuffix

public void setForceTestSuffix(boolean b)
Description copied from interface: JUnitModel
set the forceTestSuffix flag that forces class names in projects to end in "Test

Specified by:
setForceTestSuffix in interface JUnitModel

isTestInProgress

public boolean isTestInProgress()

addListener

public void addListener(JUnitListener listener)
Add a JUnitListener to the model.

Specified by:
addListener in interface JUnitModel
Parameters:
listener - a listener that reacts to JUnit events

removeListener

public void removeListener(JUnitListener listener)
Remove a JUnitListener from the model. If the listener is not currently listening to this model, this method has no effect.

Specified by:
removeListener in interface JUnitModel
Parameters:
listener - a listener that reacts to JUnit events

removeAllListeners

public void removeAllListeners()
Removes all JUnitListeners from this model.

Specified by:
removeAllListeners in interface JUnitModel

getJUnitDocument

public SwingDocument getJUnitDocument()
Used only for testing.

Specified by:
getJUnitDocument in interface JUnitModel

junitAll

public void junitAll()
Creates a JUnit test suite over all currently open documents and runs it. If the class file associated with a file is not a test case, it is ignored.

Specified by:
junitAll in interface JUnitModel

junitProject

public void junitProject()
Creates a JUnit test suite over all currently open documents and runs it. If a class file associated with a source file is not a test case, it will be ignored. Synchronized against the compiler model to prevent testing and compiling at the same time, which would create invalid results.

Specified by:
junitProject in interface JUnitModel

junitDocs

public void junitDocs(List<OpenDefinitionsDocument> lod)
Description copied from interface: JUnitModel
Runs JUnit over a list of documents. Synchronized against the compiler model to prevent testing and compiling at the same time, which would create invalid results.

Specified by:
junitDocs in interface JUnitModel
Parameters:
lod - the list of documents that are to be run through JUnit testing.

junit

public void junit(OpenDefinitionsDocument doc)
           throws ClassNotFoundException,
                  IOException
Runs JUnit on the current document. Forces the user to compile all open source documents before proceeding.

Specified by:
junit in interface JUnitModel
Parameters:
doc - the document to be run under JUnit
Throws:
ClassNotFoundException
IOException

getJUnitErrorModel

public JUnitErrorModel getJUnitErrorModel()
Gets the JUnitErrorModel, which contains error info for the last test run.

Specified by:
getJUnitErrorModel in interface JUnitModel

resetJUnitErrors

public void resetJUnitErrors()
Resets the junit error state to have no errors.

Specified by:
resetJUnitErrors in interface JUnitModel

nonTestCase

public void nonTestCase(boolean isTestAll)
Called from the JUnitTestManager if its given className is not a test case.

Specified by:
nonTestCase in interface JUnitModel
Specified by:
nonTestCase in interface JUnitModelCallback
Parameters:
isTestAll - whether or not it was a use of the test all button

classFileError

public void classFileError(ClassFileError e)
Called to indicate that an illegal class file was encountered

Specified by:
classFileError in interface JUnitModelCallback
Parameters:
e - the ClassFileObject describing the error.

testSuiteStarted

public void testSuiteStarted(int numTests)
Called to indicate that a suite of tests has started running.

Specified by:
testSuiteStarted in interface JUnitModelCallback
Parameters:
numTests - The number of tests in the suite to be run.

testStarted

public void testStarted(String testName)
Called when a particular test is started.

Specified by:
testStarted in interface JUnitModelCallback
Parameters:
testName - The name of the test being started.

testEnded

public void testEnded(String testName,
                      boolean wasSuccessful,
                      boolean causedError)
Called when a particular test has ended.

Specified by:
testEnded in interface JUnitModelCallback
Parameters:
testName - The name of the test that has ended.
wasSuccessful - Whether the test passed or not.
causedError - If not successful, whether the test caused an error or simply failed.

testSuiteEnded

public void testSuiteEnded(JUnitError[] errors)
Called when a full suite of tests has finished running. Does not necessarily run in event thread.

Specified by:
testSuiteEnded in interface JUnitModelCallback
Parameters:
errors - The array of errors from all failed tests in the suite.

getFileForClassName

public File getFileForClassName(String className)
Called when the JUnitTestManager wants to open a file that is not currently open.

Specified by:
getFileForClassName in interface JUnitModelCallback
Parameters:
className - the name of the class for which we want to find the file
Returns:
the file associated with the given class

getClassPath

public Iterable<File> getClassPath()
Returns the current classpath in use by the JUnit JVM, in the form of a path-separator delimited string.

Specified by:
getClassPath in interface JUnitModelCallback

junitJVMReady

public void junitJVMReady()
Called when the JVM used for unit tests has registered. Does not necessarily run in even thread.

Specified by:
junitJVMReady in interface JUnitModelCallback