# Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

function_callbacks_structs_by_value_test: Pass, Slow # https://dartbug.com/47304 https://dartbug.com/45007
function_structs_by_value_generated_args_leaf_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
function_structs_by_value_generated_args_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
function_structs_by_value_generated_ret_arg_leaf_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
function_structs_by_value_generated_ret_arg_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
function_structs_by_value_generated_ret_leaf_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
function_structs_by_value_generated_ret_test: Pass, Slow # https://dartbug.com/47303 https://dartbug.com/45007
native_assets/asset_*: Pass, Slow # https://dartbug.com/56330

[ $builder_tag == optimization_counter_threshold ]
aliasing_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_callbacks_structs_by_value_generated_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_callbacks_structs_by_value_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_callbacks_very_many_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_args_leaf_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_args_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_ret_arg_leaf_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_ret_arg_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_ret_leaf_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_structs_by_value_generated_ret_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
function_very_many_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
hardfp_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
regress_43016_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
structs_nnbd_workaround_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
structs_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
variance_function_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
vmspecific_function_gc_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold
vmspecific_function_test: SkipByDesign # Already has VMOptions=--optimization-counter-threshold

[ $compiler == app_jitk ]
native_assets/asset_*: SkipByDesign # Only intended to run from source. https://dartbug.com/51266
native_assets/infer_native_assets_yaml_*: SkipByDesign # Only intended to run from source. https://dartbug.com/51265
vmspecific_leaf_call_test: Skip # https://dartbug.com/46125: Snapshot fails to generate.

[ $mode == debug ]
function_callbacks_structs_by_value_generated_test: Pass, Slow

[ $mode == product ]
regress_47594_test: Skip # Profiler is not available in Product.

[ $nnbd == weak ]
vmspecific_pointer_load_il_test: SkipByDesign # Unsound NNBD boxes things because of nulls.

[ $system == android ]
*: Pass, Slow # https://github.com/dart-lang/sdk/issues/38489
regress_47594_test: Skip # DartDev is not available on Android.
vmspecific_native_finalizer_isolate_groups_test: Skip # SpawnUri not available on Android tester.

[ $system == fuchsia ]
async_void_function_callbacks_test/*: Skip # Test harness doesn't support multitest with Fuchsia
ffi_induce_a_crash_test/*: Skip # Test harness doesn't support multitest with Fuchsia
function_callbacks_leaf_test: SkipByDesign # Needs access to Dart executable
function_callbacks_many_test/*: Skip # Test harness doesn't support multitest with Fuchsia
function_callbacks_structs_by_value_generated_test/*: Skip # Test harness doesn't support multitest with Fuchsia
function_callbacks_structs_by_value_native_callable_generated_test/*: Skip # Test harness doesn't support multitest with Fuchsia
function_callbacks_subtype_test/*: Skip # Test harness doesn't support multitest with Fuchsia
native_assets/*: Skip # Source not available in the emulator
static_checks/*: SkipByDesign # Expecting compile time failures in multi tests doesn't work on the Fuchsia test runner.
unaligned_test/*: Skip # Test harness doesn't support multitest with Fuchsia
vmspecific_enable_ffi_test/*: Skip # Test harness doesn't support multitest with Fuchsia
vmspecific_function_callbacks_exit_test/*: Skip # Test harness doesn't support multitest with Fuchsia
vmspecific_highmem_32bit_test/*: Skip # Test harness doesn't support multitest with Fuchsia
vmspecific_leaf_call_test/*: Skip # Test harness doesn't support multitest with Fuchsia
vmspecific_pointer_load_il_test: SkipByDesign # Not bloating the Fuchsia test package with package:vm/testing/il_matchers.dart

[ $system == windows ]
regress_47594_test: Skip # DynamicLibrary.process() is not available on Windows.

[ $qemu ]
function_callbacks_leaf_test: SkipByDesign # Needs access to Dart executable
native_assets/*: SkipByDesign # Only intended to run on host oses with AOT binaries available, not available on QEMU.

[ $simulator ]
*: Skip # FFI not yet supported on the arm simulator.

[ $compiler != dart2analyzer && $compiler != fasta && $runtime != dart_precompiled && $runtime != vm ]
*: SkipByDesign # FFI is a VM-only feature. (This test suite is part of the default set.)

# These tests trigger and catch an abort (intentionally) and terminate the VM.
# They're incompatible with ASAN because not all memory is freed when aborting and
# with AppJit because the abort the VM before it can generate a snapshot.
[ $compiler == app_jitk || $sanitizer == asan ]
vmspecific_function_callbacks_exit_test: SkipByDesign

[ $compiler == dart2analyzer || $compiler == fasta ]
vmspecific_enable_ffi_test: SkipByDesign # This is a check for VM only.

[ $compiler == dartk || $system == android ]
native_assets/asset_*: SkipByDesign # Only intended to run on host oses with AOT binaries available.

[ $compiler == dartkp || $system == android ]
native_assets/infer_native_assets_yaml_*: SkipByDesign # Only intended to run from source.

[ $compiler == dartkp || $arch == arm64 && $system == fuchsia ]
abi_specific_int_incomplete_jit_test: SkipByDesign # Only intended to run in JIT mode.

[ $compiler != dartkp || $arch == arm64 && $system == fuchsia ]
abi_specific_int_incomplete_aot_test: SkipByDesign # Only intended to run in AOT mode.

[ $runtime == dart_precompiled || $runtime == vm ]
callback_unwind_error_test: Crash # https://github.com/dart-lang/sdk/issues/39487

[ $sanitizer == asan || $sanitizer == msan || $sanitizer == tsan ]
data_not_asan_test: SkipByDesign # This test tries to allocate too much memory on purpose.
