aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java295
1 files changed, 295 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java
new file mode 100644
index 00000000..2332778e
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java
@@ -0,0 +1,295 @@
+/*
+ * 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.types.selectors;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileTest;
+import org.apache.tools.ant.Project;
+
+/**
+ * Base test case for Selectors. Provides a shared test as well as
+ * a test bed for selecting on, and a helper method for determining
+ * whether selections are correct.
+ *
+ * @deprecated as of 1.9.4. Use {@link org.apache.tools.ant.types.selectors.BaseSelectorRule} instead.
+ */
+@Deprecated
+public abstract class BaseSelectorTest extends BuildFileTest {
+
+ private Project project;
+ private TaskdefForMakingBed tbed = null;
+ protected File basedir;
+ protected File beddir;
+ protected File mirrordir;
+ protected String[] filenames = {".","asf-logo.gif.md5","asf-logo.gif.bz2",
+ "asf-logo.gif.gz","copy.filterset.filtered","zip/asf-logo.gif.zip",
+ "tar/asf-logo.gif.tar","tar/asf-logo-huge.tar.gz",
+ "tar/gz/asf-logo.gif.tar.gz","tar/bz2/asf-logo.gif.tar.bz2",
+ "tar/bz2/asf-logo-huge.tar.bz2","tar/bz2"};
+ protected File[] files = new File[filenames.length];
+ protected File[] mirrorfiles = new File[filenames.length];
+
+ public BaseSelectorTest(String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ configureProject("src/etc/testcases/types/selectors.xml");
+ executeTarget("setUp");
+ beddir = new File(super.getProject().getProperty("test.dir"));
+ mirrordir = new File(super.getProject().getProperty("mirror.dir"));
+ basedir = getProjectDir();
+ project = new Project();
+ project.init();
+ project.setBaseDir(basedir);
+ for (int x = 0; x < files.length; x++) {
+ files[x] = new File(beddir,filenames[x]);
+ mirrorfiles[x] = new File(mirrordir,filenames[x]);
+ }
+ }
+
+ /**
+ * Override this in child classes to return a specific Selector
+ */
+ public abstract BaseSelector getInstance();
+
+
+ /**
+ * Return a preconfigured selector (with a set reference to
+ * project instance).
+ * @return the selector
+ */
+ public BaseSelector getSelector() {
+ BaseSelector selector = getInstance();
+ selector.setProject( getProject() );
+ return selector;
+ }
+
+
+ public Project getProject() {
+ return project;
+ }
+
+ /**
+ * This is a test that all Selectors derived from BaseSelector can
+ * use. It calls the setError() method and checks to ensure that a
+ * BuildException is thrown as a result.
+ */
+ public void testRespondsToError() {
+ BaseSelector s = getInstance();
+ if (s == null) {
+ return;
+ }
+ s.setError("test error");
+ try {
+ s.isSelected(beddir,filenames[0],files[0]);
+ fail("Cannot cause BuildException when setError() is called");
+ } catch (BuildException be) {
+ assertEquals("test error",
+ be.getMessage());
+ }
+ }
+
+
+ /**
+ * This is a helper method that takes a selector and calls its
+ * isSelected() method on each file in the testbed. It returns
+ * a string of "T"s amd "F"s
+ */
+ public String selectionString(FileSelector selector) {
+ return selectionString(beddir,files,selector);
+ }
+
+ /**
+ * This is a helper method that takes a selector and calls its
+ * isSelected() method on each file in the mirror testbed. This
+ * variation is used for dependency checks and to get around the
+ * limitations in the touch task when running JDK 1.1. It returns
+ * a string of "T"s amd "F"s.
+ */
+ public String mirrorSelectionString(FileSelector selector) {
+ return selectionString(mirrordir,mirrorfiles,selector);
+ }
+
+ /**
+ * Worker method for the two convenience methods above. Applies a
+ * selector on a set of files passed in and returns a string of
+ * "T"s amd "F"s from applying the selector to each file.
+ */
+ public String selectionString(File basedir, File[] files, FileSelector selector) {
+ StringBuffer buf = new StringBuffer();
+ for (int x = 0; x < files.length; x++) {
+ if (selector.isSelected(basedir,filenames[x],files[x])) {
+ buf.append('T');
+ }
+ else {
+ buf.append('F');
+ }
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Does the selection test for a given selector and prints the
+ * filenames of the differing files (selected but shouldn't,
+ * not selected but should).
+ * @param selector The selector to test
+ * @param expected The expected result
+ */
+ public void performTests(FileSelector selector, String expected) {
+ String result = selectionString(selector);
+ String diff = diff(expected, result);
+ String resolved = resolve(diff);
+ assertEquals("Differing files: " + resolved, result, expected);
+ }
+
+ /**
+ * Checks which files are selected and shouldn't be or which
+ * are not selected but should.
+ * @param expected String containing 'F's and 'T's
+ * @param result String containing 'F's and 'T's
+ * @return Difference as String containing '-' (equal) and
+ * 'X' (difference).
+ */
+ public String diff(String expected, String result) {
+ int length1 = expected.length();
+ int length2 = result.length();
+ int min = (length1 > length2) ? length2 : length1;
+ StringBuffer sb = new StringBuffer();
+ for (int i=0; i<min; i++) {
+ sb.append(
+ (expected.charAt(i) == result.charAt(i))
+ ? "-"
+ : "X"
+ );
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Resolves a diff-String (@see diff()) against the (inherited) filenames-
+ * and files arrays.
+ * @param filelist Diff-String
+ * @return String containing the filenames for all differing files,
+ * separated with semicolons ';'
+ */
+ public String resolve(String filelist) {
+ StringBuffer sb = new StringBuffer();
+ int min = (filenames.length > filelist.length())
+ ? filelist.length()
+ : filenames.length;
+ for (int i=0; i<min; i++) {
+ if ('X'==filelist.charAt(i)) {
+ sb.append(filenames[i]);
+ sb.append(";");
+ }
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * <p>Creates a testbed. We avoid the dreaded "test" word so that we
+ * don't falsely identify this as a test to be run. The actual
+ * setting up of the testbed is done in the
+ * <code>src/etc/testcases/types/selectors.xml</code> build file.</p>
+ *
+ * <p>Note that the right way to call this is within a try block,
+ * with a finally clause that calls cleanupBed(). You place tests of
+ * the isSelected() method within the try block.</p>
+ */
+ protected void makeBed() {
+ tbed = new TaskdefForMakingBed("setupfiles");
+ tbed.setUp();
+ tbed.makeTestbed();
+ }
+
+ /**
+ * Cleans up the testbed by calling a target in the
+ * <code>src/etc/testcases/types/selectors.xml</code> file.
+ */
+ protected void cleanupBed() {
+ if (tbed != null) {
+ tbed.tearDown();
+ tbed = null;
+ }
+ }
+
+
+ /**
+ * <p>Creates a mirror of the testbed for use in dependency checks.</p>
+ *
+ * <p>Note that the right way to call this is within a try block,
+ * with a finally clause that calls cleanupMirror(). You place tests of
+ * the isSelected() method within the try block.</p>
+ */
+ protected void makeMirror() {
+ tbed = new TaskdefForMakingBed("mirrorfiles");
+ tbed.setUp();
+ tbed.makeMirror();
+ }
+
+ /**
+ * Cleans up the mirror testbed by calling a target in the
+ * <code>src/etc/testcases/types/selectors.xml</code> file.
+ */
+ protected void cleanupMirror() {
+ if (tbed != null) {
+ tbed.deleteMirror();
+ tbed = null;
+ }
+ }
+
+ private class TaskdefForMakingBed extends BuildFileTest {
+
+ TaskdefForMakingBed(String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ configureProject("src/etc/testcases/types/selectors.xml");
+ }
+
+ public void tearDown() {
+ try {
+ super.tearDown();
+ } catch (Exception exc) {
+ // ignore
+ }
+ }
+
+ public void makeTestbed() {
+ executeTarget("setupfiles");
+ }
+
+ public void makeMirror() {
+ executeTarget("mirrorfiles");
+ }
+
+ public void deleteMirror() {
+ executeTarget("tearDown");
+ }
+ }
+
+
+
+}