📄 buildfiletest.java
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */package org.apache.tools.ant;import junit.framework.TestCase;import java.io.File;import java.io.PrintStream;import java.net.URL;import java.util.Hashtable;/** * 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. * */public abstract class BuildFileTest extends TestCase { protected Project project; private StringBuffer logBuffer; private StringBuffer fullLogBuffer; private StringBuffer outBuffer; private StringBuffer errBuffer; private BuildException buildException; /** * Default constructor for the BuildFileTest object. */ public BuildFileTest() { super(); } /** * Constructor for the BuildFileTest object. * * @param name string to pass up to TestCase constructor */ public BuildFileTest(String name) { super(name); } /** * Automatically calls the target called "tearDown" * from the build file tested if it exits. * * This allows to use Ant tasks directly in the build file * to clean up after each test. Note that no "setUp" target * is automatically called, since it's trivial to have a * test target depend on it. */ protected void tearDown() throws Exception { if (project == null) { /* * Maybe the BuildFileTest was subclassed and there is * no initialized project. So we could avoid getting a * NPE. * If there is an initialized project getTargets() does * not return null as it is initialized by an empty * HashSet. */ return; } final String tearDown = "tearDown"; if (project.getTargets().containsKey(tearDown)) { project.executeTarget(tearDown); } } /** * run a target, expect for any build exception * * @param target target to run * @param cause information string to reader of report */ public void expectBuildException(String target, String cause) { expectSpecificBuildException(target, cause, null); } /** * Assert that only the given message has been logged with a * priority <= INFO when running the given target. */ public void expectLog(String target, String log) { executeTarget(target); String realLog = getLog(); assertEquals(log, realLog); } /** * Assert that the given substring is in the log messages. */ public void assertLogContaining(String substring) { String realLog = getLog(); assertTrue("expecting log to contain \"" + substring + "\" log was \"" + realLog + "\"", realLog.indexOf(substring) >= 0); } /** * Assert that the given substring is in the output messages. * @since Ant1.7 */ public void assertOutputContaining(String substring) { String realOutput = getOutput(); assertTrue("expecting output to contain \"" + substring + "\" output was \"" + realOutput + "\"", realOutput.indexOf(substring) >= 0); } /** * Assert that the given message has been logged with a priority * <= INFO when running the given target. */ public void expectLogContaining(String target, String log) { executeTarget(target); assertLogContaining(log); } /** * Gets the log the BuildFileTest object. * Only valid if configureProject() has been called. * * @pre logBuffer!=null * @return The log value */ public String getLog() { return logBuffer.toString(); } /** * Assert that the given message has been logged with a priority * >= VERBOSE when running the given target. */ public void expectDebuglog(String target, String log) { executeTarget(target); String realLog = getFullLog(); assertEquals(log, realLog); } /** * Assert that the given substring is in the log messages. */ public void assertDebuglogContaining(String substring) { String realLog = getFullLog(); assertTrue("expecting debug log to contain \"" + substring + "\" log was \"" + realLog + "\"", realLog.indexOf(substring) >= 0); } /** * Gets the log the BuildFileTest object. * * Only valid if configureProject() has been called. * * @pre fullLogBuffer!=null * @return The log value */ public String getFullLog() { return fullLogBuffer.toString(); } /** * execute the target, verify output matches expectations * * @param target target to execute * @param output output to look for */ public void expectOutput(String target, String output) { executeTarget(target); String realOutput = getOutput(); assertEquals(output, realOutput.trim()); } /** * Executes the target, verify output matches expectations * and that we got the named error at the end * * @param target target to execute * @param output output to look for * @param error Description of Parameter */ public void expectOutputAndError(String target, String output, String error) { executeTarget(target); String realOutput = getOutput(); assertEquals(output, realOutput); String realError = getError(); assertEquals(error, realError); } public String getOutput() { return cleanBuffer(outBuffer); } public String getError() { return cleanBuffer(errBuffer); } public BuildException getBuildException() { return buildException; } 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 { cleanedBuffer.append(ch); } } return cleanedBuffer.toString(); } /** * Sets up to run the named project * * @param filename name of project file to run */ public void configureProject(String filename) throws BuildException { configureProject(filename, Project.MSG_DEBUG); } /** * Sets up to run the named project * * @param filename name of project file to run */ public void configureProject(String filename, int logLevel) throws BuildException { logBuffer = new StringBuffer(); fullLogBuffer = new StringBuffer(); project = new Project(); project.init(); File antFile = new File(System.getProperty("root"), filename); project.setUserProperty("ant.file" , antFile.getAbsolutePath()); project.addBuildListener(new AntTestListener(logLevel)); ProjectHelper.configureProject(project, antFile); } /** * Executes a target we have set up *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -