# 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.98.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.config.jet-main.excludes=**/jackpot/*Test.class
test.config.stableBTD.includes=\
    org/netbeans/modules/java/hints/AnnotationAsSuperInterfaceTest.class,\
    org/netbeans/modules/java/hints/OverridableMethodCallInConstructorTest.class,\
    org/netbeans/modules/java/hints/errors/CreateClass183980Test.class,\
    org/netbeans/modules/java/hints/finalize/FinalizeDeclaredTest.class,\
    org/netbeans/modules/java/hints/infrastructure/CreatorBasedLazyFixListTest.class,\
    org/netbeans/modules/java/hints/infrastructure/LazyHintComputationTest.class,\
    org/netbeans/modules/java/hints/jackpot/code/*Test.class,\
    org/netbeans/modules/java/hints/jackpot/impl/batch/ProgressHandleWrapperTest.class

test.config.commit.includes=\
    org/netbeans/modules/java/hints/errors/CreateMethodTest.class,\
    org/netbeans/modules/java/hints/bugs/CollectionRemoveTest.class

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

#XXX: remove the vanilla javac excludes!
#ExtraCatchTest - requires fix in javac
#ConvertToDiamondBulkHintTest - warnings from javac missing
#ConvertToLambdaTest, AnnotationProcessorsTest - needs fixes to JackpotJavacParser
#ConvertToPatternInstanceOfTest - will be fixed separately
vanilla-javac.excludes=\
    **/AnnotationProcessorsTest.class,\
    **/ExtraCatchTest.class,\
    **/ConvertToDiamondBulkHintTest.class,\
    **/ConvertToLambdaTest.class,\
    **/ConvertToPatternInstanceOfTest.class

test.config.batch1-vanilla-javac.includes=\
    **/*Test.class
test.config.batch1-vanilla-javac.excludes=\
    **/bugs/*Test.class,\
    **/errors/*Test.class,\
    **/jdk/*Test.class,\
    ${vanilla-javac.excludes}

test.config.batch2-vanilla-javac.includes=\
    **/bugs/*Test.class,\
    **/errors/*Test.class,\
    **/jdk/*Test.class

test.config.batch2-vanilla-javac.excludes=\
    ${vanilla-javac.excludes}
