Class GWTTestCase
- All Implemented Interfaces:
junit.framework.Test
There are two versions of this class. This version is the binary version that
derives from JUnit's TestCase
and handles all the work of starting up
the GWT environment. The other version is a translatable class that is used
within the browser. See the translatable
subpackage for the
translatable implementation.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
Information about a synthetic module used for testing. -
Field Summary
Modifier and TypeFieldDescriptionstatic final Map
<String, GWTTestCase.TestModuleInfo> Records all live GWTTestCases by synthetic module name so we can optimize run they are compiled and run.protected junit.framework.TestResult
Object that collects the results of this test case execution. -
Constructor Summary
ConstructorDescriptionA new instance of your subclass is constructed for each test method that is to be run. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Determines whether or not exceptions will be caught by the test fixture.protected final void
delayTestFinish
(int timeoutMillis) Put the current test in asynchronous mode.protected final void
Cause this test to succeed during asynchronous mode.static String[]
Get the names of all test modules.static int
Get the number of modules.abstract String
Specifies a module to use when running this test case.com.google.gwt.junit.JUnitShell.Strategy
Get theJUnitShell.Strategy
to use when compiling and running this test.final String
Get the synthetic module name, which includes the synthetic extension defined by theJUnitShell.Strategy
.static GWTTestCase.TestModuleInfo
getTestsForModule
(String syntheticModuleName) Get the set of allJUnitHost.TestInfo
for the specified module.protected void
gwtSetUp()
A replacement for JUnit'ssetUp()
method.protected void
A replacement for JUnit'stearDown()
method.boolean
Returns whether this test case should be run in pure Java mode (non-GWT).protected void
Reports an exception that might have escaped to the browser.final void
run
(junit.framework.TestResult result) Stashesresult
so that it can be accessed duringrunTest()
.protected void
runTest()
Runs the test via theJUnitShell
environment.void
setForcePureJava
(boolean forcePureJava) Specifies whether this test case should be always run in pure Java mode (non-GWT).void
protected final void
setUp()
This method has been made final to prevent you from accidentally running client code outside of the GWT environment.protected final void
tearDown()
This method has been made final to prevent you from accidentally running client code outside of the GWT environment.Methods inherited from class junit.framework.TestCase
countTestCases, createResult, getName, run, runBare, toString
Methods inherited from class junit.framework.Assert
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
-
Field Details
-
ALL_GWT_TESTS
Records all live GWTTestCases by synthetic module name so we can optimize run they are compiled and run. Ordered so that we can precompile the modules in the order that they will run. -
testResult
protected junit.framework.TestResult testResultObject that collects the results of this test case execution.
-
-
Constructor Details
-
GWTTestCase
public GWTTestCase()A new instance of your subclass is constructed for each test method that is to be run. You should avoid running code in your subclass constructor, initializer blocks, and field initializations, because if those code blocks must be runnable outside of the GWT environment. As an example of what could go wrong if you run code there, trying to run a JSNI method could generate anUnsatisfiedLinkError
, and trying to callGWT.create(Class)
could throw anUnsupportedOperationException
. Instead, overridegwtSetUp()
and perform any initialization code there.
-
-
Method Details
-
getAllTestModuleNames
Get the names of all test modules.- Returns:
- all test module names
-
getModuleCount
public static int getModuleCount()Get the number of modules.- Returns:
- the module count.
-
getTestsForModule
Get the set of allJUnitHost.TestInfo
for the specified module.- Parameters:
syntheticModuleName
- the synthetic module name- Returns:
- all tests for the module
-
catchExceptions
public boolean catchExceptions()Determines whether or not exceptions will be caught by the test fixture. Override this method and returnfalse
to let exceptions escape to the browser. This will break the normal JUnit reporting functionality, but can be useful in Production Mode with a JavaScript debugger to pin down where exceptions are originating.- Returns:
true
for normal JUnit behavior, orfalse
to disable normal JUnit exception reporting
-
getModuleName
Specifies a module to use when running this test case. Subclasses must return the name of a module that will cause the source for that subclass to be included.- Returns:
- the fully qualified name of a module, or
null
to run as a pure Java (non-GWT) test case (same effect as passingtrue
tosetForcePureJava(boolean)
) - See Also:
-
getStrategy
public com.google.gwt.junit.JUnitShell.Strategy getStrategy()Get theJUnitShell.Strategy
to use when compiling and running this test.- Returns:
- the test
JUnitShell.Strategy
-
getSyntheticModuleName
Get the synthetic module name, which includes the synthetic extension defined by theJUnitShell.Strategy
.- Returns:
- the synthetic module name, or
null
if this test case is run in pure Java mode (non-GWT) - See Also:
-
isPureJava
public boolean isPureJava()Returns whether this test case should be run in pure Java mode (non-GWT). Returnstrue
if and only ifgetModuleName()
returnsnull
, orsetForcePureJava(boolean)
was last invoked withtrue
. -
run
public final void run(junit.framework.TestResult result) Stashesresult
so that it can be accessed duringrunTest()
.- Specified by:
run
in interfacejunit.framework.Test
- Overrides:
run
in classjunit.framework.TestCase
-
setForcePureJava
public void setForcePureJava(boolean forcePureJava) Specifies whether this test case should be always run in pure Java mode (non-GWT). Passingtrue
has the same effect as returningnull
ingetModuleName()
. The setting isfalse
by default.- Parameters:
forcePureJava
-true
to always run this test case in pure Java mode (non-GWT);false
to run this test case in GWT mode ifgetModuleName()
does not returnnull
- See Also:
-
setName
- Overrides:
setName
in classjunit.framework.TestCase
-
delayTestFinish
protected final void delayTestFinish(int timeoutMillis) Put the current test in asynchronous mode. If the test method completes normally, this test will not immediately succeed. Instead, a delay period begins. During the delay period, the test system will wait for one of three things to happen:- If
finishTest()
is called before the delay period expires, the test will succeed. - If any exception escapes from an event handler during the delay period, the test will error with the thrown exception.
- If the delay period expires and neither of the above has happened, the
test will error with a
TimeoutException
.
This method is typically used to test event driven functionality.
Example:
public void testTimer() { // Set a delay period significantly longer than the // event is expected to take. delayTestFinish(500); // Setup an asynchronous event handler. Timer timer = new Timer() { @Override public void run() { // do some validation logic // tell the test system the test is now done finishTest(); } }; // Schedule the event and return control to the test system. timer.schedule(100); }
- Parameters:
timeoutMillis
- how long to wait before the current test will time out- Throws:
UnsupportedOperationException
- ifinvalid reference
#supportsAsync()
- See Also:
- Tip:
- Subsequent calls to this method reset the timeout.
- If
-
finishTest
protected final void finishTest()Cause this test to succeed during asynchronous mode. After callingdelayTestFinish(int)
, call this method during the delay period to cause this test to succeed. This method is typically called from an event handler some time after the test method returns control to the caller.Calling this method before the test method completes, will undo the effect of having called
delayTestFinish()
. The test will revert to normal, non-asynchronous mode.Example:
public void testTimer() { // Set a delay period significantly longer than the // event is expected to take. delayTestFinish(500); // Setup an asynchronous event handler. Timer timer = new Timer() { @Override public void run() { // do some validation logic // tell the test system the test is now done finishTest(); } }; // Schedule the event and return control to the test system. timer.schedule(100); }
- Throws:
IllegalStateException
- if this test is not in asynchronous modeUnsupportedOperationException
- ifinvalid reference
#supportsAsync()
- See Also:
-
reportUncaughtException
Reports an exception that might have escaped to the browser.This method is called by the test framework to report uncaught exceptions. The default implementation causes the test case to be reported as 'failed'. However in some rare situations where an uncaught exception is expected, a test case may choose to alter the behavior by overriding it:
class SomeTestCase extends GWTTestCase { class ExpectedTestException extends Exception {} @Override protected void reportUncaughtException(Throwable t) { // Ignore exceptions that are expected to be thrown by our test cases: if (t instanceof ExpectedTestException) { return; } super.reportUncaughtException(t); } ... }
Note that this method will not cause the test case to fail immediately if the main test body is still executing. In that case, test will fail after the main body returns with the reported exception. If the test has already finished (fail or success) before this method is called, the reported exception is currently ignored, but this may result in an error in a future version of GWT.- See Also:
-
gwtSetUp
A replacement for JUnit'ssetUp()
method. This method runs once per test method in your subclass, just before your each test method runs and can be used to perform initialization. Override this method instead ofsetUp()
. This method is run even in pure Java mode (non-GWT).- Throws:
Exception
- See Also:
-
gwtTearDown
A replacement for JUnit'stearDown()
method. This method runs once per test method in your subclass, just after your each test method runs and can be used to perform cleanup. Override this method instead oftearDown()
. This method is run even in pure Java mode (non-GWT).- Throws:
Exception
- See Also:
-
runTest
Runs the test via theJUnitShell
environment. Do not override or call this method.- Overrides:
runTest
in classjunit.framework.TestCase
- Throws:
Throwable
-
setUp
This method has been made final to prevent you from accidentally running client code outside of the GWT environment. Please overridegwtSetUp()
instead.- Overrides:
setUp
in classjunit.framework.TestCase
- Throws:
Exception
-
tearDown
This method has been made final to prevent you from accidentally running client code outside of the GWT environment. Please overridegwtTearDown()
instead.- Overrides:
tearDown
in classjunit.framework.TestCase
- Throws:
Exception
-