and its input and output so that the JDK bug on Windows does not shows up. - Clean up. - Fix the test, the thread was not the lock owner..dooh ! git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270741 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -100,7 +100,7 @@ public class OutputAttribute extends ProjectComponent { | |||||
| } else if (STDERR.equals(value)) { | } else if (STDERR.equals(value)) { | ||||
| return new KeepAliveOutputStream(System.err); | return new KeepAliveOutputStream(System.err); | ||||
| } | } | ||||
| File f = project.resolveFile(value); | |||||
| File f = getProject().resolveFile(value); | |||||
| try { | try { | ||||
| return new FileOutputStream(f); | return new FileOutputStream(f); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| @@ -64,7 +64,18 @@ import junit.runner.TestCollector; | |||||
| */ | */ | ||||
| public class TestElement implements TestCollector { | public class TestElement implements TestCollector { | ||||
| /** classname of JUnit test */ | |||||
| private String name; | |||||
| //@fixme, a path is needed for a test. | |||||
| public Enumeration collectTests() { | public Enumeration collectTests() { | ||||
| return null; | |||||
| return Enumerations.fromArray( new String[]{ name } ); | |||||
| } | |||||
| // Ant bean setters | |||||
| public String setName(String value){ | |||||
| this.name = value; | |||||
| } | } | ||||
| } | } | ||||
| @@ -81,17 +81,17 @@ import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; | |||||
| public class MessageReader { | public class MessageReader { | ||||
| /** the set of registered listeners */ | /** the set of registered listeners */ | ||||
| protected Vector listeners = new Vector(); | |||||
| private Vector listeners = new Vector(); | |||||
| // communication states with client | // communication states with client | ||||
| protected boolean inReadTrace = false; | |||||
| protected boolean inFailedMessage = false; | |||||
| protected String failedTest; | |||||
| protected String failedMessage; | |||||
| protected String failedTrace; | |||||
| protected int failureKind; | |||||
| protected long elapsedTime; | |||||
| protected Properties sysprops; | |||||
| private boolean inReadTrace = false; | |||||
| private boolean inFailedMessage = false; | |||||
| private String failedTest; | |||||
| private String failedMessage; | |||||
| private String failedTrace; | |||||
| private int failureKind; | |||||
| private long elapsedTime; | |||||
| private Properties sysprops; | |||||
| public MessageReader() { | public MessageReader() { | ||||
| } | } | ||||
| @@ -87,12 +87,17 @@ public class Server { | |||||
| private MessageReader reader = new MessageReader(); | private MessageReader reader = new MessageReader(); | ||||
| /** writer used to send message to clients */ | /** writer used to send message to clients */ | ||||
| private PrintWriter writer; | |||||
| private MessageWriter writer; | |||||
| public Server(int port) { | public Server(int port) { | ||||
| this.port = port; | this.port = port; | ||||
| } | } | ||||
| protected void finalize() throws Exception { | |||||
| cancel(); | |||||
| shutdown(); | |||||
| } | |||||
| /** | /** | ||||
| * add a new listener | * add a new listener | ||||
| * @param listener a instance of a listener. | * @param listener a instance of a listener. | ||||
| @@ -123,20 +128,36 @@ public class Server { | |||||
| /** cancel the connection to the client */ | /** cancel the connection to the client */ | ||||
| public void cancel() { | public void cancel() { | ||||
| if (isRunning()) { | if (isRunning()) { | ||||
| //@fixme | |||||
| writer.sendMessage(MessageIds.TEST_STOP); | |||||
| } | } | ||||
| } | } | ||||
| /** shutdown the server and any running client */ | /** shutdown the server and any running client */ | ||||
| public void shutdown() { | public void shutdown() { | ||||
| if (writer != null){ | |||||
| writer.close(); | |||||
| writer = null; | |||||
| } | |||||
| if (reader != null){ | |||||
| //@fixme what about the stream ? | |||||
| reader = null; | |||||
| } | |||||
| try { | try { | ||||
| if (client != null) { | if (client != null) { | ||||
| client.shutdownInput(); | client.shutdownInput(); | ||||
| client.shutdownOutput(); | client.shutdownOutput(); | ||||
| client.close(); | |||||
| client = null; | |||||
| } | } | ||||
| server.close(); | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| } | } | ||||
| try { | |||||
| if (server != null){ | |||||
| server.close(); | |||||
| server = null; | |||||
| } | |||||
| } catch (IOException e){ | |||||
| } | |||||
| } | } | ||||
| //----- | //----- | ||||
| @@ -146,12 +167,14 @@ public class Server { | |||||
| try { | try { | ||||
| server = new ServerSocket(port); | server = new ServerSocket(port); | ||||
| client = server.accept(); | client = server.accept(); | ||||
| writer = new PrintWriter(client.getOutputStream(), true); | |||||
| writer = new MessageWriter(client.getOutputStream()); | |||||
| reader.process(client.getInputStream()); | reader.process(client.getInputStream()); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| //@fixme this stacktrace might be normal when closing | |||||
| // the socket. So decompose the above in distinct steps | |||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| } finally { | } finally { | ||||
| stop(); | |||||
| cancel(); | |||||
| shutdown(); | shutdown(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -116,7 +116,7 @@ public class TestRunnerTest extends TestCase | |||||
| runner.addTestClassName(TestCases.NullTestCase.class.getName()); | runner.addTestClassName(TestCases.NullTestCase.class.getName()); | ||||
| // server.addListener( new DefaultTestRunListener() ); | // server.addListener( new DefaultTestRunListener() ); | ||||
| runner.run(); | runner.run(); | ||||
| synchronized(this){ if (!done){ wait(); } } | |||||
| synchronized(this){ while (!done){ wait(); } } | |||||
| assertEquals(new Integer(3), recorder.runStarted.elementAt(0)); | assertEquals(new Integer(3), recorder.runStarted.elementAt(0)); | ||||
| /* | /* | ||||
| assertTrue(recorder.runStarted.elementAt(0).toSt("testSuccess")); | assertTrue(recorder.runStarted.elementAt(0).toSt("testSuccess")); | ||||
| @@ -128,7 +128,7 @@ public class TestRunnerTest extends TestCase | |||||
| public void testFailSetupTestCase() throws Exception { | public void testFailSetupTestCase() throws Exception { | ||||
| runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); | runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); | ||||
| runner.run(); | runner.run(); | ||||
| synchronized(this){ if (!done){ wait(); } } | |||||
| synchronized(this){ while (!done){ wait(); } } | |||||
| assertEquals(1, recorder.runStarted.size()); | assertEquals(1, recorder.runStarted.size()); | ||||
| assertEquals(1, recorder.runEnded.size()); | assertEquals(1, recorder.runEnded.size()); | ||||
| @@ -137,7 +137,7 @@ public class TestRunnerTest extends TestCase | |||||
| public void testFailSetupTestSuite() throws Exception { | public void testFailSetupTestSuite() throws Exception { | ||||
| runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); | runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName()); | ||||
| runner.run(); | runner.run(); | ||||
| synchronized(this){ if (!done){ wait(); } } | |||||
| synchronized(this){ while (!done){ wait(); } } | |||||
| assertEquals(1, recorder.runStarted.size()); | assertEquals(1, recorder.runStarted.size()); | ||||
| assertEquals(1, recorder.runEnded.size()); | assertEquals(1, recorder.runEnded.size()); | ||||
| } | } | ||||
| @@ -159,14 +159,14 @@ public class TestRunnerTest extends TestCase | |||||
| public void onTestRunEnded(long elapsedtime) { | public void onTestRunEnded(long elapsedtime) { | ||||
| synchronized(this){ | synchronized(this){ | ||||
| done = true; | done = true; | ||||
| notify(); | |||||
| } | } | ||||
| notify(); | |||||
| } | } | ||||
| public void onTestRunStopped(long elapsedtime) { | public void onTestRunStopped(long elapsedtime) { | ||||
| synchronized(this){ | synchronized(this){ | ||||
| done = true; | done = true; | ||||
| notify(); | |||||
| } | } | ||||
| notify(); | |||||
| } | } | ||||
| public void onTestRunSystemProperties(Properties props) { | public void onTestRunSystemProperties(Properties props) { | ||||
| } | } | ||||