# Copyright 2016 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

[
[ALWAYS, {
  # All tests in the bug directory are expected to fail.
  'bugs/*': [FAIL],

  # Issue 3660: Replacing activated TurboFan frames by unoptimized code does
  # not work, but we expect it to not crash.
  'debug/debug-step-turbofan': [PASS, FAIL],

  # Issue 3641: The new 'then' semantics suppress some exceptions.
  # These tests may be changed or removed when 'chain' is deprecated.
  'debug/es6/debug-promises/reject-with-throw-in-reject': [FAIL],
  'debug/es6/debug-promises/reject-with-undefined-reject': [FAIL],
  'debug/es6/debug-promises/reject-with-invalid-reject': [FAIL],

  # Issue 5651: Context mismatch in ScopeIterator::Type() for eval default
  # parameter value (the test causes indexing a FixedArray out of bounds ->
  # CRASH is also a reasonable outcome).
  'debug/es6/debug-scope-default-param-with-eval': [FAIL, CRASH],

  # Slow tests
  'debug/debug-scopes': [PASS, SLOW],
  'debug/debug-stepout-scope-part*': [PASS, SLOW],
  'debug/ignition/debug-step-prefix-bytecodes': [PASS, SLOW, ['mode == debug', SKIP]],

  # Too slow in debug mode and on slow platforms.
  'regress/regress-2318': [PASS, SLOW, ['mode == debug or (arch != ia32 and arch != x64) or asan == True or msan == True', SKIP]],

  # forcing weak callback in asan build change break order
  'debug/debug-stepin-builtin-callback': [['asan == True or msan == True', SKIP]],
}],  # ALWAYS

##############################################################################
['variant == stress', {
  # TODO(turbofan): Functions with eval or debugger now get optimized
  # with Turbofan, which has issues with the debugger issues.
  'debug/debug-evaluate-locals': [FAIL],

  # Very slow in stress mode.
  'regress/regress-2318': [SKIP],

  # Currently fails because breakpoint information is inconsistent after
  # disabling and re-enabling the debugger (https://crbug.com/v8/10403).
  'debug/wasm/debug-step-into-wasm': [SKIP],
}],  # variant == stress

##############################################################################
['variant == stress and (arch == arm or arch == arm64) and simulator_run', {
  # Slow tests: https://crbug.com/v8/7783
  'debug/debug-stepout-scope-part*': [SKIP],
}],  # variant == stress and (arch == arm or arch == arm64) and simulator_run

##############################################################################
['gc_stress == True', {
  # Skip tests not suitable for GC stress.
  # Tests taking too long
  'debug/debug-stepout-scope-part*': [SKIP],

  # Async function tests taking too long
  # https://bugs.chromium.org/p/v8/issues/detail?id=5411
  'debug/es8/async-debug-caught-exception-cases0': [SKIP],
  'debug/es8/async-debug-caught-exception-cases1': [SKIP],
  'debug/es8/async-debug-caught-exception-cases2': [SKIP],
  'debug/es8/async-debug-caught-exception-cases3': [SKIP],
  'debug/es8/async-function-debug-scopes': [SKIP],

  # https://crbug.com/v8/8141
  'debug/debug-liveedit-1': [SKIP],
  'debug/debug-liveedit-double-call': [SKIP],
  'debug/es6/debug-liveedit-new-target-3': [SKIP],
  'debug/side-effect/debug-evaluate-no-side-effect-control': [SKIP],
}],  # 'gc_stress == True'

##############################################################################
['gc_fuzzer', {
  # Slow tests.
  'regress/regress-2318': [SKIP],
}],  # 'gc_fuzzer'

##############################################################################
['predictable == True', {
  # https://crbug.com/v8/8147
  'debug/debug-liveedit-*': [SKIP],
  'debug/debug-set-variable-value': [SKIP],

  # Rely on (blocking) concurrent compilation.
  'debug/regress/regress-opt-after-debug-deopt': [SKIP],
  'debug/regress/regress-prepare-break-while-recompile': [SKIP],
  'regress/regress-7421': [SKIP],
}],  # 'predictable == True'

##############################################################################
['variant == no_wasm_traps', {
  '*': [SKIP],
}],  # variant == no_wasm_traps

##############################################################################
['arch == arm and not simulator_run', {
  # Too slow on chromebooks.
  'debug/ignition/debug-step-prefix-bytecodes': [SKIP],
}],  # 'arch == arm and not simulator_run'

##############################################################################
['arch == arm and mode == debug', {
  # Tests taking too long
  'debug/debug-stepout-scope-part1': [SKIP],
  'debug/debug-stepout-scope-part2': [SKIP],
  'debug/debug-stepout-scope-part3': [SKIP],
  'debug/debug-stepout-scope-part4': [SKIP],
  'debug/debug-stepout-scope-part5': [SKIP],
  'debug/debug-stepout-scope-part6': [SKIP],
  'debug/debug-stepout-scope-part7': [SKIP],
  'debug/debug-stepout-scope-part8': [SKIP],
}],  # 'arch == arm and mode == debug'

##############################################################################
['arch == s390 or arch == s390x', {

  # Stack manipulations in LiveEdit is not implemented for this arch.
  'debug/debug-liveedit-check-stack': [SKIP],
  'debug/debug-liveedit-double-call': [SKIP],
  'debug/debug-liveedit-restart-frame': [SKIP],
}],  # 'arch == s390 or arch == s390x'

##############################################################################
['lite_mode or variant == jitless', {
  # TODO(v8:7777): Re-enable once wasm is supported in jitless mode.
  'debug/wasm/*': [SKIP],
  'regress/regress-crbug-840288': [SKIP],
  'regress/regress-crbug-1032042': [SKIP],
  'wasm-*': [SKIP],
}], # lite_mode or variant == jitless

##############################################################################
['variant == turboprop or variant == nci or variant == nci_as_midtier', {
  # Deopts differently than TurboFan.
  'debug/debug-optimize': [SKIP],
  'debug/debug-compile-optimized': [SKIP],
}],  # variant == turboprop or variant == nci or variant == nci_as_midtier

##############################################################################
# Liftoff needs to be enabled before running these tests.
['arch in (s390, s390x, ppc, ppc64)', {
  'regress/regress-crbug-1032042': [SKIP],
  'regress/regress-crbug-840288': [SKIP],
  'debug/wasm/*': [SKIP],
}],

################################################################################
['variant == stress_snapshot', {
  '*': [SKIP],  # only relevant for mjsunit tests.
}],

]
