package com.canoo.ant.task; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildLogger; import org.apache.tools.ant.Location; import org.apache.tools.ant.NoBannerLogger; import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; import org.apache.tools.ant.Target; import org.apache.tools.ant.taskdefs.ImportTask; import org.junit.Assert; import org.junit.Test; /** * Unit tests for {@link PropertyTableTask}. * @author Marc Guillemot */ public class PropertyTableTaskTest { @Test public void testFailASAP() throws Exception { final Project p = prepareProject("com/canoo/ant/table/dataDriven.xml"); try { p.setProperty("failASAP", "true"); p.executeTarget("testFailASAP"); Assert.fail(); } catch (final BuildException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("Wrong day!")); } } @Test public void testFailAtTheEnd() throws Exception { final Project p = prepareProject("com/canoo/ant/table/dataDriven.xml"); try { p.executeTarget("testFailASAP"); Assert.fail(); } catch (final BuildException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("1/7 executions of nested tasks failed")); } } private Project prepareProject(final String resourceName) throws URISyntaxException, IOException { final URL url = getClass().getClassLoader().getResource(resourceName); Assert.assertNotNull("Resource not found: " + resourceName, url); final File f = new File(url.toURI()); final Project p = createProject(); final Target target = new Target(); target.setProject(p); target.setName(""); p.addTaskDefinition("dataDriven", PropertyTableTask.class); ImportTask importTask = new ImportTask(); importTask.setFile(f.getAbsolutePath()); importTask.setProject(p); importTask.setOwningTarget(target); final File tmpFile = File.createTempFile("webtest-unittest", ".xml"); final Location location = new Location(tmpFile.getAbsolutePath()); importTask.setLocation(location); importTask.execute(); tmpFile.delete(); return p; } /** * @return Factory method to create new Project instances */ protected static Project createProject() { final Project project = new Project(); final ProjectHelper helper = ProjectHelper.getProjectHelper(); project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE, helper); helper.getImportStack().addElement("AntBuilder"); // import checks that stack is not empty final BuildLogger logger = new NoBannerLogger(); logger.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO); logger.setOutputPrintStream(System.out); logger.setErrorPrintStream(System.err); project.addBuildListener(logger); project.init(); project.getBaseDir(); return project; } }