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

javadoc.title=Java Editor

spec.version.base=2.101.0
test.qa-functional.cp.extra=${editor.dir}/modules/org-netbeans-modules-editor-fold.jar
javac.release=17
#test.unit.cp.extra=
#test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:${o.n.core.dir}/lib/boot.jar:${libs.xerces.dir}/modules/ext/xerces-2.6.2.jar:${libs.xerces.dir}/modules/ext/xml-commons-dom-ranges-1.0.b2.jar:${retouche/javacimpl.dir}/modules/ext/javac-impl.jar

#test configs

test.config.formattingoptions.includes=\
   **/FormattingOptionsTest.class

test.config.occurrences.includes=\
    **/MarkOccurrencesTest.class

test.config.navigation.includes=\
    **/EditorNavigationSuite.class

test.config.generate.includes=\
    **/CodeGenerationSuite.class

test.config.completiongui.includes=\
    **/GuiTest.class

test.config.folding.includes=\
    **/FoldingSuite.class

test.config.formatting.includes=\
    **/formatting/BasicTest.class

test.config.codetemplates.includes=\
    **/codetemplates/CodeTemplatesTest.class

test.config.codecompletion.includes=\
    **/CodeCompletionSuite.class

test.config.remove.includes=\
    **/RemoveSurroundingTest.class

test.config.breadcrumbs.includes=\
    **/Breadcrumbs.class

test.config.stable.includes=\
    **/StableSuite.class

test.config.completion.includes=\
    **/completion/**Test.class

test.config.jet-main.includes=\
   **/completion/*Test.class,\
   **/javadoc/*Test.class,\
   org/netbeans/modules/java/editor/overridden/*Test.class,\
   org/netbeans/modules/editor/java/GoToSupportTest.class,\
   org/netbeans/modules/editor/java/JavaBraceCompletionUnitTest.class,\
   org/netbeans/modules/editor/java/TypingCompletionUnitTest.class,\
   org/netbeans/modules/java/editor/imports/ComputeImportsTest.class,\
   **/codegen/*Test.class

test.config.stableBTD.includes=**/*Test.class
test.config.stableBTD.excludes=\
    org/netbeans/test/**/*,\
    **/MarkOccurrencesTest.class,\
    **/semantic/*,\
    **/ClipboardHandlerTest.class,\
    **/CompletionTestBase.class,\
    **/ComputeImportsTest.class,\
    **/DelegateMethodGeneratorTest.class,\
    **/DocPositionsTest.class,\
    **/EqualsHashCodeGeneratorTest.class,\
    **/GeneratorUtilsTest.class,\
    **/GoToSupportTest.class,\
    **/InstantRenameActionTest.class,\
    **/InstantRenamePerformerTest.class,\
    **/IsOverriddenAnnotationCreatorTest.class,\
    **/JavaBlockCommentCompletionUnitTest.class,\
    **/JavaBraceCompletionUnitTest.class,\
    **/JavaBracketCompletionUnitTest.class,\
    **/JavaCompletionProvider15FeaturesTest.class,\
    **/JavaCompletionProviderAdvancedTest.class,\
    **/JavaCompletionProviderBasicTest.class,\
    **/JavaCompletionProviderElementCreatingTest.class,\
    **/JavadocCompletionUtilsTest.class,\
    **/JavadocImportsTest.class,\
    **/JavaFormatterArrayInitOrEnumUnitTest.class,\
    **/JavaFormatterUnitTest.class,\
    **/JavaFormatterUnitTestCase.class,\
    **/JavaFormatterUnitTestSuite.class,\
    **/JavaReferenceTest.class,\
    **/MarkOccDetTest.class,\
    **/UnusedImportsTest.class,\
    **/UtilitiesTest.class

test.timeout=1200000

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

# remove default compiler JMS flags so that we don't get "Unknown module" warnings due to --limit-modules
jms-compiler.flags.jvm=
test.jms.flags=--limit-modules=java.base,java.logging,java.xml,java.prefs,java.desktop,java.management,java.instrument,jdk.zipfs,java.scripting,java.naming
test.bootclasspath.prepend.args=-Dno.netbeans.bootclasspath.prepend.needed=true
