When writing the testcase for my selector I missed some functionality in BaseSelectorTest: - transfering properties from JUnit test class to the Ant test project - resolve the selection String ("TTTTT..FF") to filenames
I have done that with a local org.apache.tools.ant.BuildFileTest class (like the TaskdefForMakingBed). Should I put that in the BaseSelectorTest class? Jan public class CacheSelectorTest extends BaseSelectorTest { ... public void testScenario1() { try { ... // AccessObject to the test-Ant-environment bft = new BFT(); // give some values (via property file) to that environment bft.writeProperties("f2name="+f2name); bft.writeProperties("f3name="+f3name); bft.writeProperties("f4name="+f4name); // call the target for making the files dirty bft.doTarget("cacheselectortest-makeDirty"); ... String results = selectionString(s); assertEquals( "Wrong files selected. Differing files: " // info text + resolve(diff(expected.toString(), results)), // list of files expected.toString(), // expected result results // result ); } finally { // cleanup the environment cleanupBed(); if (bft!=null) bft.deletePropertiesfile(); } } // ======================== Helper methods ======================== /** * 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(); } private class BFT extends org.apache.tools.ant.BuildFileTest { BFT() { super("nothing"); } BFT(String name) { super(name); } String propfile = "CacheSelectorTest.properties"; boolean isConfigured = false; public void setUp() { configureProject("src/etc/testcases/types/selectors.xml"); isConfigured = true; } public void tearDown() { } public void doTarget(String target) { if (!isConfigured) setUp(); executeTarget(target); } public void writeProperties(String line) { if (!isConfigured) setUp(); File dir = getProject().getBaseDir(); File file = new File(dir, propfile); try { java.io.FileWriter out = new java.io.FileWriter(file, true); out.write(line); out.write(System.getProperty("line.separator")); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public void deletePropertiesfile() { new File(getProject().getBaseDir(), propfile).delete(); } }//class-BFT } -------------------------------- selector.xml <target name="cacheselectortest-makeDirty"> <!-- Load propertyfile generated by SelectorTest-class --> <property file="CacheSelectorTest.properties"/> <!-- work with ${f2name}, ... --> </target>