# 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(jarin/mstarzinger): 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],
}],  # 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

##############################################################################
['variant == stress_incremental_marking', {
  # BUG(chromium:772010).
  'debug/debug-*': [PASS, ['system == windows', SKIP]],
}],  # variant == stress_incremental_marking

##############################################################################
['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],
}],  # '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],
  'wasm-*': [SKIP],
}], # lite_mode or variant == jitless

##############################################################################
['variant == jitless and not embedded_builtins', {
  '*': [SKIP],
}], # variant == jitless and not embedded_builtins

]
