From 748ed726b4cdd7fb264fe54f3bba19c9632af256 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Thu, 13 Dec 2012 02:00:09 +0800 Subject: [PATCH] IDEMPIERE-92 - Integrate Selenium. Moved project 'idempiere.zk.selenium' --- fitnesse/FitNesseRoot/FrontPage/content.txt | 6 +- .../FitNesseRoot/RecentChanges/content.txt | 9 +- fitnesse/FitNesseRoot/content.txt | 6 +- .../OSGI-INF/fitfixturefactory.xml | 2 +- .../OSGI-INF/slimfixturefactory.xml | 2 +- .../fitnesse/fixture/FitFixtureFactory.java | 7 +- org.idempiere.fitnesse.server/.classpath | 4 + .../META-INF/MANIFEST.MF | 268 +++++++++++++++++- .../build.properties | 6 +- .../src/fitnesse/slim/StatementExecutor.java | 44 +++ .../fitnesse/server/fit/FitServerRunner.java | 11 +- .../server/fit/IFitFixtureFactory.java | 3 +- .../server/fit/OSGiFixtureLoader.java | 42 ++- .../.classpath | 2 +- .../.project | 11 + .../.settings/org.eclipse.jdt.core.prefs | 0 .../Readme.txt | 0 .../src/org/idempiere/ui/zk/selenium/Zk.java | 6 +- .../src/test/AbstractTestCase.java | 0 .../src/test/ChangeRoleTest.java | 0 .../src/test/LoginTest.java | 0 .../src/test/LogoutTest.java | 0 selenese/.classpath | 2 +- ztl/.classpath | 4 +- 24 files changed, 407 insertions(+), 28 deletions(-) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/.classpath (69%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/.project (54%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/.settings/org.eclipse.jdt.core.prefs (100%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/Readme.txt (100%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/src/org/idempiere/ui/zk/selenium/Zk.java (86%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/src/test/AbstractTestCase.java (100%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/src/test/ChangeRoleTest.java (100%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/src/test/LoginTest.java (100%) rename {idempiere.zk.selenium => org.idempiere.ui.zk.selenium}/src/test/LogoutTest.java (100%) diff --git a/fitnesse/FitNesseRoot/FrontPage/content.txt b/fitnesse/FitNesseRoot/FrontPage/content.txt index 2d5e0dad06..ff78554d13 100644 --- a/fitnesse/FitNesseRoot/FrontPage/content.txt +++ b/fitnesse/FitNesseRoot/FrontPage/content.txt @@ -1,4 +1,4 @@ -!1 Welcome to !-GlobalQSS-! !-ADempiere-! [[FitNesse][FitNesse.FitNesse]]! +!1 Welcome to !-iDempiere-! [[FitNesse][FitNesse.FitNesse]]! !3 ''The fully integrated stand-alone acceptance testing framework and wiki.'' # Here is a good place to add your first page (WikiWord). For example, MyTopLevelApplicationPage @@ -7,6 +7,10 @@ Suites: IdempiereSuite AvgCostSuite +Zk Examples: +ZkSingleClientLogin +ZkMultiClientLogin + | '''To Learn More...'''| | [[A One-Minute Description][FitNesse.UserGuide.OneMinuteDescription]]|''What is [[FitNesse][FitNesse.FitNesse]]? Start here.''| diff --git a/fitnesse/FitNesseRoot/RecentChanges/content.txt b/fitnesse/FitNesseRoot/RecentChanges/content.txt index 08bc8136fc..02b70e328a 100644 --- a/fitnesse/FitNesseRoot/RecentChanges/content.txt +++ b/fitnesse/FitNesseRoot/RecentChanges/content.txt @@ -1,4 +1,10 @@ -|||01:35:08 miƩ, nov 28, 2012| +|FitLibraryWeb||01:41:13 Thu, Dec 13, 2012| +|FitLibrary||01:40:51 Thu, Dec 13, 2012| +|FrontPage||01:40:10 Thu, Dec 13, 2012| +|FrontPage.ZkMultiClientLogin||01:36:38 Thu, Dec 13, 2012| +|FrontPage.ZkSingleClientLogin||01:32:27 Thu, Dec 13, 2012| +|FrontPage.ZkLogin||24:39:17 Thu, Dec 13, 2012| +|||14:45:31 Wed, Dec 12, 2012| |CommonTests.CreateMaterialReceipt||01:36:56 mar, abr 03, 2012| |CommonTests.CreateProductPrice||01:29:57 mar, abr 03, 2012| |AvgCostSuite.BasicTest||01:18:34 mar, abr 03, 2012| @@ -18,7 +24,6 @@ |CommonTests.SetRandomName||24:14:15 mar, abr 03, 2012| |CommonTests.ValidateClientSetOnAvgInv||24:14:09 mar, abr 03, 2012| |CommonTests.LoginGardenAdmin||24:14:01 mar, abr 03, 2012| -|FrontPage||24:12:35 mar, abr 03, 2012| |CommonTests||23:24:23 lun, abr 02, 2012| |AvgCostSuite.CreateProduct||23:14:23 lun, abr 02, 2012| |AvgCostSuite.ValidateClientSetOnAvgInv||23:10:02 lun, abr 02, 2012| diff --git a/fitnesse/FitNesseRoot/content.txt b/fitnesse/FitNesseRoot/content.txt index d91a6ab004..9a43736a3f 100644 --- a/fitnesse/FitNesseRoot/content.txt +++ b/fitnesse/FitNesseRoot/content.txt @@ -1,8 +1,8 @@ Define the global path: -Where to find the fixtures classes: ( i.e. /home/hengsin/workspace/idempiere/fitnesse/bin ) +Where to find the fixtures classes: ( i.e. /home/hengsin/workspace/idempiere-trekglobal/fitnesse/bin ) -!define fitnesse_home {/home/carlos/hgAdempiere/localosgi/fitnesse} +!define fitnesse_home {/home/hengsin/workspace/idempiere-trekglobal/fitnesse} !path ${fitnesse_home}/fitnesse.jar:${fitnesse_home}/lib/*.jar:${fitnesse_home}/bin @@ -16,7 +16,7 @@ There are some important variables here: This variables can be redefined specifically at page level. !define TEST_RUNNER {fitnesse.client.FitServerServletInvoker} -!define COMMAND_PATTERN {java -Xms32m -Xmx512m -DLOG4J_LEVEL=CONFIG -cp %p %m http://localhost:8082/fitnesse/FitServlet} +!define COMMAND_PATTERN {java -Xms32m -Xmx512m -DLOG4J_LEVEL=CONFIG -cp %p %m http://localhost:8080/fitnesse/FitServlet} To enable remote debugging the tests will stop until you connect remotely via eclipse using RemoteADempiereFitnesse.launch diff --git a/org.idempiere.fitnesse.fixture/OSGI-INF/fitfixturefactory.xml b/org.idempiere.fitnesse.fixture/OSGI-INF/fitfixturefactory.xml index a7d64bfff9..fdfb4037fd 100644 --- a/org.idempiere.fitnesse.fixture/OSGI-INF/fitfixturefactory.xml +++ b/org.idempiere.fitnesse.fixture/OSGI-INF/fitfixturefactory.xml @@ -1,5 +1,5 @@ - + diff --git a/org.idempiere.fitnesse.fixture/OSGI-INF/slimfixturefactory.xml b/org.idempiere.fitnesse.fixture/OSGI-INF/slimfixturefactory.xml index e842348679..58b38ae24b 100644 --- a/org.idempiere.fitnesse.fixture/OSGI-INF/slimfixturefactory.xml +++ b/org.idempiere.fitnesse.fixture/OSGI-INF/slimfixturefactory.xml @@ -1,5 +1,5 @@ - + diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/FitFixtureFactory.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/FitFixtureFactory.java index b14e418c4b..7c6c11d1e6 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/FitFixtureFactory.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/FitFixtureFactory.java @@ -15,7 +15,6 @@ package org.idempiere.fitnesse.fixture; import org.idempiere.fitnesse.server.fit.IFitFixtureFactory; -import fit.Fixture; import fit.FixtureName; /** @@ -37,10 +36,10 @@ public class FitFixtureFactory implements IFitFixtureFactory { * @see org.idempiere.fitnesse.server.fit.IFixtureFactory#getFixture(FixtureName) */ @Override - public Fixture getFixture(FixtureName fixtureName) { + public Object getFixture(FixtureName fixtureName) { String className = fixtureName.toString(); try { - Class clazz = (Class) getClass().getClassLoader().loadClass(className); + Class clazz = getClass().getClassLoader().loadClass(className); return clazz.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { @@ -50,7 +49,7 @@ public class FitFixtureFactory implements IFitFixtureFactory { if (!fixtureName.isFullyQualified()) { className = DEFAULT_PACKAGE + "." + fixtureName.toString(); try { - Class clazz = (Class) getClass().getClassLoader().loadClass(className); + Class clazz = getClass().getClassLoader().loadClass(className); return clazz.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { diff --git a/org.idempiere.fitnesse.server/.classpath b/org.idempiere.fitnesse.server/.classpath index fd3f6ce5c3..366ecdae85 100644 --- a/org.idempiere.fitnesse.server/.classpath +++ b/org.idempiere.fitnesse.server/.classpath @@ -1,6 +1,10 @@ + + + + diff --git a/org.idempiere.fitnesse.server/META-INF/MANIFEST.MF b/org.idempiere.fitnesse.server/META-INF/MANIFEST.MF index d67e7bad6d..9d7e3738aa 100644 --- a/org.idempiere.fitnesse.server/META-INF/MANIFEST.MF +++ b/org.idempiere.fitnesse.server/META-INF/MANIFEST.MF @@ -11,15 +11,192 @@ Import-Package: javax.servlet;version="3.0.0", org.adempiere.base, org.osgi.framework;version="1.3.0" Bundle-ClassPath: ., - fitnesse.jar + fitlibrary-2.0.jar, + fitnesse.jar, + log4j-1.2.16.jar, + fitlibraryweb-2.0.jar, + selenium-server-standalone-2.27.0.jar Web-ContextPath: fitnesse Export-Package: fit, fit.decorator, fit.decorator.exceptions, fit.decorator.performance, fit.decorator.util, + fit.eg, + fit.eg.bowling, + fit.eg.bowling.fixtures, fit.exception, + fit.specify, fit.testFxtr, + fitbook, + fitbook.accounts, + fitbook.chat, + fitbook.items, + fitbook.money, + fitbook.sokoban, + fitlibrary, + fitlibrary.aboutToBeRemoved, + fitlibrary.annotation, + fitlibrary.batch, + fitlibrary.batch.fitnesseIn, + fitlibrary.batch.resultsOut, + fitlibrary.batch.testRun, + fitlibrary.batch.trinidad, + fitlibrary.clean, + fitlibrary.closure, + fitlibrary.collection, + fitlibrary.collection.array, + fitlibrary.collection.list, + fitlibrary.collection.map, + fitlibrary.collection.set, + fitlibrary.config, + fitlibrary.database, + fitlibrary.date, + fitlibrary.debug, + fitlibrary.definedAction, + fitlibrary.definedactions, + fitlibrary.diff, + fitlibrary.differences, + fitlibrary.domainAdapter, + fitlibrary.dynamicVariable, + fitlibrary.eg, + fitlibrary.eg.chat, + fitlibrary.email, + fitlibrary.exception, + fitlibrary.exception.classes, + fitlibrary.exception.method, + fitlibrary.exception.parse, + fitlibrary.exception.table, + fitlibrary.flex, + fitlibrary.flow, + fitlibrary.flow.actor, + fitlibrary.ftp, + fitlibrary.global, + fitlibrary.http, + fitlibrary.listener, + fitlibrary.log, + fitlibrary.matcher, + fitlibrary.mockWebServices, + fitlibrary.mockWebServices.clock, + fitlibrary.mockWebServices.logger, + fitlibrary.mockWebServices.requestMatcher, + fitlibrary.mockWebServices.responder, + fitlibrary.mockWebServices.specify, + fitlibrary.mockWebServices.term, + fitlibrary.mockWebServices.transactionFixture, + fitlibrary.object, + fitlibrary.parser, + fitlibrary.parser.collection, + fitlibrary.parser.graphic, + fitlibrary.parser.lookup, + fitlibrary.parser.self, + fitlibrary.parser.table, + fitlibrary.parser.tagged, + fitlibrary.parser.tree, + fitlibrary.pdf, + fitlibrary.polling, + fitlibrary.ref, + fitlibrary.runResults, + fitlibrary.runner, + fitlibrary.runtime, + fitlibrary.selenium, + fitlibrary.server, + fitlibrary.service, + fitlibrary.sh, + fitlibrary.sh.utility, + fitlibrary.spec, + fitlibrary.spec.filter, + fitlibrary.spec.matcher, + fitlibrary.special, + fitlibrary.speciallyNamedPackage, + fitlibrary.specify, + fitlibrary.specify.access, + fitlibrary.specify.arrayParser, + fitlibrary.specify.autowrap, + fitlibrary.specify.calculate, + fitlibrary.specify.collection, + fitlibrary.specify.collectionSetUp, + fitlibrary.specify.constraint, + fitlibrary.specify.definedAction, + fitlibrary.specify.domain, + fitlibrary.specify.dynamicVariable, + fitlibrary.specify.eg, + fitlibrary.specify.entityParser, + fitlibrary.specify.exception, + fitlibrary.specify.global, + fitlibrary.specify.initialClass, + fitlibrary.specify.listParser, + fitlibrary.specify.log, + fitlibrary.specify.mapParser, + fitlibrary.specify.mapTraverse, + fitlibrary.specify.missingMethod, + fitlibrary.specify.missingProperty, + fitlibrary.specify.parser, + fitlibrary.specify.plugin, + fitlibrary.specify.select, + fitlibrary.specify.set, + fitlibrary.specify.setParser, + fitlibrary.specify.specialAction, + fitlibrary.specify.specialisedTables, + fitlibrary.specify.suite, + fitlibrary.specify.utility, + fitlibrary.specify.valueObject, + fitlibrary.specify.workflow, + fitlibrary.spider, + fitlibrary.spider.component, + fitlibrary.spider.driver, + fitlibrary.spider.element, + fitlibrary.spider.polling, + fitlibrary.spider.specify, + fitlibrary.spider.utility, + fitlibrary.suite, + fitlibrary.table, + fitlibrary.tableOnParse, + fitlibrary.tableProxy, + fitlibrary.template, + fitlibrary.template.specify, + fitlibrary.traverse, + fitlibrary.traverse.function, + fitlibrary.traverse.workflow, + fitlibrary.traverse.workflow.caller, + fitlibrary.traverse.workflow.definedAction, + fitlibrary.traverse.workflow.special, + fitlibrary.tutorial, + fitlibrary.tutorial.chat, + fitlibrary.typed, + fitlibrary.utility, + fitlibrary.utility.option, + fitlibrary.ws, + fitlibrary.ws.client, + fitlibrary.ws.clock, + fitlibrary.ws.logger, + fitlibrary.ws.message, + fitlibrary.ws.mock.logger, + fitlibrary.ws.mock.requestMatcher, + fitlibrary.ws.mock.responder, + fitlibrary.ws.mock.term, + fitlibrary.ws.recorder, + fitlibrary.ws.soap, + fitlibrary.xml, + fitlibrary.xml.specify, + fitlibrary.xref, + fitlibraryGeneric, + fitlibraryGeneric.eg.rentEz, + fitlibraryGeneric.generic, + fitlibraryGeneric.list, + fitlibraryGeneric.map, + fitlibraryGeneric.object, + fitlibraryGeneric.set, + fitlibraryGeneric.specify, + fitlibraryGeneric.specify.calculate, + fitlibraryGeneric.specify.collections, + fitlibraryGeneric.specify.enumerator, + fitlibraryGeneric.specify.genericFinder, + fitlibraryGeneric.specify.object, + fitlibraryGeneric.specify.unbound, + fitlibraryGeneric.specify.workflow, + fitlibraryGeneric.traverse, + fitlibraryGeneric.typed, fitnesse, fitnesse.authentication, fitnesse.components, @@ -60,4 +237,91 @@ Export-Package: fit, fitnesseMain, fitnesseMain.ant, org.idempiere.fitnesse.server.fit, - org.idempiere.fitnesse.server.slim + org.idempiere.fitnesse.server.slim, + org.openqa.grid.common, + org.openqa.grid.common.exception, + org.openqa.grid.internal, + org.openqa.grid.internal.exception, + org.openqa.grid.internal.listeners, + org.openqa.grid.internal.utils, + org.openqa.grid.selenium, + org.openqa.grid.selenium.proxy, + org.openqa.grid.selenium.utils, + org.openqa.grid.web, + org.openqa.grid.web.servlet, + org.openqa.grid.web.servlet.beta, + org.openqa.grid.web.servlet.handler, + org.openqa.grid.web.utils, + org.openqa.jetty.html, + org.openqa.jetty.http, + org.openqa.jetty.http.ajp, + org.openqa.jetty.http.ajp.jmx, + org.openqa.jetty.http.handler, + org.openqa.jetty.http.handler.jmx, + org.openqa.jetty.http.jmx, + org.openqa.jetty.http.nio, + org.openqa.jetty.jetty, + org.openqa.jetty.jetty.jmx, + org.openqa.jetty.jetty.servlet, + org.openqa.jetty.jetty.servlet.jmx, + org.openqa.jetty.jetty.win32, + org.openqa.jetty.log, + org.openqa.jetty.servlet, + org.openqa.jetty.start, + org.openqa.jetty.stop, + org.openqa.jetty.util, + org.openqa.jetty.util.jmx, + org.openqa.jetty.xml, + org.openqa.selenium, + org.openqa.selenium.android, + org.openqa.selenium.browserlaunchers, + org.openqa.selenium.browserlaunchers.locators, + org.openqa.selenium.chrome, + org.openqa.selenium.firefox, + org.openqa.selenium.firefox.internal, + org.openqa.selenium.html5, + org.openqa.selenium.htmlunit, + org.openqa.selenium.ie, + org.openqa.selenium.interactions, + org.openqa.selenium.interactions.internal, + org.openqa.selenium.interactions.touch, + org.openqa.selenium.internal, + org.openqa.selenium.internal.selenesedriver, + org.openqa.selenium.internal.seleniumemulation, + org.openqa.selenium.io, + org.openqa.selenium.iphone, + org.openqa.selenium.lift, + org.openqa.selenium.lift.find, + org.openqa.selenium.lift.match, + org.openqa.selenium.logging, + org.openqa.selenium.logging.profiler, + org.openqa.selenium.net, + org.openqa.selenium.os, + org.openqa.selenium.remote, + org.openqa.selenium.remote.html5, + org.openqa.selenium.remote.internal, + org.openqa.selenium.remote.server, + org.openqa.selenium.remote.server.handler, + org.openqa.selenium.remote.server.handler.html5, + org.openqa.selenium.remote.server.handler.interactions, + org.openqa.selenium.remote.server.handler.interactions.touch, + org.openqa.selenium.remote.server.handler.internal, + org.openqa.selenium.remote.server.renderer, + org.openqa.selenium.remote.server.resource, + org.openqa.selenium.remote.server.rest, + org.openqa.selenium.remote.server.xdrpc, + org.openqa.selenium.remote.service, + org.openqa.selenium.safari, + org.openqa.selenium.security, + org.openqa.selenium.server, + org.openqa.selenium.server.browserlaunchers, + org.openqa.selenium.server.cli, + org.openqa.selenium.server.commands, + org.openqa.selenium.server.htmlrunner, + org.openqa.selenium.server.log, + org.openqa.selenium.support, + org.openqa.selenium.support.events, + org.openqa.selenium.support.events.internal, + org.openqa.selenium.support.pagefactory, + org.openqa.selenium.support.pagefactory.internal, + org.openqa.selenium.support.ui diff --git a/org.idempiere.fitnesse.server/build.properties b/org.idempiere.fitnesse.server/build.properties index 399970959c..aa7492f81d 100644 --- a/org.idempiere.fitnesse.server/build.properties +++ b/org.idempiere.fitnesse.server/build.properties @@ -2,4 +2,8 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - fitnesse.jar + fitnesse.jar,\ + fitlibrary-2.0.jar,\ + log4j-1.2.16.jar,\ + fitlibraryweb-2.0.jar,\ + selenium-server-standalone-2.27.0.jar diff --git a/org.idempiere.fitnesse.server/src/fitnesse/slim/StatementExecutor.java b/org.idempiere.fitnesse.server/src/fitnesse/slim/StatementExecutor.java index 72fd877182..31c151d985 100644 --- a/org.idempiere.fitnesse.server/src/fitnesse/slim/StatementExecutor.java +++ b/org.idempiere.fitnesse.server/src/fitnesse/slim/StatementExecutor.java @@ -7,6 +7,7 @@ import fitnesse.slim.converters.*; import java.beans.PropertyEditorManager; import java.io.PrintWriter; import java.io.StringWriter; +import java.lang.reflect.Constructor; import java.util.*; import org.adempiere.base.Service; @@ -141,9 +142,52 @@ public class StatementExecutor implements StatementExecutorInterface { } } + Class k = searchPathsForClass(className); + Constructor constructor = getConstructor(k.getConstructors(), args); + if (constructor == null) + throw new SlimError(String.format("message:<>", className)); + + Object newInstance = constructor.newInstance(ConverterSupport.convertArgs(args, constructor + .getParameterTypes())); + + if (newInstance instanceof StatementExecutorConsumer) { + ((StatementExecutorConsumer) newInstance).setStatementExecutor(this); + } + + return newInstance; + } + + private Class searchPathsForClass(String className) { + Class k = getClass(className); + if (k != null) + return k; + List reversedPaths = new ArrayList(paths); + Collections.reverse(reversedPaths); + for (String path : reversedPaths) { + k = getClass(path + "." + className); + if (k != null) + return k; + } throw new SlimError(String.format("message:<>", className)); } + private Class getClass(String className) { + try { + return getClass().getClassLoader().loadClass(className); + } catch (ClassNotFoundException e) { + return null; + } + } + + private Constructor getConstructor(Constructor[] constructors, Object[] args) { + for (Constructor constructor : constructors) { + Class arguments[] = constructor.getParameterTypes(); + if (arguments.length == args.length) + return constructor; + } + return null; + } + public Object call(String instanceName, String methodName, Object... args) { try { return getMethodExecutionResult(instanceName, methodName, args).returnValue(); diff --git a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/FitServerRunner.java b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/FitServerRunner.java index 73f22cffda..f9fd37f243 100644 --- a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/FitServerRunner.java +++ b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/FitServerRunner.java @@ -5,6 +5,7 @@ import org.idempiere.fitnesse.server.Runner; import fit.Counts; import fit.FitServer; +import fitlibrary.suite.FitLibraryServer; /** * Adapted from http://sourceforge.net/projects/patang/ @@ -19,8 +20,16 @@ class FitServerRunner extends Runner { @Override protected Counts run(String[] params) throws Exception { - FitServer fitServer = new FitServer(); +// FitServer fitServer = new FitServer(); + MyFitLibraryServer fitServer = new MyFitLibraryServer(); fitServer.run(params); +// fitServer.run(params); return fitServer.getCounts(); } + + class MyFitLibraryServer extends FitLibraryServer { + public Counts getCounts() { + return suiteTestResults.getCounts(); + } + } } diff --git a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/IFitFixtureFactory.java b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/IFitFixtureFactory.java index 5cfb4c3f85..e6a20cf3d0 100644 --- a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/IFitFixtureFactory.java +++ b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/IFitFixtureFactory.java @@ -13,7 +13,6 @@ *****************************************************************************/ package org.idempiere.fitnesse.server.fit; -import fit.Fixture; import fit.FixtureName; /** @@ -28,5 +27,5 @@ public interface IFitFixtureFactory { * @param fixtureName * @return Fixture */ - public Fixture getFixture(FixtureName fixtureName); + public Object getFixture(FixtureName fixtureName); } diff --git a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/OSGiFixtureLoader.java b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/OSGiFixtureLoader.java index cd449c95be..f033990b79 100644 --- a/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/OSGiFixtureLoader.java +++ b/org.idempiere.fitnesse.server/src/org/idempiere/fitnesse/server/fit/OSGiFixtureLoader.java @@ -13,13 +13,16 @@ *****************************************************************************/ package org.idempiere.fitnesse.server.fit; +import java.util.Iterator; import java.util.List; import org.adempiere.base.Service; import fit.Fixture; +import fit.FixtureClass; import fit.FixtureLoader; import fit.FixtureName; +import fit.exception.CouldNotLoadComponentFitFailureException; import fit.exception.NoSuchFixtureException; /** @@ -38,10 +41,43 @@ public class OSGiFixtureLoader extends FixtureLoader { FixtureName fixtureName = new FixtureName(className); List factories = Service.locator().list(IFitFixtureFactory.class).getServices(); for(IFitFixtureFactory factory : factories) { - Fixture fixture = factory.getFixture(fixtureName); - if (fixture != null) - return fixture; + Object fixture = factory.getFixture(fixtureName); + if (fixture != null && fixture instanceof Fixture) + return (Fixture) fixture; } + Fixture fixture = instantiateFirstValidFixtureClass(fixtureName); + return fixture; + } + + private Fixture instantiateFixture(String fixtureName) throws Throwable { + Class classForFixture = loadFixtureClass(fixtureName); + FixtureClass fixtureClass = new FixtureClass(classForFixture); + return fixtureClass.newInstance(); + } + + private Class loadFixtureClass(String fixtureName) { + try { + return getClass().getClassLoader().loadClass(fixtureName); + } catch (ClassNotFoundException deadEnd) { + if (deadEnd.getMessage().equals(fixtureName)) + throw new NoSuchFixtureException(fixtureName); + throw new CouldNotLoadComponentFitFailureException( + deadEnd.getMessage(), fixtureName); + } + } + + private Fixture instantiateFirstValidFixtureClass(FixtureName fixtureName) + throws Throwable { + for (Iterator i = fixtureName.getPotentialFixtureClassNames( + fixturePathElements).iterator(); i.hasNext();) { + String each = i.next(); + try { + return instantiateFixture(each); + } catch (NoSuchFixtureException ignoreAndTryTheNextCandidate) { + // + } + } + throw new NoSuchFixtureException(fixtureName.toString()); } } diff --git a/idempiere.zk.selenium/.classpath b/org.idempiere.ui.zk.selenium/.classpath similarity index 69% rename from idempiere.zk.selenium/.classpath rename to org.idempiere.ui.zk.selenium/.classpath index 87f030c8d4..121e527a93 100644 --- a/idempiere.zk.selenium/.classpath +++ b/org.idempiere.ui.zk.selenium/.classpath @@ -2,6 +2,6 @@ - + diff --git a/idempiere.zk.selenium/.project b/org.idempiere.ui.zk.selenium/.project similarity index 54% rename from idempiere.zk.selenium/.project rename to org.idempiere.ui.zk.selenium/.project index b0c020865a..956cb098b1 100644 --- a/idempiere.zk.selenium/.project +++ b/org.idempiere.ui.zk.selenium/.project @@ -5,13 +5,24 @@ + + org.eclipse.wst.common.project.facet.core.builder + + + org.eclipse.jdt.core.javabuilder + + org.eclipse.pde.ds.core.builder + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature diff --git a/idempiere.zk.selenium/.settings/org.eclipse.jdt.core.prefs b/org.idempiere.ui.zk.selenium/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from idempiere.zk.selenium/.settings/org.eclipse.jdt.core.prefs rename to org.idempiere.ui.zk.selenium/.settings/org.eclipse.jdt.core.prefs diff --git a/idempiere.zk.selenium/Readme.txt b/org.idempiere.ui.zk.selenium/Readme.txt similarity index 100% rename from idempiere.zk.selenium/Readme.txt rename to org.idempiere.ui.zk.selenium/Readme.txt diff --git a/idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java b/org.idempiere.ui.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java similarity index 86% rename from idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java rename to org.idempiere.ui.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java index 2bce963221..754bdfa448 100644 --- a/idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java +++ b/org.idempiere.ui.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java @@ -7,7 +7,7 @@ import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.SearchContext; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.RemoteWebElement; +import org.openqa.selenium.internal.WrapsDriver; /** * utility class to find elements using zk jq selector @@ -37,10 +37,10 @@ public class Zk { if (context instanceof WebDriver) { executor = (JavascriptExecutor) context; } else { - RemoteWebElement element = (RemoteWebElement) context; + WebElement element = (WebElement) context; String id = element.getAttribute("id"); selector = "#"+id+" "+selector; - executor = (JavascriptExecutor) element.getWrappedDriver(); + executor = (JavascriptExecutor) ((WrapsDriver)element).getWrappedDriver(); } List list = (List) executor.executeScript("return jq('" + selector + "').get();"); return list; diff --git a/idempiere.zk.selenium/src/test/AbstractTestCase.java b/org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java similarity index 100% rename from idempiere.zk.selenium/src/test/AbstractTestCase.java rename to org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java diff --git a/idempiere.zk.selenium/src/test/ChangeRoleTest.java b/org.idempiere.ui.zk.selenium/src/test/ChangeRoleTest.java similarity index 100% rename from idempiere.zk.selenium/src/test/ChangeRoleTest.java rename to org.idempiere.ui.zk.selenium/src/test/ChangeRoleTest.java diff --git a/idempiere.zk.selenium/src/test/LoginTest.java b/org.idempiere.ui.zk.selenium/src/test/LoginTest.java similarity index 100% rename from idempiere.zk.selenium/src/test/LoginTest.java rename to org.idempiere.ui.zk.selenium/src/test/LoginTest.java diff --git a/idempiere.zk.selenium/src/test/LogoutTest.java b/org.idempiere.ui.zk.selenium/src/test/LogoutTest.java similarity index 100% rename from idempiere.zk.selenium/src/test/LogoutTest.java rename to org.idempiere.ui.zk.selenium/src/test/LogoutTest.java diff --git a/selenese/.classpath b/selenese/.classpath index f33efe0132..bb17d08177 100644 --- a/selenese/.classpath +++ b/selenese/.classpath @@ -2,6 +2,6 @@ - + diff --git a/ztl/.classpath b/ztl/.classpath index 2c1f6f13af..fc78ed36f8 100644 --- a/ztl/.classpath +++ b/ztl/.classpath @@ -2,7 +2,7 @@ - - + +