#
# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

application.title=nashorn

# location of JDK embedded ASM sources
jdk.java.base.dir=../jdk/src/java.base/share/classes
jdk.asm.src.dir=${jdk.java.base.dir}/jdk/internal/org/objectweb/asm

# location of JDK embedded jline sources
jdk.jline.src.dir=../jdk/src/jdk.internal.le/share/classes

# source and target levels
build.compiler=modern
javac.source=1.9
javac.target=1.9

javadoc.option=\
    -tag "implSpec:a:Implementation Requirements:" \
    -tag "implNote:a:Implementation Note:" \
    -tag "moduleGraph:a:Module Graph"

# nashorn version information
nashorn.version=0.1
nashorn.fullversion=0.1
nashorn.product.name=Oracle Nashorn

# This directory is removed when the project is cleaned:
build.dir=build
build.classes.dir=${build.dir}/classes
build.zip=${build.dir}/nashorn.zip
build.gzip=${build.dir}/nashorn.tar.gz

nashorn.override.option=\
 --patch-module jdk.scripting.nashorn=${build.classes.dir}/jdk.scripting.nashorn \
 --patch-module jdk.scripting.nashorn.shell=${build.classes.dir}/jdk.scripting.nashorn.shell \
 --patch-module jdk.dynalink=${build.classes.dir}/jdk.dynalink

# project directory of <nashorn> ant task
nashorntask.dir=buildtools/nashorntask

# nashorn Shell tool
nashorn.shell.tool=jdk.nashorn.tools.Shell

# nasgen tool
nasgen.tool=jdk.nashorn.internal.tools.nasgen.Main

nasgen.module.imports=\
    --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
    --add-exports java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED

# parallel test runner tool
parallel.test.runner=jdk.nashorn.internal.test.framework.ParallelTestRunner

# test classes directory
build.test.classes.dir=${build.dir}/test/classes

# nashorn test jar - internal tests jar and api tests jar
nashorn.internal.tests.jar=${build.dir}/nashorn-internal-tests.jar
nashorn.api.tests.jar=${build.dir}/nashorn-api-tests.jar

# test results directory
build.test.results.dir=${build.dir}/test/reports
build.nosecurity.test.results.dir=${build.dir}/test/nosecurity/reports
build.nooptimistic.test.results.dir=${build.dir}/test/nooptimistic/reports

# This directory is removed when the project is cleaned:
dist.dir=dist
dynalink.jar=${dist.dir}/dynalink.jar
nashorn.jar=${dist.dir}/nashorn.jar
jjs.jar=${dist.dir}/jjs.jar
dist.javadoc.dir=${dist.dir}/javadoc
dist.nashornapi.javadoc.dir=${dist.javadoc.dir}/nashornapi
dist.dynalinkapi.javadoc.dir=${dist.javadoc.dir}/dynalinkapi

# configuration for java flight recorder
run.test.jvmargs.jfr=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=${build.dir},stackdepth=128

# test library location
test.lib=${basedir}${file.separator}test${file.separator}lib

# jars refererred
file.reference.testng.jar=${test.lib}${file.separator}testng-6.8.jar
file.reference.jcommander.jar=${test.lib}${file.separator}jcommander-1.27.jar
file.reference.bsh.jar=${test.lib}${file.separator}bsh-2.0b4.jar
file.reference.snakeyaml.jar=${test.lib}${file.separator}snakeyaml-1.6.jar
file.reference.asmtools.jar=${test.lib}${file.separator}asmtools-60.jar

# TestNG ant task classpath
testng.ant.classpath=\
    ${file.reference.testng.jar}${path.separator}\
    ${file.reference.jcommander.jar}${path.separator}\
    ${file.reference.bsh.jar}${path.separator}\
    ${file.reference.snakeyaml.jar}${path.separator}

# Set testng verbose level
# From TestNG docs: "the verbosity level (0 to 10 where 10 is most detailed)
# Actually, this is a lie: you can specify -1 and this will put TestNG in
# debug mode (no longer slicing off stack traces and all)."

testng.verbose=2

# TestNG listeners - we want to replace TestNG's own JUnit
# reporter, but want everything else provided by default
# Unfortunately, we've to clone the other default reporters here.

testng.listeners=\
 org.testng.reporters.SuiteHTMLReporter, \
 org.testng.reporters.TestHTMLReporter, \
 org.testng.reporters.jq.Main, \
 org.testng.reporters.FailedReporter, \
 org.testng.reporters.XMLReporter \
 org.testng.reporters.EmailableReporter, \
 jdk.nashorn.internal.test.framework.JSJUnitReportReporter

javac.debug=true
javac.encoding=ascii
javac.test.classpath=\
    ${build.test.classes.dir}${path.separator}\
    ${file.reference.testng.jar}${path.separator}\
    ${file.reference.jcommander.jar}${path.separator}\
    ${file.reference.bsh.jar}${path.separator}\
    ${file.reference.snakeyaml.jar}

test.module.imports=\
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.ir=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.codegen=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.parser=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.objects=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.doubleconv=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.events=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.options=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.regexp=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.internal.runtime.regexp.joni=ALL-UNNAMED \
    --add-exports jdk.scripting.nashorn/jdk.nashorn.tools=ALL-UNNAMED \
    --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
    --add-opens jdk.scripting.nashorn/jdk.nashorn.internal.runtime=ALL-UNNAMED \
    --add-opens jdk.scripting.nashorn/jdk.nashorn.internal.runtime.doubleconv=ALL-UNNAMED

meta.inf.dir=${nashorn.module.src.dir}/META-INF

run.classpath=\
    ${build.classes.dir}

# test scripts to run
test.dir=test
test.nosecurity.dir=test/script/nosecurity
test.script.dir=test/script
test.basic.dir=test/script/basic
test.maptests.dir=test/script/maptests
test.error.dir=test/script/error
test.sandbox.dir=test/script/sandbox
test.trusted.dir=test/script/trusted
test.external.dir=test/script/external
test262.dir=${test.external.dir}/test262
test262.suite.dir=${test262.dir}/test/suite
testjfx.dir=${test.script.dir}/jfx
testmarkdown.dir=${test.script.dir}/markdown

test-sys-prop.test.dir=${test.dir}
test-sys-prop.test.js.roots=${test.basic.dir} ${test.maptests.dir} ${test.error.dir} ${test.sandbox.dir} ${test.trusted.dir}
test-sys-prop.test262.suite.dir=${test262.suite.dir}
test-sys-prop.es5conform.testcases.dir=${test.external.dir}/ES5Conform/TestCases
test-sys-prop.test.basic.dir=${test.basic.dir}
test-sys-prop.test.external.dir=${test.external.dir}
test-sys-prop.test.maptests.dir=${test.maptests.dir}
test-sys-prop.test.sandbox.dir=${test.sandbox.dir}
test-sys-prop.test.trusted.dir=${test.trusted.dir}

test-sys-prop-no-security.test.dir=${test.dir}
test-sys-prop-no-security.test.js.roots=${test.nosecurity.dir}

# framework root for our script tests
test-sys-prop.test.js.framework=${test.script.dir}/assert.js
test-sys-prop-no-security.test.js.framework=${test.script.dir}/assert.js

# Control the verbosity of ParserTest
test-sys-prop.parsertest.verbose=false

# turn on/off scripting mode for parser tests
test-sys-prop.parsertest.scripting=true
test-sys-prop.parserapitest.verbose=false

# turn on/off test262 scripts for parser tests
test-sys-prop.parsertest.test262=false
test-sys-prop.parserapitest.test262=false

# Control the verbosity of the CompilerTest
test-sys-prop.compilertest.verbose=false

# turn on/off scripting mode for compiler tests
test-sys-prop.compilertest.scripting=true

# turn on/off test262 scripts for compiler tests
test-sys-prop.compilertest.test262=false

# test directory to be excluded.
test-sys-prop.test.js.exclude.dir=${test.script.dir}/currently-failing ${test.external.dir}

# run everything that's js in here, without checking file headers for test annotations
test-sys-prop.test.js.unchecked.dir=${test262.dir}

# test root for octane
octane-test-sys-prop.test.js.roots=${test.external.dir}/octane/

# run octane benchmars in separate processes? (recommended)
octane-test-sys-prop.separate.process=true

# framework root for octane
octane-test-sys-prop.test.js.framework=${test.basic.dir}/run-octane.js

# test root for sunspider
sunspider-test-sys-prop.test.js.roots=${test.external.dir}/sunspider/tests/sunspider-1.0.2/

# framework root for sunspider
sunspider-test-sys-prop.test.js.framework=${test.basic.dir}/runsunspider.js

# list of tests to be excluded
sunspider-test-sys-prop.test.js.exclude.list=

# execute our script tests in shared nashorn context or not?
test-sys-prop.test.js.shared.context=false

# execute test262 tests in shared nashorn context or not?
test262-test-sys-prop.test.js.shared.context=true

# test262 test root
test262-test-sys-prop.test.js.roots=${test262.suite.dir}

# test262 enable/disable strict mode tests
test262-test-sys-prop.test.js.enable.strict.mode=true

# file containing test262 tests to be excluded
# test262-test-sys-prop.test.js.excludes.file=${test262.dir}/test/config/excludelist.xml

# list of test262 files to be excluded
test262-test-sys-prop.test.js.exclude.list=\
    ${test262.suite.dir}/ch07/7.4/S7.4_A6.js \
    ${test262.suite.dir}/ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js \
    ${test262.suite.dir}/ch15/15.2/15.2.3/15.2.3.6/15.2.3.6-4-170.js 

# list of test262 test dirs to be excluded
test262-test-sys-prop.test.js.exclude.dir=\
    ${test262.suite.dir}/intl402/ \
    ${test262.suite.dir}/bestPractice/

test262-test-sys-prop.test.failed.list.file=${build.dir}/test/failedTests

# test262 test frameworks
test262-test-sys-prop.test.js.framework=\
    --class-cache-size=10 \
    --no-java \
    --no-typed-arrays \
    -timezone=PST \
    ${test.script.dir}/test262.js \
    ${test262.dir}/test/harness/framework.js \
    ${test262.dir}/test/harness/sta.js

# testmarkdown test root
testmarkdown-test-sys-prop.test.js.roots=${testmarkdown.dir}

# execute testmarkdown tests in shared nashorn context or not?
testmarkdown-test-sys-prop.test.js.shared.context=false

# framework root for markdown script tests
testmarkdown-test-sys-prop.test.js.framework=\
    ${test.script.dir}${file.separator}markdown.js

# testjfx test root
testjfx-test-sys-prop.test.js.roots=${testjfx.dir}

# execute testjfx tests in shared nashorn context or not?
testjfx-test-sys-prop.test.js.shared.context=false

# framework root for our script tests
testjfx-test-sys-prop.test.js.framework=\
    -fx \
    ${test.script.dir}${file.separator}jfx.js

file.reference.jemmyfx.jar=${test.lib}${file.separator}JemmyFX.jar
file.reference.jemmycore.jar=${test.lib}${file.separator}JemmyCore.jar
file.reference.jemmyawtinput.jar=${test.lib}${file.separator}JemmyAWTInput.jar
file.reference.jfxrt.jar=${java.home}${file.separator}lib${file.separator}ext${file.separator}jfxrt.jar
testjfx.run.test.classpath=\
    ${file.reference.jemmyfx.jar}${path.separator}\
    ${file.reference.jemmycore.jar}${path.separator}\
    ${file.reference.jemmyawtinput.jar}${path.separator}\
    ${file.reference.testng.jar}${path.separator}\
    ${file.reference.jcommander.jar}${path.separator}\
    ${file.reference.bsh.jar}${path.separator}\
    ${file.reference.snakeyaml.jar}${path.separator}\
    ${nashorn.internal.tests.jar}${path.separator}\
    ${nashorn.api.tests.jar}

# testjfx VM options for script tests with @fork option
testjfx-test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} -cp ${testjfx.run.test.classpath}

run.test.classpath=\
    ${file.reference.testng.jar}${path.separator}\
    ${file.reference.jcommander.jar}${path.separator}\
    ${file.reference.bsh.jar}${path.separator}\
    ${file.reference.snakeyaml.jar}${path.separator}\
    ${nashorn.internal.tests.jar}${path.separator}\
    ${nashorn.api.tests.jar}

dynalink.module.src.dir=src/jdk.dynalink/share/classes
dynalink.module.classes.dir=${build.classes.dir}/jdk.dynalink
nashorn.module.src.dir=src/jdk.scripting.nashorn/share/classes
nashorn.module.classes.dir=${build.classes.dir}/jdk.scripting.nashorn
nashorn.shell.module.src.dir=src/jdk.scripting.nashorn.shell/share/classes
nashorn.shell.module.classes.dir=${build.classes.dir}/jdk.scripting.nashorn.shell

src.dir=${dynalink.module.src.dir}${path.separator}\
        ${nashorn.module.src.dir}${path.separator}\
        ${nashorn.shell.module.src.dir}${path.separator}\
        ${jdk.jline.src.dir}

test.src.dir=test/src

# -Xmx is used for all tests, -Xms only for octane benchmark
run.test.xmx=2G
run.test.xms=2G

# uncomment this jfr.args to enable light recordings. the stack needs to be cranked up to 1024 frames,
# or everything will as of the now drown in lambda forms and be cut off.
#
#jfr.args=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath="test_suite.jfr",stackdepth=1024 \

jfr.args=

run.test.user.language=tr
run.test.user.country=TR

run.test.jvmargs.common=\
  -server \
  ${test.module.imports} \
  ${run.test.jvmargs.external} \
  --add-modules jdk.scripting.nashorn.shell \
  ${nashorn.override.option} \
  -Dfile.encoding=UTF-8 \
  -Duser.language=${run.test.user.language} \
  -Duser.country=${run.test.user.country} \
  -Dnashorn.typeInfo.cacheDir=${build.dir}${file.separator}test${file.separator}type_info_cache \
  ${jfr.args} \
  -XX:+HeapDumpOnOutOfMemoryError

# turn on assertions for tests
run.test.jvmargs.main=${run.test.jvmargs.common} -esa -ea

# Extra jvmargs that might be useful for debugging
# and performance improvements/monitoring
#
# -XX:+UnlockDiagnosticVMOptions
#
# turn off compressed class pointers in metaspace
# -XX:-UseCompressedKlassPointers
#
# dump the heap after every GC
# -XX:+PrintHeapAtGC
#
# manually set a metaspace size for class data
# -XX:ClassMetaspaceSize=300M
#
# print out methods compiled
# -XX:+PrintCompilation
#
# print all compiled nmethods with oopmaps and lots of other info
# -XX:+PrintNMethods
#
# activate the generic "UseNewCode" flag to test whatever functionality
# lies behind it. This is the preferred way to test a, yet flagless,
# feature in HotSpot - for example, the uncommon trap placement fix
# was hidden behind this flag before it became the default
#
# -XX:+UnlockDiagnosticVMOptions -XX:+UseNewCode
#
# Crank up the type profile level to 222, which has some warmup
# penalties, but produces much better code for JavaScript, where better
# and more intrusive type profiling is required to get rid of
# a large amount of unnecessary guard code, that could not otherwise
# be eliminated
#
# -XX:TypeProfileLevel=222
#

# Use best known performance options for octane
run.test.jvmargs.octane.main=${run.test.jvmargs.common} -XX:TypeProfileLevel=222

# Security manager args - make sure that we run with the nashorn.policy that the build creates
run.test.jvmsecurityargs=-Xverify:all -Djava.security.manager -Djava.security.policy=${build.dir}/nashorn.policy -Djava.security.properties=${build.dir}/nashorn.security.properties

# VM options for script tests with @fork option
test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} ${run.test.jvmsecurityargs} -cp ${run.test.classpath}
# VM options for no-security script tests with @fork option - same as above but without jvmsecurityargs
test-sys-prop-no-security.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} -cp ${run.test.classpath}

# path of rhino.jar for benchmarks
rhino.dir=
rhino.jar=${rhino.dir}/js.jar

v8.shell=d8

# How many iterations should 'ant octane' run for each
# benchmark
octane.iterations=25

# List of octane tests to run, as properties prefixed with
# "octane.benchmark." mapping to the benchmark name in
# the test harness
#
# Octane tests that are disabled should have their entire line
# commented out  Tests may be disabled for functionality reasons when
# they have bugs or when the runtime doesn't handle them (yet)
octane.benchmark.box2d=box2d
#octane.benchmark.code-load=code-load
octane.benchmark.crypto=crypto
octane.benchmark.deltablue=deltablue
octane.benchmark.earley-boyer=earley-boyer
octane.benchmark.gbemu=gbemu
octane.benchmark.navier-stokes=navier-stokes
octane.benchmark.mandreel=mandreel
octane.benchmark.pdfjs=pdfjs
octane.benchmark.raytrace=raytrace
octane.benchmark.regexp=regexp
octane.benchmark.richards=richards
octane.benchmark.splay=splay
#octane.benchmark.typescript=typescript
#octane.benchmark.zlib=zlib

#path to rhino jar file
octaneperf-sys-prop.rhino.jar=${rhino.jar}

#timeout for performance tests in minutes
octaneperf-sys-prop.timeout.value=10

#how many iterations to run sunspider after warmup
sunspider.iterations=3000

#################
# code coverage #
#################

#enable/disable code coverage; please redifine in the ${user.home}/.nashorn.project.local.properties
make.code.coverage=false

#type of codecoverage; one of static or dynamic. Now only dynamic is supported
jcov=dynamic

#naming of CC results
#NB directory specified in the cc.dir will be cleaned up!!!
cc.dir=${basedir}/../Codecoverage_Nashorn
cc.result.file.name=CC_${jcov}_nashorn.xml

#dynamic CC parameters; please redefine in the ${user.home}/.nashorn.project.local.properties
jcov2.lib.dir=${basedir}/../jcov2/lib
jcov.jar=${jcov2.lib.dir}/jcov.jar
cc.include=jdk\.nashorn\.*
cc.exclude=jdk\.nashorn\.internal\.scripts\.*
cc.dynamic.genereate.template=true
cc.template=${cc.dir}/CC_template.xml
cc.dynamic.args=-javaagent:${jcov.jar}=include=${cc.include},exclude=${cc.exclude},type=all,verbose=0,file=${cc.dir}/${cc.result.file.name}
