<?xml version="1.0" encoding="UTF-8"?>
<!--

    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 xmlns="http://www.netbeans.org/ns/project/1">
    <type>org.netbeans.modules.apisupport.project</type>
    <configuration>
        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
            <code-name-base>org.netbeans.libs.junit4</code-name-base>
            <module-dependencies/>
            <public-packages>
                <package>org.hamcrest</package>
                <package>org.hamcrest.core</package>
                <package>junit.extensions</package>
                <package>junit.framework</package>
                <package>junit.runner</package>
                <package>junit.textui</package>
                <package>org.junit</package>
                <package>org.junit.experimental</package>
                <package>org.junit.experimental.categories</package>
                <package>org.junit.experimental.max</package>
                <package>org.junit.experimental.results</package>
                <package>org.junit.experimental.runners</package>
                <package>org.junit.experimental.theories</package>
                <package>org.junit.experimental.theories.suppliers</package>
                <package>org.junit.function</package>
                <package>org.junit.matchers</package>
                <package>org.junit.rules</package>
                <package>org.junit.runner</package>
                <package>org.junit.runner.manipulation</package>
                <package>org.junit.runner.notification</package>
                <package>org.junit.runners</package>
                <package>org.junit.runners.model</package>
                <package>org.junit.runners.parameterized</package>
                <package>org.junit.validator</package>
            </public-packages>
            <class-path-extension>
                <runtime-relative-path>ext/junit-4.13.2.jar</runtime-relative-path>
                <binary-origin>external/junit-4.13.2.jar</binary-origin>
            </class-path-extension>
            <class-path-extension>
                <runtime-relative-path>ext/hamcrest-core-1.3.jar</runtime-relative-path>
                <binary-origin>external/hamcrest-core-1.3.jar</binary-origin>
            </class-path-extension>
        </data>
    </configuration>
</project>
