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]