aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Vanek <[email protected]>2012-06-19 14:36:25 +0200
committerJiri Vanek <[email protected]>2012-06-19 14:36:25 +0200
commit7b0adacff066b704b05d2d9de27b1bd2e10c568d (patch)
tree9f6ac563a2db429563ebf7a383b13ae675c0a6fa
parent7a1099690059f820a37419c1c6e7308689655f35 (diff)
testInBrowser annotation
-rw-r--r--ChangeLog55
-rw-r--r--Makefile.am2
-rw-r--r--acinclude.m429
-rw-r--r--configure.ac1
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java114
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/annotations/TestInBrowsers.java18
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browser.java19
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserFactory.java184
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTest.java23
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTestRunner.java137
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browsers.java46
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chrome.java15
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chromium.java15
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Epiphany.java18
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Firefox.java18
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/LinuxBrowser.java60
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Midory.java18
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/MozillaFamilyLinuxBrowser.java29
-rw-r--r--tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Opera.java37
19 files changed, 822 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ca7ba5..3bad61f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,58 @@
+2012-06-19 Jiri Vanek <[email protected]>
+
+ introduced possibility to run comfortably applets+html reproducers
+ * Makefile.am: used BROWSER_TESTS_MODIFICATION variable to pass global
+ switch from configure
+ * acinclude.m4: (IT_SET_GLOBAL_BROWSERTESTS_BHAVIOUR) new method
+ handling --with-browser-tests
+ * configure.ac: used IT_SET_GLOBAL_BROWSERTESTS_BHAVIOUR
+ switch and passing BROWSER_TESTS_MODIFICATION variable to Makefile.
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java:
+ (currentBrowser) variable holding injected browser for ServerAccess instance
+ (loggedBrowser) static variable keeping id of (currentBrowser) for static
+ logging purposes
+ (modifyMethodWithForBrowser) new function changing the name of method to
+ "method - browser" for logging purposes
+ (getBrowserLocation) - returning path to process to be launched when
+ browser requested
+ (getBrowserParams) - gathering set default's browser settings
+ (set/getCurrentBrowsers) - set browser by id/return id of set browser
+ (set/getCurrentBrowser) - set browser instance /returns instance of
+ current browser
+ (executeBrowser) family of methods now cooperate with above methods for
+ default set browser
+ (executeBrowser(Browser) family to work with implicit browser
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/annotations/TestInBrowsers.java:
+ annotation for determining which browser(s) to use with annotated method
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browser.java:
+ interface for dealing with various browsers
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserFactory.java:
+ singleton for mapping configured browsers x requested browser x browsers proxies
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTest.java:
+ Forefather of all testcases which have methods to do tests iniside browser.
+ Is allowing correct annotation -> proxy trasnver to VirtualServer for
+ selected method and is requesting custom runner from junit framework
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTestRunner.java:
+ custom test Ruuner which is responsible for translating annotation and
+ run the method mutlipletimes for each requested browser and to name it properly
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browsers.java:
+ enumeration of abstract browsers and theirs sets or subsets.
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/*:
+ individual browsers proxies and theirs abstractions,namely:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Opera.java:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Firefox.java:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chrome.java:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chromium.java:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Midori.java:
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Epiphany.java:
+ proxies for browsers as name suggests
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/LinuxBrowser.java:
+ abstract forefather for all browsers implementing Browser interface. Is
+ setting /usr/bin as bin path, libjavaplugin.so as default plugin library name,
+ intorducing stubs for methods (eg 32/64 bit libs)
+ * tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/MozillaFamilyLinuxBrowser:
+ forefather for all browsers except Opera. Is unifying .mozilla/plugins directories
+
2012-06-15 Jiri Vanek <[email protected]>
* tests/jnlp_tests/simple/AppletTest/resources/appletAutoTests.html:
diff --git a/Makefile.am b/Makefile.am
index c3d0eb7..e6c466d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -150,7 +150,7 @@ EXTRA_DIST = $(top_srcdir)/netx $(top_srcdir)/plugin javaws.png javaws.desktop.i
DTEST_SERVER=-Dtest.server.dir=$(JNLP_TESTS_SERVER_DEPLOYDIR)
DJAVAWS_BUILD=-Djavaws.build.bin=$(DESTDIR)$(bindir)/$(javaws)
DBROWSERS=-Dused.browsers=$(FIREFOX):$(CHROMIUM):$(CHROME):$(OPERA):$(MIDORI):$(EPIPHANY)
-REPRODUCERS_DPARAMETERS= $(DTEST_SERVER) $(DJAVAWS_BUILD) $(DBROWSERS)
+REPRODUCERS_DPARAMETERS= $(DTEST_SERVER) $(DJAVAWS_BUILD) $(DBROWSERS) $(BROWSER_TESTS_MODIFICATION)
# end of `D`shortcuts
# binary names
diff --git a/acinclude.m4 b/acinclude.m4
index eff60c8..bdddb77 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -917,3 +917,32 @@ AC_DEFUN([IT_FIND_BROWSER],
AC_MSG_RESULT([no])
fi
])
+
+AC_DEFUN_ONCE([IT_SET_GLOBAL_BROWSERTESTS_BEHAVIOUR],
+[
+ AC_MSG_CHECKING([how browser test will be run])
+ AC_ARG_WITH([browser-tests],
+ [AS_HELP_STRING([--with-browser-tests],
+ [yes - as defined (default), no - all browser tests will be skipped, one - all "mutiple browsers" test will behave as "one" test, all - all browser tests will be run for all set browsers])],
+ [
+ BROWSER_SWITCH=${withval}
+ ],
+ [
+ BROWSER_SWITCH="yes"
+ ])
+ D_PARAM_PART="-Dmodified.browsers.run"
+ case "$BROWSER_SWITCH" in
+ "yes" )
+ BROWSER_TESTS_MODIFICATION="" ;;
+ "no" )
+ BROWSER_TESTS_MODIFICATION="$D_PARAM_PART=ignore" ;;
+ "one" )
+ BROWSER_TESTS_MODIFICATION="$D_PARAM_PART=one" ;;
+ "all" )
+ BROWSER_TESTS_MODIFICATION="$D_PARAM_PART=all" ;;
+ *)
+ AC_MSG_ERROR([unknown valkue of with-browser-tests ($BROWSER_SWITCH), so not use (yes) or set yes|no|one|all])
+ esac
+ AC_MSG_RESULT(${BROWSER_SWITCH})
+ AC_SUBST(BROWSER_TESTS_MODIFICATION)
+])
diff --git a/configure.ac b/configure.ac
index 5ab7123..1f222e7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,6 +96,7 @@ IT_FIND_BROWSER([chromium],[CHROMIUM],[chromium-browser])
IT_FIND_BROWSER([opera],[OPERA])
IT_FIND_BROWSER([midori],[MIDORI])
IT_FIND_BROWSER([epiphany],[EPIPHANY])
+IT_SET_GLOBAL_BROWSERTESTS_BEHAVIOUR
AM_CONDITIONAL([WITH_XSLTPROC], [test x"$XSLTPROC" != x ])
IT_FIND_OPTIONAL_JAR([rhino], RHINO,
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
index db95a0a..e5490fd 100644
--- a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
@@ -44,7 +44,6 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -54,6 +53,7 @@ import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
+import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ServerSocket;
@@ -71,6 +71,11 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.StringTokenizer;
+import net.sourceforge.jnlp.annotations.TestInBrowsers;
+import net.sourceforge.jnlp.browsertesting.Browser;
+import net.sourceforge.jnlp.browsertesting.BrowserFactory;
+import net.sourceforge.jnlp.browsertesting.BrowserTest;
+import net.sourceforge.jnlp.browsertesting.Browsers;
import org.junit.Assert;
import org.junit.Test;
@@ -102,7 +107,7 @@ public class ServerAccess {
public static final String JAVAWS_BUILD_BIN = "javaws.build.bin";
/** property to set the different then default browser
*/
- public static final String USED_BROWSER_COMMAND = "used.browser.command";
+ public static final String USED_BROWSERS = "used.browsers";
public static final String DEFAULT_LOCALHOST_NAME = "localhost";
/**
* server instance singleton
@@ -132,6 +137,13 @@ public class ServerAccess {
public static boolean PROCESS_LOG = true;
public static boolean LOGS_REPRINT = false;
+ private Browser currentBrowser;
+ /**
+ * This is static copy of name of id of currentBrowser for logging purposes
+ */
+ private static String loggedBrowser=Browsers.none.toString();
+ public static final String UNSET_BROWSER="unset_browser";
+
/**
* map of classes, each have map of methods, each have errorlist, outLIst, and allList (allist contains also not std or err messages)
* class.testMethod.logs
@@ -200,14 +212,39 @@ public class ServerAccess {
classLog = new HashMap<String, TestsLogs>(50);
processLogs.put(ste.getClassName(), classLog);
}
- TestsLogs methodLog = classLog.get(ste.getMethodName());
+ String methodBrowseredName = ste.getMethodName();
+ methodBrowseredName = modifyMethodWithForBrowser(methodBrowseredName,ste.getClassName());
+ TestsLogs methodLog = classLog.get(methodBrowseredName);
if (methodLog == null) {
methodLog = new TestsLogs();
- classLog.put(ste.getMethodName(), methodLog);
+ classLog.put(methodBrowseredName, methodLog);
}
methodLog.add(printToErr, printToOut, message);
}
+ private static String modifyMethodWithForBrowser(String methodBrowseredName, String className) {
+ try {
+ Class clazz = Class.forName(className);
+ /*
+ * By using this isAssignable to ensure corect class before invocation,
+ * then we lost possibility to track manualy set browsers, but it is correct,
+ * as method description is set only when annotation is used
+ */
+ if (clazz != null && BrowserTest.class.isAssignableFrom(clazz)){
+ Method testMethod = clazz.getMethod(methodBrowseredName);
+ if (testMethod != null) {
+ TestInBrowsers tib = testMethod.getAnnotation(TestInBrowsers.class);
+ if (tib != null) {
+ methodBrowseredName = methodBrowseredName + " - " + loggedBrowser;
+ }
+ }
+ }
+ } catch (Throwable ex) {
+ ex.printStackTrace();
+ }
+ return methodBrowseredName;
+ }
+
private static class TestsLogs {
public final List<LogItem> outs = new LinkedList<LogItem>();
@@ -419,14 +456,52 @@ public class ServerAccess {
/**
*
- * @return - value passed inside as javaws binary location. See JAVAWS_BUILD_BIN
+ * @return - bianry from where to lunch current browser
*/
public String getBrowserLocation() {
- String s=System.getProperty(USED_BROWSER_COMMAND);
- if (s==null) s="firefox";
- return s;
+ if (this.currentBrowser==null) return UNSET_BROWSER;
+ return this.currentBrowser.getBin();
+ }
+
+ public List<String> getBrowserParams() {
+ if (this.currentBrowser==null) return null;
+ List<String> l1=this.currentBrowser.getComaptibilitySwitches();
+ List<String> l2=this.currentBrowser.getDefaultSwitches();
+ List<String> l= new ArrayList();
+ if (l1!=null)l.addAll(l1);
+ if (l2!=null)l.addAll(l2);
+ return l;
+
+ }
+
+ public Browsers getCurrentBrowsers() {
+ if (currentBrowser==null) return null;
+ return currentBrowser.getID();
+ }
+ public Browser getCurrentBrowser() {
+ return currentBrowser;
+ }
+
+ public void setCurrentBrowser(Browsers currentBrowser) {
+ this.currentBrowser = BrowserFactory.getFactory().getBrowser(currentBrowser);
+ if (this.currentBrowser == null) {
+ loggedBrowser = UNSET_BROWSER;
+ } else {
+ loggedBrowser = this.currentBrowser.getID().toString();
+ }
}
+ public void setCurrentBrowser(Browser currentBrowser) {
+ this.currentBrowser = currentBrowser;
+ if (this.currentBrowser == null) {
+ loggedBrowser = UNSET_BROWSER;
+ } else {
+ loggedBrowser = this.currentBrowser.getID().toString();
+ }
+ }
+
+
+
/**
*
* @return - value passed inside as javaws binary location as file. See JAVAWS_BUILD_BIN
@@ -790,10 +865,10 @@ public class ServerAccess {
return executeJavaws(null, resource,stdoutl,stderrl);
}
public ProcessResult executeBrowser(String resource) throws Exception {
- return executeBrowser(null, resource);
+ return executeBrowser(getBrowserParams(), resource);
}
public ProcessResult executeBrowser(String resource,ContentReaderListener stdoutl,ContentReaderListener stderrl) throws Exception {
- return executeBrowser(null, resource,stderrl,stdoutl);
+ return executeBrowser(getBrowserParams(), resource,stderrl,stdoutl);
}
/**
@@ -818,6 +893,13 @@ public class ServerAccess {
return executeProcessUponURL(getBrowserLocation(), otherargs, getUrlUponThisInstance(resource),stdoutl,stderrl);
}
+ public ProcessResult executeBrowser(Browser b,List<String> otherargs, String resource) throws Exception {
+ return executeProcessUponURL(b.getBin(), otherargs, getUrlUponThisInstance(resource));
+ }
+ public ProcessResult executeBrowser(Browser b,List<String> otherargs, String resource,ContentReaderListener stdoutl,ContentReaderListener stderrl) throws Exception {
+ return executeProcessUponURL(b.getBin(), otherargs, getUrlUponThisInstance(resource),stdoutl,stderrl);
+ }
+
/**
* Ctreate resource on http, on 'localhost' on port on which this instance is running
* @param resource
@@ -927,6 +1009,7 @@ public class ServerAccess {
String idded;
StackTraceElement ste = getTestMethod();
String fullId = ste.getClassName() + "." + ste.getMethodName();
+ fullId = modifyMethodWithForBrowser(ste.getMethodName(), ste.getClassName());
if (message.contains("\n")) {
idded = fullId + ": \n" + message + "\n" + fullId + " ---";
} else {
@@ -1050,7 +1133,7 @@ public class ServerAccess {
Thread.sleep(100);
}
pa.setCanRun(false);
- // System.out.println(t.getP().exitValue()); when process is killed, this throws exception
+ // ServerAccess.logOutputReprint(t.getP().exitValue()); when process is killed, this throws exception
ProcessResult pr=new ProcessResult(crs.getContent(), cre.getContent(), t.getP(), pa.wasTerminated(), t.getExitCode(), null);
if (PROCESS_LOG) {
@@ -1144,11 +1227,13 @@ public class ServerAccess {
if (ex instanceof InterruptedException) {
//add to the set of terminated threaded processes
deadlyException = ex;
+ logException(deadlyException, false);
terminated.add(this);
} else {
//happens when non-existing process is launched, is causing p null!
terminated.add(this);
deadlyException = ex;
+ logException(deadlyException, false);
throw new RuntimeException(ex);
}
} finally {
@@ -1492,8 +1577,8 @@ public class ServerAccess {
try {
long time = System.nanoTime() / NANO_TIME_DELIMITER;
- //System.out.println(time - startTime);
- //System.out.println((time - startTime) > timeout);
+ //ServerAccess.logOutputReprint(time - startTime);
+ //ServerAccess.logOutputReprint((time - startTime) > timeout);
if ((time - startTime) > timeout) {
try {
if (p != null) {
@@ -1660,8 +1745,7 @@ public class ServerAccess {
//do not want to bother output with terminations
//mostly compaling when assassin kill the process about StreamClosed
} catch (Exception ex) {
- // ex.printStackTrace();
- // System.err.flush();
+ // logException(ex);
} finally {
try {
is.close();
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/annotations/TestInBrowsers.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/annotations/TestInBrowsers.java
new file mode 100644
index 0000000..b4ea2a3
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/annotations/TestInBrowsers.java
@@ -0,0 +1,18 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package net.sourceforge.jnlp.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestInBrowsers {
+ public Browsers[] testIn();
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browser.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browser.java
new file mode 100644
index 0000000..81db960
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browser.java
@@ -0,0 +1,19 @@
+package net.sourceforge.jnlp.browsertesting;
+
+import java.util.List;
+
+/**
+ * interface which represents individual browsers
+ */
+public interface Browser {
+ public String getDefaultBin();
+ public String getDefaultPluginExpectedLocation();
+ public String getBin();
+ //public void setBin(String bin);
+ public String getUserDefaultPluginExpectedLocation();
+ public Browsers getID();
+ public List<String> getComaptibilitySwitches();
+ public List<String> getDefaultSwitches();
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserFactory.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserFactory.java
new file mode 100644
index 0000000..c0fa1d1
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserFactory.java
@@ -0,0 +1,184 @@
+package net.sourceforge.jnlp.browsertesting;
+
+import net.sourceforge.jnlp.annotations.TestInBrowsers;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.browsertesting.browsers.Chrome;
+import net.sourceforge.jnlp.browsertesting.browsers.Chromium;
+import net.sourceforge.jnlp.browsertesting.browsers.Firefox;
+import net.sourceforge.jnlp.browsertesting.browsers.Opera;
+
+public class BrowserFactory {
+
+ private static final BrowserFactory factory = new BrowserFactory(System.getProperty(ServerAccess.USED_BROWSERS));
+ private List<Browser> configuredBrowsers;
+ Random oneGenerator = new Random();
+
+ public static BrowserFactory getFactory() {
+ return factory;
+ }
+
+ /**
+ * This is public just for testing purposes!
+ */
+ public BrowserFactory(String browsers) {
+ if (browsers == null) {
+ configuredBrowsers = new ArrayList<Browser>(0);
+ } else {
+ String[] s = browsers.split(File.pathSeparator);
+ configuredBrowsers = new ArrayList<Browser>(s.length);
+ for (int i = 0; i < s.length; i++) {
+ String string = s[i];
+ String[] p = string.split("/");
+ if (p.length > 1) {
+ string = p[p.length - 1];
+ }
+ if (string.equals(Browsers.chromiumBrowser.toString())) {
+ configuredBrowsers.add(new Chromium(s[i]));
+ }
+ if (string.equals(Browsers.googleChrome.toString())) {
+ configuredBrowsers.add(new Chrome(s[i]));
+ }
+ if (string.equals(Browsers.opera.toString())) {
+ configuredBrowsers.add(new Opera(s[i]));
+ }
+ if (string.equals(Browsers.firefox.toString())) {
+ configuredBrowsers.add(new Firefox(s[i]));
+ }
+
+
+
+ }
+ }
+
+ }
+
+ public Browser getBrowser(Browsers id) {
+ for (int i = 0; i < configuredBrowsers.size(); i++) {
+ Browser browser = configuredBrowsers.get(i);
+ if (browser.getID() == id) {
+ return browser;
+ }
+
+ }
+ return null;
+
+ }
+
+ public Browser getFirst() {
+ for (int i = 0; i < configuredBrowsers.size(); i++) {
+ Browser browser = configuredBrowsers.get(i);
+ return browser;
+
+ }
+ return null;
+
+ }
+
+ public Browser getRandom() {
+ if (configuredBrowsers.isEmpty()){
+ return null;
+ }
+ return configuredBrowsers.get(oneGenerator.nextInt(configuredBrowsers.size()));
+ }
+
+ public List<Browser> getAllBrowsers() {
+ return Collections.unmodifiableList(configuredBrowsers);
+ }
+
+ public List<Browsers> getBrowsers(TestInBrowsers tib) {
+ return getBrowsers(tib.testIn());
+ }
+ public List<Browsers> getBrowsers(Browsers[] testIn) {
+ List<Browser> q = translateAnnotationSilently(testIn);
+ if (q==null || q.isEmpty()){
+ List<Browsers> qq = new ArrayList<Browsers>(0);
+ qq.add(Browsers.none);
+ return qq;
+ }
+ List<Browsers> qq = new ArrayList<Browsers>(q.size());
+ for (Browser browser : q) {
+ qq.add(browser.getID());
+ }
+ return qq;
+
+ }
+ /**
+ *
+ * @param testIn Bbrowsers which should be transformed to list of Browser
+ * @return all matching browser, if browser do not exists, this is ignored and run is silently continued
+ */
+ public List<Browser> translateAnnotationSilently(Browsers[] testIn) {
+ if (testIn==null) {
+ return null;
+ }
+ List<Browser> r = new ArrayList<Browser>(configuredBrowsers.size());
+ for (Browsers b : testIn) {
+ if (b == Browsers.all) {
+ if (getAllBrowsers().isEmpty()) {
+ ServerAccess.logErrorReprint("You try to add all browsers, but there is none");
+ } else {
+ r.addAll(getAllBrowsers());
+ }
+ } else if (b == Browsers.one) {
+ Browser bb = getRandom();
+ if (bb == null) {
+ ServerAccess.logErrorReprint("You try to add random browser, but there is none");
+ } else {
+ r.add(bb);
+ }
+ } else {
+ Browser bb = getBrowser(b);
+ if (bb == null) {
+ ServerAccess.logErrorReprint("You try to add " + b.toString() + " browser, but it do not exists");
+ } else {
+ r.add(bb);
+ }
+
+ }
+ }
+
+ return r;
+
+ }
+
+ /**
+ *
+ * @param tib
+ * @return all matching browser, if browser do not exists, exception is thrown
+ */
+ public List<Browser> translateAnnotationLaudly(TestInBrowsers tib) {
+ return translateAnnotationLaudly(tib.testIn());
+ }
+ public List<Browser> translateAnnotationLaudly(Browsers[] testIn) {
+ List<Browser> r = new ArrayList<Browser>(configuredBrowsers.size());
+ for (Browsers b :testIn) {
+ if (b == Browsers.all) {
+ if (getAllBrowsers().isEmpty()) {
+ throw new IllegalStateException("You try to add all browsers, but there is none");
+ }
+ r.addAll(getAllBrowsers());
+ } else if (b == Browsers.one) {
+ Browser bb = getRandom();
+ if (bb == null) {
+ throw new IllegalStateException("You try to add random browser, but there is none");
+ }
+ r.add(bb);
+ } else {
+ Browser bb = getBrowser(b);
+ if (bb == null) {
+ throw new IllegalStateException("You try to add " + b.toString() + " browser, but it do not exists");
+ }
+ r.add(bb);
+
+ }
+ }
+
+ return r;
+
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTest.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTest.java
new file mode 100644
index 0000000..232b63a
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTest.java
@@ -0,0 +1,23 @@
+package net.sourceforge.jnlp.browsertesting;
+
+import net.sourceforge.jnlp.ServerAccess;
+import org.junit.runner.RunWith;
+
+
+@RunWith(value = BrowserTestRunner.class)
+public abstract class BrowserTest {
+
+ public static Browsers browser=null;
+ public static final ServerAccess server = new ServerAccess();
+
+ public static void setBrowser(Browsers b) {
+ browser = b;
+ server.setCurrentBrowser(browser);
+ }
+
+ public static Browsers getBrowser() {
+ return browser;
+ }
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTestRunner.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTestRunner.java
new file mode 100644
index 0000000..ae2934f
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/BrowserTestRunner.java
@@ -0,0 +1,137 @@
+package net.sourceforge.jnlp.browsertesting;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import net.sourceforge.jnlp.annotations.TestInBrowsers;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import net.sourceforge.jnlp.ServerAccess;
+import org.junit.Ignore;
+import org.junit.internal.AssumptionViolatedException;
+import org.junit.internal.runners.model.EachTestNotifier;
+import org.junit.runner.Description;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+public class BrowserTestRunner extends BlockJUnit4ClassRunner {
+
+ public BrowserTestRunner(java.lang.Class<?> testClass) throws InitializationError {
+ super(testClass);
+ }
+
+ @Override
+ protected void runChild(FrameworkMethod method, RunNotifier notifier) {
+ Method mm = method.getMethod();
+ TestInBrowsers tib = mm.getAnnotation(TestInBrowsers.class);
+ injectBrowserCatched(method, Browsers.none);
+ boolean browserIgnoration = false;
+ if (tib != null) {
+ try {
+ List<Browsers> testableBrowsers = BrowserFactory.getFactory().getBrowsers(tib);
+ String mbr = System.getProperty("modified.browsers.run");
+ if (mbr != null) {
+ if (mbr.equalsIgnoreCase("all")) {
+ testableBrowsers = BrowserFactory.getFactory().getBrowsers(new Browsers[]{Browsers.all});
+ } else if (mbr.equalsIgnoreCase("one")) {
+ //this complication here is for case like
+ // namely enumerated concrete browsers, so we want to pick up
+ // random one from those already enumerated
+ testableBrowsers = Arrays.asList(new Browsers[]{testableBrowsers.get(new Random().nextInt(testableBrowsers.size()))});
+ } else if (mbr.equalsIgnoreCase("ignore")) {
+ testableBrowsers = BrowserFactory.getFactory().getBrowsers(new Browsers[]{Browsers.none});
+ browserIgnoration = true;
+ } else {
+ ServerAccess.logErrorReprint("unrecognized value of modified.browsers.run - " + mbr);
+ }
+ }
+ for (Browsers browser : testableBrowsers) {
+ try {
+ injcetBrowser(method, browser);
+ runChildX(method, notifier, browser, browserIgnoration);
+ } catch (Exception ex) {
+ //throw new RuntimeException("unabled to inject browser", ex);
+ ServerAccess.logException(ex, true);
+ }
+ }
+ } finally {
+ injectBrowserCatched(method, Browsers.none);
+ }
+ } else {
+ runChildX(method, notifier, null, false);
+ }
+ }
+
+ private void injectBrowserCatched(FrameworkMethod method, Browsers browser) {
+ try {
+ injcetBrowser(method, browser);
+ } catch (Exception ex) {
+ //throw new RuntimeException("unabled to inject browser", ex);
+ ServerAccess.logException(ex, true);
+ }
+ }
+
+ private void injcetBrowser(FrameworkMethod method, Browsers browser) throws IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
+ Method ff = method.getMethod().getDeclaringClass().getMethod("setBrowser", Browsers.class);
+ ff.invoke(null, browser);
+ }
+
+ protected void runChildX(final FrameworkMethod method, RunNotifier notifier, Browsers browser, boolean browserIgnoration) {
+ Description description = describeChild(method, browser);
+ if (method.getAnnotation(Ignore.class) != null) {
+ notifier.fireTestIgnored(description);
+ } else {
+ try {
+ runLeaf(methodBlock(method), description, notifier, browserIgnoration);
+// ServerAccess.logOutputReprint("trying leaf");
+// Method m = this.getClass().getMethod("runLeaf", Statement.class, Description.class, RunNotifier.class);
+// m.setAccessible(true);
+// m.invoke(this, methodBlock(method), description, notifier);
+// ServerAccess.logOutputReprint("leaf invoked");
+ } catch (Exception ex) {
+ //throw new RuntimeException("unabled to lunch test on leaf", ex);
+ ServerAccess.logException(ex, true);
+ }
+ }
+ }
+
+ /**
+ * Runs a {@link Statement} that represents a leaf (aka atomic) test.
+ */
+ protected final void runLeaf(Statement statement, Description description,
+ RunNotifier notifier, boolean ignore) {
+ EachTestNotifier eachNotifier = new EachTestNotifier(notifier, description);
+ eachNotifier.fireTestStarted();
+ if (ignore) {
+ eachNotifier.fireTestIgnored();
+ return;
+ }
+ try {
+ statement.evaluate();
+ } catch (AssumptionViolatedException e) {
+ eachNotifier.addFailedAssumption(e);
+ } catch (Throwable e) {
+ eachNotifier.addFailure(e);
+ } finally {
+ eachNotifier.fireTestFinished();
+ }
+ }
+
+ protected Description describeChild(FrameworkMethod method, Browsers browser) {
+ if (browser == null) {
+ return super.describeChild(method);
+ } else {
+ try {
+ return Description.createTestDescription(getTestClass().getJavaClass(),
+ testName(method) + " - " + browser.toString(), method.getAnnotations());
+ } catch (Exception ex) {
+ ServerAccess.logException(ex, true);
+ return super.describeChild(method);
+ }
+ }
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browsers.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browsers.java
new file mode 100644
index 0000000..8d85241
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/Browsers.java
@@ -0,0 +1,46 @@
+package net.sourceforge.jnlp.browsertesting;
+
+/**
+ * When all represent all configured browser, one represens one random
+ * (the first found) configured browser. Each other represents inidivdual browsers
+ *
+ */
+public enum Browsers {
+
+ none, all, one, opera, googleChrome, chromiumBrowser, firefox, midori,epiphany;
+
+ public String toExec() {
+ switch (this) {
+ case opera:
+ return "opera";
+ case googleChrome:
+ return "google-chrome";
+ case chromiumBrowser:
+ return "chromium-browser";
+ case firefox:
+ return "firefox";
+ case midori:
+ return "midori";
+ case epiphany:
+ return "epiphany";
+ default:
+ return null;
+
+ }
+ }
+
+ @Override
+ public String toString() {
+ if (toExec()!=null) return toExec();
+ switch (this) {
+ case all:
+ return "all";
+ case one:
+ return "one";
+ case none:
+ return "unset_browser";
+ default: return "unknown";
+
+ }
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chrome.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chrome.java
new file mode 100644
index 0000000..2668d65
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chrome.java
@@ -0,0 +1,15 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Chrome extends MozillaFamilyLinuxBrowser {
+
+ public Chrome(String bin) {
+ super(bin);
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.googleChrome;
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chromium.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chromium.java
new file mode 100644
index 0000000..616d38a
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Chromium.java
@@ -0,0 +1,15 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Chromium extends MozillaFamilyLinuxBrowser {
+
+ public Chromium(String bin) {
+ super(bin);
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.chromiumBrowser;
+ }
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Epiphany.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Epiphany.java
new file mode 100644
index 0000000..3adc3d8
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Epiphany.java
@@ -0,0 +1,18 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Epiphany extends MozillaFamilyLinuxBrowser {
+
+ public Epiphany(String bin) {
+ super(bin);
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.epiphany;
+ }
+
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Firefox.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Firefox.java
new file mode 100644
index 0000000..af20aaa
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Firefox.java
@@ -0,0 +1,18 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Firefox extends MozillaFamilyLinuxBrowser {
+
+ public Firefox(String bin) {
+ super(bin);
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.firefox;
+ }
+
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/LinuxBrowser.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/LinuxBrowser.java
new file mode 100644
index 0000000..edc95e0
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/LinuxBrowser.java
@@ -0,0 +1,60 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browser;
+
+
+public abstract class LinuxBrowser implements Browser{
+ public static final String DEFAULT_PLUGIN_NAME="libjavaplugin.so";
+ public static final String DEFAULT_BIN_PATH="/usr/bin/";
+
+ protected final String bin;
+ protected String fsdir="unknown";
+
+ public LinuxBrowser(String bin) {
+ this.bin = bin;
+ }
+
+
+
+ @Override
+ public String getBin() {
+ return bin;
+ }
+
+// @Override
+// public void setBin(String bin) {
+// this.bin=bin;
+// }
+
+ @Override
+ public String getDefaultBin() {
+ return DEFAULT_BIN_PATH+getID().toExec();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Browser)) return false;
+ Browser b=(Browser) obj;
+ return b.getBin().equals(getBin());
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 5;
+ hash = 59 * hash + (this.bin != null ? this.bin.hashCode() : 0);
+ return hash;
+ }
+
+ @Override
+ public String getDefaultPluginExpectedLocation() {
+ if (System.getProperty("os.arch").contains("64")) {
+ return "/usr/lib64/"+fsdir+"/plugins";
+ } else {
+ return "/usr/lib/"+fsdir+"/plugins";
+
+ }
+ }
+
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Midory.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Midory.java
new file mode 100644
index 0000000..fc563fb
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Midory.java
@@ -0,0 +1,18 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Midory extends MozillaFamilyLinuxBrowser {
+
+ public Midory(String bin) {
+ super(bin);
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.midori;
+ }
+
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/MozillaFamilyLinuxBrowser.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/MozillaFamilyLinuxBrowser.java
new file mode 100644
index 0000000..c8d1e85
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/MozillaFamilyLinuxBrowser.java
@@ -0,0 +1,29 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import java.util.List;
+
+public abstract class MozillaFamilyLinuxBrowser extends LinuxBrowser{
+
+ public MozillaFamilyLinuxBrowser(String bin) {
+ super(bin);
+ fsdir="mozilla";
+ }
+
+
+ @Override
+ public List<String> getComaptibilitySwitches() {
+ return null;
+ }
+
+ @Override
+ public List<String> getDefaultSwitches() {
+ return null;
+ }
+
+ @Override
+ public String getUserDefaultPluginExpectedLocation() {
+ return System.getProperty("user.home")+"/.mozilla/plugins";
+ }
+
+
+}
diff --git a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Opera.java b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Opera.java
new file mode 100644
index 0000000..edbf57f
--- /dev/null
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/browsertesting/browsers/Opera.java
@@ -0,0 +1,37 @@
+package net.sourceforge.jnlp.browsertesting.browsers;
+
+import java.util.Arrays;
+import java.util.List;
+import net.sourceforge.jnlp.browsertesting.Browsers;
+
+public class Opera extends LinuxBrowser {
+
+ public Opera(String bin) {
+ super(bin);
+ fsdir="opera";
+ }
+
+ @Override
+ public Browsers getID() {
+ return Browsers.opera;
+ }
+
+ @Override
+ public String getUserDefaultPluginExpectedLocation() {
+ return null;
+ }
+
+
+ String[] cs={"-nosession", "-nomail", "-nolirc", "-newtab"};
+
+ @Override
+ public List<String> getComaptibilitySwitches() {
+ return Arrays.asList(cs);
+ }
+
+ @Override
+ public List<String> getDefaultSwitches() {
+ return null;
+ }
+
+} \ No newline at end of file