# Copyright (C) 2014 The Android Open Source Project
#
# Licensed 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.

To run the tests a configuration file must be provided.

Make a copy of tests.properties.template so that your settings are not committed.

It can be passed by setting the property "tests.config" (with -D) with the path to the file.

To be able to use jack-tests to run the tests, the configuration file
must define following properties:
 * jack.home: absolute path to Jack directory
 * candidate.toolchain: the toolchain to pass the tests on
 * reference.toolchain: the toolchain to compare the candidate toolchain against
   the available values for these toolchains are:
     - jack-api-vXX: Jack is used through version XX of its api (example: jack-api-v01)
     - jack-cli: Jack is used through its command line interface
     - jill-legacy: sources are first compiled with the legacy compiler, then the result is passed to Jill to create a .jack library to be imported into Jack to produce the binary output
     - legacy: full legacy toolchain. Usually this toolchain is used as reference.toolchain

 * runtime.list: comma-separated list of runtime environment names
 * runtime.location.<runtime environment name>: location of host android runtime environments. you
 must specify those which are listed in runtime.list.

The following values are supported:
 * runtime.location.dalvik-fast-host
 * runtime.location.dalvik-jit
 * runtime.location.art-host

Indicate the location of the legacy java compiler executable with:
 * toolchain.prebuilt.legacy-java-compiler

In Eclipse: define a run configuration with -Dtests.config as a VM argument.
On the command line:
 * use run-jack-tests script with the config file path as first parameter, and the test suite to
run as the second parameter
 * use Ant tasks to run common sets of tests.
   test-jack      : tests that must pass in order to submit a CL
   test-jack-long : tests too long to be passed in the previous case
   test-jack-all  : all tests
   test-sched     : schedlib tests
   Example:
     ant -Dtests.config=/path/to/config test-jack

These Ant tasks generate an HTML report in test-results/ by default. This value can be overridden by setting the jack.tests.output property:
     ant -Dtests.config=/path/to/config -Djack.tests.output=/path/to/report/dir test-jack
