#
# 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.asm.src.dir=../jdk/src/share/classes/jdk/internal/org/objectweb/asm

# source and target levels
build.compiler=modern
javac.source=1.7
javac.target=1.7
test.javac.source=1.8
test.javac.target=1.8

javadoc.option=-tag "implSpec:a:Implementation Requirements:"

# 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 Shell tool
nashorn.shell.tool=jdk.nashorn.tools.Shell

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

# 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
dist.jar=${dist.dir}/nashorn.jar
dist.javadoc.dir=${dist.dir}/javadoc

# nashorn javafx shell
fxshell.tool = jdk.nashorn.tools.FXShell
fxshell.classes.dir = ${build.dir}/fxshell/classes
fxshell.dir = tools/fxshell
fxshell.jar = ${dist.dir}/nashornfx.jar

# 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

# 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.classpath=\
    ${build.classes.dir}
javac.test.classpath=\
    ${build.classes.dir}${path.separator}\
    ${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}

meta.inf.dir=${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-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

# turn on/off test262 scripts for parser tests
test-sys-prop.parsertest.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 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}

src.dir=src
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 \
  -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} -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

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