diff -r a86af88a8ecd tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java --- a/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Mon Aug 13 15:52:03 2012 +0200 +++ b/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Tue Aug 14 16:53:46 2012 +0200 @@ -35,6 +35,7 @@ exception statement from your version. */ +import net.sourceforge.jnlp.CountingClosingListener; import net.sourceforge.jnlp.ProcessResult; import net.sourceforge.jnlp.ServerAccess; import net.sourceforge.jnlp.browsertesting.BrowserTest; @@ -47,6 +48,24 @@ public class AppletTestTests extends BrowserTest { + private final String s7 = "Aplet killing himself after 2000 ms of life"; + private final String ss = "xception"; + private final String s2 = "value2"; + private final String s1 = "value1"; + private final String s0 = "applet was started"; + private final String s3 = "applet was initialised"; + + private class CountingClosingListenerImpl extends CountingClosingListener { + + @Override + protected boolean isAlowedToFinish(String s) { + if (s.contains(ss)) { + return true; + } + return (s.contains(s0) && s.contains(s1) && s.contains(s2) && s.contains(s3) && s.contains(s7)); + } + } + @Test @TestInBrowsers(testIn = {Browsers.googleChrome}) @NeedsDisplay @@ -55,7 +74,7 @@ try { //System.out.println("connecting AppletInFirefoxTest request in " + getBrowser().toString()); //just verify loging is recording browser - ProcessResult pr1 = server.executeBrowser("/appletAutoTests.html"); + ProcessResult pr1 = server.executeBrowser("/appletAutoTests2.html", new CountingClosingListenerImpl(), new CountingClosingListenerImpl()); if (pr1.process == null) { Assert.assertTrue("If proces was null here, then google-chrome had to not exist, and so " + ServerAccess.UNSET_BROWSER @@ -64,12 +83,12 @@ pr1.deadlyException.getMessage().contains(ServerAccess.UNSET_BROWSER)); return; } - evaluateApplet(pr1,false); + evaluateApplet(pr1, false); Assert.assertTrue(pr1.wasTerminated); //System.out.println("connecting AppletInFirefoxTest request in " + getBrowser().toString()); // just verify loging is recording browser - ServerAccess.ProcessResult pr = server.executeBrowser("/appletAutoTests.html"); - evaluateApplet(pr,false); + ServerAccess.ProcessResult pr = server.executeBrowser("/appletAutoTests2.html", new CountingClosingListenerImpl(), new CountingClosingListenerImpl()); + evaluateApplet(pr, false); Assert.assertTrue(pr.wasTerminated); } finally { ServerAccess.PROCESS_TIMEOUT = 20 * 1000; //back to normal @@ -80,30 +99,24 @@ @NeedsDisplay public void AppletTest() throws Exception { ProcessResult pr = server.executeJavawsHeadless(null, "/AppletTest.jnlp"); - evaluateApplet(pr,true); + evaluateApplet(pr, true); Assert.assertFalse(pr.wasTerminated); Assert.assertEquals((Integer) 0, pr.returnValue); } private void evaluateApplet(ProcessResult pr, boolean javawsApplet) { - String s3 = "applet was initialised"; Assert.assertTrue("AppletTest stdout should contains " + s3 + " bud didn't", pr.stdout.contains(s3)); - String s0 = "applet was started"; Assert.assertTrue("AppletTest stdout should contains " + s0 + " bud didn't", pr.stdout.contains(s0)); - String s1 = "value1"; Assert.assertTrue("AppletTest stdout should contains " + s1 + " bud didn't", pr.stdout.contains(s1)); - String s2 = "value2"; Assert.assertTrue("AppletTest stdout should contains " + s2 + " bud didn't", pr.stdout.contains(s2)); - String ss = "xception"; Assert.assertFalse("AppletTest stderr should not contains " + ss + " but did", pr.stderr.contains(ss)); - String s7 = "Aplet killing himself after 2000 ms of life"; Assert.assertTrue("AppletTest stdout should contains " + s7 + " bud didn't", pr.stdout.contains(s7)); if (!javawsApplet) { /*this is working correctly in most browser, but not in all. temporarily disabling - String s4 = "applet was stopped"; - Assert.assertTrue("AppletTest stdout should contains " + s4 + " bud did't", pr.stdout.contains(s4)); - String s5 = "applet will be destroyed"; - Assert.assertTrue("AppletTest stdout should contains " + s5 + " bud did't", pr.stdout.contains(s5)); + String s4 = "applet was stopped"; + Assert.assertTrue("AppletTest stdout should contains " + s4 + " bud did't", pr.stdout.contains(s4)); + String s5 = "applet will be destroyed"; + Assert.assertTrue("AppletTest stdout should contains " + s5 + " bud did't", pr.stdout.contains(s5)); */ } } @@ -116,8 +129,8 @@ //just verify loging is recordingb rowser ServerAccess.PROCESS_TIMEOUT = 30 * 1000; try { - ProcessResult pr = server.executeBrowser("/appletAutoTests2.html"); - evaluateApplet(pr,false); + ProcessResult pr = server.executeBrowser("/appletAutoTests2.html", new CountingClosingListenerImpl(), new CountingClosingListenerImpl()); + evaluateApplet(pr, false); Assert.assertTrue(pr.wasTerminated); //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null } finally { @@ -132,9 +145,9 @@ //just verify loging is recording browser ServerAccess.PROCESS_TIMEOUT = 30 * 1000; try { - ProcessResult pr = server.executeBrowser("/appletAutoTests.html"); + ProcessResult pr = server.executeBrowser("/appletAutoTests.html", new CountingClosingListenerImpl(), new CountingClosingListenerImpl()); pr.process.destroy(); - evaluateApplet(pr,false); + evaluateApplet(pr, false); Assert.assertTrue(pr.wasTerminated); //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null } finally { diff -r a86af88a8ecd tests/test-extensions/net/sourceforge/jnlp/ClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/ClosingListener.java Tue Aug 14 16:53:46 2012 +0200 @@ -0,0 +1,55 @@ +/* ClosingListener.java +Copyright (C) 2011 Red Hat, Inc. + +This file is part of IcedTea. + +IcedTea is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 2. + +IcedTea is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with IcedTea; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. + */ +package net.sourceforge.jnlp; + +public abstract class ClosingListener implements ContentReaderListener { + + private ThreadedProcess process; + private ProcessAssasin assasin; + + void setProcess(ThreadedProcess p) { + this.process = p; + } + + void setAssasin(ProcessAssasin assasin) { + this.assasin = assasin; + } + + public void terminate() { + assasin.setTimeout(Long.MIN_VALUE); + } +} diff -r a86af88a8ecd tests/test-extensions/net/sourceforge/jnlp/CountingClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/CountingClosingListener.java Tue Aug 14 16:53:46 2012 +0200 @@ -0,0 +1,58 @@ +/* CountingClosingListener.java +Copyright (C) 2011 Red Hat, Inc. + +This file is part of IcedTea. + +IcedTea is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 2. + +IcedTea is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with IcedTea; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. + */ +package net.sourceforge.jnlp; + +public abstract class CountingClosingListener extends ClosingListener { + + protected StringBuilder sb = new StringBuilder(); + + @Override + public void charReaded(char ch) { + sb.append(ch); + if (isAlowedToFinish(sb.toString())) { + terminate(); + } + + } + + @Override + public void lineReaded(String s) { + //nothing to do + } + + protected abstract boolean isAlowedToFinish(String content); +} diff -r a86af88a8ecd tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java --- a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Mon Aug 13 15:52:03 2012 +0200 +++ b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Tue Aug 14 16:53:46 2012 +0200 @@ -98,6 +98,11 @@ return skipInstedOfDesroy; } + void setTimeout(long timeout) { + this.timeout = timeout; + } + + @Override public void run() { long startTime = System.nanoTime() / ServerAccess.NANO_TIME_DELIMITER; diff -r a86af88a8ecd tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java --- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Mon Aug 13 15:52:03 2012 +0200 +++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Tue Aug 14 16:53:46 2012 +0200 @@ -788,6 +788,8 @@ log(connectionMesaage, true, true); } ProcessAssasin pa = new ProcessAssasin(t, PROCESS_TIMEOUT); + setUpClosingListener(stdoutl, pa, t); + setUpClosingListener(stderrl, pa, t); pa.start(); t.start(); while (t.getP() == null && t.deadlyException == null) { @@ -825,6 +827,13 @@ return pr; } + private static void setUpClosingListener(ContentReaderListener listener, ProcessAssasin pa, ThreadedProcess t) { + if (listener != null && (listener instanceof ClosingListener)) { + ((ClosingListener) listener).setAssasin(pa); + ((ClosingListener) listener).setProcess(t); + } + } + /** * this is temprary solution until refactoring is fully done * Use net.sourceforge.jnlp.ProcessResult instead