/* * Copyright (c) 2001-2004 Ant-Contrib project. All rights reserved. * * Licensed 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 net.sf.antcontrib; import java.io.File; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildFileTest; /** * More methods for BuildFileTest. * * @author Dale Anson */ public abstract class BuildFileTestBase extends BuildFileTest { /** * Constructor for the BuildFileTestBase object * * @param name string to pass up to TestCase constructor */ public BuildFileTestBase( String name ) { super( name ); } /** * run a target, expect a build exception * * @param target target to run */ protected void expectBuildException( String target ) { expectSpecificBuildException( target, "no specific reason", null ); } /** * Assert that the given message has NOT been logged with a priority >= INFO * when running the given target. * * @param target Description of the Parameter * @param log Description of the Parameter */ protected void expectLogNotContaining( String target, String log ) { executeTarget( target ); String realLog = getLog(); assertTrue( "expecting log to NOT contain \"" + log + "\" log was \"" + realLog + "\"", realLog.indexOf( log ) < 0 ); } /** * set up to run the named project * <p> * Overrides BuildFileTest.configureProject to first * attempt to make a File out of the filename parameter, if the resulting * file does not exists, then attempt to locate the file in the classpath. * This way, test xml files can be placed alongside of their corresponding * class file and can be easily found. * * @param filename name of project file to run * @exception BuildException Description of the Exception */ protected void configureProject( String filename ) throws BuildException { // find the build file File f = new File( filename ); if ( !f.exists() ) { URL url = getClass().getClassLoader().getResource( filename ); if ( url == null ) throw new BuildException( "Can't find " + filename ); f = new File( url.getPath() ); if ( !f.exists() ) throw new BuildException( "Can't find " + filename ); } super.configureProject(f.getAbsolutePath()); } /** * run a target, expect an exception string containing the substring we look * for (case sensitive match) * * @param target target to run * @param cause information string to reader of report * @param contains substring of the build exception to look for */ protected void expectBuildExceptionStackTraceContaining( String target, String cause, String contains ) { try { executeTarget( target ); } catch ( org.apache.tools.ant.BuildException ex ) { //buildException = ex; // buildException has private access in super StringWriter stacktrace = new StringWriter(); PrintWriter writer = new PrintWriter( stacktrace, true ); ex.printStackTrace( writer ); String trace = stacktrace.toString(); if ( ( null != contains ) && ( trace.indexOf( contains ) == -1 ) ) { fail( "Should throw BuildException because '" + cause + "' with message containing '" + contains + "' (actual message '" + trace + "' instead)" ); } return; } fail( "Should throw BuildException because: " + cause ); } }