stevel 2005/02/25 03:32:35
Modified: src/main/org/apache/tools/ant/types defaults.properties
docs/manual/CoreTasks conditions.html
Added: src/etc/testcases/taskdefs/conditions parsersupports.xml
src/main/org/apache/tools/ant/taskdefs/condition
ParserSupports.java
src/testcases/org/apache/tools/ant/taskdefs/condition
ParserSupportsTest.java
Log:
condition to check for parser features. Left to others to put into Ant's
build.xml.
Revision Changes Path
1.1
ant/src/etc/testcases/taskdefs/conditions/parsersupports.xml
Index: parsersupports.xml
===================================================================
<project name="parsersupports" >
<!--
* Copyright 2005 The Apache Software Foundation
*
* Licensed 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.
*
-->
<target name="testEmpty">
<condition property="empty">
<parsersupports />
</condition>
<fail>Expected failure before here</fail>
</target>
<target name="testBoth">
<condition property="both">
<parsersupports property="http://bar" feature="http://foo"/>
</condition>
<fail>Expected failure before here</fail>
</target>
<target name="testNamespaces">
<fail>
<condition >
<not>
<parsersupports feature="http://xml.org/sax/features/namespaces"/>
</not>
</condition>
Expected namespace support
</fail>
</target>
<target name="testPropertyInvalid">
<fail>
<condition>
<not>
<parsersupports
property="http://xml.org/sax/properties/declaration-handler"
value="undefined"/>
</not>
</condition>
Expected DTD declaration property settable.
</fail>
</target>
<target name="testPropertyNoValue">
<fail>
<condition>
<not>
<parsersupports
property="http://xml.org/sax/properties/declaration-handler"
/>
</not>
</condition>
Expected no property
</fail>
</target>
<target name="testUnknownProperty">
<fail>
<condition>
<parsersupports property="http://org.apache.ant/something"
value="undefined"/>
</condition>
Expected unsupported property.
</fail>
</target>
<target name="testXercesProperty">
<fail>
<condition>
<not>
<parsersupports
property="http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
value="parsersupports.xml"/>
</not>
</condition>
Expected XSD support on Xerces.
</fail>
</target>
</project>
1.1
ant/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java
Index: ParserSupports.java
===================================================================
/*
* Copyright 2005 The Apache Software Foundation
*
* Licensed 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.condition;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.JAXPUtils;
import org.xml.sax.XMLReader;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
/**
* test for the XML parser supporting a particular feature
* @since Ant 1.7
*/
public class ParserSupports extends ProjectComponent implements Condition {
private String feature;
private String property;
private String value;
public static final String ERROR_BOTH_ATTRIBUTES =
"Property and feature attributes are exclusive";
public static final String FEATURE="feature";
public static final String PROPERTY = "property";
public static final String NOT_RECOGNIZED =
" not recognized: ";
private static final String NOT_SUPPORTED =
" not supported: ";
public static final String ERROR_NO_ATTRIBUTES = "Neither feature or
property are set";
public static final String ERROR_NO_VALUE = "A value is needed when
testing for property support";
/**
* Feature to probe for.
*
* @param feature
*/
public void setFeature(String feature) {
this.feature = feature;
}
/**
* Property to probe for
* @param property
*/
public void setProperty(String property) {
this.property = property;
}
/**
* Optional value to set.
* Converted to a boolean value when setting a property
* @param value
*/
public void setValue(String value) {
this.value = value;
}
/**
* validate the args, then try to set the feature or property
* @return
* @throws BuildException
*/
public boolean eval() throws BuildException {
if(feature!=null && property!=null) {
throw new BuildException(ERROR_BOTH_ATTRIBUTES);
}
if(feature==null && property==null) {
throw new BuildException(ERROR_NO_ATTRIBUTES);
}
//pick a value that is good for everything
if(feature!=null) {
return evalFeature();
} else {
if(value==null) {
throw new BuildException(ERROR_NO_VALUE);
}
return evalProperty();
}
}
/**
* get our reader
* @return a reader
*/
private XMLReader getReader() {
JAXPUtils.getParser();
return JAXPUtils.getXMLReader();
}
/**
* set a feature
* @return true if the feature could be set
*/
public boolean evalFeature() {
XMLReader reader = getReader();
if (value == null) {
value = "true";
}
boolean v= Project.toBoolean(value);
try {
reader.setFeature(feature,v);
} catch (SAXNotRecognizedException e) {
log(FEATURE+NOT_RECOGNIZED+feature,Project.MSG_VERBOSE);
return false;
} catch (SAXNotSupportedException e) {
log(FEATURE+NOT_SUPPORTED + feature, Project.MSG_VERBOSE);
return false;
}
return true;
}
/**
* set a feature
*
* @return true if the feature could be set
*/
public boolean evalProperty() {
XMLReader reader = getReader();
try {
reader.setProperty(property, value);
} catch (SAXNotRecognizedException e) {
log(PROPERTY + NOT_RECOGNIZED + property, Project.MSG_VERBOSE);
return false;
} catch (SAXNotSupportedException e) {
log(PROPERTY + NOT_SUPPORTED + property, Project.MSG_VERBOSE);
return false;
}
return true;
}
}
1.1
ant/src/testcases/org/apache/tools/ant/taskdefs/condition/ParserSupportsTest.java
Index: ParserSupportsTest.java
===================================================================
package org.apache.tools.ant.taskdefs.condition;
import org.apache.tools.ant.BuildFileTest;
/**
*/
public class ParserSupportsTest extends BuildFileTest {
public ParserSupportsTest(String name) {
super(name);
}
/**
* The JUnit setup method
*/
public void setUp() {
configureProject("src/etc/testcases/taskdefs/conditions/parsersupports.xml");
}
public void testEmpty() throws Exception {
expectBuildExceptionContaining("testEmpty",
ParserSupports.ERROR_NO_ATTRIBUTES,
ParserSupports.ERROR_NO_ATTRIBUTES);
}
public void testBoth() throws Exception {
expectBuildExceptionContaining("testBoth",
ParserSupports.ERROR_BOTH_ATTRIBUTES,
ParserSupports.ERROR_BOTH_ATTRIBUTES);
}
public void testNamespaces() throws Exception {
executeTarget("testNamespaces");
}
public void testPropertyNoValue() throws Exception {
expectBuildExceptionContaining("testPropertyNoValue",
ParserSupports.ERROR_NO_VALUE,
ParserSupports.ERROR_NO_VALUE);
}
public void testUnknownProperty() throws Exception {
executeTarget("testUnknownProperty");
}
public void NotestPropertyInvalid() throws Exception {
executeTarget("testPropertyInvalid");
}
public void NotestXercesProperty() throws Exception {
executeTarget("testXercesProperty");
}
}
1.37 +1 -0
ant/src/main/org/apache/tools/ant/types/defaults.properties
Index: defaults.properties
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/types/defaults.properties,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- defaults.properties 22 Jan 2005 22:01:15 -0000 1.36
+++ defaults.properties 25 Feb 2005 11:32:35 -0000 1.37
@@ -42,3 +42,4 @@
scriptselector=org.apache.tools.ant.types.optional.ScriptSelector
scriptcondition=org.apache.tools.ant.types.optional.ScriptCondition
xor=org.apache.tools.ant.taskdefs.condition.Xor
+parsersupports=org.apache.tools.ant.taskdefs.condition.ParserSupports
1.28 +56 -0 ant/docs/manual/CoreTasks/conditions.html
Index: conditions.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTasks/conditions.html,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- conditions.html 7 Feb 2005 23:41:10 -0000 1.27
+++ conditions.html 25 Feb 2005 11:32:35 -0000 1.28
@@ -475,6 +475,62 @@
Sets the default value of the condition to true, then in the script,
sets the value to false. This condition always evaluates to "false"
+
+<h4>parsersupports</h4>
+
+<p>Tests whether Ant's XML parser supports a given
+feature or property, as per the SAX/JAXP specifications, by
+attempting to set the appropriate property/feature/</p>
+
+<p>This condition was added in Apache Ant 1.7.</p>
+
+<table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">property</td>
+ <td valign="top">property to set</td>
+ <td valign="top" align="center">one of property or feature</td>
+ </tr>
+ <tr>
+ <td valign="top">feature</td>
+ <td valign="top">feature to set</td>
+ <td valign="top" align="center">one of property or feature</td>
+ </tr>
+ <tr>
+ <td valign="top">value</td>
+ <td valign="top">string (property) or boolean (feature)</td>
+ <td valign="top" align="center">For property tests, but not for feature
tests</td>
+ </tr>
+</table>
+
+<pre>
+<parsersupports feature="http://xml.org/sax/features/namespaces"/>
+</pre>
+Check for namespace support. All SAX2 parsers should have this.
+<pre>
+<or>
+ <parsersupports
+ feature="http://apache.org/xml/features/validation/schema"/>
+ <parsersupports
+ feature="http://java.sun.com/xml/jaxp/properties/schemaSource"/>
+</or>
+</pre>
+
+Check for XML Schema support.
+
+<pre>
+
+<parsersupports
+
property="http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
+ value="document.xsd"/>
+</pre>
+
+Check for Xerces-specific definition of the location of the no namespace
schema.
+
<hr>
<p align="center">Copyright © 2001-2005 Apache Software
Foundation. All rights Reserved.</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]