From 3dca89f0015613ab3f287945965e9f92a6079cd8 Mon Sep 17 00:00:00 2001 From: Mark Donszelmann Date: Tue, 6 Oct 2009 14:44:29 +0200 Subject: Reformat all source files and add licenses to tests --- .../maven/plugin/nar/NarIntegrationTestMojo.java | 1841 ++++++++++---------- 1 file changed, 924 insertions(+), 917 deletions(-) (limited to 'src/main/java/org/apache/maven/plugin/nar/NarIntegrationTestMojo.java') diff --git a/src/main/java/org/apache/maven/plugin/nar/NarIntegrationTestMojo.java b/src/main/java/org/apache/maven/plugin/nar/NarIntegrationTestMojo.java index f3d1d62..ede37b5 100644 --- a/src/main/java/org/apache/maven/plugin/nar/NarIntegrationTestMojo.java +++ b/src/main/java/org/apache/maven/plugin/nar/NarIntegrationTestMojo.java @@ -59,19 +59,12 @@ import org.apache.maven.surefire.report.XMLReporter; import org.codehaus.plexus.util.StringUtils; /** - * Run integration tests using Surefire. - * - * This goal was copied from Maven's surefire plugin to accomodate a few things - * for the NAR plugin: 1. To test a jar file with its native module we can only - * run after the package phase, so we use the integration-test phase. 2. We need - * to set java.library.path to an AOL (architecture-os-linker) specific value, - * but AOL is only known in the NAR plugin and thus cannot be set from the pom. - * 3. To have the java.library.path definition picked up by java we need the - * "pertest" forkmode. - * - * To use this goal you need to put the test sources in the regular test - * directories but disable the running of the tests by the - * maven-surefire-plugin. + * Run integration tests using Surefire. This goal was copied from Maven's surefire plugin to accomodate a few things + * for the NAR plugin: 1. To test a jar file with its native module we can only run after the package phase, so we use + * the integration-test phase. 2. We need to set java.library.path to an AOL (architecture-os-linker) specific value, + * but AOL is only known in the NAR plugin and thus cannot be set from the pom. 3. To have the java.library.path + * definition picked up by java we need the "pertest" forkmode. To use this goal you need to put the test sources in the + * regular test directories but disable the running of the tests by the maven-surefire-plugin. * * @author Jason van Zyl (modified by Mark Donszelmann, noted by DUNS) * @version 2.3 maven repository maven-surefire-plugin and changes by DUNS @@ -80,908 +73,922 @@ import org.codehaus.plexus.util.StringUtils; * @phase integration-test */ // DUNS, changed class name, inheritence, goal and phase -public class NarIntegrationTestMojo extends AbstractCompileMojo { - // DUNS added test for JNI module - private boolean testJNIModule() { - for (Iterator i = getLibraries().iterator(); i.hasNext();) { - Library lib = (Library) i.next(); - if (lib.getType().equals(Library.JNI)) - return true; - } - return false; - } - - // DUNS added to get names - /** - * @parameter expression="${project}" - * @readonly - * @required - */ - private MavenProject project; - - // DUNS added because of naming conflict - /** - * Skip running of NAR plugins (any) altogether. - * - * @parameter expression="${nar.skip}" default-value="false" - */ - private boolean skipNAR; - - /** - * Set this to 'true' to bypass unit tests entirely. Its use is NOT - * RECOMMENDED, but quite convenient on occasion. - * - * @parameter expression="${maven.test.skip}" - */ - private boolean skip; - - /** - * Set this to 'true' to bypass unit tests execution, but still compile - * them. Its use is NOT RECOMMENDED, but quite convenient on occasion. - * - * @parameter expression="${maven.test.skip.exec}" - */ - private boolean skipExec; - - /** - * Set this to true to ignore a failure during testing. Its use is NOT - * RECOMMENDED, but quite convenient on occasion. - * - * @parameter expression="${maven.test.failure.ignore}" - */ - private boolean testFailureIgnore; - - /** - * The base directory of the project being tested. This can be obtained in - * your unit test by System.getProperty("basedir"). - * - * @parameter expression="${basedir}" - * @required - */ - private File basedir; - - // FIXME this field is not used - /** - * The directory containing generated classes of the project being tested. - * - * @parameter expression="${project.build.outputDirectory}" - * @required - */ - // DUNS - // private File classesDirectory; - /** - * The directory containing generated test classes of the project being - * tested. - * - * @parameter expression="${project.build.testOutputDirectory}" - * @required - */ - private File testClassesDirectory; - - /** - * The classpath elements of the project being tested. - * - * @parameter expression="${project.testClasspathElements}" - * @required - * @readonly - */ - private List classpathElements; - - /** - * Base directory where all reports are written to. - * - * @parameter expression="${project.build.directory}/surefire-reports" - */ - private File reportsDirectory; - - /** - * The test source directory containing test class sources. - * - * @parameter expression="${project.build.testSourceDirectory}" - * @required - */ - private File testSourceDirectory; - - /** - * Specify this parameter(can be a comma separated list) if you want to use - * the test pattern matching notation, Ant pattern matching, to select tests - * to run. The Ant pattern will be used to create an include pattern - * formatted like **/${test}.java When used, the - * includes and excludes patterns parameters - * are ignored. - * - * @parameter expression="${test}" - */ - private String test; - - /** - * List of patterns (separated by commas) used to specify the tests that - * should be included in testing. When not specified and when the - * test parameter is not specified, the default includes will - * be - * **/Test*.java **/*Test.java **/*TestCase.java - * - * @parameter - */ - private List includes; - - /** - * List of patterns (separated by commas) used to specify the tests that - * should be excluded in testing. When not specified and when the - * test parameter is not specified, the default excludes will - * be - * **/Abstract*Test.java **/Abstract*TestCase.java **/*$* - * - * @parameter - */ - private List excludes; - - /** - * ArtifactRepository of the localRepository. To obtain the directory of - * localRepository in unit tests use System.setProperty( "localRepository"). - * - * @parameter expression="${localRepository}" - * @required - * @readonly - */ - // DUNS removed, already in superclass - // private ArtifactRepository localRepository; - /** - * List of System properties to pass to the JUnit tests. - * - * @parameter - */ - private Properties systemProperties; - - /** - * Map of of plugin artifacts. - * - * @parameter expression="${plugin.artifactMap}" - * @required - * @readonly - */ - private Map pluginArtifactMap; - - /** - * Map of of project artifacts. - * - * @parameter expression="${project.artifactMap}" - * @required - * @readonly - */ - private Map projectArtifactMap; - - /** - * Option to print summary of test suites or just print the test cases that - * has errors. - * - * @parameter expression="${surefire.printSummary}" default-value="true" - */ - private boolean printSummary; - - /** - * Selects the formatting for the test report to be generated. Can be set as - * brief or plain. - * - * @parameter expression="${surefire.reportFormat}" default-value="brief" - */ - private String reportFormat; - - /** - * Option to generate a file test report or just output the test report to - * the console. - * - * @parameter expression="${surefire.useFile}" default-value="true" - */ - private boolean useFile; - - /** - * When forking, set this to true to redirect the unit test standard output - * to a file (found in reportsDirectory/testName-output.txt). - * - * @parameter expression="${maven.test.redirectTestOutputToFile}" - * default-value="false" - */ - private boolean redirectTestOutputToFile; - - /** - * Option to specify the forking mode. Can be "never", "once" or "always". - * "none" and "pertest" are also accepted for backwards compatibility. - * - * @parameter expression="${forkMode}" default-value="once" - */ - private String forkMode; - - /** - * Option to specify the jvm (or path to the java executable) to use with - * the forking options. For the default, the jvm will be the same as the one - * used to run Maven. - * - * @parameter expression="${jvm}" - */ - private String jvm; - - /** - * Arbitrary options to set on the command line. - * - * @parameter expression="${argLine}" - */ - private String argLine; - - /** - * Additional environments to set on the command line. - * - * @parameter - */ - private Map environmentVariables = new HashMap(); - - /** - * Command line working directory. - * - * @parameter - */ - private File workingDirectory; - - /** - * When false it makes tests run using the standard classloader delegation - * instead of the default Maven isolated classloader. Only used when forking - * (forkMode is not "none").
Setting it to false helps with some - * problems caused by conflicts between xml parsers in the classpath and the - * Java 5 provider parser. - * - * @parameter expression="${childDelegation}" default-value="false" - */ - private boolean childDelegation; - - /** - * Groups for this test. Only classes/methods/etc decorated with one of the - * groups specified here will be included in test run, if specified. - * - * @parameter expression="${groups}" - */ - private String groups; - - /** - * Excluded groups. Any methods/classes/etc with one of the groups specified - * in this list will specifically not be run. - * - * @parameter expression="${excludedGroups}" - */ - private String excludedGroups; - - /** - * List of TestNG suite xml file locations, seperated by commas. It should - * be noted that if suiteXmlFiles is specified, no other tests will - * be run, ignoring other parameters, like includes and excludes. - * - * @parameter - */ - private File[] suiteXmlFiles; - - /** - * The attribute thread-count allows you to specify how many threads should - * be allocated for this execution. Only makes sense to use in conjunction - * with parallel. - * - * @parameter expression="${threadCount}" default-value="5" - */ - private int threadCount; - - /** - * When you use the parallel attribute, TestNG will try to run all your test - * methods in separate threads, except for methods that depend on each - * other, which will be run in the same thread in order to respect their - * order of execution. - * - * @parameter expression="${parallel}" default-value="false" - * @todo test how this works with forking, and console/file output - * parallelism - */ - private boolean parallel; - - /** - * Whether to trim the stack trace in the reports to just the lines within - * the test, or show the full trace. - * - * @parameter expression="${trimStackTrace}" default-value="true" - */ - private boolean trimStackTrace; - - /** - * Resolves the artifacts needed. - * - * @component - */ - private ArtifactResolver artifactResolver; - - /** - * Creates the artifact - * - * @component - */ - private ArtifactFactory artifactFactory; - - /** - * The plugin remote repositories declared in the pom. - * - * @parameter expression="${project.pluginArtifactRepositories}" - */ - private List remoteRepositories; - - /** - * For retrieval of artifact's metadata. - * - * @component - */ - private ArtifactMetadataSource metadataSource; - - private static final String BRIEF_REPORT_FORMAT = "brief"; - - private static final String PLAIN_REPORT_FORMAT = "plain"; - - private Properties originalSystemProperties; - - /** - * Flag to disable the generation of report files in xml format. - * - * @parameter expression="${disableXmlReport}" default-value="false" - */ - private boolean disableXmlReport; - - /** - * Option to pass dependencies to the system's classloader instead of using - * an isolated class loader when forking. Prevents problems with JDKs which - * implement the service provider lookup mechanism by using the system's - * classloader. - * - * @parameter expression="${surefire.useSystemClassLoader}" - * default-value="false" - */ - private boolean useSystemClassLoader; - - public void execute() throws MojoExecutionException, MojoFailureException { - if (verifyParameters()) { - SurefireBooter surefireBooter = constructSurefireBooter(); - - getLog().info("Surefire report directory: " + reportsDirectory); - - boolean success; - try { - success = surefireBooter.run(); - } catch (SurefireBooterForkException e) { - throw new MojoExecutionException(e.getMessage(), e); - } catch (SurefireExecutionException e) { - throw new MojoExecutionException(e.getMessage(), e); - } - - if (originalSystemProperties != null) { - // restore system properties - System.setProperties(originalSystemProperties); - } - - if (!success) { - String msg = "There are test failures."; - - if (testFailureIgnore) { - getLog().error(msg); - } else { - throw new MojoFailureException(msg); - } - } - } - } - - private boolean verifyParameters() throws MojoFailureException { - // DUNS, shouldSkip() does not work... - if (skipNAR) { - getLog() - .info( - "***********************************************************************"); - getLog() - .info( - "NAR Integration Tests are SKIPPED since no NAR libraries were built."); - getLog() - .info( - "***********************************************************************"); - return false; - } - - if (skip || skipExec) { - getLog().info("Tests are skipped."); - return false; - } else if (!testClassesDirectory.exists()) { - getLog().info("No tests to run."); - return false; - } - - if (parallel) { - if (threadCount < 1) { - throw new MojoFailureException( - "Must have at least one thread in parallel mode"); - } - } - - if (useSystemClassLoader - && ForkConfiguration.FORK_NEVER.equals(forkMode)) { - getLog() - .warn( - "useSystemClassloader=true setting has no effect when not forking"); - } - - return true; - } - - private SurefireBooter constructSurefireBooter() - throws MojoExecutionException, MojoFailureException { - SurefireBooter surefireBooter = new SurefireBooter(); - - Artifact surefireArtifact = (Artifact) pluginArtifactMap - .get("org.apache.maven.surefire:surefire-booter"); - if (surefireArtifact == null) { - throw new MojoExecutionException( - "Unable to locate surefire-booter in the list of plugin artifacts"); - } - - surefireArtifact.isSnapshot(); // TODO: this is ridiculous, but it - // fixes getBaseVersion to be -SNAPSHOT - // if needed - - Artifact junitArtifact; - Artifact testNgArtifact; - try { - addArtifact(surefireBooter, surefireArtifact); - - junitArtifact = (Artifact) projectArtifactMap.get("junit:junit"); - - // TODO: this is pretty manual, but I'd rather not require the - // plugin > dependencies section right now - testNgArtifact = (Artifact) projectArtifactMap - .get("org.testng:testng"); - - if (testNgArtifact != null) { - addArtifact(surefireBooter, testNgArtifact); - - VersionRange range = VersionRange - .createFromVersionSpec("[4.7,)"); - if (!range.containsVersion(testNgArtifact.getSelectedVersion())) { - throw new MojoFailureException( - "TestNG support requires version 4.7 or above. You have declared version " - + testNgArtifact.getVersion()); - } - - // The plugin uses a JDK based profile to select the right - // testng. We might be explicity using a - // different one since its based on the source level, not the - // JVM. Prune using the filter. - addProvider(surefireBooter, "surefire-testng", surefireArtifact - .getBaseVersion(), testNgArtifact); - } else if (junitArtifact != null - && junitArtifact.getBaseVersion().startsWith("4")) { - addProvider(surefireBooter, "surefire-junit4", surefireArtifact - .getBaseVersion(), null); - } else { - // add the JUnit provider as default - it doesn't require JUnit - // to be present, - // since it supports POJO tests. - addProvider(surefireBooter, "surefire-junit", surefireArtifact - .getBaseVersion(), null); - } - } catch (ArtifactNotFoundException e) { - throw new MojoExecutionException( - "Unable to locate required surefire provider dependency: " - + e.getMessage(), e); - } catch (InvalidVersionSpecificationException e) { - throw new MojoExecutionException( - "Error determining the TestNG version requested: " - + e.getMessage(), e); - } catch (ArtifactResolutionException e) { - throw new MojoExecutionException( - "Error to resolving surefire provider dependency: " - + e.getMessage(), e); - } - - if (suiteXmlFiles != null && suiteXmlFiles.length > 0) { - if (testNgArtifact == null) { - throw new MojoExecutionException( - "suiteXmlFiles is configured, but there is no TestNG dependency"); - } - for (int i = 0; i < suiteXmlFiles.length; i++) { - File file = suiteXmlFiles[i]; - if (file.exists()) { - surefireBooter - .addTestSuite( - "org.apache.maven.surefire.testng.TestNGXmlTestSuite", - new Object[] { - file, - testSourceDirectory - .getAbsolutePath() }); - } - } - } else { - List includes; - List excludes; - - if (test != null) { - // Check to see if we are running a single test. The raw - // parameter will - // come through if it has not been set. - - // FooTest -> **/FooTest.java - - includes = new ArrayList(); - - excludes = new ArrayList(); - - String[] testRegexes = StringUtils.split(test, ","); - - for (int i = 0; i < testRegexes.length; i++) { - includes.add("**/" + testRegexes[i] + ".java"); - } - } else { - includes = this.includes; - - excludes = this.excludes; - - // defaults here, qdox doesn't like the end javadoc value - // Have to wrap in an ArrayList as surefire expects an ArrayList - // instead of a List for some reason - if (includes == null || includes.size() == 0) { - includes = new ArrayList(Arrays.asList(new String[] { - "**/Test*.java", "**/*Test.java", - "**/*TestCase.java" })); - } - if (excludes == null || excludes.size() == 0) { - excludes = new ArrayList(Arrays.asList(new String[] { - "**/Abstract*Test.java", - "**/Abstract*TestCase.java", "**/*$*" })); - } - } - - if (testNgArtifact != null) { - surefireBooter - .addTestSuite( - "org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", - new Object[] { testClassesDirectory, includes, - excludes, groups, excludedGroups, - Boolean.valueOf(parallel), - new Integer(threadCount), - testSourceDirectory.getAbsolutePath() }); - } else { - String junitDirectoryTestSuite; - // DUNS NP check - if (junitArtifact != null - && junitArtifact.getBaseVersion().startsWith("4")) { - junitDirectoryTestSuite = "org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite"; - } else { - junitDirectoryTestSuite = "org.apache.maven.surefire.junit.JUnitDirectoryTestSuite"; - } - - // fall back to JUnit, which also contains POJO support. Also it - // can run - // classes compiled against JUnit since it has a dependency on - // JUnit itself. - surefireBooter - .addTestSuite(junitDirectoryTestSuite, new Object[] { - testClassesDirectory, includes, excludes }); - } - } - - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- - - getLog().debug("Test Classpath :"); - - // no need to add classes/test classes directory here - they are in the - // classpath elements already - - for (Iterator i = classpathElements.iterator(); i.hasNext();) { - String classpathElement = (String) i.next(); - - getLog().debug(" " + classpathElement); - - surefireBooter.addClassPathUrl(classpathElement); - } - - // ---------------------------------------------------------------------- - // Forking - // ---------------------------------------------------------------------- - - ForkConfiguration fork = new ForkConfiguration(); - - // DUNS - if (project.getPackaging().equals("nar") - || (getNarManager().getNarDependencies("test").size() > 0)) - forkMode = "pertest"; - - fork.setForkMode(forkMode); - - processSystemProperties(!fork.isForking()); - - if (getLog().isDebugEnabled()) { - showMap(systemProperties, "system property"); - } - - if (fork.isForking()) { - fork.setSystemProperties(systemProperties); - - if (jvm == null || "".equals(jvm)) { - // use the same JVM as the one used to run Maven (the - // "java.home" one) - jvm = System.getProperty("java.home") + File.separator + "bin" - + File.separator + "java"; - getLog().debug("Using JVM: " + jvm); - } - - fork.setJvmExecutable(jvm); - - if (workingDirectory != null) { - fork.setWorkingDirectory(workingDirectory); - } else { - fork.setWorkingDirectory(basedir); - } - - // BEGINDUNS - if (argLine == null) - argLine = ""; - - StringBuffer javaLibraryPath = new StringBuffer(); - if (testJNIModule()) { - // Add libraries to java.library.path for testing - File jniLibraryPathEntry = new File(project.getBasedir(), - "target/nar/lib/" + getAOL() + "/jni"); - if (jniLibraryPathEntry.exists()) { - getLog().debug( - "Adding library directory to java.library.path: " - + jniLibraryPathEntry); - if (javaLibraryPath.length() > 0) - javaLibraryPath.append(File.pathSeparator); - javaLibraryPath.append(jniLibraryPathEntry); - } - - File sharedLibraryPathEntry = new File(project.getBasedir(), - "target/nar/lib/" + getAOL() + "/shared"); - if (sharedLibraryPathEntry.exists()) { - getLog().debug( - "Adding library directory to java.library.path: " - + sharedLibraryPathEntry); - if (javaLibraryPath.length() > 0) - javaLibraryPath.append(File.pathSeparator); - javaLibraryPath.append(sharedLibraryPathEntry); - } - - // add jar file to classpath, as one may want to read a - // properties file for artifactId and version - String jarFile = "target/" + project.getArtifactId() + "-" - + project.getVersion() + ".jar"; - getLog().debug("Adding to surefire test classpath: " + jarFile); - surefireBooter.addClassPathUrl(jarFile); - } - - List dependencies = getNarManager().getNarDependencies("test"); - for (Iterator i = dependencies.iterator(); i.hasNext();) { - NarArtifact dependency = (NarArtifact) i.next(); - // FIXME this should be overridable - // NarInfo info = dependency.getNarInfo(); - // String binding = info.getBinding(getAOL(), Library.STATIC); - // NOTE: fixed to shared, jni - String[] bindings = { Library.SHARED, Library.JNI }; - for (int j = 0; j < bindings.length; j++) { - String binding = bindings[j]; - if (!binding.equals(Library.STATIC)) { - File depLibPathEntry = new File(getNarManager() - .getNarFile(dependency).getParent(), "nar/lib/" - + getAOL() + "/" + binding); - if (depLibPathEntry.exists()) { - getLog().debug( - "Adding dependency directory to java.library.path: " - + depLibPathEntry); - if (javaLibraryPath.length() > 0) - javaLibraryPath.append(File.pathSeparator); - javaLibraryPath.append(depLibPathEntry); - } - } - } - } - - // add final javalibrary path - if (javaLibraryPath.length() > 0) { - // NOTE java.library.path only works for the jni lib itself, and - // not for its dependent shareables. - // NOTE: java.library.path does not work with arguments with - // spaces as - // SureFireBooter splits the line in parts and then quotes - // it wrongly - NarUtil.addLibraryPathToEnv(javaLibraryPath.toString(), environmentVariables, getOS()); - } - - // necessary to find WinSxS - if (getOS().equals(OS.WINDOWS)) { - environmentVariables.put("SystemRoot", NarUtil.getEnv("SystemRoot", "SystemRoot", "C:\\Windows")); - } - // ENDDUNS - - fork.setArgLine(argLine); - - fork.setEnvironmentVariables(environmentVariables); - - if (getLog().isDebugEnabled()) { - showMap(environmentVariables, "environment variable"); - - fork.setDebug(true); - } - } - - surefireBooter.setRedirectTestOutputToFile(redirectTestOutputToFile); - - surefireBooter.setForkConfiguration(fork); - - surefireBooter.setChildDelegation(childDelegation); - - surefireBooter.setReportsDirectory(reportsDirectory); - - surefireBooter.setUseSystemClassLoader(useSystemClassLoader); - - addReporters(surefireBooter, fork.isForking()); - - return surefireBooter; - } - - private void showMap(Map map, String setting) { - for (Iterator i = map.keySet().iterator(); i.hasNext();) { - String key = (String) i.next(); - String value = (String) map.get(key); - getLog().debug( - "Setting " + setting + " [" + key + "]=[" + value + "]"); - } - } - - private void addProvider(SurefireBooter surefireBooter, String provider, - String version, Artifact filteredArtifact) - throws ArtifactNotFoundException, ArtifactResolutionException { - Artifact providerArtifact = artifactFactory.createDependencyArtifact( - "org.apache.maven.surefire", provider, VersionRange - .createFromVersion(version), "jar", null, - Artifact.SCOPE_TEST); - ArtifactResolutionResult result = resolveArtifact(filteredArtifact, - providerArtifact); - - for (Iterator i = result.getArtifacts().iterator(); i.hasNext();) { - Artifact artifact = (Artifact) i.next(); - - getLog().debug( - "Adding to surefire test classpath: " - + artifact.getFile().getAbsolutePath()); - - surefireBooter.addSurefireClassPathUrl(artifact.getFile() - .getAbsolutePath()); - } - } - - private ArtifactResolutionResult resolveArtifact(Artifact filteredArtifact, - Artifact providerArtifact) throws ArtifactResolutionException, - ArtifactNotFoundException { - ArtifactFilter filter = null; - if (filteredArtifact != null) { - filter = new ExcludesArtifactFilter(Collections - .singletonList(filteredArtifact.getGroupId() + ":" - + filteredArtifact.getArtifactId())); - } - - Artifact originatingArtifact = artifactFactory.createBuildArtifact( - "dummy", "dummy", "1.0", "jar"); - - // DUNS, use access method rather than "localRepository" field. - return artifactResolver.resolveTransitively(Collections - .singleton(providerArtifact), originatingArtifact, - getLocalRepository(), remoteRepositories, metadataSource, - filter); - } - - private void addArtifact(SurefireBooter surefireBooter, - Artifact surefireArtifact) throws ArtifactNotFoundException, - ArtifactResolutionException { - ArtifactResolutionResult result = resolveArtifact(null, - surefireArtifact); - - for (Iterator i = result.getArtifacts().iterator(); i.hasNext();) { - Artifact artifact = (Artifact) i.next(); - - getLog().debug( - "Adding to surefire booter test classpath: " - + artifact.getFile().getAbsolutePath()); - - surefireBooter.addSurefireBootClassPathUrl(artifact.getFile() - .getAbsolutePath()); - } - } - - protected void processSystemProperties(boolean setInSystem) { - if (systemProperties == null) { - systemProperties = new Properties(); - } - - originalSystemProperties = (Properties) System.getProperties().clone(); - - systemProperties.setProperty("basedir", basedir.getAbsolutePath()); - - // DUNS, use access method rather than "localRepository" field. - systemProperties.setProperty("localRepository", getLocalRepository() - .getBasedir()); - - if (setInSystem) { - // Add all system properties configured by the user - Iterator iter = systemProperties.keySet().iterator(); - - while (iter.hasNext()) { - String key = (String) iter.next(); - - String value = systemProperties.getProperty(key); - - System.setProperty(key, value); - } - } - } - - /** - *

- * Adds Reporters that will generate reports with different formatting. - *

- * The Reporter that will be added will be based on the value of the - * parameter useFile, reportFormat, and printSummary. - * - * @param surefireBooter - * The surefire booter that will run tests. - * @param forking - */ - private void addReporters(SurefireBooter surefireBooter, boolean forking) { - Boolean trimStackTrace = Boolean.valueOf(this.trimStackTrace); - if (useFile) { - if (printSummary) { - if (forking) { - surefireBooter.addReport(ForkingConsoleReporter.class - .getName(), new Object[] { trimStackTrace }); - } else { - surefireBooter.addReport(ConsoleReporter.class.getName(), - new Object[] { trimStackTrace }); - } - } - - if (BRIEF_REPORT_FORMAT.equals(reportFormat)) { - surefireBooter.addReport(BriefFileReporter.class.getName(), - new Object[] { reportsDirectory, trimStackTrace }); - } else if (PLAIN_REPORT_FORMAT.equals(reportFormat)) { - surefireBooter.addReport(FileReporter.class.getName(), - new Object[] { reportsDirectory, trimStackTrace }); - } - } else { - if (BRIEF_REPORT_FORMAT.equals(reportFormat)) { - surefireBooter.addReport(BriefConsoleReporter.class.getName(), - new Object[] { trimStackTrace }); - } else if (PLAIN_REPORT_FORMAT.equals(reportFormat)) { - surefireBooter.addReport(DetailedConsoleReporter.class - .getName(), new Object[] { trimStackTrace }); - } - } - - if (!disableXmlReport) { - surefireBooter.addReport(XMLReporter.class.getName(), new Object[] { - reportsDirectory, trimStackTrace }); - } - } - - /** - * @return SurefirePlugin Returns the skipExec. - */ - public boolean isSkipExec() { - return this.skipExec; - } - - /** - * @param skipExec - * the skipExec to set - */ - public void setSkipExec(boolean skipExec) { - this.skipExec = skipExec; - } +public class NarIntegrationTestMojo + extends AbstractCompileMojo +{ + // DUNS added test for JNI module + private boolean testJNIModule() + { + for ( Iterator i = getLibraries().iterator(); i.hasNext(); ) + { + Library lib = (Library) i.next(); + if ( lib.getType().equals( Library.JNI ) ) + return true; + } + return false; + } + + // DUNS added to get names + /** + * @parameter expression="${project}" + * @readonly + * @required + */ + private MavenProject project; + + // DUNS added because of naming conflict + /** + * Skip running of NAR plugins (any) altogether. + * + * @parameter expression="${nar.skip}" default-value="false" + */ + private boolean skipNAR; + + /** + * Set this to 'true' to bypass unit tests entirely. Its use is NOT RECOMMENDED, but quite convenient on occasion. + * + * @parameter expression="${maven.test.skip}" + */ + private boolean skip; + + /** + * Set this to 'true' to bypass unit tests execution, but still compile them. Its use is NOT RECOMMENDED, but quite + * convenient on occasion. + * + * @parameter expression="${maven.test.skip.exec}" + */ + private boolean skipExec; + + /** + * Set this to true to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on + * occasion. + * + * @parameter expression="${maven.test.failure.ignore}" + */ + private boolean testFailureIgnore; + + /** + * The base directory of the project being tested. This can be obtained in your unit test by + * System.getProperty("basedir"). + * + * @parameter expression="${basedir}" + * @required + */ + private File basedir; + + // FIXME this field is not used + /** + * The directory containing generated classes of the project being tested. + * + * @parameter expression="${project.build.outputDirectory}" + * @required + */ + // DUNS + // private File classesDirectory; + /** + * The directory containing generated test classes of the project being tested. + * + * @parameter expression="${project.build.testOutputDirectory}" + * @required + */ + private File testClassesDirectory; + + /** + * The classpath elements of the project being tested. + * + * @parameter expression="${project.testClasspathElements}" + * @required + * @readonly + */ + private List classpathElements; + + /** + * Base directory where all reports are written to. + * + * @parameter expression="${project.build.directory}/surefire-reports" + */ + private File reportsDirectory; + + /** + * The test source directory containing test class sources. + * + * @parameter expression="${project.build.testSourceDirectory}" + * @required + */ + private File testSourceDirectory; + + /** + * Specify this parameter(can be a comma separated list) if you want to use the test pattern matching notation, Ant + * pattern matching, to select tests to run. The Ant pattern will be used to create an include pattern formatted + * like **/${test}.java When used, the includes and excludes patterns + * parameters are ignored. + * + * @parameter expression="${test}" + */ + private String test; + + /** + * List of patterns (separated by commas) used to specify the tests that should be included in testing. When not + * specified and when the test parameter is not specified, the default includes will be + * **/Test*.java **/*Test.java **/*TestCase.java + * + * @parameter + */ + private List includes; + + /** + * List of patterns (separated by commas) used to specify the tests that should be excluded in testing. When not + * specified and when the test parameter is not specified, the default excludes will be + * **/Abstract*Test.java **/Abstract*TestCase.java **/*$* + * + * @parameter + */ + private List excludes; + + /** + * ArtifactRepository of the localRepository. To obtain the directory of localRepository in unit tests use + * System.setProperty( "localRepository"). + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + // DUNS removed, already in superclass + // private ArtifactRepository localRepository; + /** + * List of System properties to pass to the JUnit tests. + * + * @parameter + */ + private Properties systemProperties; + + /** + * Map of of plugin artifacts. + * + * @parameter expression="${plugin.artifactMap}" + * @required + * @readonly + */ + private Map pluginArtifactMap; + + /** + * Map of of project artifacts. + * + * @parameter expression="${project.artifactMap}" + * @required + * @readonly + */ + private Map projectArtifactMap; + + /** + * Option to print summary of test suites or just print the test cases that has errors. + * + * @parameter expression="${surefire.printSummary}" default-value="true" + */ + private boolean printSummary; + + /** + * Selects the formatting for the test report to be generated. Can be set as brief or plain. + * + * @parameter expression="${surefire.reportFormat}" default-value="brief" + */ + private String reportFormat; + + /** + * Option to generate a file test report or just output the test report to the console. + * + * @parameter expression="${surefire.useFile}" default-value="true" + */ + private boolean useFile; + + /** + * When forking, set this to true to redirect the unit test standard output to a file (found in + * reportsDirectory/testName-output.txt). + * + * @parameter expression="${maven.test.redirectTestOutputToFile}" default-value="false" + */ + private boolean redirectTestOutputToFile; + + /** + * Option to specify the forking mode. Can be "never", "once" or "always". "none" and "pertest" are also accepted + * for backwards compatibility. + * + * @parameter expression="${forkMode}" default-value="once" + */ + private String forkMode; + + /** + * Option to specify the jvm (or path to the java executable) to use with the forking options. For the default, the + * jvm will be the same as the one used to run Maven. + * + * @parameter expression="${jvm}" + */ + private String jvm; + + /** + * Arbitrary options to set on the command line. + * + * @parameter expression="${argLine}" + */ + private String argLine; + + /** + * Additional environments to set on the command line. + * + * @parameter + */ + private Map environmentVariables = new HashMap(); + + /** + * Command line working directory. + * + * @parameter + */ + private File workingDirectory; + + /** + * When false it makes tests run using the standard classloader delegation instead of the default Maven isolated + * classloader. Only used when forking (forkMode is not "none").
+ * Setting it to false helps with some problems caused by conflicts between xml parsers in the classpath and the + * Java 5 provider parser. + * + * @parameter expression="${childDelegation}" default-value="false" + */ + private boolean childDelegation; + + /** + * Groups for this test. Only classes/methods/etc decorated with one of the groups specified here will be included + * in test run, if specified. + * + * @parameter expression="${groups}" + */ + private String groups; + + /** + * Excluded groups. Any methods/classes/etc with one of the groups specified in this list will specifically not be + * run. + * + * @parameter expression="${excludedGroups}" + */ + private String excludedGroups; + + /** + * List of TestNG suite xml file locations, seperated by commas. It should be noted that if suiteXmlFiles is + * specified, no other tests will be run, ignoring other parameters, like includes and excludes. + * + * @parameter + */ + private File[] suiteXmlFiles; + + /** + * The attribute thread-count allows you to specify how many threads should be allocated for this execution. Only + * makes sense to use in conjunction with parallel. + * + * @parameter expression="${threadCount}" default-value="5" + */ + private int threadCount; + + /** + * When you use the parallel attribute, TestNG will try to run all your test methods in separate threads, except for + * methods that depend on each other, which will be run in the same thread in order to respect their order of + * execution. + * + * @parameter expression="${parallel}" default-value="false" + * @todo test how this works with forking, and console/file output parallelism + */ + private boolean parallel; + + /** + * Whether to trim the stack trace in the reports to just the lines within the test, or show the full trace. + * + * @parameter expression="${trimStackTrace}" default-value="true" + */ + private boolean trimStackTrace; + + /** + * Resolves the artifacts needed. + * + * @component + */ + private ArtifactResolver artifactResolver; + + /** + * Creates the artifact + * + * @component + */ + private ArtifactFactory artifactFactory; + + /** + * The plugin remote repositories declared in the pom. + * + * @parameter expression="${project.pluginArtifactRepositories}" + */ + private List remoteRepositories; + + /** + * For retrieval of artifact's metadata. + * + * @component + */ + private ArtifactMetadataSource metadataSource; + + private static final String BRIEF_REPORT_FORMAT = "brief"; + + private static final String PLAIN_REPORT_FORMAT = "plain"; + + private Properties originalSystemProperties; + + /** + * Flag to disable the generation of report files in xml format. + * + * @parameter expression="${disableXmlReport}" default-value="false" + */ + private boolean disableXmlReport; + + /** + * Option to pass dependencies to the system's classloader instead of using an isolated class loader when forking. + * Prevents problems with JDKs which implement the service provider lookup mechanism by using the system's + * classloader. + * + * @parameter expression="${surefire.useSystemClassLoader}" default-value="false" + */ + private boolean useSystemClassLoader; + + public void execute() + throws MojoExecutionException, MojoFailureException + { + if ( verifyParameters() ) + { + SurefireBooter surefireBooter = constructSurefireBooter(); + + getLog().info( "Surefire report directory: " + reportsDirectory ); + + boolean success; + try + { + success = surefireBooter.run(); + } + catch ( SurefireBooterForkException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + catch ( SurefireExecutionException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + + if ( originalSystemProperties != null ) + { + // restore system properties + System.setProperties( originalSystemProperties ); + } + + if ( !success ) + { + String msg = "There are test failures."; + + if ( testFailureIgnore ) + { + getLog().error( msg ); + } + else + { + throw new MojoFailureException( msg ); + } + } + } + } + + private boolean verifyParameters() + throws MojoFailureException + { + // DUNS, shouldSkip() does not work... + if ( skipNAR ) + { + getLog().info( "***********************************************************************" ); + getLog().info( "NAR Integration Tests are SKIPPED since no NAR libraries were built." ); + getLog().info( "***********************************************************************" ); + return false; + } + + if ( skip || skipExec ) + { + getLog().info( "Tests are skipped." ); + return false; + } + else if ( !testClassesDirectory.exists() ) + { + getLog().info( "No tests to run." ); + return false; + } + + if ( parallel ) + { + if ( threadCount < 1 ) + { + throw new MojoFailureException( "Must have at least one thread in parallel mode" ); + } + } + + if ( useSystemClassLoader && ForkConfiguration.FORK_NEVER.equals( forkMode ) ) + { + getLog().warn( "useSystemClassloader=true setting has no effect when not forking" ); + } + + return true; + } + + private SurefireBooter constructSurefireBooter() + throws MojoExecutionException, MojoFailureException + { + SurefireBooter surefireBooter = new SurefireBooter(); + + Artifact surefireArtifact = (Artifact) pluginArtifactMap.get( "org.apache.maven.surefire:surefire-booter" ); + if ( surefireArtifact == null ) + { + throw new MojoExecutionException( "Unable to locate surefire-booter in the list of plugin artifacts" ); + } + + surefireArtifact.isSnapshot(); // TODO: this is ridiculous, but it + // fixes getBaseVersion to be -SNAPSHOT + // if needed + + Artifact junitArtifact; + Artifact testNgArtifact; + try + { + addArtifact( surefireBooter, surefireArtifact ); + + junitArtifact = (Artifact) projectArtifactMap.get( "junit:junit" ); + + // TODO: this is pretty manual, but I'd rather not require the + // plugin > dependencies section right now + testNgArtifact = (Artifact) projectArtifactMap.get( "org.testng:testng" ); + + if ( testNgArtifact != null ) + { + addArtifact( surefireBooter, testNgArtifact ); + + VersionRange range = VersionRange.createFromVersionSpec( "[4.7,)" ); + if ( !range.containsVersion( testNgArtifact.getSelectedVersion() ) ) + { + throw new MojoFailureException( + "TestNG support requires version 4.7 or above. You have declared version " + + testNgArtifact.getVersion() ); + } + + // The plugin uses a JDK based profile to select the right + // testng. We might be explicity using a + // different one since its based on the source level, not the + // JVM. Prune using the filter. + addProvider( surefireBooter, "surefire-testng", surefireArtifact.getBaseVersion(), testNgArtifact ); + } + else if ( junitArtifact != null && junitArtifact.getBaseVersion().startsWith( "4" ) ) + { + addProvider( surefireBooter, "surefire-junit4", surefireArtifact.getBaseVersion(), null ); + } + else + { + // add the JUnit provider as default - it doesn't require JUnit + // to be present, + // since it supports POJO tests. + addProvider( surefireBooter, "surefire-junit", surefireArtifact.getBaseVersion(), null ); + } + } + catch ( ArtifactNotFoundException e ) + { + throw new MojoExecutionException( "Unable to locate required surefire provider dependency: " + + e.getMessage(), e ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new MojoExecutionException( "Error determining the TestNG version requested: " + e.getMessage(), e ); + } + catch ( ArtifactResolutionException e ) + { + throw new MojoExecutionException( "Error to resolving surefire provider dependency: " + e.getMessage(), e ); + } + + if ( suiteXmlFiles != null && suiteXmlFiles.length > 0 ) + { + if ( testNgArtifact == null ) + { + throw new MojoExecutionException( "suiteXmlFiles is configured, but there is no TestNG dependency" ); + } + for ( int i = 0; i < suiteXmlFiles.length; i++ ) + { + File file = suiteXmlFiles[i]; + if ( file.exists() ) + { + surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGXmlTestSuite", new Object[] { + file, testSourceDirectory.getAbsolutePath() } ); + } + } + } + else + { + List includes; + List excludes; + + if ( test != null ) + { + // Check to see if we are running a single test. The raw + // parameter will + // come through if it has not been set. + + // FooTest -> **/FooTest.java + + includes = new ArrayList(); + + excludes = new ArrayList(); + + String[] testRegexes = StringUtils.split( test, "," ); + + for ( int i = 0; i < testRegexes.length; i++ ) + { + includes.add( "**/" + testRegexes[i] + ".java" ); + } + } + else + { + includes = this.includes; + + excludes = this.excludes; + + // defaults here, qdox doesn't like the end javadoc value + // Have to wrap in an ArrayList as surefire expects an ArrayList + // instead of a List for some reason + if ( includes == null || includes.size() == 0 ) + { + includes = + new ArrayList( Arrays.asList( new String[] { "**/Test*.java", "**/*Test.java", + "**/*TestCase.java" } ) ); + } + if ( excludes == null || excludes.size() == 0 ) + { + excludes = + new ArrayList( Arrays.asList( new String[] { "**/Abstract*Test.java", + "**/Abstract*TestCase.java", "**/*$*" } ) ); + } + } + + if ( testNgArtifact != null ) + { + surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", new Object[] { + testClassesDirectory, includes, excludes, groups, excludedGroups, Boolean.valueOf( parallel ), + new Integer( threadCount ), testSourceDirectory.getAbsolutePath() } ); + } + else + { + String junitDirectoryTestSuite; + // DUNS NP check + if ( junitArtifact != null && junitArtifact.getBaseVersion().startsWith( "4" ) ) + { + junitDirectoryTestSuite = "org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite"; + } + else + { + junitDirectoryTestSuite = "org.apache.maven.surefire.junit.JUnitDirectoryTestSuite"; + } + + // fall back to JUnit, which also contains POJO support. Also it + // can run + // classes compiled against JUnit since it has a dependency on + // JUnit itself. + surefireBooter.addTestSuite( junitDirectoryTestSuite, new Object[] { testClassesDirectory, includes, + excludes } ); + } + } + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + + getLog().debug( "Test Classpath :" ); + + // no need to add classes/test classes directory here - they are in the + // classpath elements already + + for ( Iterator i = classpathElements.iterator(); i.hasNext(); ) + { + String classpathElement = (String) i.next(); + + getLog().debug( " " + classpathElement ); + + surefireBooter.addClassPathUrl( classpathElement ); + } + + // ---------------------------------------------------------------------- + // Forking + // ---------------------------------------------------------------------- + + ForkConfiguration fork = new ForkConfiguration(); + + // DUNS + if ( project.getPackaging().equals( "nar" ) || ( getNarManager().getNarDependencies( "test" ).size() > 0 ) ) + forkMode = "pertest"; + + fork.setForkMode( forkMode ); + + processSystemProperties( !fork.isForking() ); + + if ( getLog().isDebugEnabled() ) + { + showMap( systemProperties, "system property" ); + } + + if ( fork.isForking() ) + { + fork.setSystemProperties( systemProperties ); + + if ( jvm == null || "".equals( jvm ) ) + { + // use the same JVM as the one used to run Maven (the + // "java.home" one) + jvm = System.getProperty( "java.home" ) + File.separator + "bin" + File.separator + "java"; + getLog().debug( "Using JVM: " + jvm ); + } + + fork.setJvmExecutable( jvm ); + + if ( workingDirectory != null ) + { + fork.setWorkingDirectory( workingDirectory ); + } + else + { + fork.setWorkingDirectory( basedir ); + } + + // BEGINDUNS + if ( argLine == null ) + argLine = ""; + + StringBuffer javaLibraryPath = new StringBuffer(); + if ( testJNIModule() ) + { + // Add libraries to java.library.path for testing + File jniLibraryPathEntry = new File( project.getBasedir(), "target/nar/lib/" + getAOL() + "/jni" ); + if ( jniLibraryPathEntry.exists() ) + { + getLog().debug( "Adding library directory to java.library.path: " + jniLibraryPathEntry ); + if ( javaLibraryPath.length() > 0 ) + javaLibraryPath.append( File.pathSeparator ); + javaLibraryPath.append( jniLibraryPathEntry ); + } + + File sharedLibraryPathEntry = new File( project.getBasedir(), "target/nar/lib/" + getAOL() + "/shared" ); + if ( sharedLibraryPathEntry.exists() ) + { + getLog().debug( "Adding library directory to java.library.path: " + sharedLibraryPathEntry ); + if ( javaLibraryPath.length() > 0 ) + javaLibraryPath.append( File.pathSeparator ); + javaLibraryPath.append( sharedLibraryPathEntry ); + } + + // add jar file to classpath, as one may want to read a + // properties file for artifactId and version + String jarFile = "target/" + project.getArtifactId() + "-" + project.getVersion() + ".jar"; + getLog().debug( "Adding to surefire test classpath: " + jarFile ); + surefireBooter.addClassPathUrl( jarFile ); + } + + List dependencies = getNarManager().getNarDependencies( "test" ); + for ( Iterator i = dependencies.iterator(); i.hasNext(); ) + { + NarArtifact dependency = (NarArtifact) i.next(); + // FIXME this should be overridable + // NarInfo info = dependency.getNarInfo(); + // String binding = info.getBinding(getAOL(), Library.STATIC); + // NOTE: fixed to shared, jni + String[] bindings = { Library.SHARED, Library.JNI }; + for ( int j = 0; j < bindings.length; j++ ) + { + String binding = bindings[j]; + if ( !binding.equals( Library.STATIC ) ) + { + File depLibPathEntry = + new File( getNarManager().getNarFile( dependency ).getParent(), "nar/lib/" + getAOL() + "/" + + binding ); + if ( depLibPathEntry.exists() ) + { + getLog().debug( "Adding dependency directory to java.library.path: " + depLibPathEntry ); + if ( javaLibraryPath.length() > 0 ) + javaLibraryPath.append( File.pathSeparator ); + javaLibraryPath.append( depLibPathEntry ); + } + } + } + } + + // add final javalibrary path + if ( javaLibraryPath.length() > 0 ) + { + // NOTE java.library.path only works for the jni lib itself, and + // not for its dependent shareables. + // NOTE: java.library.path does not work with arguments with + // spaces as + // SureFireBooter splits the line in parts and then quotes + // it wrongly + NarUtil.addLibraryPathToEnv( javaLibraryPath.toString(), environmentVariables, getOS() ); + } + + // necessary to find WinSxS + if ( getOS().equals( OS.WINDOWS ) ) + { + environmentVariables.put( "SystemRoot", NarUtil.getEnv( "SystemRoot", "SystemRoot", "C:\\Windows" ) ); + } + // ENDDUNS + + fork.setArgLine( argLine ); + + fork.setEnvironmentVariables( environmentVariables ); + + if ( getLog().isDebugEnabled() ) + { + showMap( environmentVariables, "environment variable" ); + + fork.setDebug( true ); + } + } + + surefireBooter.setRedirectTestOutputToFile( redirectTestOutputToFile ); + + surefireBooter.setForkConfiguration( fork ); + + surefireBooter.setChildDelegation( childDelegation ); + + surefireBooter.setReportsDirectory( reportsDirectory ); + + surefireBooter.setUseSystemClassLoader( useSystemClassLoader ); + + addReporters( surefireBooter, fork.isForking() ); + + return surefireBooter; + } + + private void showMap( Map map, String setting ) + { + for ( Iterator i = map.keySet().iterator(); i.hasNext(); ) + { + String key = (String) i.next(); + String value = (String) map.get( key ); + getLog().debug( "Setting " + setting + " [" + key + "]=[" + value + "]" ); + } + } + + private void addProvider( SurefireBooter surefireBooter, String provider, String version, Artifact filteredArtifact ) + throws ArtifactNotFoundException, ArtifactResolutionException + { + Artifact providerArtifact = + artifactFactory.createDependencyArtifact( "org.apache.maven.surefire", provider, + VersionRange.createFromVersion( version ), "jar", null, + Artifact.SCOPE_TEST ); + ArtifactResolutionResult result = resolveArtifact( filteredArtifact, providerArtifact ); + + for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + + getLog().debug( "Adding to surefire test classpath: " + artifact.getFile().getAbsolutePath() ); + + surefireBooter.addSurefireClassPathUrl( artifact.getFile().getAbsolutePath() ); + } + } + + private ArtifactResolutionResult resolveArtifact( Artifact filteredArtifact, Artifact providerArtifact ) + throws ArtifactResolutionException, ArtifactNotFoundException + { + ArtifactFilter filter = null; + if ( filteredArtifact != null ) + { + filter = + new ExcludesArtifactFilter( Collections.singletonList( filteredArtifact.getGroupId() + ":" + + filteredArtifact.getArtifactId() ) ); + } + + Artifact originatingArtifact = artifactFactory.createBuildArtifact( "dummy", "dummy", "1.0", "jar" ); + + // DUNS, use access method rather than "localRepository" field. + return artifactResolver.resolveTransitively( Collections.singleton( providerArtifact ), originatingArtifact, + getLocalRepository(), remoteRepositories, metadataSource, filter ); + } + + private void addArtifact( SurefireBooter surefireBooter, Artifact surefireArtifact ) + throws ArtifactNotFoundException, ArtifactResolutionException + { + ArtifactResolutionResult result = resolveArtifact( null, surefireArtifact ); + + for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); ) + { + Artifact artifact = (Artifact) i.next(); + + getLog().debug( "Adding to surefire booter test classpath: " + artifact.getFile().getAbsolutePath() ); + + surefireBooter.addSurefireBootClassPathUrl( artifact.getFile().getAbsolutePath() ); + } + } + + protected void processSystemProperties( boolean setInSystem ) + { + if ( systemProperties == null ) + { + systemProperties = new Properties(); + } + + originalSystemProperties = (Properties) System.getProperties().clone(); + + systemProperties.setProperty( "basedir", basedir.getAbsolutePath() ); + + // DUNS, use access method rather than "localRepository" field. + systemProperties.setProperty( "localRepository", getLocalRepository().getBasedir() ); + + if ( setInSystem ) + { + // Add all system properties configured by the user + Iterator iter = systemProperties.keySet().iterator(); + + while ( iter.hasNext() ) + { + String key = (String) iter.next(); + + String value = systemProperties.getProperty( key ); + + System.setProperty( key, value ); + } + } + } + + /** + *

+ * Adds Reporters that will generate reports with different formatting. + *

+ * The Reporter that will be added will be based on the value of the parameter useFile, reportFormat, and + * printSummary. + * + * @param surefireBooter The surefire booter that will run tests. + * @param forking + */ + private void addReporters( SurefireBooter surefireBooter, boolean forking ) + { + Boolean trimStackTrace = Boolean.valueOf( this.trimStackTrace ); + if ( useFile ) + { + if ( printSummary ) + { + if ( forking ) + { + surefireBooter.addReport( ForkingConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); + } + else + { + surefireBooter.addReport( ConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); + } + } + + if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) ) + { + surefireBooter.addReport( BriefFileReporter.class.getName(), new Object[] { reportsDirectory, + trimStackTrace } ); + } + else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) ) + { + surefireBooter.addReport( FileReporter.class.getName(), + new Object[] { reportsDirectory, trimStackTrace } ); + } + } + else + { + if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) ) + { + surefireBooter.addReport( BriefConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); + } + else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) ) + { + surefireBooter.addReport( DetailedConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); + } + } + + if ( !disableXmlReport ) + { + surefireBooter.addReport( XMLReporter.class.getName(), new Object[] { reportsDirectory, trimStackTrace } ); + } + } + + /** + * @return SurefirePlugin Returns the skipExec. + */ + public boolean isSkipExec() + { + return this.skipExec; + } + + /** + * @param skipExec the skipExec to set + */ + public void setSkipExec( boolean skipExec ) + { + this.skipExec = skipExec; + } } -- cgit v1.2.3