# 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.
javac.release=21
javac.compilerargs=-Xlint -Xlint:-serial
nbjavac.ignore.missing.enclosing=**/CUP$ASTPHP5Parser$actions.class
nbm.needs.restart=true
spec.version.base=2.50.0
release.external/predefined_vars-1.0.zip=docs/predefined_vars.zip
sigtest.gen.fail.on.error=false

test-unit-sys-prop.xtest.php.home=${netbeans.dest.dir}/php

test.config.uicommit.includes=\
  org/netbeans/test/php/Commit.class
# TODO - fix project/* tests
#  org/netbeans/test/php/Commit.class,\
#  org/netbeans/test/php/project/test*.class

# known to fail sporadically, should be tested separately in CI, ideally with retry script until stabilized
test.config.unreliable.includes=\
  org/netbeans/modules/php/editor/verification/IntroduceSuggestionTest.class,\
  org/netbeans/modules/php/editor/csl/GotoDeclarationPHP81Test.class,\
  org/netbeans/modules/php/editor/csl/FoldingTest.class
test.config.unreliable.excludes=

test.config.stable.includes=**/*Test.class
test.config.stable.excludes=${test.config.unreliable.includes}

test.config.normal.includes=\
  org/netbeans/test/php/Commit.class,\
  org/netbeans/test/php/*/test*.class

test.config.all.includes=\
  org/netbeans/test/php/Commit.class,\
  org/netbeans/test/php/*/*.class

test.config.toBeFixed.includes=\
  org/netbeans/test/php/operators/*.class, \
  org/netbeans/test/php/operatortests/*.class

test.config.stableBTD.includes=**/*Test.class
test.config.stableBTD.excludes=\
    org/netbeans/test/*,\
    **/elements/*,\
    **/indent/*,\
    **/model/impl/*,\
    **/nav/*,\
    **/parser/PhpParserErrorTest.class,\
    **/parser/ParserPerformanceTest.class,\
    **/parser/PhpStructureScannerTest.class,\
    **/parser/SanitizeSourceTest.class,\
    **/parser/api/*,\
    **/php53/*,\
    **/typinghooks/PHPBracketCompleterFileBasedTest.class,\
    **/verification/*,\
    **/ASTNodeUtilitiesTest.class,\
    **/ASTPHP5ParserTest.class,\
    **/FixUsesPerformerTest.class,\
    **/ImportDataCreatorTest.class,\
    **/MagicMethod68Test.class,\
    **/NavigatorDeprecatedTest.class,\
    **/OccurrencesFinderImpl*Test.class,\
    **/OccurrencesFinderImplTest.class,\
    **/PHPCCDocumentationTest.class,\
    **/PHPCodeCompletion*Test.class,\
    **/PHPCodeCompletionTest.class,\
    **/PHPIndexTest.class,\
    **/ParamDeclTypes68Test.class,\
    **/SemanticAnalyzerTest.class,\
    **/ToggleBlockCommentActionTest.class
