# 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.

spec.version.base=1.106.0

javac.source=1.8

nbroot=../..
jbrowse.external=${nbroot}/retouche
#cp.extra=${jbrowse.external}/Jsr199/dist/Jsr199.jar:\
#${jbrowse.external}/JavaSearch/dist/JavaSearch.jar
test.unit.cp.extra=${nb_all}/retouche/jbrowse/build/test/unit/classes:\
    ${java.editor.dir}/modules/org-netbeans-modules-java-editor.jar:\
    ${editor.dir}/modules/org-netbeans-modules-editor.jar:\

test.unit.run.cp.extra=\
    ${editor.lib.dir}/modules/org-netbeans-modules-editor-lib.jar:\
    ${editor.codetemplates.dir}/modules/org-netbeans-modules-editor-codetemplates.jar:\
    ${java.editor.lib.dir}/modules/org-netbeans-modules-java-editor-lib.jar:\
    ${editor.util.dir}/modules/org-netbeans-modules-editor-util.jar:\
    ${editor.mimelookup.dir}/modules/org-netbeans-modules-editor-mimelookup.jar:\
    ${editor.settings.dir}/modules/org-netbeans-modules-editor-settings.jar:\
    ${editor.settings.storage.dir}/modules/org-netbeans-modules-editor-settings-storage.jar:\
    ${masterfs.dir}/modules/org-netbeans-modules-masterfs.jar:\
    ${defaults.dir}/modules/org-netbeans-modules-defaults.jar:\
    ${o.openidex.util.dir}/modules/org-openidex-util.jar:\
    ${projectui.dir}/modules/org-netbeans-modules-projectui.jar:\
    ${jackpot/engine.dir}/modules/org-netbeans-jackpot.jar:\
    ${openide.windows.dir}/modules/org-openide-windows.jar:\
    ${openide.dialogs.dir}/modules/org-openide-dialogs.jar:\
    ${openide.awt.dir}/modules/org-openide-awt.jar:\
    ${openide.options.dir}/modules/org-openide-options.jar:\
    ${retouche/javacimpl.dir}/modules/ext/javac-impl.jar:\
    ${o.n.core.dir}/core/core.jar:\
    ${o.n.core.dir}/lib/boot.jar:\
    ${classfile.dir}/modules/org-netbeans-modules-classfile.jar:\
    ${contrib/editorhints/editorhighlights.dir}/modules/org-netbeans-modules-editor-highlights.jar
#    ${libs.xerces.dir}/modules/ext/xerces-2.6.2.jar:\
#    ${libs.xerces.dir}/modules/ext/xml-commons-dom-ranges-1.0.b2.jar:\


#    ${nb_all}/editor/build/test/unit/classes:\

# requires nb.javac for compiling of tests on Mac
requires.nb.javac=true

test.runner=junit

test-unit-sys-prop.hints-tools.jar.location=${tools.jar}

test.config.batch1.includes=\
    **/*Test.class
test.config.batch1.excludes=\
    **/errors/*Test.class,\
    **/jdk/*Test.class

test.config.batch2.includes=\
    **/errors/*Test.class,\
    **/jdk/*Test.class

test.jms.flags=\
 --add-opens=java.base/java.net=ALL-UNNAMED \
 --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED \
 --add-opens=java.desktop/javax.swing.text=ALL-UNNAMED \
 --add-opens=java.desktop/sun.awt=ALL-UNNAMED
