summaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java
diff options
context:
space:
mode:
authorMark Donszelmann <Mark.Donszelmann@gmail.com>2009-10-01 14:33:24 +0200
committerMark Donszelmann <Mark.Donszelmann@gmail.com>2009-10-01 14:33:24 +0200
commit846700d44b67b22835b57a1c04f17043db8323a3 (patch)
treea253ecd4ada6f80dbcd08177035cfa71ade9b670 /src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java
parent0a8746644d70eb8b1cfb615c27155c19e09f46d3 (diff)
downloadmaven-nar-plugin-846700d44b67b22835b57a1c04f17043db8323a3.tar.gz
maven-nar-plugin-846700d44b67b22835b57a1c04f17043db8323a3.tar.bz2
maven-nar-plugin-846700d44b67b22835b57a1c04f17043db8323a3.tar.xz
maven-nar-plugin-846700d44b67b22835b57a1c04f17043db8323a3.zip
Moved files in from freehep-nar-plugin version 2.0-alpha-11-SNAPSHOT
Diffstat (limited to 'src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java')
-rw-r--r--src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java b/src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java
new file mode 100644
index 0000000..62e721e
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugin/nar/NarTestMojo.java
@@ -0,0 +1,148 @@
+// Copyright FreeHEP, 2005-2007.
+package org.freehep.maven.nar;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Tests NAR files. Runs Native Tests and executables if produced.
+ *
+ * @goal nar-test
+ * @phase test
+ * @requiresProject
+ * @author <a href="Mark.Donszelmann@slac.stanford.edu">Mark Donszelmann</a>
+ * @version $Id: plugin/src/main/java/org/freehep/maven/nar/NarTestMojo.java 51709c87671c 2007/08/08 22:49:17 duns $
+ */
+public class NarTestMojo extends AbstractCompileMojo {
+
+ /**
+ * The classpath elements of the project being tested.
+ *
+ * @parameter expression="${project.testClasspathElements}"
+ * @required
+ * @readonly
+ */
+ private List classpathElements;
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ if (shouldSkip())
+ return;
+
+ // run all tests
+ for (Iterator i = getTests().iterator(); i.hasNext();) {
+ runTest((Test) i.next());
+ }
+
+ for (Iterator i = getLibraries().iterator(); i.hasNext();) {
+ runExecutable((Library) i.next());
+ }
+ }
+
+ private void runTest(Test test) throws MojoExecutionException,
+ MojoFailureException {
+ // run if requested
+ if (test.shouldRun()) {
+ String name = "target/test-nar/bin/" + getAOL() + "/" + test.getName();
+ getLog().info("Running " + name);
+ List args = test.getArgs();
+ int result = NarUtil.runCommand(getMavenProject()
+ .getBasedir()
+ + "/" + name, (String[]) args.toArray(new String[args.size()]), generateEnvironment(test,
+ getLog()), getLog());
+ if (result != 0)
+ throw new MojoFailureException("Test " + name
+ + " failed with exit code: " + result+" 0x"+Integer.toHexString(result));
+ }
+ }
+
+ private void runExecutable(Library library) throws MojoExecutionException,
+ MojoFailureException {
+ if (library.getType().equals(Library.EXECUTABLE) && library.shouldRun()) {
+ MavenProject project = getMavenProject();
+ String name = "target/nar/bin/" + getAOL() + "/"
+ + project.getArtifactId();
+ getLog().info("Running " + name);
+ List args = library.getArgs();
+ int result = NarUtil.runCommand(project.getBasedir()
+ + "/" + name, (String[]) args.toArray(new String[args.size()]), generateEnvironment(
+ library, getLog()), getLog());
+ if (result != 0)
+ throw new MojoFailureException("Test " + name
+ + " failed with exit code: " + result+" 0x"+Integer.toHexString(result));
+ }
+ }
+
+ protected File getTargetDirectory() {
+ return new File(getMavenProject().getBuild().getDirectory(), "test-nar");
+ }
+
+ private String[] generateEnvironment(Executable exec, Log log)
+ throws MojoExecutionException, MojoFailureException {
+ List env = new ArrayList();
+
+ Set/*<File>*/ sharedPaths = new HashSet();
+
+ // add all shared libraries of this package
+ for (Iterator i=getLibraries().iterator(); i.hasNext(); ) {
+ Library lib = (Library)i.next();
+ if (lib.getType().equals(Library.SHARED)) {
+ sharedPaths.add(new File(getMavenProject().getBasedir(), "target/nar/lib/"+getAOL()+"/"+lib.getType()));
+ }
+ }
+
+ // add dependent shared libraries
+ String classifier = getAOL()+"-shared";
+ List narArtifacts = getNarManager().getNarDependencies("compile");
+ List dependencies = getNarManager().getAttachedNarDependencies(
+ narArtifacts, classifier);
+ for (Iterator d = dependencies.iterator(); d.hasNext();) {
+ Artifact dependency = (Artifact) d.next();
+ getLog().debug("Looking for dependency " + dependency);
+
+ // FIXME reported to maven developer list, isSnapshot
+ // changes behaviour
+ // of getBaseVersion, called in pathOf.
+ if (dependency.isSnapshot())
+ ;
+
+ File libDir = new File(getLocalRepository().pathOf(dependency));
+ libDir = new File(getLocalRepository().getBasedir(), libDir
+ .getParent());
+ libDir = new File(libDir, "nar/lib/"+getAOL()+"/shared");
+ sharedPaths.add(libDir);
+ }
+
+ // set environment
+ if (sharedPaths.size() > 0) {
+ String sharedPath = "";
+ for (Iterator i=sharedPaths.iterator(); i.hasNext(); ) {
+ sharedPath += ((File)i.next()).getPath();
+ if (i.hasNext()) sharedPath += File.pathSeparator;
+ }
+
+ String sharedEnv = NarUtil.addLibraryPathToEnv(sharedPath, null, getOS());
+ env.add(sharedEnv);
+ }
+
+ // necessary to find WinSxS
+ if (getOS().equals(OS.WINDOWS)) {
+ env.add("SystemRoot="+NarUtil.getEnv("SystemRoot", "SystemRoot", "C:\\Windows"));
+ }
+
+ // add CLASSPATH
+ env.add("CLASSPATH="+StringUtils.join(classpathElements.iterator(), File.pathSeparator));
+
+ return env.size() > 0 ? (String[]) env.toArray(new String[env.size()]) : null;
+ }
+}