<?xml version="1.0"?>
<!--
  Copyright 2002,2004 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.
-->
<test:suite 
    xmlns:j="jelly:core" 
    xmlns:test="jelly:junit" 
    xmlns="jelly:ant"
    xmlns:my="jelly:org.apache.commons.jelly.ant.tag.MyTagLibrary">

    <test:case name="nestedClasspath">
            
        <my:dummy var="path" flag="true">
            <classpath>
                <pathelement path="target/classes"/>
                <pathelement path="target/test-classes"/>
            </classpath>            
        </my:dummy>            
    
        <test:assert test="${path != null}"/>
        
    </test:case>

</test:suite>
