# Copyright (c) 2014, 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.
# Flaky failures
field_script_test: Pass, RuntimeError
get_allocation_samples_test: Pass, RuntimeError # Inconsistent stack trace
get_isolate_rpc_test: Pass, RuntimeError # Issue 29324
get_retained_size_rpc_test: Pass, RuntimeError # Issue 28193
isolate_lifecycle_test: Pass, RuntimeError # Issue 24174
reload_sources_test: Pass, Slow # Reload is slow on the bots

[ $arch == arm ]
process_service_test: Pass, Fail # Issue 24344

[ $compiler == app_jit ]
bad_reload_test: RuntimeError # Issue 27806
complex_reload_test: RuntimeError # Issue 27806
debugger_location_second_test: Skip # Issue 28180
evaluate_activation_test/instance: RuntimeError # Issue 27806
evaluate_activation_test/scope: RuntimeError # Issue 27806
get_object_rpc_test: RuntimeError # Issue 27806
get_source_report_test: RuntimeError # Issue 27806
next_through_closure_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
next_through_create_list_and_map_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
next_through_for_each_loop_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
pause_on_unhandled_async_exceptions2_test: Pass, RuntimeError, Timeout, Crash # Issue 29178
set_name_rpc_test: RuntimeError # Issue 27806
step_through_constructor_calls_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
step_through_function_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
step_through_switch_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
step_through_switch_with_continue_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
unused_changes_in_last_reload_test: RuntimeError # Issue 27806

# Tests with known analyzer issues
[ $compiler == dart2analyzer ]
developer_extension_test: SkipByDesign
evaluate_activation_in_method_class_test: CompileTimeError # Issue 24478
get_isolate_after_language_error_test: SkipByDesign

[ $compiler == dartk ]
next_through_simple_async_test: Pass, Fail # Issue 29145

# Kernel version of tests
[ $compiler != dartk ]
add_breakpoint_rpc_kernel_test: SkipByDesign # kernel specific version of add_breakpoint_rpc_test

[ $compiler == precompiler ]
*: Skip # Issue 24651

# Debugger location tests are slow in debug mode.
[ $mode == debug ]
debugger_location_second_test: Pass, Slow
debugger_location_test: Pass, Slow

# Service protocol is not supported in product mode.
[ $mode == product ]
*: SkipByDesign

[ $system == windows ]
async_generator_breakpoint_test: Skip # Issue 29145
dev_fs_http_put_weird_char_test: Skip # Windows disallows carriage returns in paths
dev_fs_weird_char_test: Skip # Windows disallows question mark in paths

# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
# are to be triaged.  Isolate tests are skipped on purpose due to the usage of
# batch mode.
[ $arch == simdbc64 && $compiler == dartk ]
coverage_optimized_function_test: Crash # Please triage
rewind_optimized_out_test: RuntimeError # Please triage
rewind_test: RuntimeError # Please triage

[ $builder_tag == strong && $compiler == dart2analyzer ]
*: Skip # Issue 28649

# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
# are to be triaged.  Isolate tests are skipped on purpose due to the usage of
# batch mode.
[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
coverage_leaf_function_test: RuntimeError # Please triage.
coverage_optimized_function_test: RuntimeError # Please triage.
dev_fs_spawn_test: RuntimeError # Please triage.
developer_service_get_isolate_id_test: RuntimeError # Please triage.
get_object_rpc_test: RuntimeError # Please triage.
get_source_report_test: RuntimeError # Please triage.
issue_30555_test: RuntimeError # Please triage.
library_dependency_test: RuntimeError # Please triage.
reload_sources_test: Timeout, Skip # Please triage.
set_name_rpc_test: RuntimeError # Please triage.

[ $compiler == none && $runtime == vm && $system == fuchsia ]
*: Skip # Not yet triaged.

[ $mode == debug && $system == windows && $checked ]
async_scope_test: Pass, Slow

[ $mode == debug && ($arch == simarm || $arch == simarm64) ]
*: SkipSlow

[ ($compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047

[ $arch != ia32 || $arch != x64 || $system != linux ]
get_native_allocation_samples_test: Skip # Unsupported.

# These tests are slow on simulators.
[ $arch == simarm || $arch == simarm64 ]
*: Pass, Slow

[ $arch == simdbc || $arch == simdbc64 ]
async_single_step_exception_test: RuntimeError # Issue 29218
implicit_getter_setter_test: RuntimeError # Field guards unimplemented.
next_through_catch_test: RuntimeError # Debugging StringConcatenation doesn't work the same on simdbc as on other platforms (bug #28975).
next_through_simple_async_test: RuntimeError # Debugging StringConcatenation doesn't work the same on simdbc as on other platforms (bug #28975).
next_through_simple_linear_2_test: RuntimeError # Debugging StringConcatenation doesn't work the same on simdbc as on other platforms (bug #28975).
step_through_function_test: RuntimeError # Debugging StringConcatenation doesn't work the same on simdbc as on other platforms (bug #28975).
step_through_getter_test: RuntimeError # Debugging StringConcatenation doesn't work the same on simdbc as on other platforms (bug #28975).

# All tests use dart:io
[ $compiler == dart2js || $browser ]
*: SkipByDesign

# Skip all service tests because random reloads interfere.
[ $hot_reload || $hot_reload_rollback ]
*: SkipByDesign # The service tests should run without being reloaded.

