# 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, {
  # https://crbug.com/v8/7932
  'runtime/command-line-api-without-side-effects': [SKIP],

  # Require optimization, so can't be run on Lite mode.
  'cpu-profiler/coverage-block': [PASS, ['lite_mode == True', SKIP]],
  'cpu-profiler/coverage': [PASS, ['lite_mode == True', SKIP]],

  # https://crbug.com/v8/9029
  'debugger/script-on-after-compile-snapshot': [SKIP],

  # https://crbug.com/v8/10356
  # This test worked in the wasm interpreter, but fails when using Liftoff for
  # debugging.
  'debugger/wasm-externref-global': [FAIL],
}],  # ALWAYS

##############################################################################
['mode != debug or dcheck_always_on', {
  # Investigating flaky tests: https://crbug.com/v8/10876. Enable only on pure debug.
  'debugger/pause-on-oom': [SKIP],
  'debugger/pause-on-oom-wide': [SKIP],
  'debugger/pause-on-oom-extrawide': [SKIP],
}],  # 'mode != debug or dcheck_always_on'

##############################################################################
['system == android', {
  # https://crbug.com/v8/8197
  'debugger/get-possible-breakpoints-class-fields': [SKIP],
}],  # 'system == android'

##############################################################################
['variant != default', {
  # Issue 6167.
  'debugger/eval-scopes': [PASS, FAIL],
  'debugger/scope-skip-variables-with-empty-name': [PASS, FAIL],
  'debugger/update-call-frame-scopes': [PASS, FAIL],
  'debugger/side-effect-free-coverage-enabled': [PASS, FAIL],
  'debugger/side-effect-free-debug-evaluate': [PASS, FAIL],
  'debugger/evaluate-on-call-frame-in-module': [PASS, FAIL],
}],  # variant != default

##############################################################################
['lite_mode or variant == jitless', {
  # Lite mode does not allocate feedback vector.
  'type-profiler/type-profile-start-stop': [SKIP],
  'type-profiler/type-profile': [SKIP],
  'type-profiler/type-profile-with-to-string-tag': [SKIP],
  'type-profiler/type-profile-with-classes': [SKIP],
  'type-profiler/type-profile-disable': [SKIP],

  # TODO(v8:7777): Re-enable once wasm is supported in jitless mode.
  'debugger/asm-js-stack': [SKIP],
  'debugger/asm-js-breakpoint-before-exec': [SKIP],
  'debugger/asm-js-breakpoint-during-exec': [SKIP],
  'debugger/wasm-*': [SKIP],
  'cpu-profiler/console-profile-wasm': [SKIP],
}],  # 'lite_mode or variant == jitless'

##############################################################################
['variant == jitless', {
  # https://crbug.com/v8/7777
  'cpu-profiler/coverage': [SKIP],
  'cpu-profiler/coverage-block': [SKIP],
}], # variant == jitless

##############################################################################
['(arch == arm or arch == arm64) and simulator_run', {
  # Slow tests: https://crbug.com/v8/7783
  'runtime/console-messages-limits': [PASS, NO_VARIANTS, ['mode == debug', SKIP]],
}],  # (arch == arm or arch == arm64) and simulator_run

##############################################################################
['(arch == ppc64) and simulator_run', {
  # Slow test: https://crbug.com/v8/10965
  'runtime/console-messages-limits': [PASS, SLOW],
}],  # (arch == ppc64) and simulator_run

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

##############################################################################
['arch == ppc or arch == ppc64', {
  # Liftoff needs to be enabled before running these tests.
  'debugger/wasm-*': [SKIP],
}],  # 'arch == ppc or arch == ppc64'

##############################################################################
['arch == s390 or arch == s390x', {
  # Stack manipulations in LiveEdit is not implemented for this arch.
  'debugger/set-script-source-stack-padding': [SKIP],
  # Liftoff needs to be enabled before running these tests.
  'debugger/wasm-*': [SKIP],
}],  # 'arch == s390 or arch == s390x'

##############################################################################
['(arch == mipsel or arch == mips64el) and not simd_mips', {
  # Skip tests that fail on MIPS architectures that don't support SIMD.
  'debugger/wasm-scope-info*': [SKIP],
}],  # '(arch == mipsel or arch == mips64el) and not simd_mips'

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

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

##############################################################################
['tsan == True', {
  # TSan handles SIGPROF incorrectly (https://crbug.com/v8/9869).
  'cpu-profiler/console-profile-wasm': [SKIP],
}],  # 'tsan == True'

##############################################################################
['gc_stress or gc_fuzzer or variant == stress_incremental_marking', {
  # Skip tests that fail with GC stress: https://crbug.com/v8/10748
  'cpu-profiler/coverage': [SKIP],
  'cpu-profiler/coverage-block': [SKIP],
  'debugger/get-possible-breakpoints': [SKIP],
  'debugger/get-possible-breakpoints-array-literal': [SKIP],
  'debugger/get-possible-breakpoints-master': [SKIP],
  'debugger/limit-size-of-collected-scripts': [SKIP],
  'debugger/not-hold-promises': [SKIP],
  'debugger/regression-424142': [SKIP],
  'debugger/return-break-locations': [SKIP],
  'debugger/script-on-after-compile': [SKIP],
  'debugger/set-breakpoint-at-last-line': [SKIP],
  'debugger/set-breakpoint-breaks-on-first-breakable-location': [SKIP],
  'heap-profiler/collect-garbage' : [SKIP],
  'runtime-call-stats/collection': [SKIP],
  'runtime/context-destroyed-on-context-collected': [SKIP],
  'runtime/evaluate-async': [SKIP],
  'runtime/internal-properties-entries': [SKIP],
  'type-profiler/type-profile-start-stop': [SKIP],
}], # gc_stress

##############################################################################
['variant == stress_js_bg_compile_wasm_code_gc', {
  # Skip tests that fail with GC stress: https://crbug.com/v8/10748
  'debugger/wasm-debug-command': [SKIP],
  'debugger/wasm-global-names': [SKIP],
  'debugger/wasm-set-breakpoint-liftoff': [SKIP],
  'debugger/wasm-source': [SKIP],
  'debugger/wasm-stepping-with-skiplist': [SKIP],
}], # stress_js_bg_compile_wasm_code_gc

##############################################################################
['variant == stress_concurrent_allocation', {
  # TODO(dinfuehr): Fix tests such that we can remove these lines.
  'cpu-profiler/coverage': [SKIP],
  'cpu-profiler/coverage-block': [SKIP],
  'runtime/internal-properties-entries': [SKIP],
  'runtime-call-stats/collection': [SKIP],
}], # stress_concurrent_allocation

##############################################################################
['asan == True', {
  # There are still memory leaks in some inspector tests
  # (https://crbug.com/v8/11107).
  'runtime/evaluate-async': [SKIP],
}], # asan == True

]
