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

#
#  Basic controls of the test system.  Note that the quotes
#  used to delineate options are not used when specifying
#  values
#
#---------------------------------------------
#
#   test.mode
#
# configures how tests are run wrt 
# which jit or interpreter
#
# valid values are comma separated list
# of VM execution modes, 
# like defined below "jet", "opt" and "int"
#
test.mode=jit,opt,int

#--------------------------------------------
#
#  test.timeout
#
#  time limit to complete test run
#  in units of milliseconds
test.timeout=1800000

# per single jvmti test
jvmti.test.timeout=180000
# per single regression test
reg.test.timeout=600000

# --------------------------------------------
#
#  kernel.test.failfast
#
# determines if tests should continue on failure
# valid values are "off" and "on"
#
test.failfast=off

# --------------------------------------------
#
#  kernel.test.forkmode
#
#  instantiate one VM per testsuite
#  or one per single testcase
#  valid values are "once" and "perTest"
#
kernel.test.forkmode=once
lazy.test.forkmode=once

# --------------------------------------------
#
#  test.vmargs
#
#  additional arguments for vm to run tests
#
test.vmargs=-XX:-vm.assert_dialog

#--------------------------------------------
#
#  VM execution modes definitions
#
#  <mode>.name		human readable description of the mode
#  <mode>.switch	cmd-line options to turn the mode on; 
#					beware to avoid empty switch

jit.name=Client mode JIT (default)
jit.switch=

jet.name=jitrino.JET
jet.switch=-Xem:jet

opt.name=jitrino.OPT
opt.switch=-Xem:opt

srv.name=Server mode JIT
srv.switch=-server

int.name=interpreter
int.switch=-Xint

gc_cc.name=Default mode since gc_cc is no more
gc_cc.switch=

#--------------------------------------------
#
#  Eclipse HelloWorld development scenario (aka EHWA)
#
# Locations to obtain platform specific Eclipse SDK bundle
# A bundle will be downloaded and stored for local use, unless 
# ECLIPSE_HOME environment variable points to existing Eclipse installation
 
eclipse.mirror=http://archive.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945
eclipse-3.3.mirror=http://www.mirrorservice.org/sites/download.eclipse.org/eclipseMirror/eclipse/downloads/drops/R-3.3-200706251500
eclipse.windows.x86.url=${eclipse.mirror}/eclipse-SDK-3.2.1-win32.zip
#eclipse.windows.x86.url=${eclipse-3.3.mirror}/eclipse-SDK-3.3-win32.zip
eclipse.windows.x86_64.url=${eclipse.mirror}/eclipse-SDK-3.2.1-win32-x86_64.zip
#eclipse.windows.x86_64.url=${eclipse-3.3.mirror}/eclipse-SDK-3.3-win32-x86_64.zip
eclipse.windows.ia64.url=${eclipse.mirror}/eclipse-SDK-3.2.1-win32-ia64.zip
eclipse.linux.x86.url=${eclipse.mirror}/eclipse-SDK-3.2.1-linux-gtk.tar.gz
eclipse.linux.x86_64.url=${eclipse.mirror}/eclipse-SDK-3.2.1-linux-gtk-x86_64.tar.gz
eclipse.linux.ia64.url=${eclipse.mirror}/eclipse-SDK-3.2.1-linux-gtk-ia64.tar.gz
eclipse.macosx.ppc32.url=${eclipse.mirror}/eclipse-platform-SDK-3.2.1-macosx-carbon.tar.gz
eclipse.freebsd.x86.url=${eclipse.mirror}/eclipse-SDK-3.2.1-linux-gtk.tar.gz
