# 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.
is.autoload=true
javac.release=17
javac.compilerargs=-Xlint -Xlint:-serial
spec.version.base=2.17.0
#test configs

test.config.jet-main.includes=\
   **/completion/*Test.class

test.config.stableBTD.includes=**/*Test.class
test.config.stableBTD.excludes=\
    **/CompletionTestBase.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
