<!-- 
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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. -->

<project name="RUN HARMONY-0000 Regression Test">
    <!-- Test commed from src/test/jni/nio -->
    <target name="run-test">
        <!-- extend JUnit test launcher to run JNI test -->
        <run-junit-test 
            test="org.apache.harmony.drlvm.tests.regression.h0000.DirectByteBufferTest">
            <junit-element>
              <sysproperty key="java.library.path" value="${reg.test.native.path}/H0000"/>
            </junit-element>
        </run-junit-test>
    </target>
</project>

