/******************************************************************************* * ATE, Automation Test Engine * * Copyright 2015, Montreal PROT, or individual contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Montreal PROT. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package org.bigtester.ate.model.caserunner; //NOPMD import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import javax.tools.Diagnostic; import javax.tools.DiagnosticCollector; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; import jodd.util.ClassLoaderUtil; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.bigtester.ate.GlobalUtils; import org.bigtester.ate.constant.EnumCaseDependencyType; import org.bigtester.ate.model.page.atewebdriver.EPlatform; import org.bigtester.ate.model.page.atewebdriver.OSinfo; import org.bigtester.ate.model.project.CaseDependency; import org.bigtester.ate.model.project.TestSuite; import org.bigtester.ate.model.project.XmlTestCase; import org.eclipse.jdt.annotation.Nullable; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import com.github.javaparser.ASTHelper; import com.github.javaparser.JavaParser; import com.github.javaparser.ParseException; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.PackageDeclaration; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.body.FieldDeclaration; import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.expr.ArrayInitializerExpr; import com.github.javaparser.ast.expr.BooleanLiteralExpr; import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.MemberValuePair; import com.github.javaparser.ast.expr.NameExpr; import com.github.javaparser.ast.expr.NormalAnnotationExpr; import com.github.javaparser.ast.expr.StringLiteralExpr; import com.github.javaparser.ast.visitor.VoidVisitorAdapter; /** * This class CaseRunnerGenerator dynamically generate caserunner classes .... * * @author Peidong Hu * */ public class CaseRunnerGenerator { /** The number of test cases. */ transient private long numberOfTestCases; /** The case runner java file path names. */ transient private Map<String, String> caseRunnerJavaFileNames = new HashMap<String, String>();// NOPMD /** The package name. */ @Nullable private String basePackageName; /** The case runner template. */ public final static String caseRunnerTemplateFileName = "CaseRunner";// NOPMD /** The case runner cache folder. */ final private String caseRunnerCacheAbsoluteFolder; /** The suites. */ final private List<TestSuite> suites; /** The compiler. */ @Nullable final private JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); /** * @return the caseRunnerCacheAbsoluteFolder */ public String getCaseRunnerCacheAbsoluteFolder() { return caseRunnerCacheAbsoluteFolder; } /** * Instantiates a new case runner generator. * * @param numberOfTestCases * the number of test cases * @throws IOException */ public CaseRunnerGenerator(List<TestSuite> suites) throws IOException { this.suites = suites; for (TestSuite tSuite : suites) { this.numberOfTestCases = this.numberOfTestCases + tSuite.getTestCaseList().size(); } this.caseRunnerCacheAbsoluteFolder = System.getProperty("user.dir") + "/generated-code/caserunners/org/bigtester/ate/model/caserunner/"; File deleteOldCaseRunners = new File(caseRunnerCacheAbsoluteFolder); if (deleteOldCaseRunners.exists()) { FileUtils.deleteDirectory(deleteOldCaseRunners); } } /** * Creates the case runners. * * @throws ParseException * the parse exception * @throws IOException * Signals that an I/O exception has occurred. */ public void createCaseRunners() throws ParseException, IOException { // creates an input stream for the file to be parsed for (TestSuite tSuite : suites) { File suiteCacheDir = new File(caseRunnerCacheAbsoluteFolder + tSuite.getSuiteName() + "/"); if (!suiteCacheDir.exists()) { suiteCacheDir.mkdirs(); } for (int index = 0; index < tSuite.getTestCaseList().size(); index++) { Resource fTemp = new ClassPathResource( caseRunnerTemplateFileName); CompilationUnit caseRunnerCU; caseRunnerCU = JavaParser.parse(fTemp.getInputStream()); this.basePackageName = caseRunnerCU.getPackage().getName() .toStringWithoutComments(); try { File newCaseRunner = File.createTempFile("CaseRunner", ".java", suiteCacheDir); this.caseRunnerJavaFileNames.put(tSuite.getTestCaseList() .get(index).getTestCaseFilePathName(), newCaseRunner.getCanonicalPath()); new TestCaseNameFieldVisitor().visit(caseRunnerCU, tSuite .getTestCaseList().get(index) .getTestCaseFilePathName()); new ClassNameVisitor().visit(caseRunnerCU, FilenameUtils .removeExtension(newCaseRunner.getName())); new PackageNameVisitor().visit(caseRunnerCU, this.basePackageName + "." + tSuite.getSuiteName()); new MethodTestAnnotationVisitor().visit(caseRunnerCU, tSuite.getTestCaseList().get(index)); // prints the changed compilation unit PrintWriter out = new PrintWriter(newCaseRunner); out.println(caseRunnerCU.toString()); out.close(); } catch (IOException ioE) { continue; } fTemp.getInputStream().close(); } } } private String parsePackageName(String caseRunnerJavaFilePathName) { String testSuiteName = new File(caseRunnerJavaFilePathName) .getParentFile().getName(); return this.basePackageName + "." + testSuiteName; } private String parseClassFullName(String caseRunnerJavaFilePathName) { String packageName = parsePackageName(caseRunnerJavaFilePathName); String caseRunnerFileName = new File(caseRunnerJavaFilePathName) .getName(); return packageName + "." + FilenameUtils.removeExtension(caseRunnerFileName); } /** * Load case runner classes. * * @return the int * @throws Exception */ public int loadCaseRunnerClasses() { Iterator<Entry<String, String>> iter = caseRunnerJavaFileNames .entrySet().iterator(); int retVal = 0;// NOPMD while (iter.hasNext()) { Map.Entry<String, String> pairs = (Map.Entry<String, String>) iter .next(); String caseRunnerJavaFilePath = pairs.getValue(); if (caseRunnerJavaFilePath == null) continue; else { try { loadClass(caseRunnerJavaFilePath, parseClassFullName(caseRunnerJavaFilePath)); } catch (MalformedURLException | ClassNotFoundException e) { continue; } catch (IOException e) { continue; } retVal = retVal + 1; } } return retVal; } /** * Change test annotation groups. * * @param caseRunnerRelativeFilePathName * the case runner relative file path name * @param groups * the groups * @param testMethodName * the test method name * @throws ParseException * the parse exception * @throws IOException * Signals that an I/O exception has occurred. */ public void changeTestMethodName(String caseRunnerRelativeFilePathName, String testMethodName) throws ParseException, IOException { // creates an input stream for the file to be parsed FileInputStream fTemp = new FileInputStream( caseRunnerRelativeFilePathName); CompilationUnit caseRunnerCU; try { // parse the file caseRunnerCU = JavaParser.parse(fTemp); } finally { fTemp.close(); } // visit and print the methods names new MethodNameVisitor().visit(caseRunnerCU, testMethodName); String newClass = caseRunnerCU.toString(); fTemp.close(); // prints the changed compilation unit FileWriter out = new FileWriter(caseRunnerRelativeFilePathName, false); out.write(newClass); out.close(); } /** * Change test annotation groups. * * @param caseRunnerAbsoluteFilePathName * the case runner relative file path name * @param groups * the groups * @param testMethodName * the test method name * @throws ParseException * the parse exception * @throws IOException * Signals that an I/O exception has occurred. */ public void changeTestAnnotationGroups( String caseRunnerAbsoluteFilePathName, List<String> groups, String testMethodName) throws ParseException, IOException { // creates an input stream for the file to be parsed FileInputStream fTemp = new FileInputStream( caseRunnerAbsoluteFilePathName); CompilationUnit caseRunnerCU; try { // parse the file caseRunnerCU = JavaParser.parse(fTemp); } finally { fTemp.close(); } groups.add(0, testMethodName); new MethodGroupAnnotationVisitor().visit(caseRunnerCU, groups); String newClass = caseRunnerCU.toString(); fTemp.close(); // prints the changed compilation unit FileWriter out = new FileWriter(caseRunnerAbsoluteFilePathName, false); out.write(newClass); out.close(); } /** * @return the numberOfTestCases */ public long getNumberOfTestCases() { return numberOfTestCases; } /** * @return the caseRunnerJavaFilePathNames */ public Map<String, String> getCaseRunnerJavaFileNames() { return caseRunnerJavaFileNames; } /** * @param caseRunnerJavaFileNames * the caseRunnerJavaFilePathNames to set */ public void setCaseRunnerJavaFileNames( Map<String, String> caseRunnerJavaFileNames) { this.caseRunnerJavaFileNames = caseRunnerJavaFileNames; } /** * @return the packageName */ public String getBasePackageName() { final String packageName2 = basePackageName; if (null == packageName2) { throw GlobalUtils.createNotInitializedException("pageckage name"); } else { return packageName2; } } /** * @param packageName * the packageName to set */ public void setBasePackageName(String packageName) { this.basePackageName = packageName; } /** * @return the suites */ public List<TestSuite> getSuites() { return suites; } /** * The Class ClassVisitor. * * @author Peidong Hu */ private static class ClassNameVisitor extends VoidVisitorAdapter<String> { /** * {@inheritDoc} */ @Override public void visit( @Nullable ClassOrInterfaceDeclaration classInterfaceDec, @Nullable String newClassName) { if (null == classInterfaceDec) throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); // NOPMD else { if (classInterfaceDec.getName().equals("CaseRunner")) { classInterfaceDec.setName(newClassName); } } } } /** * The Class ClassVisitor. * * @author Peidong Hu */ private static class TestCaseNameFieldVisitor extends VoidVisitorAdapter<String> { /** * {@inheritDoc} */ @Override public void visit(@Nullable FieldDeclaration fieldInterfaceDec, @Nullable String testCaseFilePath) { if (null == fieldInterfaceDec) { throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); } else { for (VariableDeclarator var : fieldInterfaceDec.getVariables()) { if (var.getId().getName().equals("currentExecutingTCName")) { var.setInit(new StringLiteralExpr(testCaseFilePath)); } } } } } /** * The Class PackageNameVisitor. * * @author Peidong Hu */ private static class PackageNameVisitor extends VoidVisitorAdapter<String> { /** * {@inheritDoc} */ @Override public void visit(@Nullable PackageDeclaration packageInterfaceDec, @Nullable String newPackageName) { if (null == packageInterfaceDec) throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); else { packageInterfaceDec.setName(new NameExpr(newPackageName)); } } } /** * Simple visitor implementation for visiting MethodDeclaration nodes. * * @author Peidong Hu */ private static class MethodNameVisitor extends VoidVisitorAdapter<String> { /** * {@inheritDoc} */ @Override public void visit(@Nullable MethodDeclaration methodDec, @Nullable String newMethodName) { if (null == methodDec) throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); else { if (methodDec.getName().equals("runTest")) { methodDec.setName(newMethodName); } } } } /** * Simple visitor implementation for visiting MethodDeclaration nodes. * * @author Peidong Hu */ private static class MethodGroupAnnotationVisitor extends VoidVisitorAdapter<List<String>> { /** * {@inheritDoc} */ @Override public void visit(@Nullable MethodDeclaration methodDec, @Nullable List<String> groupNames) { if (null == methodDec || null == groupNames) throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); else { if (methodDec.getName().equals("runTest")) { List<Expression> groups = new ArrayList<Expression>(); for (int i = 1; i < groupNames.size(); i++) { groups.add(new StringLiteralExpr(groupNames.get(i))); } List<MemberValuePair> testAnnoParams = new ArrayList<MemberValuePair>(); testAnnoParams.add(new MemberValuePair("groups", new ArrayInitializerExpr(groups))); NormalAnnotationExpr testAnno = new NormalAnnotationExpr( ASTHelper.createNameExpr("Test"), testAnnoParams); methodDec.getAnnotations().add(testAnno); } } } } /** * Simple visitor implementation for visiting MethodDeclaration nodes. * * @author Peidong Hu */ private static class MethodTestAnnotationVisitor extends VoidVisitorAdapter<XmlTestCase> { /** * {@inheritDoc} */ @Override public void visit(@Nullable MethodDeclaration methodDec, @Nullable XmlTestCase testCase) { if (null == methodDec || null == testCase) throw GlobalUtils .createNotInitializedException("classorinterfacedeclaration"); else { if (methodDec.getName().equals("runTest")) { List<Expression> groups = new ArrayList<Expression>(); groups.add(new StringLiteralExpr(testCase .getTestCaseFilePathName())); List<MemberValuePair> testAnnoParams = new ArrayList<MemberValuePair>(); testAnnoParams.add(new MemberValuePair("groups", new ArrayInitializerExpr(groups))); testAnnoParams.add(new MemberValuePair("dataProvider", new StringLiteralExpr("dp"))); List<CaseDependency> caseDeps = testCase .getDependOnTestCases(); if (null != caseDeps) { List<Expression> dependsOnGroups = new ArrayList<Expression>(); boolean alwaysRun = true;// NOPMD for (CaseDependency cDep : caseDeps) { dependsOnGroups.add(new StringLiteralExpr(cDep .getDependOnTestCaseID())); if (cDep.getDependencyType() == EnumCaseDependencyType.TESTCASESTEPDEPENDENCY) { alwaysRun = false;// NOPMD } } testAnnoParams.add(new MemberValuePair( "dependsOnGroups", new ArrayInitializerExpr( dependsOnGroups))); testAnnoParams.add(new MemberValuePair("alwaysRun", new BooleanLiteralExpr(alwaysRun))); } NormalAnnotationExpr testAnno = new NormalAnnotationExpr( ASTHelper.createNameExpr("Test"), testAnnoParams); methodDec.getAnnotations().add(testAnno); } } } } private void loadClass(String classFilePathName, String className) throws ClassNotFoundException, IOException { /** Compilation Requirements *********************************************************************************************/ DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); StandardJavaFileManager fileManager = getCompiler() .getStandardFileManager(diagnostics, null, null); // This sets up the class path that the compiler will use. // I've added the .jar file that contains the DoStuff interface within // in it... List<String> optionList = new ArrayList<String>(); optionList.add("-classpath"); optionList.add(getAllJarsClassPathInMavenLocalRepo()); optionList.add("-verbose"); File helloWorldJava = new File(classFilePathName); Iterable<? extends JavaFileObject> compilationUnit = fileManager .getJavaFileObjectsFromFiles(Arrays.asList(helloWorldJava)); JavaCompiler.CompilationTask task = getCompiler().getTask(null, fileManager, diagnostics, optionList, null, compilationUnit); /********************************************************************************************* Compilation Requirements **/ if (task.call()) { /** Load and execute *************************************************************************************************/ // Create a new custom class loader, pointing to the directory that // contains the compiled // classes, this should point to the top of the package structure! // TODO the / separator needs to be revised to platform awared URLClassLoader classLoader = new URLClassLoader( new URL[] { new File(System.getProperty("user.dir") + "/generated-code/caserunners/").toURI().toURL() }, Thread.currentThread().getContextClassLoader()); String addonClasspath = System.getProperty("user.dir") + "/generated-code/caserunners/"; ClassLoaderUtil.addFileToClassPath(addonClasspath, classLoader.getParent()); classLoader.loadClass(className); classLoader.close(); /************************************************************************************************* Load and execute **/ } else { for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics .getDiagnostics()) { System.out.format("Error on line %d in %s%n with error %s", diagnostic.getLineNumber(), diagnostic.getSource(), diagnostic.getMessage(new Locale("en"))); } } } private static @Nullable URI fixFileURL(URL url) { if (!"file".equals(url.getProtocol()))//NOPMD throw new IllegalArgumentException();// NOPMD File tmp ; try { tmp = new File(url.toURI());//NOPMD } catch (URISyntaxException e) { tmp = new File(url.getFile()); } return tmp.toURI(); } private String getAllJarsClassPathInMavenLocalRepo() { Class<?> cls; String retVal; try { cls = Class.forName("org.bigtester.ate.TestProjectRunner");// NOPMD } catch (ClassNotFoundException e) { retVal = System.getProperty("java.class.path") + ":dist/InlineCompiler.jar:target/*.jar"; return retVal;// NOPMD } // returns the ClassLoader object associated with this Class ClassLoader cLoader = cls.getClassLoader(); URL[] paths = ((URLClassLoader) cLoader).getURLs(); OSinfo osinfo = new OSinfo(); EPlatform platform = osinfo.getOSname(); String pathSep; if (platform == EPlatform.Windows_64 || platform == EPlatform.Windows_32) { pathSep = ";"; } else { pathSep = ":"; } retVal = "target" + File.separator + "classes" + pathSep + "target" + System.getProperty("file.separator") + "*.jar" + pathSep + "dist" + System.getProperty("file.separator") + "InlineCompiler.jar"; for (URL path : paths) { // try { if (null == path) throw GlobalUtils.createInternalError("classloader url wrong"); URI fileURI = fixFileURL(path); retVal = retVal + pathSep + Paths.get(fileURI).toString();// NOPMD // } catch (URISyntaxException e) { // throw // GlobalUtils.createInternalError("class path resolving error", e); // }//NOPMD } return retVal; // String classPath = // "target/classes:target/*.jar:/home/peidong/.m2/repository/org/hibernate/hibernate-entitymanager/4.3.6.Final/hibernate-entitymanager-4.3.6.Final.jar:/home/peidong/.m2/repository/org/jboss/logging/jboss-logging/3.1.3.GA/jboss-logging-3.1.3.GA.jar:/home/peidong/.m2/repository/org/jboss/logging/jboss-logging-annotations/1.2.0.Beta1/jboss-logging-annotations-1.2.0.Beta1.jar:/home/peidong/.m2/repository/org/hibernate/hibernate-core/4.3.6.Final/hibernate-core-4.3.6.Final.jar:/home/peidong/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/home/peidong/.m2/repository/org/jboss/jandex/1.1.0.Final/jandex-1.1.0.Final.jar:/home/peidong/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar:/home/peidong/.m2/repository/org/hibernate/common/hibernate-commons-annotations/4.0.5.Final/hibernate-commons-annotations-4.0.5.Final.jar:/home/peidong/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final.jar:/home/peidong/.m2/repository/org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/1.0.0.Final/jboss-transaction-api_1.2_spec-1.0.0.Final.jar:/home/peidong/.m2/repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar:/home/peidong/.m2/repository/org/springframework/spring-orm/4.0.5.RELEASE/spring-orm-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/spring-beans/4.0.5.RELEASE/spring-beans-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/spring-core/4.0.5.RELEASE/spring-core-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/home/peidong/.m2/repository/org/springframework/spring-jdbc/4.0.5.RELEASE/spring-jdbc-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/spring-tx/4.0.5.RELEASE/spring-tx-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/hsqldb/hsqldb/2.3.2/hsqldb-2.3.2.jar:/home/peidong/.m2/repository/org/testng/testng/6.8.8/testng-6.8.8.jar:/home/peidong/.m2/repository/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar:/home/peidong/.m2/repository/com/beust/jcommander/1.27/jcommander-1.27.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-java/2.43.1/selenium-java-2.43.1.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-chrome-driver/2.43.1/selenium-chrome-driver-2.43.1.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-remote-driver/2.43.1/selenium-remote-driver-2.43.1.jar:/home/peidong/.m2/repository/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar:/home/peidong/.m2/repository/org/json/json/20080701/json-20080701.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-api/2.43.1/selenium-api-2.43.1.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-htmlunit-driver/2.43.1/selenium-htmlunit-driver-2.43.1.jar:/home/peidong/.m2/repository/net/sourceforge/htmlunit/htmlunit/2.15/htmlunit-2.15.jar:/home/peidong/.m2/repository/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar:/home/peidong/.m2/repository/org/apache/httpcomponents/httpmime/4.3.3/httpmime-4.3.3.jar:/home/peidong/.m2/repository/net/sourceforge/htmlunit/htmlunit-core-js/2.15/htmlunit-core-js-2.15.jar:/home/peidong/.m2/repository/xerces/xercesImpl/2.11.0/xercesImpl-2.11.0.jar:/home/peidong/.m2/repository/net/sourceforge/nekohtml/nekohtml/1.9.21/nekohtml-1.9.21.jar:/home/peidong/.m2/repository/net/sourceforge/cssparser/cssparser/0.9.14/cssparser-0.9.14.jar:/home/peidong/.m2/repository/org/w3c/css/sac/1.3/sac-1.3.jar:/home/peidong/.m2/repository/org/eclipse/jetty/jetty-websocket/8.1.15.v20140411/jetty-websocket-8.1.15.v20140411.jar:/home/peidong/.m2/repository/org/eclipse/jetty/jetty-util/8.1.15.v20140411/jetty-util-8.1.15.v20140411.jar:/home/peidong/.m2/repository/org/eclipse/jetty/jetty-io/8.1.15.v20140411/jetty-io-8.1.15.v20140411.jar:/home/peidong/.m2/repository/org/eclipse/jetty/jetty-http/8.1.15.v20140411/jetty-http-8.1.15.v20140411.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-firefox-driver/2.43.1/selenium-firefox-driver-2.43.1.jar:/home/peidong/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/home/peidong/.m2/repository/org/apache/commons/commons-exec/1.1/commons-exec-1.1.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-ie-driver/2.43.1/selenium-ie-driver-2.43.1.jar:/home/peidong/.m2/repository/net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar:/home/peidong/.m2/repository/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-safari-driver/2.43.1/selenium-safari-driver-2.43.1.jar:/home/peidong/.m2/repository/org/seleniumhq/selenium/selenium-support/2.43.1/selenium-support-2.43.1.jar:/home/peidong/.m2/repository/org/webbitserver/webbit/0.4.15/webbit-0.4.15.jar:/home/peidong/.m2/repository/io/netty/netty/3.5.5.Final/netty-3.5.5.Final.jar:/home/peidong/.m2/repository/org/springframework/spring-test/4.0.5.RELEASE/spring-test-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/spring-context/4.0.5.RELEASE/spring-context-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/spring-expression/4.0.5.RELEASE/spring-expression-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.7/jcl-over-slf4j-1.7.7.jar:/home/peidong/.m2/repository/org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar:/home/peidong/.m2/repository/ch/qos/logback/logback-classic/1.1.2/logback-classic-1.1.2.jar:/home/peidong/.m2/repository/ch/qos/logback/logback-core/1.1.2/logback-core-1.1.2.jar:/home/peidong/.m2/repository/ch/qos/logback/logback-access/1.1.2/logback-access-1.1.2.jar:/home/peidong/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:/home/peidong/.m2/repository/org/springframework/spring-aop/4.0.5.RELEASE/spring-aop-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/home/peidong/.m2/repository/com/jamonapi/jamon/2.78/jamon-2.78.jar:/home/peidong/.m2/repository/com/hazelcast/hazelcast-all/3.2.3/hazelcast-all-3.2.3.jar:/home/peidong/.m2/repository/net/sourceforge/findbugs/annotations/1.3.2/annotations-1.3.2.jar:/home/peidong/.m2/repository/org/springframework/spring-aspects/4.0.5.RELEASE/spring-aspects-4.0.5.RELEASE.jar:/home/peidong/.m2/repository/cglib/cglib/2.2/cglib-2.2.jar:/home/peidong/.m2/repository/asm/asm/3.1/asm-3.1.jar:/home/peidong/.m2/repository/org/aspectj/aspectjrt/1.7.3/aspectjrt-1.7.3.jar:/home/peidong/.m2/repository/org/aspectj/aspectjweaver/1.7.3/aspectjweaver-1.7.3.jar:/home/peidong/git/problomatic2/problomatic2/problomatic2/target/classes:/home/peidong/Downloads/sts/sts-bundle/sts-3.6.2.RELEASE/plugins/org.junit_4.11.0.v201303080030/junit.jar:/home/peidong/Downloads/sts/sts-bundle/sts-3.6.2.RELEASE/plugins/org.hamcrest.core_1.3.0.v201303031735.jar:/home/peidong/.m2/repository/org/apache/xmlbeans/xmlbeans/2.4.0/xmlbeans-2.4.0.jar:/home/peidong/.m2/repository/stax/stax-api/1.0.1/stax-api-1.0.1.jar:/home/peidong/.m2/repository/xalan/xalan/2.7.1/xalan-2.7.1.jar:/home/peidong/.m2/repository/xalan/serializer/2.7.1/serializer-2.7.1.jar:/home/peidong/.m2/repository/com/sun/mail/smtp/1.4.5/smtp-1.4.5.jar:/home/peidong/.m2/repository/com/sun/mail/pop3/1.4.5/pop3-1.4.5.jar:/home/peidong/.m2/repository/com/sun/mail/mailapi/1.4.5/mailapi-1.4.5.jar:/home/peidong/.m2/repository/javax/xml/jsr173/1.0/jsr173-1.0.jar:/home/peidong/.m2/repository/org/apache/bcel/bcel/5.2/bcel-5.2.jar:/home/peidong/.m2/repository/jakarta-regexp/jakarta-regexp/1.4/jakarta-regexp-1.4.jar:/home/peidong/.m2/repository/javax/activation/activation/1.1.1/activation-1.1.1.jar:/home/peidong/.m2/repository/org/apache/ant/ant/1.8.4/ant-1.8.4.jar:/home/peidong/.m2/repository/org/apache/ant/ant-launcher/1.8.4/ant-launcher-1.8.4.jar:/home/peidong/.m2/repository/junit/junit/4.11/junit-4.11.jar:/home/peidong/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/home/peidong/.m2/repository/org/springframework/plugin/spring-plugin-core/1.1.0.RELEASE/spring-plugin-core-1.1.0.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/plugin/spring-plugin-integration/1.0.0.RELEASE/spring-plugin-integration-1.0.0.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/integration/spring-integration-core/2.1.4.RELEASE/spring-integration-core-2.1.4.RELEASE.jar:/home/peidong/.m2/repository/org/springframework/plugin/spring-plugin-metadata/1.1.0.RELEASE/spring-plugin-metadata-1.1.0.RELEASE.jar:/home/peidong/.m2/repository/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar:/home/peidong/.m2/repository/org/codehaus/janino/janino/2.5.16/janino-2.5.16.jar:/home/peidong/.m2/repository/org/projectlombok/lombok/1.14.8/lombok-1.14.8.jar:/home/peidong/.m2/repository/org/dbunit/dbunit/2.5.0/dbunit-2.5.0.jar:/home/peidong/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/home/peidong/.m2/repository/org/eclipse/jdt/org.eclipse.jdt.annotation/1.1.0/org.eclipse.jdt.annotation-1.1.0.jar:/home/peidong/.m2/repository/com/google/inject/guice/4.0-beta5/guice-4.0-beta5.jar:/home/peidong/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar:/home/peidong/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/home/peidong/.m2/repository/net/jodah/typetools/0.4.0/typetools-0.4.0.jar:/home/peidong/.m2/repository/com/github/javaparser/javaparser-core/2.0.0/javaparser-core-2.0.0.jar:/home/peidong/.m2/repository/org/jodd/jodd/3.3.8/jodd-3.3.8.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-api/1.0.2.v20150114/aether-api-1.0.2.v20150114.jar:/home/peidong/.m2/repository/org/apache/maven/maven-aether-provider/3.2.5/maven-aether-provider-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-model/3.2.5/maven-model-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-model-builder/3.2.5/maven-model-builder-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-repository-metadata/3.2.5/maven-repository-metadata-3.2.5.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-spi/1.0.0.v20140518/aether-spi-1.0.0.v20140518.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-util/1.0.0.v20140518/aether-util-1.0.0.v20140518.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-impl/1.0.0.v20140518/aether-impl-1.0.0.v20140518.jar:/home/peidong/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-connector-basic/1.0.2.v20150114/aether-connector-basic-1.0.2.v20150114.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-transport-http/1.0.2.v20150114/aether-transport-http-1.0.2.v20150114.jar:/home/peidong/.m2/repository/org/eclipse/aether/aether-transport-file/1.0.2.v20150114/aether-transport-file-1.0.2.v20150114.jar:/home/peidong/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.21/plexus-utils-3.0.21.jar:/home/peidong/.m2/repository/org/apache/maven/maven-compat/3.2.5/maven-compat-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-settings/3.2.5/maven-settings-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-artifact/3.2.5/maven-artifact-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-core/3.2.5/maven-core-3.2.5.jar:/home/peidong/.m2/repository/org/apache/maven/maven-settings-builder/3.2.5/maven-settings-builder-3.2.5.jar:/home/peidong/.m2/repository/org/sonatype/sisu/sisu-guice/3.2.3/sisu-guice-3.2.3-no_aop.jar:/home/peidong/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar:/home/peidong/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar:/home/peidong/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar:/home/peidong/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar:/home/peidong/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.0.M1/org.eclipse.sisu.plexus-0.3.0.M1.jar:/home/peidong/.m2/repository/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar:/home/peidong/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar:/home/peidong/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.0.M1/org.eclipse.sisu.inject-0.3.0.M1.jar:/home/peidong/.m2/repository/org/apache/maven/wagon/wagon-provider-api/2.8/wagon-provider-api-2.8.jar:/home/peidong/.m2/repository/org/apache/maven/wagon/wagon-http-lightweight/2.8/wagon-http-lightweight-2.8.jar:/home/peidong/.m2/repository/org/apache/maven/wagon/wagon-http-shared/2.8/wagon-http-shared-2.8.jar:/home/peidong/.m2/repository/org/jsoup/jsoup/1.7.2/jsoup-1.7.2.jar:/home/peidong/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar:/home/peidong/.m2/repository/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jar:/home/peidong/.m2/repository/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jar:/home/peidong/.m2/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/home/peidong/.m2/repository/org/bigtester/org.bigtester.ate.core/0.0.4-SNAPSHOT/org.bigtester.ate.core-0.0.4-SNAPSHOT.jar";//NOPMD // classPath = StringUtils.replace(classPath, "/home/peidong/.m2/", // System.getProperty("user.home")+System.getProperty("file.separator") // +".m2" + System.getProperty("file.separator")); // classPath = StringUtils.replace(classPath, "/", // System.getProperty("file.separator")); // // OSinfo osinfo = new OSinfo(); // EPlatform platform = osinfo.getOSname(); // if (platform == EPlatform.Windows_64 ||platform == // EPlatform.Windows_32) // { // classPath = StringUtils.replace(classPath, ":", ";"); // } // // if (classPath == null) classPath = ""; // return classPath; // File localRepoDir = new File( System.getProperty("user.home") + // System.getProperty("file.separator") + ".m2" + // System.getProperty("file.separator")); // Collection<File> files = FileUtils.listFiles( // localRepoDir, // new RegexFileFilter(".*.(jar)"), // DirectoryFileFilter.DIRECTORY // ); // String retVal = ""; // for (File jar : files) { // retVal = retVal + jar.getCanonicalPath() + ":"; // } // return retVal; } /** * @return the compiler */ public JavaCompiler getCompiler() { final JavaCompiler compiler2 = compiler; if (compiler2 == null) { throw GlobalUtils .createInternalError("JDK tools.jar is not correctly set in test environment."); } else { return compiler2; } } }