commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jstrac...@apache.org
Subject cvs commit: jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/ant AntTag.java
Date Thu, 21 Nov 2002 12:41:24 GMT
jstrachan    2002/11/21 04:41:24

  Modified:    jelly    maven.xml
               jelly/src/test/org/apache/commons/jelly/ant suite.jelly
               jelly/src/java/org/apache/commons/jelly/tags/ant AntTag.java
  Added:       jelly/src/test simplelog.properties
               jelly/src/test/org/apache/commons/jelly/ant sample.txt
  Log:
  I've enabled the JellyUnit test case that Peter wrote and added another to both test for
a regular nested <filterset> and one using a refid.
  
  Also added a fix for it too! The short answer is the problem was due to treating <filter>
as a new task rather than a nested property of <filterset>
  
  Again this is due to the complexity of the Ant behaviour. Sometimes Ant tags are meant to
be Tasks, sometimes they are meant to be nested properties, and this can get confusing. I
think the correct logic right now is that...
  
    a tag should be considered task if it is the root node in the tree of Ant tags and the
name of the tag is a valid Ant task name, otherwise treat it as a nested property or datatype.
  
  So the root tag can be a <filterset id="...">. Also there are times when a task shouldn't
be treated as a task but instead as a nested property. e.g. <filter> and <manifest>
are tasks but should be treated as nested properties.
  
  Revision  Changes    Path
  1.1                  jakarta-commons-sandbox/jelly/src/test/simplelog.properties
  
  Index: simplelog.properties
  ===================================================================
  org.apache.commons.logging.simplelog.defaultlog = info
  
  # uncomment this line to turn on debugging
  #org.apache.commons.logging.simplelog.log.org.apache.commons.jelly = debug
  
  
  1.47      +0 -15     jakarta-commons-sandbox/jelly/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/maven.xml,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- maven.xml	5 Nov 2002 07:45:57 -0000	1.46
  +++ maven.xml	21 Nov 2002 12:41:23 -0000	1.47
  @@ -539,13 +539,6 @@
       </java>
     </goal>
   
  -  <goal name="test:discovery" prereqs="jelly-task">
  -    <java classname="org.apache.commons.jelly.impl.TestTagLibraryResolver" fork="yes">
  -      <classpath refid="test.classpath"/>
  -      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog" value="debug"/>
  -    </java>
  -  </goal>
  -
     <goal name="demo:compactxml" prereqs="jelly-task">
     	<mkdir dir="build/compactxml"/>
     	
  @@ -568,14 +561,6 @@
       <java classname="org.apache.commons.jelly.Jelly" fork="yes">
         <classpath refid="test.classpath"/>
         <arg value="src/test/org/apache/commons/jelly/benchmark/benchmark.jelly"/>

  -    </java>
  -  </goal>
  -
  -  <goal name="test:task" prereqs="jelly-task" 
  -  	description="A simple test case for working with Ant tasks">
  -    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
  -      <classpath refid="test.classpath"/>
  -      <arg value="src/test/org/apache/commons/jelly/ant/task/example.jelly"/> 
       </java>
     </goal>
   
  
  
  
  1.4       +33 -6     jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/ant/suite.jelly
  
  Index: suite.jelly
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/ant/suite.jelly,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- suite.jelly	16 Oct 2002 12:45:52 -0000	1.3
  +++ suite.jelly	21 Nov 2002 12:41:23 -0000	1.4
  @@ -2,6 +2,7 @@
   <test:suite 
   	xmlns:j="jelly:core" 
   	xmlns:test="jelly:junit" 
  +	xmlns:util="jelly:util" 
   	xmlns:ant="jelly:jeez">
   
     <j:set var="dir" value="target/test-classes/org/apache/commons/jelly/ant"/>
  @@ -82,19 +83,45 @@
   
   </test:case>
   
  -<!--test:case name="copy">
  -
  -  this is broken, but i'm not sure how to test it.
  +<test:case name="copy">
   
  +	<ant:mkdir dir="${base.dir}/target/tmp/ant-tests"/>
  +	
     <ant:copy
  -    file="TestCase.java"
  -    tofile="TestCase.txt">
  +  	overwrite="true"
  +    file="${basedir}/src/test/org/apache/commons/jelly/ant/sample.txt"
  +    tofile="${basedir}/target/tmp/ant-tests/output.txt">
       <ant:filterset>
         <ant:filter token="foo" value="bar"/>
       </ant:filterset>
     </ant:copy>
  +  
  +  <util:loadText var="text" file="${basedir}/target/tmp/ant-tests/output.txt"/>
  +  
  +  <test:assertEquals expected="hello bar how are you?" actual="${text.trim()}"/>
  +
  +</test:case>
  +
  +<test:case name="copyWithReference">
  +
  +	<ant:mkdir dir="${base.dir}/target/tmp/ant-tests"/>
   
  -</test:case-->
  +	<ant:filterset id="myFilter">
  +		<ant:filter token="foo" value="bar"/>
  +	</ant:filterset>
  +	
  +  <ant:copy
  +  	overwrite="true"
  +    file="${basedir}/src/test/org/apache/commons/jelly/ant/sample.txt"
  +    tofile="${basedir}/target/tmp/ant-tests/output.txt">
  +    <ant:filterset refid="myFilter"/>
  +  </ant:copy>
  +  
  +  <util:loadText var="text" file="${basedir}/target/tmp/ant-tests/output.txt"/>
  +  
  +  <test:assertEquals expected="hello bar how are you?" actual="${text.trim()}"/>
  +
  +</test:case>
   
   
   
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/ant/sample.txt
  
  Index: sample.txt
  ===================================================================
  hello @foo@ how are you?
  
  
  1.19      +29 -3     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/ant/AntTag.java
  
  Index: AntTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/ant/AntTag.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- AntTag.java	12 Nov 2002 08:13:09 -0000	1.18
  +++ AntTag.java	21 Nov 2002 12:41:23 -0000	1.19
  @@ -109,6 +109,10 @@
   
       /** Task, if this tag represents a task. */
       protected Task task;
  +    
  +    /** Does this task have an ID attribute */
  +	private boolean hasIDAttribute;
  +
   
       /** Construct with a project and tag name.
        *
  @@ -147,6 +151,7 @@
       //-------------------------------------------------------------------------
       public void doTag(XMLOutput output) throws Exception {
   
  +        hasIDAttribute = false;
           Project project = getAntProject();
           String tagName = getTagName();
           Object parentObject = findBeanAncestor();
  @@ -154,13 +159,17 @@
           // lets assume that Task instances are not nested inside other Task instances
           // for example <manifest> inside a <jar> should be a nested object,
where as 
           // if the parent is not a Task the <manifest> should create a ManifestTask
  +        //
  +        // also its possible to have a root Ant tag which isn't a task, such as when
  +        // defining <fileset id="...">...</fileset>
   
  -        if ( ! ( parentObject instanceof Task ) && 
  -            project.getTaskDefinitions().containsKey( tagName ) ) {                   
        
  +		if (findParentTaskSource() == null && 
  +            project.getTaskDefinitions().containsKey( tagName )) {			
               
               if ( log.isDebugEnabled() ) {
                   log.debug( "Creating an ant Task for name: " + tagName );            
               }
  +
               // the following algorithm follows the lifetime of a tag
               // http://jakarta.apache.org/ant/manual/develop.html#writingowntask
               // kindly recommended by Stefan Bodewig
  @@ -177,6 +186,7 @@
               // set the task ID if one is given
               Object id = getAttributes().remove( "id" );
               if ( id != null ) {
  +            	hasIDAttribute = true;
                   project.addReference( (String) id, task );
               }
   
  @@ -212,7 +222,7 @@
               if ( log.isDebugEnabled() ) {                            
                   log.debug( "Creating a nested object name: " + tagName );            
               }
  -
  +            
               Object nested = createNestedObject( parentObject, tagName );
   
               if ( nested == null ) {
  @@ -225,6 +235,7 @@
                   // set the task ID if one is given
                   Object id = getAttributes().remove( "id" );
                   if ( id != null ) {
  +            		hasIDAttribute = true;
                       project.addReference( (String) id, nested );
                   }
   
  @@ -489,4 +500,19 @@
           }
           return getParent();
       }
  +	
  +    /**
  +     * Walks the hierarchy until it finds a parent TaskSource or returns null
  +     */
  +    protected TaskSource findParentTaskSource() throws Exception {
  +        Tag tag = getParent();
  +        while (tag != null) {
  +            if (tag instanceof TaskSource) {
  +            	return (TaskSource) tag;
  +            }
  +            tag = tag.getParent();
  +        }
  +        return null;
  +    }
  +    
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>


Mime
View raw message