# Copyright (c) 2017, 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.

bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
bigint_test: Pass, Slow

[ $builder_tag == obfuscated ]
nsm_invocation_test: SkipByDesign # Relies on non-obfuscated symbols
symbol_test: SkipByDesign # Relies on non-obfuscated symbols
type_tostring_test: SkipByDesign # Expects names in Type.toString()

[ $compiler == dart2bytecode ]
core_runtime_types_test: SkipByDesign # Contains dynamic calls.

[ $compiler == dartkp ]
bigint_parse_radix_test: Slow, Pass # --no_intrinsify
bigint_test/03: SkipSlow # --no_intrinsify
bigint_test/15: SkipSlow # --no_intrinsify

[ $compiler == ddc ]
bigint_test/03: SkipSlow # modPow is very slow
bigint_test/15: SkipSlow # modPow is very slow
list_concurrent_modify_self_test: SkipSlow # missing check causes list to grow to whole heap
regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
uri_parse_test: Slow, Pass
uri_test: Slow, Pass

[ $mode == debug ]
regexp/pcre_test: Slow, Pass # Issue 22008

[ $system == android ]
throw_half_surrogate_pair_test/*: Skip # Issue http://dartbug.com/42094

[ $simulator ]
bigint_parse_radix_test: Skip # Issue 31659
bigint_test: Skip # Issue 31659

[ $arch == x64 && $system == windows ]
stopwatch_test: Skip # Flaky test due to expected performance behaviour.

[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != ddc ]
bigint_js_test: SkipByDesign # JavaScript-specific test

[ $compiler == dart2js && $runtime != none ]
regexp/pcre_test: Slow, Pass # Issue 21593

[ $compiler == dart2js && $runtime == safari ]
date_time11_test: Skip # evades flake detection https://github.com/dart-lang/sdk/issues/50718
local_date_time_test: Skip # evades flake detection https://github.com/dart-lang/sdk/issues/50718
regexp/unicode-property-char-class_test: Skip # evades flake detection https://github.com/dart-lang/sdk/issues/50718
regexp/unicode-property-invalid_test: Skip # evades flake detection https://github.com/dart-lang/sdk/issues/50718
regexp/unicode-regexp-restricted-syntax_test: Skip # evades flake detection https://github.com/dart-lang/sdk/issues/50718

[ $runtime != dart_precompiled && $runtime != vm ]
reg_exp_receive_port_test: SkipByDesign # uses SendPort/ReceivePort

[ $runtime != none && ($compiler == dart2js || $compiler == ddc) ]
int_parse_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.
integer_arith_vm_test: SkipByDesign # Is a VM optimization test that requires int64 support.
iterable_return_type_int64_test: SkipByDesign # Requires int64 support.
typed_data_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.

[ $builder_tag == dwarf || $builder_tag == obfuscated ]
error_stack_trace1_test: SkipByDesign # Relies on symbol names in stack traces.

[ $runtime == dart_precompiled || $runtime == vm ]
regexp/global_test: Skip # Issue 21709
regexp/pcre_test: Slow, Pass

[ $hot_reload || $hot_reload_rollback ]
bigint_test: SkipSlow
