diff -r 04eddc48a74f tests/reproducers/signed/AppletTestSigned/resources/AppletTestSigned.html --- a/tests/reproducers/signed/AppletTestSigned/resources/AppletTestSigned.html Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/reproducers/signed/AppletTestSigned/resources/AppletTestSigned.html Wed Aug 15 18:52:27 2012 +0200 @@ -37,7 +37,7 @@ -->

- + diff -r 04eddc48a74f tests/reproducers/signed/AppletTestSigned/resources/AppletTestSigned2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/reproducers/signed/AppletTestSigned/resources/AppletTestSigned2.html Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,46 @@ + + +

+ + + + +

+ + diff -r 04eddc48a74f tests/reproducers/signed/AppletTestSigned/srcs/AppletTestSigned.java --- a/tests/reproducers/signed/AppletTestSigned/srcs/AppletTestSigned.java Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/reproducers/signed/AppletTestSigned/srcs/AppletTestSigned.java Wed Aug 15 18:52:27 2012 +0200 @@ -48,6 +48,7 @@ try { Thread.sleep(n); System.out.println("AppletTestSigned killing himself after " + n + " ms of life"); + System.out.println("*** APPLET FINISHED ***"); System.exit(0); } catch (Exception ex) { } diff -r 04eddc48a74f tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java --- a/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/reproducers/signed/AppletTestSigned/testcases/AppletTestSignedTests.java Wed Aug 15 18:52:27 2012 +0200 @@ -43,6 +43,8 @@ import net.sourceforge.jnlp.browsertesting.BrowserTest; import net.sourceforge.jnlp.browsertesting.Browsers; import net.sourceforge.jnlp.annotations.TestInBrowsers; +import net.sourceforge.jnlp.closinglisteners.Rule; +import net.sourceforge.jnlp.closinglisteners.RulesFolowingClosingListener; import org.junit.Assert; import org.junit.Test; @@ -50,6 +52,19 @@ public class AppletTestSignedTests extends BrowserTest { private final List l = Collections.unmodifiableList(Arrays.asList(new String[]{"-Xtrustall"})); + private static final String ss = "xception"; + private static final String s0 = "AppletTestSigned was started"; + private static final String s1 = "value1"; + private static final String s2 = "value2"; + private static final String s3 = "AppletTestSigned was initialised"; + private static final String s7 = "AppletTestSigned killing himself after 2000 ms of life"; + private static final RulesFolowingClosingListener.ContainsRule crss = new RulesFolowingClosingListener.ContainsRule(ss); + private static final RulesFolowingClosingListener.ContainsRule s0ss = new RulesFolowingClosingListener.ContainsRule(s0); + private static final RulesFolowingClosingListener.ContainsRule s1ss = new RulesFolowingClosingListener.ContainsRule(s1); + private static final RulesFolowingClosingListener.ContainsRule s2ss = new RulesFolowingClosingListener.ContainsRule(s2); + private static final RulesFolowingClosingListener.ContainsRule s3ss = new RulesFolowingClosingListener.ContainsRule(s3); + private static final RulesFolowingClosingListener.ContainsRule s7ss = new RulesFolowingClosingListener.ContainsRule(s7); + private static final Rule[] rules = new Rule[]{crss, s0ss, s1ss, s2ss, s3ss, s7ss}; @Test public void AppletTestSignedTest() throws Exception { @@ -60,18 +75,12 @@ } private void evaluateSignedApplet(ProcessResult pr, boolean javawsApplet) { - String s3 = "AppletTestSigned was initialised"; - Assert.assertTrue("AppletTestSigned stdout should contain " + s3 + " but didn't", pr.stdout.contains(s3)); - String s0 = "AppletTestSigned was started"; - Assert.assertTrue("AppletTestSigned stdout should contain " + s0 + " but didn't", pr.stdout.contains(s0)); - String s1 = "value1"; - Assert.assertTrue("AppletTestSigned stdout should contain " + s1 + " but didn't", pr.stdout.contains(s1)); - String s2 = "value2"; - Assert.assertTrue("AppletTestSigned stdout should contain " + s2 + " but didn't", pr.stdout.contains(s2)); - String ss = "xception"; - Assert.assertFalse("AppletTestSigned stderr should not contain " + ss + " but did", pr.stderr.contains(ss)); - String s7 = "AppletTestSigned killing himself after 2000 ms of life"; - Assert.assertTrue("AppletTestSigned stdout should contain " + s7 + " but didn't", pr.stdout.contains(s7)); + Assert.assertTrue("AppletTestSigned stdout " + s3ss.toString() + " but didn't", s3ss.evaluate(pr.stdout)); + Assert.assertTrue("AppletTestSigned stdout " + s0ss.toString() + " but didn't", s0ss.evaluate(pr.stdout)); + Assert.assertTrue("AppletTestSigned stdout " + s1ss.toString() + " but didn't", s1ss.evaluate(pr.stdout)); + Assert.assertTrue("AppletTestSigned stdout " + s2ss.toString() + " but didn't", s2ss.evaluate(pr.stdout)); + Assert.assertFalse("AppletTestSigned stderr " + crss.toNotString() + " but did", crss.evaluate(pr.stderr)); + Assert.assertTrue("AppletTestSigned stdout " + s7ss.toString() + " but didn't", s7ss.evaluate(pr.stdout)); if (!javawsApplet) { /*this is working correctly in most browser, but not in all. temporarily disabling String s4 = "AppletTestSigned was stopped"; @@ -84,10 +93,10 @@ @Test @TestInBrowsers(testIn = {Browsers.all}) - public void AppletTestSignedFirefoxTest() throws Exception { + public void AppletTestSignedFirefoxTestXslowX() throws Exception { ServerAccess.PROCESS_TIMEOUT = 30 * 1000; try { - ProcessResult pr = server.executeBrowser("/AppletTestSigned.html"); + ProcessResult pr = server.executeBrowser("/AppletTestSigned.html",new RulesFolowingClosingListener(rules),new RulesFolowingClosingListener(rules)); evaluateSignedApplet(pr, false); Assert.assertTrue(pr.wasTerminated); //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null @@ -95,4 +104,13 @@ ServerAccess.PROCESS_TIMEOUT = 20 * 1000; //back to normal } } + + @Test + @TestInBrowsers(testIn = {Browsers.all}) + public void AppletTestSignedFirefoxTest() throws Exception { + ProcessResult pr = server.executeBrowser("/AppletTestSigned2.html", ServerAccess.AutoClose.CLOSE_ON_BOTH); + evaluateSignedApplet(pr, false); + Assert.assertTrue(pr.wasTerminated); + //Assert.assertEquals((Integer) 0, pr.returnValue); due to destroy is null + } } diff -r 04eddc48a74f tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java --- a/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/reproducers/simple/AppletTest/testcases/AppletTestTests.java Wed Aug 15 18:52:27 2012 +0200 @@ -35,6 +35,7 @@ exception statement from your version. */ +import net.sourceforge.jnlp.closinglisteners.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 04eddc48a74f 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 Wed Aug 15 18:52:27 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 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java --- a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java Wed Aug 15 18:52:27 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 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java --- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Tue Aug 14 16:06:38 2012 -0400 +++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java Wed Aug 15 18:52:27 2012 +0200 @@ -1,5 +1,5 @@ /* ServerAccess.java -Copyright (C) 2011 Red Hat, Inc. +Copyright (C) 2011, 2012 Red Hat, Inc. This file is part of IcedTea. @@ -58,6 +58,7 @@ import net.sourceforge.jnlp.browsertesting.Browser; import net.sourceforge.jnlp.browsertesting.BrowserFactory; import net.sourceforge.jnlp.browsertesting.Browsers; +import net.sourceforge.jnlp.closinglisteners.AutoErrorClosingListener; import org.junit.Assert; /** @@ -77,6 +78,11 @@ */ public class ServerAccess { + public enum AutoClose { + + CLOSE_ON_EXCEPTION, CLOSE_ON_CORRECT_END, CLOSE_ON_BOTH + } + public static final long NANO_TIME_DELIMITER=1000000l; /** * java property which value containing path to default (makefile by) directory with deployed resources @@ -544,6 +550,20 @@ public ProcessResult executeJavaws(String resource,ContentReaderListener stdoutl,ContentReaderListener stderrl) throws Exception { return executeJavaws(null, resource,stdoutl,stderrl); } + + public net.sourceforge.jnlp.ProcessResult executeBrowser(String string, AutoClose autoClose) throws Exception { + ClosingListener errClosing = null; + ClosingListener outClosing = null; + if (autoClose == AutoClose.CLOSE_ON_BOTH || autoClose == AutoClose.CLOSE_ON_EXCEPTION){ + errClosing=new AutoErrorClosingListener(); + } + if (autoClose == AutoClose.CLOSE_ON_BOTH || autoClose == AutoClose.CLOSE_ON_CORRECT_END){ + errClosing=new AutoErrorClosingListener(); + } + return executeBrowser(string, outClosing, errClosing); + } + + public ProcessResult executeBrowser(String resource) throws Exception { return executeBrowser(getBrowserParams(), resource); } @@ -788,6 +808,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 +847,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 diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoAllClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoAllClosingListener.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,57 @@ +/* CountingClosingListener.java +Copyright (C) 2012 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.closinglisteners; + +import net.sourceforge.jnlp.ClosingListener; + +public class AutoAllClosingListener extends ClosingListener { + + + + @Override + public void charReaded(char ch) { + + } + + @Override + public void lineReaded(String s) { + if (s.contains(AutoErrorClosingListener.MAGICAL_ERROR_CLOSING_STRING) || s.contains(AutoOkClosingListener.MAGICAL_OK_CLOSING_STRING)){ + terminate(); + } + } + +} diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoErrorClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoErrorClosingListener.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,57 @@ +/* AutoErrorClosingListener.java +Copyright (C) 2012 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.closinglisteners; + +import net.sourceforge.jnlp.ClosingListener; + +public class AutoErrorClosingListener extends ClosingListener { + + public static final String MAGICAL_ERROR_CLOSING_STRING = "xception"; + + @Override + public void charReaded(char ch) { + + } + + @Override + public void lineReaded(String s) { + if (s.contains(MAGICAL_ERROR_CLOSING_STRING)){ + terminate(); + } + } + +} diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoOkClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/AutoOkClosingListener.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,57 @@ +/* CountingClosingListener.java +Copyright (C) 2012 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.closinglisteners; + +import net.sourceforge.jnlp.ClosingListener; + +public class AutoOkClosingListener extends ClosingListener { + + public static final String MAGICAL_OK_CLOSING_STRING = "*** APPLET FINISHED ***"; + + @Override + public void charReaded(char ch) { + + } + + @Override + public void lineReaded(String s) { + if (s.contains(MAGICAL_OK_CLOSING_STRING)){ + terminate(); + } + } + +} diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/CountingClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/CountingClosingListener.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,60 @@ +/* CountingClosingListener.java +Copyright (C) 2012 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.closinglisteners; + +import net.sourceforge.jnlp.ClosingListener; + +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 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/Rule.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/Rule.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,44 @@ +/* Rule.java +Copyright (C) 2012 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.closinglisteners; + +public interface Rule { + + public void setRule(S rule); + public boolean evaluate(T upon); + +} diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/RulesFolowingClosingListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/RulesFolowingClosingListener.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,171 @@ +/* RulesFolowingClosingListener.java +Copyright (C) 2012 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.closinglisteners; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class RulesFolowingClosingListener extends CountingClosingListener { + + private List rules = new ArrayList(); + + public static class ContainsRule extends StringRule { + + public ContainsRule(String s) { + super(s); + } + + @Override + public boolean evaluate(String upon) { + return (upon.contains(rule)); + } + + @Override + public String toString() { + return "should contains `" + rule + "`"; + } + + public String toNotString() { + return "should NOT contains `" + rule + "`"; + } + } + + public static class NotContainsRule extends StringRule { + + public NotContainsRule(String s) { + super(s); + } + + @Override + public boolean evaluate(String upon) { + return !(upon.contains(rule)); + } + + @Override + public String toString() { + return "should NOT contains `" + rule + "`"; + } + + public String toNotString() { + return "should contains `" + rule + "`"; + } + } + + public static class MatchesRule extends StringRule { + + public MatchesRule(String s) { + super(s); + } + + @Override + public boolean evaluate(String upon) { + return (upon.matches(rule)); + } + + @Override + public String toString() { + return "should match `" + rule + "`"; + } + + public String toNotString() { + return "should NOT match `" + rule + "`"; + } + } + + public static class NotMatchesRule extends StringRule { + + public NotMatchesRule(String s) { + super(s); + } + + @Override + public boolean evaluate(String upon) { + return !(upon.matches(rule)); + } + + @Override + public String toString() { + return "should NOT match`" + rule + "`"; + } + + public String toNotString() { + return "should match`" + rule + "`"; + } + } + + public void addRule(Rule rule) { + this.rules.add(rule); + } + + public RulesFolowingClosingListener() { + } + + public RulesFolowingClosingListener(List l) { + setRules(rules); + } + + public RulesFolowingClosingListener(Rule[] l) { + setRules(rules); + } + + public void setRules(List rules) { + if (rules == null) { + throw new NullPointerException("rules cant be null"); + } + this.rules = rules; + } + + public void setRules(Rule[] rules) { + if (rules == null) { + throw new NullPointerException("rules cant be null"); + } + this.rules = Arrays.asList(rules); + } + + @Override + protected boolean isAlowedToFinish(String content) { + for (Rule rule : rules) { + if (!rule.evaluate(content)) { + return false; + } + } + return true; + + + } +} diff -r 04eddc48a74f tests/test-extensions/net/sourceforge/jnlp/closinglisteners/StringRule.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-extensions/net/sourceforge/jnlp/closinglisteners/StringRule.java Wed Aug 15 18:52:27 2012 +0200 @@ -0,0 +1,57 @@ +/* StringRule.java +Copyright (C) 2012 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.closinglisteners; + +public abstract class StringRule implements Rule{ + protected String rule; + + public StringRule(String rule) { + setRule(rule); + } + + public StringRule() { + } + + + @Override + public void setRule(String rule){ + this.rule=rule; + } + @Override + public abstract boolean evaluate(T upon); + +}