aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java607
1 files changed, 607 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java
new file mode 100644
index 00000000..0d6453c4
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java
@@ -0,0 +1,607 @@
+/*
+ * 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.taskdefs;
+
+import java.io.File;
+
+import junit.framework.AssertionFailedError;
+
+import org.apache.tools.ant.AntAssert;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.input.InputHandler;
+import org.apache.tools.ant.input.PropertyFileInputHandler;
+import org.apache.tools.ant.types.Path;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ */
+public class AntTest {
+
+ @Rule
+ public BuildFileRule buildRule = new BuildFileRule();
+
+ @Before
+ public void setUp() {
+ buildRule.configureProject("src/etc/testcases/taskdefs/ant.xml");
+ }
+
+ @After
+ public void tearDown() {
+ buildRule.executeTarget("cleanup");
+ }
+
+ @Test
+ public void test1() {
+ try {
+ buildRule.executeTarget("test1");
+ fail("recursive call");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ // target must be specified
+ @Test
+ public void test2() {
+ try {
+ buildRule.executeTarget("test2");
+ fail("required argument not specified");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ // Should fail since a recursion will occur...
+ @Test
+ public void test3() {
+ try {
+ buildRule.executeTarget("test1");
+ fail("recursive call");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ @Test
+ public void test4() {
+ try {
+ buildRule.executeTarget("test4");
+ fail("target attribute must not be empty");
+ } catch (BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ @Test
+ public void test4b() {
+ try {
+ buildRule.executeTarget("test4b");
+ fail("target doesn't exist");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ @Test
+ public void test5() {
+ buildRule.executeTarget("test5");
+ }
+
+ @Test
+ public void test6() {
+ buildRule.executeTarget("test6");
+ }
+
+ @Test
+ public void testExplicitBasedir1() {
+ File dir1 = buildRule.getProject().getBaseDir();
+ File dir2 = buildRule.getProject().resolveFile("..");
+ testBaseDirs("explicitBasedir1",
+ new String[] {dir1.getAbsolutePath(),
+ dir2.getAbsolutePath()
+ });
+ }
+
+ @Test
+ public void testExplicitBasedir2() {
+ File dir1 = buildRule.getProject().getBaseDir();
+ File dir2 = buildRule.getProject().resolveFile("..");
+ testBaseDirs("explicitBasedir2",
+ new String[] {dir1.getAbsolutePath(),
+ dir2.getAbsolutePath()
+ });
+ }
+
+ @Test
+ public void testInheritBasedir() {
+ String basedir = buildRule.getProject().getBaseDir().getAbsolutePath();
+ testBaseDirs("inheritBasedir", new String[] {basedir, basedir});
+ }
+
+ @Test
+ public void testDoNotInheritBasedir() {
+ File dir1 = buildRule.getProject().getBaseDir();
+ File dir2 = buildRule.getProject().resolveFile("ant");
+ testBaseDirs("doNotInheritBasedir",
+ new String[] {dir1.getAbsolutePath(),
+ dir2.getAbsolutePath()
+ });
+ }
+
+ @Test
+ public void testBasedirTripleCall() {
+ File dir1 = buildRule.getProject().getBaseDir();
+ File dir2 = buildRule.getProject().resolveFile("ant");
+ testBaseDirs("tripleCall",
+ new String[] {dir1.getAbsolutePath(),
+ dir2.getAbsolutePath(),
+ dir1.getAbsolutePath()
+ });
+ }
+
+ protected void testBaseDirs(String target, String[] dirs) {
+ BasedirChecker bc = new BasedirChecker(dirs);
+ buildRule.getProject().addBuildListener(bc);
+ buildRule.executeTarget(target);
+ AssertionFailedError ae = bc.getError();
+ if (ae != null) {
+ throw ae;
+ }
+ buildRule.getProject().removeBuildListener(bc);
+ }
+
+ @Test
+ public void testReferenceInheritance() {
+ Path p = Path.systemClasspath;
+ p.setProject(buildRule.getProject());
+ buildRule.getProject().addReference("path", p);
+ buildRule.getProject().addReference("no-override", p);
+ testReference("testInherit", new String[] {"path", "path"},
+ new boolean[] {true, true}, p);
+ testReference("testInherit",
+ new String[] {"no-override", "no-override"},
+ new boolean[] {true, false}, p);
+ testReference("testInherit",
+ new String[] {"no-override", "no-override"},
+ new boolean[] {false, false}, null);
+ }
+
+ @Test
+ public void testReferenceNoInheritance() {
+ Path p = Path.systemClasspath;
+ p.setProject(buildRule.getProject());
+ buildRule.getProject().addReference("path", p);
+ buildRule.getProject().addReference("no-override", p);
+ testReference("testNoInherit", new String[] {"path", "path"},
+ new boolean[] {true, false}, p);
+ testReference("testNoInherit", new String[] {"path", "path"},
+ new boolean[] {false, true}, null);
+ testReference("testInherit",
+ new String[] {"no-override", "no-override"},
+ new boolean[] {true, false}, p);
+ testReference("testInherit",
+ new String[] {"no-override", "no-override"},
+ new boolean[] {false, false}, null);
+ }
+
+ @Test
+ public void testReferenceRename() {
+ Path p = Path.systemClasspath;
+ p.setProject(buildRule.getProject());
+ buildRule.getProject().addReference("path", p);
+ testReference("testRename", new String[] {"path", "path"},
+ new boolean[] {true, false}, p);
+ testReference("testRename", new String[] {"path", "path"},
+ new boolean[] {false, true}, null);
+ testReference("testRename", new String[] {"newpath", "newpath"},
+ new boolean[] {false, true}, p);
+ }
+
+ @Test
+ public void testInheritPath() {
+ buildRule.executeTarget("testInheritPath");
+ }
+
+ protected void testReference(String target, String[] keys,
+ boolean[] expect, Object value) {
+ ReferenceChecker rc = new ReferenceChecker(keys, expect, value);
+ buildRule.getProject().addBuildListener(rc);
+ buildRule.executeTarget(target);
+ AssertionFailedError ae = rc.getError();
+ if (ae != null) {
+ throw ae;
+ }
+ buildRule.getProject().removeBuildListener(rc);
+ }
+
+ @Test
+ public void testLogfilePlacement() {
+ File[] logFiles = new File[] {
+ buildRule.getProject().resolveFile("test1.log"),
+ buildRule.getProject().resolveFile("test2.log"),
+ buildRule.getProject().resolveFile("ant/test3.log"),
+ buildRule.getProject().resolveFile("ant/test4.log")
+ };
+ for (int i=0; i<logFiles.length; i++) {
+ assertTrue(logFiles[i].getName()+" doesn\'t exist",
+ !logFiles[i].exists());
+ }
+
+ buildRule.executeTarget("testLogfilePlacement");
+
+ for (int i=0; i<logFiles.length; i++) {
+ assertTrue(logFiles[i].getName()+" exists",
+ logFiles[i].exists());
+ }
+ }
+
+ @Test
+ public void testInputHandlerInheritance() {
+ InputHandler ih = new PropertyFileInputHandler();
+ buildRule.getProject().setInputHandler(ih);
+ InputHandlerChecker ic = new InputHandlerChecker(ih);
+ buildRule.getProject().addBuildListener(ic);
+ buildRule.executeTarget("tripleCall");
+ AssertionFailedError ae = ic.getError();
+ if (ae != null) {
+ throw ae;
+ }
+ buildRule.getProject().removeBuildListener(ic);
+ }
+
+ @Test
+ public void testRefId() {
+ Path testPath = new Path(buildRule.getProject());
+ testPath.createPath().setPath(System.getProperty("java.class.path"));
+ PropertyChecker pc =
+ new PropertyChecker("testprop",
+ new String[] {null,
+ testPath.toString()});
+ buildRule.getProject().addBuildListener(pc);
+ buildRule.executeTarget("testRefid");
+ AssertionFailedError ae = pc.getError();
+ if (ae != null) {
+ throw ae;
+ }
+ buildRule.getProject().removeBuildListener(pc);
+ }
+
+ @Test
+ public void testUserPropertyWinsInheritAll() {
+ buildRule.getProject().setUserProperty("test", "7");
+ buildRule.executeTarget("test-property-override-inheritall-start");
+
+ AntAssert.assertContains("The value of test is 7", buildRule.getLog());
+ }
+
+ @Test
+ public void testUserPropertyWinsNoInheritAll() {
+ buildRule.getProject().setUserProperty("test", "7");
+ buildRule.executeTarget("test-property-override-no-inheritall-start");
+
+ AntAssert.assertContains("The value of test is 7", buildRule.getLog());
+ }
+
+ @Test
+ public void testOverrideWinsInheritAll() {
+ buildRule.executeTarget("test-property-override-inheritall-start");
+
+ AntAssert.assertContains("The value of test is 4", buildRule.getLog());
+ }
+
+ @Test
+ public void testOverrideWinsNoInheritAll() {
+ buildRule.executeTarget("test-property-override-no-inheritall-start");
+ AntAssert.assertContains("The value of test is 4", buildRule.getLog());
+ }
+
+ @Test
+ public void testPropertySet() {
+ buildRule.executeTarget("test-propertyset");
+ assertTrue(buildRule.getLog().indexOf("test1 is ${test1}") > -1);
+ assertTrue(buildRule.getLog().indexOf("test2 is ${test2}") > -1);
+ assertTrue(buildRule.getLog().indexOf("test1.x is 1") > -1);
+ }
+
+ @Test
+ public void testInfiniteLoopViaDepends() {
+ try {
+ buildRule.executeTarget("infinite-loop-via-depends");
+ fail("recursive call");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ @Test
+ public void testMultiSameProperty() {
+ buildRule.executeTarget("multi-same-property");
+ assertEquals("prop is two", buildRule.getLog());
+ }
+
+ @Test
+ public void testTopLevelTarget() {
+ buildRule.executeTarget("topleveltarget");
+
+ assertEquals("Hello world", buildRule.getLog());
+ }
+
+ @Test
+ public void testMultiplePropertyFileChildren() {
+ PropertyChecker pcBar = new PropertyChecker("bar",
+ new String[] {null, "Bar"});
+ PropertyChecker pcFoo = new PropertyChecker("foo",
+ new String[] {null, "Foo"});
+ buildRule.getProject().addBuildListener(pcBar);
+ buildRule.getProject().addBuildListener(pcFoo);
+ buildRule.executeTarget("multiple-property-file-children");
+ AssertionFailedError aeBar = pcBar.getError();
+ if (aeBar != null) {
+ throw aeBar;
+ }
+ AssertionFailedError aeFoo = pcFoo.getError();
+ if (aeFoo != null) {
+ throw aeFoo;
+ }
+ buildRule.getProject().removeBuildListener(pcBar);
+ buildRule.getProject().removeBuildListener(pcFoo);
+ }
+
+ @Test
+ public void testBlankTarget() {
+ try {
+ buildRule.executeTarget("blank-target");
+ fail("target name must not be empty");
+ } catch(BuildException ex) {
+ //TODO assert exception message
+ }
+ }
+
+ @Test
+ public void testMultipleTargets() {
+ buildRule.executeTarget("multiple-targets");
+ assertEquals("tadadctbdbtc", buildRule.getLog());
+ }
+
+ @Test
+ public void testMultipleTargets2() {
+ buildRule.executeTarget("multiple-targets-2");
+ assertEquals("dadctb", buildRule.getLog());
+ }
+
+ @Test
+ public void testAntCoreLib() {
+ // Cf. #42263
+ buildRule.executeTarget("sub-show-ant.core.lib");
+ String realLog = buildRule.getLog();
+ assertTrue("found ant.core.lib in: " + realLog, realLog.matches(".*(ant[.]jar|build.classes).*"));
+ }
+
+ private class BasedirChecker implements BuildListener {
+ private String[] expectedBasedirs;
+ private int calls = 0;
+ private AssertionFailedError error;
+
+ BasedirChecker(String[] dirs) {
+ expectedBasedirs = dirs;
+ }
+
+ public void buildStarted(BuildEvent event) {}
+ public void buildFinished(BuildEvent event) {}
+ public void targetFinished(BuildEvent event){}
+ public void taskStarted(BuildEvent event) {}
+ public void taskFinished(BuildEvent event) {}
+ public void messageLogged(BuildEvent event) {}
+
+ public void targetStarted(BuildEvent event) {
+ if (event.getTarget().getName().equals("")) {
+ return;
+ }
+ if (error == null) {
+ try {
+ assertEquals(expectedBasedirs[calls++],
+ event.getProject().getBaseDir().getAbsolutePath());
+ } catch (AssertionFailedError e) {
+ error = e;
+ }
+ }
+ }
+
+ AssertionFailedError getError() {
+ return error;
+ }
+
+ }
+
+ private class ReferenceChecker implements BuildListener {
+ private String[] keys;
+ private boolean[] expectSame;
+ private Object value;
+ private int calls = 0;
+ private AssertionFailedError error;
+
+ ReferenceChecker(String[] keys, boolean[] expectSame, Object value) {
+ this.keys = keys;
+ this.expectSame = expectSame;
+ this.value = value;
+ }
+
+ public void buildStarted(BuildEvent event) {}
+ public void buildFinished(BuildEvent event) {}
+ public void targetFinished(BuildEvent event){}
+ public void taskStarted(BuildEvent event) {}
+ public void taskFinished(BuildEvent event) {}
+ public void messageLogged(BuildEvent event) {}
+
+ public void targetStarted(BuildEvent event) {
+ if (event.getTarget().getName().equals("")) {
+ return;
+ }
+ if (error == null) {
+ try {
+ String msg =
+ "Call " + calls + " refid=\'" + keys[calls] + "\'";
+ if (value == null) {
+ Object o = event.getProject().getReference(keys[calls]);
+ if (expectSame[calls++]) {
+ assertNull(msg, o);
+ } else {
+ assertNotNull(msg, o);
+ }
+ } else {
+ // a rather convoluted equals() test
+ Path expect = (Path) value;
+ Path received = (Path) event.getProject().getReference(keys[calls]);
+ boolean shouldBeEqual = expectSame[calls++];
+ if (received == null) {
+ assertTrue(msg, !shouldBeEqual);
+ } else {
+ String[] l1 = expect.list();
+ String[] l2 = received.list();
+ if (l1.length == l2.length) {
+ for (int i=0; i<l1.length; i++) {
+ if (!l1[i].equals(l2[i])) {
+ assertTrue(msg, !shouldBeEqual);
+ }
+ }
+ assertTrue(msg, shouldBeEqual);
+ } else {
+ assertTrue(msg, !shouldBeEqual);
+ }
+ }
+ }
+ } catch (AssertionFailedError e) {
+ error = e;
+ }
+ }
+ }
+
+ AssertionFailedError getError() {
+ return error;
+ }
+
+ }
+
+ private class InputHandlerChecker implements BuildListener {
+ private InputHandler ih;
+ private AssertionFailedError error;
+
+ InputHandlerChecker(InputHandler value) {
+ ih = value;
+ }
+
+ public void buildStarted(BuildEvent event) {
+ check(event);
+ }
+ public void buildFinished(BuildEvent event) {
+ check(event);
+ }
+ public void targetFinished(BuildEvent event) {
+ check(event);
+ }
+ public void taskStarted(BuildEvent event) {
+ check(event);
+ }
+ public void taskFinished(BuildEvent event) {
+ check(event);
+ }
+ public void messageLogged(BuildEvent event) {
+ check(event);
+ }
+
+ public void targetStarted(BuildEvent event) {
+ check(event);
+ }
+
+ private void check(BuildEvent event) {
+ if (error == null) {
+ try {
+ assertNotNull(event.getProject().getInputHandler());
+ assertSame(ih, event.getProject().getInputHandler());
+ } catch (AssertionFailedError e) {
+ error = e;
+ }
+ }
+ }
+
+ AssertionFailedError getError() {
+ return error;
+ }
+
+ }
+
+ private class PropertyChecker implements BuildListener {
+ private String[] expectedValues;
+ private String key;
+ private int calls = 0;
+ private AssertionFailedError error;
+
+ PropertyChecker(String key, String[] values) {
+ this.key = key;
+ this.expectedValues = values;
+ }
+
+ public void buildStarted(BuildEvent event) {}
+ public void buildFinished(BuildEvent event) {}
+ public void targetFinished(BuildEvent event){}
+ public void taskStarted(BuildEvent event) {}
+ public void taskFinished(BuildEvent event) {}
+ public void messageLogged(BuildEvent event) {}
+
+ public void targetStarted(BuildEvent event) {
+ if (event.getTarget().getName().equals("")) {
+ return;
+ }
+ if (calls >= expectedValues.length) {
+ error = new AssertionFailedError("Unexpected invocation of"
+ + " target "
+ + event.getTarget().getName());
+ }
+
+ if (error == null) {
+ try {
+ assertEquals(expectedValues[calls++],
+ event.getProject().getProperty(key));
+ } catch (AssertionFailedError e) {
+ error = e;
+ }
+ }
+ }
+
+ AssertionFailedError getError() {
+ return error;
+ }
+
+ }
+
+
+}