# Copyright (C) 2019 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# This is for writing a bit complex tests to drive in JSC shell (e.g. including multiple files with some special options).

- path: complex/generator-regeneration.js
  cmd: runComplexTest [], ["generator-regeneration-after.js"], "", "--useDollarVM=1"

- path: complex/tagged-template-regeneration.js
  cmd: runComplexTest [], ["tagged-template-regeneration-after.js"], "", "--useDollarVM=1"

- path: complex/timezone-offset-apia.js
  cmd: runComplexTest [], [], "TZ=Pacific/Apia", "--useDollarVM=1"

- path: complex/timezone-offset-before-america-los-angeles-is-defined.js
  cmd: runComplexTest [], [], "TZ=America/Los_Angeles", "--useDollarVM=1"

- path: complex/timezone-offset-and-dst-in-warsaw.js
  cmd: runComplexTest [], [], "TZ=Europe/Warsaw", "--useDollarVM=1"

- path: complex/timezone-range-cache-with-dst.js
  cmd: runComplexTest [], [], "TZ=America/Los_Angeles", "--useDollarVM=1"

- path: complex/date-parse-milliseconds.js
  cmd: runComplexTest [], [], "TZ=America/Los_Angeles", "--useDollarVM=1"

- path: complex/intl-timezone-check.js
  cmd: runComplexTest [], [], "TZ=America/Los_Angeles", "--useDollarVM=1"

- path: complex/temporal-now-timezone-check.js
  cmd: runComplexTest [], [], "TZ=America/Los_Angeles", "--useDollarVM=1", "--useTemporal=1"

- path: complex/temporal-now-timezone-with-broken-tz.js
  cmd: runComplexTest [], [], "TZ=UNDEFINED", "--useDollarVM=1", "--useTemporal=1"

- path: complex/for-in-clobberize.js
  cmd: runComplexTest [], [], "", "--destroy-vm"
