# 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-format-de.js
  cmd: runComplexTest [], [], "TZ=Europe/Berlin", "--useDollarVM=1"

- path: complex/timezone-format-en.js
  cmd: runComplexTest [], [], "TZ=America/New_York", "--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"

- path: complex/intl-date-time-format-date-parse.js
  cmd: runComplexTest [], [], "TZ=America/New_York"
