XmlPropertyTestpublic class XmlPropertyTest extends org.apache.tools.ant.BuildFileTest
Fields Summary |
---|
private static final org.apache.tools.ant.util.FileUtils | FILE_UTILS |
Constructors Summary |
---|
public XmlPropertyTest(String name)
super(name);
|
Methods Summary |
---|
private void | doTest(java.lang.String msg, boolean keepRoot, boolean collapse, boolean semantic, boolean include, boolean localRoot)Actually run a test, finding all input files (and corresponding
goldfile)
Enumeration iter =
getFiles(new File(System.getProperty("root"), "src/etc/testcases/taskdefs/xmlproperty/inputs"));
while (iter.hasMoreElements()) {
File inputFile = (File) iter.nextElement();
// What's the working directory? If local, then its the
// folder of the input file. Otherwise, its the "current" dir..
File workingDir;
if ( localRoot ) {
workingDir = inputFile.getParentFile();
} else {
workingDir = FILE_UTILS.resolveFile(new File("."), ".");
}
try {
File propertyFile = getGoldfile(inputFile, keepRoot, collapse,
semantic, include, localRoot);
if (!propertyFile.exists()) {
// System.out.println("Skipping as "
// + propertyFile.getAbsolutePath()
// + ") doesn't exist.");
continue;
}
// System.out.println(msg + " (" + propertyFile.getName() + ") in (" + workingDir + ")");
Project p = new Project();
XmlProperty xmlproperty = new XmlProperty();
xmlproperty.setProject(p);
xmlproperty.setFile(inputFile);
xmlproperty.setKeeproot(keepRoot);
xmlproperty.setCollapseAttributes(collapse);
xmlproperty.setSemanticAttributes(semantic);
xmlproperty.setIncludeSemanticAttribute(include);
xmlproperty.setRootDirectory(workingDir);
// Set a property on the project to make sure that loading
// a property with the same name from an xml file will
// *not* change it.
p.setNewProperty("override.property.test", "foo");
xmlproperty.execute();
Properties props = new Properties();
props.load(new FileInputStream(propertyFile));
//printProperties(p.getProperties());
ensureProperties(msg, inputFile, workingDir, p, props);
ensureReferences(msg, inputFile, p.getReferences());
} catch (IOException ex) {
fail(ex.toString());
}
}
| private static void | ensureProperties(java.lang.String msg, java.io.File inputFile, java.io.File workingDir, org.apache.tools.ant.Project p, java.util.Properties properties)Make sure every property loaded from the goldfile was also
read from the XmlProperty. We could try and test the other way,
but some other properties may get set in the XmlProperty due
to generic Project/Task configuration.
Hashtable xmlproperties = p.getProperties();
// Every key identified by the Properties must have been loaded.
Enumeration propertyKeyEnum = properties.propertyNames();
while(propertyKeyEnum.hasMoreElements()){
String currentKey = propertyKeyEnum.nextElement().toString();
String assertMsg = msg + "-" + inputFile.getName()
+ " Key=" + currentKey;
String propertyValue = properties.getProperty(currentKey);
String xmlValue = (String)xmlproperties.get(currentKey);
if ( propertyValue.indexOf("ID.") == 0 ) {
// The property is an id's thing -- either a property
// or a path. We need to make sure
// that the object was created with the given id.
// We don't have an adequate way of testing the actual
// *value* of the Path object, though...
String id = currentKey;
Object obj = p.getReferences().get(id);
if ( obj == null ) {
fail(assertMsg + " Object ID does not exist.");
}
// What is the property supposed to be?
propertyValue =
propertyValue.substring(3, propertyValue.length());
if (propertyValue.equals("path")) {
if (!(obj instanceof Path)) {
fail(assertMsg + " Path ID is a "
+ obj.getClass().getName());
}
} else {
assertEquals(assertMsg, propertyValue, obj.toString());
}
} else {
if (propertyValue.indexOf("FILE.") == 0) {
// The property is the name of a file. We are testing
// a location attribute, so we need to resolve the given
// file name in the provided folder.
String fileName =
propertyValue.substring(5, propertyValue.length());
File f = new File(workingDir, fileName);
propertyValue = f.getAbsolutePath();
}
assertEquals(assertMsg, propertyValue, xmlValue);
}
}
| private static void | ensureReferences(java.lang.String msg, java.io.File inputFile, java.util.Hashtable references)Ensure all references loaded by the project are valid.
Enumeration referenceKeyEnum = references.keys();
while(referenceKeyEnum.hasMoreElements()){
String currentKey = referenceKeyEnum.nextElement().toString();
Object currentValue = references.get(currentKey);
if (currentValue instanceof Path) {
} else if (currentValue instanceof String) {
} else {
if( ! currentKey.startsWith("ant.") ) {
fail(msg + "-" + inputFile.getName() + " Key="
+ currentKey + " is not a recognized type.");
}
}
}
| private static java.util.Enumeration | getFiles(java.io.File startingDir)Retrieve a list of xml files in the specified folder
and below.
Vector result = new Vector();
getFiles(startingDir, result);
return result.elements();
| private static void | getFiles(java.io.File startingDir, java.util.Vector collect)Collect a list of xml files in the specified folder
and below.
FileFilter filter = new FileFilter() {
public boolean accept (File file) {
if (file.isDirectory()) {
return true;
} else {
return (file.getPath().indexOf("taskdefs") > 0 &&
file.getPath().toLowerCase().endsWith(".xml") );
}
}
};
File[] files = startingDir.listFiles(filter);
for (int i=0;i<files.length;i++) {
File f = files[i];
if (!f.isDirectory()) {
collect.addElement(f);
} else {
getFiles(f, collect);
}
}
| private static java.io.File | getGoldfile(java.io.File input, boolean keepRoot, boolean collapse, boolean semantic, boolean include, boolean localRoot)Munge the name of the input file to find an appropriate goldfile,
based on hardwired naming conventions.
// Substitute .xml with .properties
String baseName = input.getName().toLowerCase();
if (baseName.endsWith(".xml")) {
baseName = baseName.substring(0, baseName.length() - 4)
+ ".properties";
}
File dir = input.getParentFile().getParentFile();
String goldFileFolder = "goldfiles/";
if (keepRoot) {
goldFileFolder += "keeproot-";
} else {
goldFileFolder += "nokeeproot-";
}
if (semantic) {
goldFileFolder += "semantic-";
if (include) {
goldFileFolder += "include-";
}
} else {
if (collapse) {
goldFileFolder += "collapse-";
} else {
goldFileFolder += "nocollapse-";
}
}
return new File(dir, goldFileFolder + baseName);
| private static void | printProperties(java.util.Hashtable xmlproperties)Debugging method to print the properties in the given hashtable
Enumeration keyEnum = xmlproperties.keys();
while (keyEnum.hasMoreElements()) {
String currentKey = keyEnum.nextElement().toString();
System.out.println(currentKey + " = "
+ xmlproperties.get(currentKey));
}
| public void | setUp()
configureProject("src/etc/testcases/taskdefs/xmlproperty.xml");
| public void | testCollapse()
doTest("testCollapse", false, true, false, false, false);
| public void | testCollapseSemantic()
doTest("testCollapseSemantic", false, true, true, false, false);
| public void | testDTD()
executeTarget("testdtd");
assertEquals("Text", getProject().getProperty("root-tag.inner-tag"));
| public void | testFile()
testProperties("test");
| public void | testInclude()
doTest("testInclude", false, false, false, true, false);
| public void | testKeeproot()
doTest("testKeeproot", true, false, false, false, false);
| public void | testKeeprootCollapse()
doTest("testKeeprootCollapse", true, true, false, false, false);
| public void | testKeeprootCollapseSemantic()
doTest("testKeeprootCollapseSemantic", true, true, true, false, false);
| public void | testKeeprootSemantic()
doTest("testKeeprootSemantic", true, false, true, false, false);
| public void | testNeedsCatalog()
executeTarget("testneedscat");
assertEquals("true", getProject().getProperty("skinconfig.foo"));
| public void | testNone()
doTest("testNone", false, false, false, false, false);
| private void | testProperties(java.lang.String target)
executeTarget(target);
assertEquals("true", getProject().getProperty("root-tag(myattr)"));
assertEquals("Text", getProject().getProperty("root-tag.inner-tag"));
assertEquals("val",
getProject().getProperty("root-tag.inner-tag(someattr)"));
assertEquals("false", getProject().getProperty("root-tag.a2.a3.a4"));
assertEquals("CDATA failed",
"<test>", getProject().getProperty("root-tag.cdatatag"));
| public void | testResource()
testProperties("testResource");
| public void | testSemantic()
doTest("testSemantic", false, false, true, false, false);
| public void | testSemanticInclude()
doTest("testSemanticInclude", false, false, true, true, false);
| public void | testSemanticLocal()
doTest("testSemanticInclude", false, false, true, false, true);
|
|