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

# WARNING:
# Tests using the multitest feature where failure is expected should *also* be
# listed in tests/lib/analyzer/analyze_tests.status without the "standalone"
# prefix.

package/invalid_uri_test: Fail, OK # CompileTimeErrors intentionally

[ $runtime == vm && $system == windows ]
io/platform_test: Pass, Fail # Issue 14399

[ $runtime == vm ]
package/package_isolate_test: Fail # Issue 12474

[ $runtime == vm && $checked ]
# These tests have type errors on purpose.
io/process_invalid_arguments_test: Fail, OK
io/directory_invalid_arguments_test: Fail, OK
io/file_invalid_arguments_test: Fail, OK
io/socket_invalid_arguments_test: Fail, OK
io/stdout_bad_argument_test: Fail, OK
# These test have type errors on purpose and take very long to run in
# checked mode with no benefit. Skip.
io/file_fuzz_test: Skip
io/directory_fuzz_test: Skip

[ $runtime == vm && $system == macos ]
# This test fails with "Too many open files" on the Mac OS buildbot.
# This is expected as MacOS by default runs with a very low number
# of allowed open files ('ulimit -n' says something like 256).
io/socket_many_connections_test: Skip

# These tests pass on MacOS 10.8.2 but fails on the buildbot machines
# that are running an earlier version of MacOS. The issue is that the
# old version of MacOS does not expand the precomposed utf-8 it gets
# from the VM before comparing it to the decomposed utf-8 used for the
# file system.
io/file_non_ascii_sync_test: Pass, Fail
io/file_non_ascii_test: Pass, Fail
io/directory_non_ascii_sync_test: Pass, Fail
io/directory_non_ascii_test: Pass, Fail
io/process_non_ascii_test: Pass, Fail

[ $compiler == none && ($runtime == drt || $runtime == dartium) ]
typed_array_test: Fail # Issue 13921
typed_array_int64_uint64_test: Fail # Issue 13921
typed_data_isolate_test: Skip # This test uses dart:io
io/*: Skip # Don't run tests using dart:io in the browser
package/*: Skip # Do not run those in Dartium.
debugger/*: Skip # Do not run standalone debugger tests in browser.
coverage_test: Skip
http_launch_test: Skip
vmservice/*: Skip # Do not run standalone vm service tests in browser.
issue14236_test: Skip # Issue 14236 Script snapshots do not work in the browser.


[ $compiler == dartanalyzer ]
javascript_int_overflow_literal_test/01: fail, ok
issue14236_test: Skip # Analyzer can't handle Script snapshots.

# test issue https://code.google.com/p/dart/issues/detail?id=11518
io/file_constructor_test: fail

# The dart:io library is created at build time from separate files, and
# there is no language-spec compatible way to run unit tests on the private
# members and methods of dart:io.
# Dart analyzer spots the misuse of 'part' directives in these unit tests.
io/http_headers_test: Skip
io/http_cookie_date_test: Skip
io/http_parser_test: Skip
io/web_socket_protocol_processor_test: Skip

# This is runtime test.
io/process_exit_negative_test: Skip

[ $compiler == dart2analyzer ]
javascript_int_overflow_literal_test/01: fail, ok
issue14236_test: Skip # Analyzer can't handle Script snapshots.

# test issue https://code.google.com/p/dart/issues/detail?id=11518
io/file_constructor_test: fail

# The dart:io library is created at build time from separate files, and
# there is no language-spec compatible way to run unit tests on the private
# members and methods of dart:io.
# Dart analyzer spots the misuse of 'part' directives in these unit tests.
io/http_headers_test: Skip
io/http_cookie_date_test: Skip
io/http_parser_test: Skip
io/web_socket_protocol_processor_test: Skip

# This is runtime test.
io/process_exit_negative_test: Skip

[ $compiler == dart2js ]
number_identity_test: Skip # Bigints and int/double diff. not supported.
typed_data_test: Skip # dart:typed_data support needed.
bytedata_test: Skip # dart:typed_data support needed.
typed_data_view_test: Skip # dart:typed_data support needed.
typed_data_isolate_test: Skip # dart:typed_data support needed.
typed_array_int64_uint64_test: Skip # dart:typed_data on dart2js does not support 64-bit ints.
float_array_test: Skip # dart:typed_data support needed.
int_array_test: Skip  # dart:typed_data support needed.
io/web_socket_protocol_processor_test: Skip  # Importing code with external keyword
int_array_load_elimination_test: Skip  # This is a VM test
medium_integer_test: RuntimeError, OK # Test fails with JS number semantics: issue 1533.
io/process_exit_negative_test: Fail, OK # relies on a static error that is a warning now.
package/package_isolate_test: Skip # spawnUri does not work in dart2js. See issue 3051
debugger/*: Skip # Do not run standalone vm debugger tests with dart2js.
left_shift_bit_and_op_test: Skip # Integers exceed dart2js precision.
pow_test: Skip # Precision > 53 bits.
double_smi_comparison_test: Skip # Precision > 53 bits.
http_launch_test: Skip
javascript_int_overflow_test: Skip
javascript_int_overflow_literal_test: Skip
oom_error_stacktrace_test: RuntimeError, OK # (OOM on JS may produce a stacktrace).
vmservice/*: Skip # Do not run standalone vm service tests with dart2js.
issue14236_test: Skip # dart2js does not deal with Script snapshots.
io/platform_test: Pass, CompileTimeError # Issue 14603

[ $compiler == dart2js && $jscl ]
assert_test: RuntimeError, OK # Assumes unspecified fields on the AssertionError.
deoptimization_test: RuntimeError, OK # Requires bigint.
out_of_memory_test: RuntimeError, OK # d8 handles much larger arrays than Dart VM.
io/arguments_test: CompileTimeError, OK # Cannot pass arguments to d8.

[ $compiler == dart2js && $runtime == none ]
io/arguments_test: Fail # DartOptions not supported by dart2js, and issue 14200.
medium_integer_test: Pass # The test only fails at runtime, not at compilation.
oom_error_stacktrace_test: Pass # The test only fails at runtime.

[ $compiler == dart2js && $browser ]
*: Skip

[ $compiler == dart2dart ]
# Skip until we stabilize language tests.
*: Skip

[ $arch == arm ]
io/internet_address_test: Fail  # localhost is an Unknown name?

[ $arch == simarm ]
out_of_memory_test: Skip # passes on Mac, crashes on Linux
oom_error_stacktrace_test: Skip # Fails on Linux
io/test_runner_test: Pass, Fail # Issue 12413

[ $arch == simmips ]
io/test_runner_test: Pass, Fail # Issue 12413

[ $arch == simmips || $arch == mips ]
io/file_fuzz_test: Pass, Timeout
io/web_socket_test: Pass, Slow
io/http_server_response_test: Pass, Slow
out_of_memory_test: Skip # passes on Mac, crashes on Linux
oom_error_stacktrace_test: Skip # Fails on Linux

[ $arch == mips ]
io/test_extension_test: Fail
io/test_extension_fail_test: Fail
io/dart_std_io_pipe_test: Fail
io/file_read_special_device_test: Fail

[ $compiler == none && $runtime == dartium && $unchecked ]
assert_test: Fail # Issue 13719: Please triage this failure.

[ $compiler == none && $runtime == dartium ]
javascript_int_overflow_literal_test/01: Fail # Issue 13719: Please triage this failure.
javascript_int_overflow_test: Fail # Issue 13719: Please triage this failure.

[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
io/directory_invalid_arguments_test: StaticWarning
io/process_invalid_arguments_test: StaticWarning
io/raw_secure_server_socket_argument_test: StaticWarning
io/secure_socket_argument_test: StaticWarning
io/skipping_dart2js_compilations_test: CompileTimeError, StaticWarning
io/stdout_bad_argument_test: StaticWarning
io/test_runner_test: CompileTimeError, StaticWarning
package/package1_test: StaticWarning
package/package_test: StaticWarning
typed_data_test: StaticWarning
typed_data_view_test: StaticWarning

