# 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.75.0
test.qa-functional.cp.extra=${editor.dir}/modules/org-netbeans-modules-editor-fold.jar
javac.source=1.8
#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
