]> source.dussan.org Git - aspectj.git/commitdiff
246125: the SPLIT
authoraclement <aclement>
Wed, 22 Oct 2008 05:45:57 +0000 (05:45 +0000)
committeraclement <aclement>
Wed, 22 Oct 2008 05:45:57 +0000 (05:45 +0000)
testing/.classpath
testing/newsrc/org/aspectj/testing/AntSpec.java

index f9fab7525f8d96910f2f160a3f272fb58e0c1ea8..6f19408e978aaedde4abaa984cdc5bb5f8e1701a 100644 (file)
@@ -22,5 +22,6 @@
        <classpathentry combineaccessrules="false" kind="src" path="/loadtime"/>
        <classpathentry combineaccessrules="false" kind="src" path="/ajde.core"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry combineaccessrules="false" kind="src" path="/org.aspectj.matcher"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>
index ab7fa71b0cc86188f4750293dd64fb0c908f10d1..c6df55ebc634e2f0e9edc486d5299fc9a379a02e 100644 (file)
@@ -27,182 +27,180 @@ import org.aspectj.tools.ajc.AjcTestCase;
 /**
  * Element that allow to run an abritrary Ant target in a sandbox.
  * <p/>
- * Such a spec is used in a "<ajc-test><ant file="myAnt.xml" [target="..."] [verbose="true"]/> XML element.
- * The "target" is optional. If not set, default myAnt.xml target is used.
- * The "file" file is looked up from the <ajc-test dir="..."/> attribute.
- * If "verbose" is set to "true", the ant -v output is piped, else nothing is reported except errors.
+ * Such a spec is used in a "<ajc-test><ant file="myAnt.xml" [target="..."] [verbose="true"]/> XML element. The "target" is
+ * optional. If not set, default myAnt.xml target is used. The "file" file is looked up from the <ajc-test dir="..."/> attribute. If
+ * "verbose" is set to "true", the ant -v output is piped, else nothing is reported except errors.
  * <p/>
- * The called Ant target benefits from 2 implicit variables:
- * "${aj.sandbox}" points to the test current sandbox folder.
- * "aj.path" is an Ant refid on the classpath formed with the sandbox folder + ltw + the AjcTestCase classpath
- * (ie usually aspectjrt, junit, and testing infra)
+ * The called Ant target benefits from 2 implicit variables: "${aj.sandbox}" points to the test current sandbox folder. "aj.path" is
+ * an Ant refid on the classpath formed with the sandbox folder + ltw + the AjcTestCase classpath (ie usually aspectjrt, junit, and
+ * testing infra)
  * <p/>
- * Element "<stdout><line text="..">" and "<stderr><line text="..">" can be used. For now a full match
- * is performed on the output of the runned target only (not the whole Ant invocation). This is experimental
- * and advised to use a "<junit>" task instead or a "<java>" whose main that throws some exception upon failure.
- *
- *
+ * Element "<stdout><line text="..">" and "<stderr><line text="..">" can be used. For now a full match is performed on the output of
+ * the runned target only (not the whole Ant invocation). This is experimental and advised to use a "<junit>" task instead or a
+ * "<java>" whose main that throws some exception upon failure.
+ * 
+ * 
  * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
  */
 public class AntSpec implements ITestStep {
-    
-    private final static String DEFAULT_LTW_CLASSPATH_ENTRIES =
-            ".." + File.separator + "asm/bin"
-            + File.pathSeparator + ".." + File.separator + "bridge/bin"
-            + File.pathSeparator + ".." + File.separator + "loadtime/bin"
-            + File.pathSeparator + ".." + File.separator + "loadtime5/bin"
-            + File.pathSeparator + ".." + File.separator + "weaver/bin"
-            + File.pathSeparator + ".." + File.separator + "lib/bcel/bcel.jar";
-
-
-    private boolean m_verbose = false;
-    private AjcTest m_ajcTest;
-    private OutputSpec m_stdErrSpec;
-    private OutputSpec m_stdOutSpec;
-    private String m_antFile;
-    private String m_antTarget;
-
-    public void execute(AjcTestCase inTestCase) {
-        final String failMessage = "test \"" + m_ajcTest.getTitle() + "\" failed: ";
-
-        File buildFile = new File(m_ajcTest.getDir() + File.separatorChar + m_antFile);
-        if (!buildFile.exists()) {
-            AjcTestCase.fail(failMessage + "no such Ant file " + buildFile.getAbsolutePath());
-        }
-        Project p = new Project();
-        final StringBuffer stdout = new StringBuffer();
-        final StringBuffer stderr = new StringBuffer();
-        final StringBuffer verboseLog = new StringBuffer();
-        try {
-            // read the Ant file
-            p.init();
-            p.setUserProperty("ant.file", buildFile.getAbsolutePath());
-            // setup aj.sandbox
-            p.setUserProperty("aj.sandbox", inTestCase.getSandboxDirectory().getAbsolutePath());
-            // setup aj.dir "modules" folder
-            p.setUserProperty("aj.root", new File("..").getAbsolutePath());
-                       
-            // create the test implicit path aj.path that contains the sandbox + regular test infra path
-            Path path = new Path(p, inTestCase.getSandboxDirectory().getAbsolutePath());
-            populatePath(path, DEFAULT_LTW_CLASSPATH_ENTRIES);
-            populatePath(path, AjcTestCase.DEFAULT_CLASSPATH_ENTRIES);
-            p.addReference("aj.path", path);
-            p.setBasedir(buildFile.getAbsoluteFile().getParent());
-            ProjectHelper helper = ProjectHelper.getProjectHelper();
-            helper.parse(p, buildFile);
-
-            // use default target if no target specified
-            if (m_antTarget == null) {
-                m_antTarget = p.getDefaultTarget();
-            }
-
-            // make sure we listen for failure
-            DefaultLogger consoleLogger = new DefaultLogger() {
-                public void buildFinished(BuildEvent event) {
-                    super.buildFinished(event);
-                    if (event.getException() != null) {
-                       StringBuffer message = new StringBuffer();
-                       message.append(event.getException().toString()).append("\n");
-                       message.append(verboseLog);
-                       message.append(stdout);
-                       message.append(stderr);
-//                        AjcTestCase.fail(failMessage + "failure " + event.getException());
-                        AjcTestCase.fail(message.toString());
-                    }
-                }
-                public void targetFinished(BuildEvent event) {
-                    super.targetFinished(event);
-                    if (event.getException() != null) {
-                        AjcTestCase.fail(failMessage + "failure in '" + event.getTarget() + "' " + event.getException());
-                    }
-                }
-                public void messageLogged(BuildEvent event) {
-                       super.messageLogged(event);
-                    
-                       Target target = event.getTarget();
-                    if (target != null && m_antTarget.equals(target.getName()) && event.getSource() instanceof Java)
-                       switch(event.getPriority()) {
-                       case Project.MSG_INFO:
-                               stdout.append(event.getMessage()).append('\n');
-                               break;
-                       case Project.MSG_WARN:
-                               stderr.append(event.getMessage()).append('\n');
-                               break;
-                       case Project.MSG_VERBOSE:
-                               verboseLog.append(event.getMessage()).append('\n');
-                               break;
-                    }
-                }
-            };
-            consoleLogger.setErrorPrintStream(System.err);
-            consoleLogger.setOutputPrintStream(System.out);
-            consoleLogger.setMessageOutputLevel(m_verbose?Project.MSG_VERBOSE:Project.MSG_ERR);
-            p.addBuildListener(consoleLogger);
-        } catch (Throwable t) {
-            AjcTestCase.fail(failMessage + "invalid Ant script :" + t.toString());
-        }
-        try {
-               p.setProperty("verbose","true");
-            p.fireBuildStarted();
-            p.executeTarget(m_antTarget);
-            p.fireBuildFinished(null);
-        } catch (BuildException e) {
-            p.fireBuildFinished(e);
-        } catch (Throwable t) {
-            AjcTestCase.fail(failMessage + "error when invoking target :" + t.toString());
-        }
-
-        /* See if stdout/stderr matches test specification */
-        if (m_stdOutSpec != null) {
-            m_stdOutSpec.matchAgainst(stdout.toString());
-        }
-        if (m_stdErrSpec != null) {
-            m_stdErrSpec.matchAgainst(stderr.toString());
-        }
-    }
-
-    public void addStdErrSpec(OutputSpec spec) {
-        if (m_stdErrSpec!=null)
-            throw new UnsupportedOperationException("only one 'stderr' allowed in 'ant'");
-        m_stdErrSpec = spec;
-    }
-
-    public void addStdOutSpec(OutputSpec spec) {
-        if (m_stdOutSpec!=null)
-            throw new UnsupportedOperationException("only one 'stdout' allowed in 'ant'");
-        m_stdOutSpec = spec;
-    }
-
-    public void setVerbose(String verbose) {
-        if (verbose != null && "true".equalsIgnoreCase(verbose)) {
-            m_verbose = true;
-        }
-    }
-
-    public void setFile(String file) {
-        m_antFile = file;
-    }
-
-    public void setTarget(String target) {
-        m_antTarget = target;
-    }
-
-    public void addExpectedMessage(ExpectedMessageSpec message) {
-        throw new UnsupportedOperationException("don't use 'message' in 'ant' specs.");
-    }
-
-    public void setBaseDir(String dir) {
-        ;
-    }
-
-    public void setTest(AjcTest test) {
-        m_ajcTest = test;
-    }
-
-    private static void populatePath(Path path, String pathEntries) {
-        StringTokenizer st = new StringTokenizer(pathEntries, File.pathSeparator);
-        while (st.hasMoreTokens()) {
-            path.setPath(new File(st.nextToken()).getAbsolutePath());
-        }
-    }
+
+       // ALSO SEE AJC
+       private final static String DEFAULT_LTW_CLASSPATH_ENTRIES = ".." + File.separator + "asm/bin" + File.pathSeparator + ".."
+                       + File.separator + "bridge/bin" + File.pathSeparator + ".." + File.separator + "loadtime/bin" + File.pathSeparator
+                       + ".." + File.separator + "loadtime5/bin" + File.pathSeparator + ".." + File.separator + "weaver/bin"
+                       + File.pathSeparator + ".." + File.separator + "org.aspectj.matcher/bin" + File.pathSeparator + ".." + File.separator
+                       + "lib/bcel/bcel.jar";
+
+       private boolean m_verbose = false;
+       private AjcTest m_ajcTest;
+       private OutputSpec m_stdErrSpec;
+       private OutputSpec m_stdOutSpec;
+       private String m_antFile;
+       private String m_antTarget;
+
+       public void execute(AjcTestCase inTestCase) {
+               final String failMessage = "test \"" + m_ajcTest.getTitle() + "\" failed: ";
+
+               File buildFile = new File(m_ajcTest.getDir() + File.separatorChar + m_antFile);
+               if (!buildFile.exists()) {
+                       AjcTestCase.fail(failMessage + "no such Ant file " + buildFile.getAbsolutePath());
+               }
+               Project p = new Project();
+               final StringBuffer stdout = new StringBuffer();
+               final StringBuffer stderr = new StringBuffer();
+               final StringBuffer verboseLog = new StringBuffer();
+               try {
+                       // read the Ant file
+                       p.init();
+                       p.setUserProperty("ant.file", buildFile.getAbsolutePath());
+                       // setup aj.sandbox
+                       p.setUserProperty("aj.sandbox", inTestCase.getSandboxDirectory().getAbsolutePath());
+                       // setup aj.dir "modules" folder
+                       p.setUserProperty("aj.root", new File("..").getAbsolutePath());
+
+                       // create the test implicit path aj.path that contains the sandbox + regular test infra path
+                       Path path = new Path(p, inTestCase.getSandboxDirectory().getAbsolutePath());
+                       populatePath(path, DEFAULT_LTW_CLASSPATH_ENTRIES);
+                       populatePath(path, AjcTestCase.DEFAULT_CLASSPATH_ENTRIES);
+                       p.addReference("aj.path", path);
+                       p.setBasedir(buildFile.getAbsoluteFile().getParent());
+                       ProjectHelper helper = ProjectHelper.getProjectHelper();
+                       helper.parse(p, buildFile);
+
+                       // use default target if no target specified
+                       if (m_antTarget == null) {
+                               m_antTarget = p.getDefaultTarget();
+                       }
+
+                       // make sure we listen for failure
+                       DefaultLogger consoleLogger = new DefaultLogger() {
+                               public void buildFinished(BuildEvent event) {
+                                       super.buildFinished(event);
+                                       if (event.getException() != null) {
+                                               StringBuffer message = new StringBuffer();
+                                               message.append(event.getException().toString()).append("\n");
+                                               message.append(verboseLog);
+                                               message.append(stdout);
+                                               message.append(stderr);
+                                               // AjcTestCase.fail(failMessage + "failure " + event.getException());
+                                               AjcTestCase.fail(message.toString());
+                                       }
+                               }
+
+                               public void targetFinished(BuildEvent event) {
+                                       super.targetFinished(event);
+                                       if (event.getException() != null) {
+                                               AjcTestCase.fail(failMessage + "failure in '" + event.getTarget() + "' " + event.getException());
+                                       }
+                               }
+
+                               public void messageLogged(BuildEvent event) {
+                                       super.messageLogged(event);
+
+                                       Target target = event.getTarget();
+                                       if (target != null && m_antTarget.equals(target.getName()) && event.getSource() instanceof Java)
+                                               switch (event.getPriority()) {
+                                               case Project.MSG_INFO:
+                                                       stdout.append(event.getMessage()).append('\n');
+                                                       break;
+                                               case Project.MSG_WARN:
+                                                       stderr.append(event.getMessage()).append('\n');
+                                                       break;
+                                               case Project.MSG_VERBOSE:
+                                                       verboseLog.append(event.getMessage()).append('\n');
+                                                       break;
+                                               }
+                               }
+                       };
+                       consoleLogger.setErrorPrintStream(System.err);
+                       consoleLogger.setOutputPrintStream(System.out);
+                       consoleLogger.setMessageOutputLevel(m_verbose ? Project.MSG_VERBOSE : Project.MSG_ERR);
+                       p.addBuildListener(consoleLogger);
+               } catch (Throwable t) {
+                       AjcTestCase.fail(failMessage + "invalid Ant script :" + t.toString());
+               }
+               try {
+                       p.setProperty("verbose", "true");
+                       p.fireBuildStarted();
+                       p.executeTarget(m_antTarget);
+                       p.fireBuildFinished(null);
+               } catch (BuildException e) {
+                       p.fireBuildFinished(e);
+               } catch (Throwable t) {
+                       AjcTestCase.fail(failMessage + "error when invoking target :" + t.toString());
+               }
+
+               /* See if stdout/stderr matches test specification */
+               if (m_stdOutSpec != null) {
+                       m_stdOutSpec.matchAgainst(stdout.toString());
+               }
+               if (m_stdErrSpec != null) {
+                       m_stdErrSpec.matchAgainst(stderr.toString());
+               }
+       }
+
+       public void addStdErrSpec(OutputSpec spec) {
+               if (m_stdErrSpec != null)
+                       throw new UnsupportedOperationException("only one 'stderr' allowed in 'ant'");
+               m_stdErrSpec = spec;
+       }
+
+       public void addStdOutSpec(OutputSpec spec) {
+               if (m_stdOutSpec != null)
+                       throw new UnsupportedOperationException("only one 'stdout' allowed in 'ant'");
+               m_stdOutSpec = spec;
+       }
+
+       public void setVerbose(String verbose) {
+               if (verbose != null && "true".equalsIgnoreCase(verbose)) {
+                       m_verbose = true;
+               }
+       }
+
+       public void setFile(String file) {
+               m_antFile = file;
+       }
+
+       public void setTarget(String target) {
+               m_antTarget = target;
+       }
+
+       public void addExpectedMessage(ExpectedMessageSpec message) {
+               throw new UnsupportedOperationException("don't use 'message' in 'ant' specs.");
+       }
+
+       public void setBaseDir(String dir) {
+               ;
+       }
+
+       public void setTest(AjcTest test) {
+               m_ajcTest = test;
+       }
+
+       private static void populatePath(Path path, String pathEntries) {
+               StringTokenizer st = new StringTokenizer(pathEntries, File.pathSeparator);
+               while (st.hasMoreTokens()) {
+                       path.setPath(new File(st.nextToken()).getAbsolutePath());
+               }
+       }
 }