Scott, can you review-or-delegate both this and my earlier "review request: JUnit hang" I just sent a patch up to block sending a "bad Test" to the client (i.e. to fail early if the test is unnamed), but that led me to thinking about the more general how-not-to-hang-on-unspecified-error case. We send the test to the client, it reports results, and if that fails (i.e. because something's broke on the server), the client retries more or less indefinitely. There's a timeout thread, of course, but that works by reporting a timeout result... and so if the server can't record the result (my unnamed test had that effect, for example), then the timeout-report also gets retried, etc.
This is a very corner case, and (I claim) not worth a whole lot of effort to
close, but we really ought to shutdown somehow, and send a message (as it
is, you can at least see server exceptions if you're -logLevel ALL, but in
default cases it just hangs silently). The issue is that we're in the RPC
handling of the client's result, so anything we throw gets caught and sent
back to the client, and the client needs to be stopped anyway. Being unable
to trust the server side framework (if I could trust it, we wouldn't have
gotten an exception!), I couldn't think of any way to get out gracefully
without more work than I thought it was worth, so ultimately I'm just
dumping output and calling System.exit(). A bit unfriendly to pull the rug
out from under JUnit, and I fear it still leaves the client dangling, but
again this is a squirrelly error case that I (because of my "front door"
closure) don't actually know how to trigger... I just wanted us not to hang
silently. Any suggestions on improvement are welcome!
Oh--if you want to test it, just make a test suite like so:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new AnyGwtTestCaseYouLike()); // call ctor, not class
literal: oops!
return suite;
}
}
(N.B. it looks like, in the class-literal processing, JUnit Tests contain
TestCases, and TestCases are what get made from each testable method. Has
GWTTestCase been the wrong abstraction all this while, and should have been
GWTTest?? Not that I propose changing it now....)
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---
junit-cantrecord-r3776.patch
Description: Binary data
