From 8c33cae42398fa2e29c5ccb69db9b9ccddc3770e Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Mon, 5 Nov 2001 13:07:32 +0000 Subject: [PATCH] Remove undesirable package dependency by making TaskdefsTest facilities available to all Ant Tests in the BuildFileTest class. The next step is to make current Taskdefs inherit directly from BuildFileTest and then deprecate TaskdefsTest git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269867 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 1 + .../org/apache/tools/ant/BuildFileTest.java | 278 ++++++++++++++++++ .../tools/ant/taskdefs/TaskdefsTest.java | 206 +------------ .../tools/ant/types/DescriptionTest.java | 4 +- .../apache/tools/ant/types/FilterSetTest.java | 4 +- 5 files changed, 285 insertions(+), 208 deletions(-) create mode 100644 src/testcases/org/apache/tools/ant/BuildFileTest.java diff --git a/build.xml b/build.xml index 13c06a18d..2f13fe9ee 100644 --- a/build.xml +++ b/build.xml @@ -724,6 +724,7 @@ + diff --git a/src/testcases/org/apache/tools/ant/BuildFileTest.java b/src/testcases/org/apache/tools/ant/BuildFileTest.java new file mode 100644 index 000000000..27cebd4cc --- /dev/null +++ b/src/testcases/org/apache/tools/ant/BuildFileTest.java @@ -0,0 +1,278 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant; + +import junit.framework.*; +import org.apache.tools.ant.*; +import java.io.*; + +/** + * A BuildFileTest is a TestCase which executes targets from an Ant buildfile + * for testing. + * + * This class provides a number of utility methods for particular build file + * tests which extend this class. + * + * @author Nico Seessle + * @author Conor MacNeill + */ +public abstract class BuildFileTest extends TestCase { + + protected Project project; + + private StringBuffer logBuffer; + private StringBuffer fullLogBuffer; + private StringBuffer outBuffer; + private StringBuffer errBuffer; + private BuildException buildException; + + public BuildFileTest(String name) { + super(name); + } + + protected String getLog() { + return logBuffer.toString(); + } + + protected String getFullLog() { + return fullLogBuffer.toString(); + } + + + + protected void expectBuildException(String taskname, String cause) { + expectSpecificBuildException(taskname, cause, null); + } + + protected void expectOutput(String taskname, String output) { + executeTarget(taskname); + String realOutput = getOutput(); + assertEquals(output, realOutput); + } + + protected void expectOutputAndError(String taskname, String output, String error) { + executeTarget(taskname); + String realOutput = getOutput(); + assertEquals(output, realOutput); + String realError = getError(); + assertEquals(error, realError); + } + + protected void expectLog(String taskname, String log) { + executeTarget(taskname); + String realLog = getLog(); + assertEquals(log, realLog); + } + + + protected String getOutput() { + return cleanBuffer(outBuffer); + } + + protected String getError() { + return cleanBuffer(errBuffer); + } + + private String cleanBuffer(StringBuffer buffer) { + StringBuffer cleanedBuffer = new StringBuffer(); + boolean cr = false; + for (int i = 0; i < buffer.length(); i++) { + char ch = buffer.charAt(i); + if (ch == '\r') { + cr = true; + continue; + } + + if (!cr) { + cleanedBuffer.append(ch); + } else { + if (ch == '\n') { + cleanedBuffer.append(ch); + } else { + cleanedBuffer.append('\r').append(ch); + } + } + } + return cleanedBuffer.toString(); + } + + protected void configureProject(String filename) { + logBuffer = new StringBuffer(); + fullLogBuffer = new StringBuffer(); + project = new Project(); + project.init(); + project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() ); + project.addBuildListener(new AntTestListener()); + ProjectHelper.configureProject(project, new File(filename)); + } + + protected void executeTarget(String targetName) { + PrintStream sysOut = System.out; + PrintStream sysErr = System.err; + try { + sysOut.flush(); + sysErr.flush(); + outBuffer = new StringBuffer(); + PrintStream out = new PrintStream(new AntOutputStream()); + System.setOut(out); + errBuffer = new StringBuffer(); + PrintStream err = new PrintStream(new AntOutputStream()); + System.setErr(err); + logBuffer = new StringBuffer(); + fullLogBuffer = new StringBuffer(); + buildException = null; + project.executeTarget(targetName); + } finally { + System.setOut(sysOut); + System.setErr(sysErr); + } + + } + + protected File getProjectDir() { + return project.getBaseDir(); + } + + protected void expectSpecificBuildException(String taskname, String cause, String msg) { + try { + executeTarget(taskname); + } catch (org.apache.tools.ant.BuildException ex) { + if ((null != msg) && (ex.getMessage() != msg)) { + fail("Should throw BuildException because '" + cause + "' with message '" + msg + "' (received message '" + ex.getMessage() + "' instead)"); + } + return; + } + fail("Should throw BuildException because: " + cause); + } + private class AntOutputStream extends java.io.OutputStream { + public void write(int b) { + outBuffer.append((char)b); + } + } + + private class AntTestListener implements BuildListener { + /** + * Fired before any targets are started. + */ + public void buildStarted(BuildEvent event) { + } + + /** + * Fired after the last target has finished. This event + * will still be thrown if an error occured during the build. + * + * @see BuildEvent#getException() + */ + public void buildFinished(BuildEvent event) { + } + + /** + * Fired when a target is started. + * + * @see BuildEvent#getTarget() + */ + public void targetStarted(BuildEvent event) { + //System.out.println("targetStarted " + event.getTarget().getName()); + } + + /** + * Fired when a target has finished. This event will + * still be thrown if an error occured during the build. + * + * @see BuildEvent#getException() + */ + public void targetFinished(BuildEvent event) { + //System.out.println("targetFinished " + event.getTarget().getName()); + } + + /** + * Fired when a task is started. + * + * @see BuildEvent#getTask() + */ + public void taskStarted(BuildEvent event) { + //System.out.println("taskStarted " + event.getTask().getTaskName()); + } + + /** + * Fired when a task has finished. This event will still + * be throw if an error occured during the build. + * + * @see BuildEvent#getException() + */ + public void taskFinished(BuildEvent event) { + //System.out.println("taskFinished " + event.getTask().getTaskName()); + } + + /** + * Fired whenever a message is logged. + * + * @see BuildEvent#getMessage() + * @see BuildEvent#getPriority() + */ + public void messageLogged(BuildEvent event) { + if (event.getPriority() == Project.MSG_INFO || + event.getPriority() == Project.MSG_WARN || + event.getPriority() == Project.MSG_ERR) + { + logBuffer.append(event.getMessage()); + } + fullLogBuffer.append(event.getMessage()); + + } + } + + +} diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java index dede67ae6..0b7ec54a4 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java @@ -55,217 +55,15 @@ package org.apache.tools.ant.taskdefs; import junit.framework.*; -import org.apache.tools.ant.*; import java.io.*; +import org.apache.tools.ant.BuildFileTest; /** * @author Nico Seessle */ -public abstract class TaskdefsTest extends TestCase { - - protected Project project; - - private StringBuffer logBuffer; - private StringBuffer fullLogBuffer; - private StringBuffer outBuffer; - private StringBuffer errBuffer; - private BuildException buildException; +public abstract class TaskdefsTest extends BuildFileTest { public TaskdefsTest(String name) { super(name); } - - protected String getLog() { - return logBuffer.toString(); - } - - protected String getFullLog() { - return fullLogBuffer.toString(); - } - - - - protected void expectBuildException(String taskname, String cause) { - expectSpecificBuildException(taskname, cause, null); - } - - protected void expectOutput(String taskname, String output) { - executeTarget(taskname); - String realOutput = getOutput(); - assertEquals(output, realOutput); - } - - protected void expectOutputAndError(String taskname, String output, String error) { - executeTarget(taskname); - String realOutput = getOutput(); - assertEquals(output, realOutput); - String realError = getError(); - assertEquals(error, realError); - } - - protected void expectLog(String taskname, String log) { - executeTarget(taskname); - String realLog = getLog(); - assertEquals(log, realLog); - } - - - protected String getOutput() { - return cleanBuffer(outBuffer); - } - - protected String getError() { - return cleanBuffer(errBuffer); - } - - private String cleanBuffer(StringBuffer buffer) { - StringBuffer cleanedBuffer = new StringBuffer(); - boolean cr = false; - for (int i = 0; i < buffer.length(); i++) { - char ch = buffer.charAt(i); - if (ch == '\r') { - cr = true; - continue; - } - - if (!cr) { - cleanedBuffer.append(ch); - } else { - if (ch == '\n') { - cleanedBuffer.append(ch); - } else { - cleanedBuffer.append('\r').append(ch); - } - } - } - return cleanedBuffer.toString(); - } - - protected void configureProject(String filename) { - logBuffer = new StringBuffer(); - fullLogBuffer = new StringBuffer(); - project = new Project(); - project.init(); - project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() ); - project.addBuildListener(new AntTestListener()); - ProjectHelper.configureProject(project, new File(filename)); - } - - protected void executeTarget(String targetName) { - PrintStream sysOut = System.out; - PrintStream sysErr = System.err; - try { - sysOut.flush(); - sysErr.flush(); - outBuffer = new StringBuffer(); - PrintStream out = new PrintStream(new AntOutputStream()); - System.setOut(out); - errBuffer = new StringBuffer(); - PrintStream err = new PrintStream(new AntOutputStream()); - System.setErr(err); - logBuffer = new StringBuffer(); - fullLogBuffer = new StringBuffer(); - buildException = null; - project.executeTarget(targetName); - } finally { - System.setOut(sysOut); - System.setErr(sysErr); - } - - } - - protected File getProjectDir() { - return project.getBaseDir(); - } - - protected void expectSpecificBuildException(String taskname, String cause, String msg) { - try { - executeTarget(taskname); - } catch (org.apache.tools.ant.BuildException ex) { - if ((null != msg) && (ex.getMessage() != msg)) { - fail("Should throw BuildException because '" + cause + "' with message '" + msg + "' (received message '" + ex.getMessage() + "' instead)"); - } - return; - } - fail("Should throw BuildException because: " + cause); - } - private class AntOutputStream extends java.io.OutputStream { - public void write(int b) { - outBuffer.append((char)b); - } - } - - private class AntTestListener implements BuildListener { - /** - * Fired before any targets are started. - */ - public void buildStarted(BuildEvent event) { - } - - /** - * Fired after the last target has finished. This event - * will still be thrown if an error occured during the build. - * - * @see BuildEvent#getException() - */ - public void buildFinished(BuildEvent event) { - } - - /** - * Fired when a target is started. - * - * @see BuildEvent#getTarget() - */ - public void targetStarted(BuildEvent event) { - //System.out.println("targetStarted " + event.getTarget().getName()); - } - - /** - * Fired when a target has finished. This event will - * still be thrown if an error occured during the build. - * - * @see BuildEvent#getException() - */ - public void targetFinished(BuildEvent event) { - //System.out.println("targetFinished " + event.getTarget().getName()); - } - - /** - * Fired when a task is started. - * - * @see BuildEvent#getTask() - */ - public void taskStarted(BuildEvent event) { - //System.out.println("taskStarted " + event.getTask().getTaskName()); - } - - /** - * Fired when a task has finished. This event will still - * be throw if an error occured during the build. - * - * @see BuildEvent#getException() - */ - public void taskFinished(BuildEvent event) { - //System.out.println("taskFinished " + event.getTask().getTaskName()); - } - - /** - * Fired whenever a message is logged. - * - * @see BuildEvent#getMessage() - * @see BuildEvent#getPriority() - */ - public void messageLogged(BuildEvent event) { - if (event.getPriority() == Project.MSG_INFO || - event.getPriority() == Project.MSG_WARN || - event.getPriority() == Project.MSG_ERR) - { - logBuffer.append(event.getMessage()); - } - fullLogBuffer.append(event.getMessage()); - - } - } - - } diff --git a/src/testcases/org/apache/tools/ant/types/DescriptionTest.java b/src/testcases/org/apache/tools/ant/types/DescriptionTest.java index a0ffe8bd4..b04205c95 100644 --- a/src/testcases/org/apache/tools/ant/types/DescriptionTest.java +++ b/src/testcases/org/apache/tools/ant/types/DescriptionTest.java @@ -56,7 +56,7 @@ package org.apache.tools.ant.types; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.TaskdefsTest; +import org.apache.tools.ant.BuildFileTest; import junit.framework.TestCase; import junit.framework.AssertionFailedError; @@ -68,7 +68,7 @@ import java.io.*; * * @author Conor MacNeill */ -public class DescriptionTest extends TaskdefsTest { +public class DescriptionTest extends BuildFileTest { public DescriptionTest(String name) { super(name); diff --git a/src/testcases/org/apache/tools/ant/types/FilterSetTest.java b/src/testcases/org/apache/tools/ant/types/FilterSetTest.java index 9982c31ff..84fc7cb82 100644 --- a/src/testcases/org/apache/tools/ant/types/FilterSetTest.java +++ b/src/testcases/org/apache/tools/ant/types/FilterSetTest.java @@ -56,7 +56,7 @@ package org.apache.tools.ant.types; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.TaskdefsTest; +import org.apache.tools.ant.BuildFileTest; import junit.framework.TestCase; import junit.framework.AssertionFailedError; @@ -68,7 +68,7 @@ import java.io.*; * * @author Conor MacNeill */ -public class FilterSetTest extends TaskdefsTest { +public class FilterSetTest extends BuildFileTest { static private final int BUF_SIZE = 32768;