# 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.
# Sections in this file should contain "$compiler == dartk" or
# "$compiler == dartkp".

convert/streamed_conversion_json_utf8_decode_test: Slow # Uses --verify_before_gc --verify_after_gc --old_gen_growth_rate=1 flags
isolate/ping_pause_test: Skip # Issue https://dartbug.com/37787

[ $compiler == dartkb ]
isolate/isolate_complex_messages_test: Crash # runtime/vm/object.cc: 17395: error: expected: type_arguments.IsNull() || type_arguments.IsCanonical()

[ $compiler == fasta ]
html/*: Skip # TODO(ahe): Make dart:html available.
js/*: Skip # TODO(ahe): Make dart:js available.

[ $arch == simdbc64 && $hot_reload_rollback ]
convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Uses --verify_before_gc --verify_after_gc --old_gen_growth_rate=1 flags

[ $arch == x64 && $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
mirrors/invocation_fuzz_test: Skip # Because it times out, issue 29439.

[ $arch == x64 && ($hot_reload || $hot_reload_rollback) ]
convert/base64_test/01: Crash # http://dartbug.com/35948

[ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
mirrors/invocation_fuzz_test/emptyarray: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/false: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/none: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/smi: Crash # Crashes on opt counter builder (#31838)
mirrors/invocation_fuzz_test/string: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838

[ $compiler == app_jitk && ($mode == product || $mode == release) ]
isolate/spawn_uri_nested_vm_test: Skip # Timeout, Issue 33385

[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).

# ===== dartkp + dart_precompiled status lines =====
[ $compiler == dartkp && $runtime == dart_precompiled ]
html/*: SkipByDesign # dart:html not supported on VM.
isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
mirrors/*: SkipByDesign # Mirrors are not supported in AOT mode.

[ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).

[ $mode == debug && $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
isolate/message3_test/constList_identical: Skip # Timeout

# ===== dartk + vm status lines =====
[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
html/*: SkipByDesign # dart:html not supported on VM.
isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
mirrors/invocation_fuzz_test: Crash
mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
mirrors/native_class_test: SkipByDesign # Imports dart:html

[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
isolate/illegal_msg_function_test: Skip # Timeout
isolate/pause_test: Skip # Timeout

[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
isolate/message4_test: Crash # Timeout and sporadic crash (issue 33824)
mirrors/dynamic_load_test: Skip # Reload has an effect similar to deleting the dynamically loaded library
mirrors/immutable_collections_test: Pass, Slow
mirrors/mirrors_reader_test: Pass, Slow

[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
html/*: SkipByDesign
js/*: SkipByDesign

[ $hot_reload || $hot_reload_rollback ]
isolate/issue_6610_test: Skip # Sources are looked up on every reload request.
