| Index: test/browser/language_tests.js
 | 
| diff --git a/test/browser/language_tests.js b/test/browser/language_tests.js
 | 
| index 564be8d3aa35e396f74f9a3a4f7f9f06750c5387..809e67fb3c01e6b6daa55babf79755f7bffada45 100644
 | 
| --- a/test/browser/language_tests.js
 | 
| +++ b/test/browser/language_tests.js
 | 
| @@ -9,383 +9,428 @@
 | 
|    dart_sdk._isolate_helper.startRootIsolate(function() {}, []);
 | 
|    let async_helper = dart_library.import('async_helper').async_helper;
 | 
|  
 | 
| +  // Test attributes are a list of strings, or a string for a single
 | 
| +  // attribute. Valid attribues are:
 | 
| +  //
 | 
| +  //   'skip' - don't run the test
 | 
| +  //   'fail' - test fails
 | 
| +  //   'timeout' - test times out
 | 
| +  //   'helper'  - not a test, used by other tests.
 | 
| +  //   'unittest' - run separately as a unittest test.
 | 
| +  //
 | 
| +  // Common combinations:
 | 
| +  const fail = 'fail';
 | 
| +  const skip_fail = ['skip', 'fail'];
 | 
| +  const skip_timeout = ['skip', 'timeout'];
 | 
| +
 | 
|    // TODO(jmesserly): separate StrongModeError from other errors.
 | 
| -  let status = {
 | 
| -    expectedFailures: new Set([
 | 
| -      'arithmetic2_test',
 | 
| -      'assert_with_type_test_or_cast_test',
 | 
| -      'assertion_test',
 | 
| -      'async_star_await_pauses_test',
 | 
| -      'async_star_cancel_while_paused_test',
 | 
| -      'async_star_regression_fisk_test',
 | 
| -      'async_switch_test',
 | 
| -      'asyncstar_throw_in_catch_test',
 | 
| -      'await_future_test',
 | 
| -      'bit_operations_test_none_multi',
 | 
| -      'bit_shift_test',
 | 
| -      'bool_test',
 | 
| -      'bound_closure_equality_test',
 | 
| -      'branch_canonicalization_test',  // JS bit operations truncate to 32 bits.
 | 
| -      'call_closurization_test',
 | 
| -      'call_function_apply_test',
 | 
| -      'call_operator_test',
 | 
| -      'call_property_test',
 | 
| -      'call_test',
 | 
| -      'call_this_test',
 | 
| -      'call_through_null_getter_test',
 | 
| -      'call_with_no_such_method_test',
 | 
| -      'canonical_const2_test',
 | 
| -      'canonical_const_test',
 | 
| -      'cascade_precedence_test',
 | 
| -      'cast_test_01_multi',
 | 
| -      'cast_test_02_multi',
 | 
| -      'cast_test_03_multi',
 | 
| -      'cast_test_07_multi',
 | 
| -      'cast_test_10_multi',
 | 
| -      'cast_test_12_multi',
 | 
| -      'cast_test_13_multi',
 | 
| -      'cast_test_14_multi',
 | 
| -      'cast_test_15_multi',
 | 
| -      'cha_deopt1_test',
 | 
| -      'cha_deopt2_test',
 | 
| -      'cha_deopt3_test',
 | 
| -      'classes_static_method_clash_test',
 | 
| -      'closure_call_wrong_argument_count_negative_test',
 | 
| -      'closure_in_constructor_test',
 | 
| -      'closure_with_super_field_test',
 | 
| -      'closures_initializer_test',
 | 
| -      'code_after_try_is_executed_test_01_multi',
 | 
| -      'compile_time_constant10_test_none_multi',
 | 
| -      'compile_time_constant_a_test',
 | 
| -      'compile_time_constant_b_test',
 | 
| -      'compile_time_constant_d_test',
 | 
| -      'compile_time_constant_i_test',
 | 
| -      'compile_time_constant_k_test_none_multi',
 | 
| -      'compile_time_constant_o_test_none_multi',
 | 
| -      'const_constructor3_test_03_multi',
 | 
| -      'const_escape_frog_test',
 | 
| -      'const_evaluation_test_01_multi',
 | 
| -      'const_map4_test',
 | 
| -      'const_switch_test_02_multi',
 | 
| -      'const_switch_test_04_multi',
 | 
| -      'constructor11_test',
 | 
| -      'constructor12_test',
 | 
| -      'ct_const_test',
 | 
| -      'cyclic_type2_test',
 | 
| -      'cyclic_type_test_00_multi',
 | 
| -      'cyclic_type_test_01_multi',
 | 
| -      'cyclic_type_test_02_multi',
 | 
| -      'cyclic_type_test_03_multi',
 | 
| -      'cyclic_type_test_04_multi',
 | 
| -      'cyclic_type_variable_test_none_multi',
 | 
| -      'deferred_call_empty_before_load_test',
 | 
| -      'deferred_closurize_load_library_test',
 | 
| -      'deferred_constant_list_test',
 | 
| -      'deferred_function_type_test',
 | 
| -      'deferred_inlined_test',
 | 
| -      'deferred_load_inval_code_test',
 | 
| -      'deferred_mixin_test',
 | 
| -      'deferred_no_such_method_test',
 | 
| -      'deferred_not_loaded_check_test',
 | 
| -      'deferred_only_constant_test',
 | 
| -      'deferred_optimized_test',
 | 
| -      'deferred_redirecting_factory_test',
 | 
| -      'deferred_regression_22995_test',
 | 
| -      'deferred_shadow_load_library_test',
 | 
| -      'deferred_shared_and_unshared_classes_test',
 | 
| -      'deferred_static_seperate_test',
 | 
| -      'double_int_to_string_test',
 | 
| -      'double_to_string_test',
 | 
| -      'dynamic_test',
 | 
| -      'enum_mirror_test',
 | 
| -      'exception_test',
 | 
| -      'execute_finally6_test',
 | 
| -      'expect_test',
 | 
| -      'extends_test_lib',
 | 
| -      'external_test_10_multi',
 | 
| -      'external_test_13_multi',
 | 
| -      'external_test_20_multi',
 | 
| -      'f_bounded_quantification3_test',
 | 
| -      'factory_type_parameter_test',
 | 
| -      'fast_method_extraction_test',
 | 
| -      'field_increment_bailout_test',
 | 
| -      'field_optimization3_test',
 | 
| -      'field_test',
 | 
| -      'final_syntax_test_08_multi',
 | 
| -      'first_class_types_literals_test_01_multi',
 | 
| -      'first_class_types_literals_test_02_multi',
 | 
| -      'first_class_types_literals_test_none_multi',
 | 
| -      'first_class_types_test',
 | 
| -      'for_in2_test',
 | 
| -      'for_variable_capture_test',
 | 
| -      'function_propagation_test',
 | 
| -      'function_subtype0_test',
 | 
| -      'function_subtype1_test',
 | 
| -      'function_subtype2_test',
 | 
| -      'function_subtype3_test',
 | 
| -      'function_subtype_bound_closure0_test',
 | 
| -      'function_subtype_bound_closure1_test',
 | 
| -      'function_subtype_bound_closure2_test',
 | 
| -      'function_subtype_bound_closure3_test',
 | 
| -      'function_subtype_bound_closure4_test',
 | 
| -      'function_subtype_bound_closure5_test',
 | 
| -      'function_subtype_bound_closure5a_test',
 | 
| -      'function_subtype_bound_closure6_test',
 | 
| -      'function_subtype_call0_test',
 | 
| -      'function_subtype_call1_test',
 | 
| -      'function_subtype_call2_test',
 | 
| -      'function_subtype_cast0_test',
 | 
| -      'function_subtype_cast1_test',
 | 
| -      'function_subtype_cast2_test',
 | 
| -      'function_subtype_cast3_test',
 | 
| -      'function_subtype_factory0_test',
 | 
| -      'function_subtype_inline0_test',
 | 
| -      'function_subtype_local0_test',
 | 
| -      'function_subtype_local1_test',
 | 
| -      'function_subtype_local2_test',
 | 
| -      'function_subtype_local3_test',
 | 
| -      'function_subtype_local4_test',
 | 
| -      'function_subtype_local5_test',
 | 
| -      'function_subtype_named1_test',
 | 
| -      'function_subtype_named2_test',
 | 
| -      'function_subtype_not0_test',
 | 
| -      'function_subtype_not1_test',
 | 
| -      'function_subtype_not2_test',
 | 
| -      'function_subtype_not3_test',
 | 
| -      'function_subtype_optional1_test',
 | 
| -      'function_subtype_optional2_test',
 | 
| -      'function_subtype_top_level0_test',
 | 
| -      'function_subtype_top_level1_test',
 | 
| -      'function_subtype_typearg0_test',
 | 
| -      'function_subtype_typearg2_test',
 | 
| -      'function_subtype_typearg4_test',
 | 
| -      'function_type_alias2_test',
 | 
| -      'function_type_alias3_test',
 | 
| -      'function_type_alias4_test',
 | 
| -      'function_type_alias6_test_none_multi',
 | 
| -      'function_type_alias_test',
 | 
| -      'function_type_call_getter_test',
 | 
| -      'gc_test',
 | 
| -      'generic2_test',
 | 
| -      'generic_deep_test',
 | 
| -      'generic_field_mixin2_test',
 | 
| -      'generic_field_mixin3_test',
 | 
| -      'generic_field_mixin4_test',
 | 
| -      'generic_field_mixin5_test',
 | 
| -      'generic_field_mixin_test',
 | 
| -      'generic_inheritance_test',
 | 
| -      'generic_instanceof2_test',
 | 
| -      'generic_instanceof3_test',
 | 
| -      'generic_instanceof_test',
 | 
| -      'generic_is_check_test',
 | 
| -      'generic_native_test',
 | 
| -      'generic_parameterized_extends_test',
 | 
| -      'getter_closure_execution_order_test',
 | 
| -      'getter_override2_test_00_multi',
 | 
| -      'getters_setters_test',
 | 
| -      'hash_code_mangling_test',
 | 
| -      'identical_closure2_test',
 | 
| -      'if_null_behavior_test_14_multi',
 | 
| -      'infinite_switch_label_test',
 | 
| -      'infinity_test',
 | 
| -      'instance_creation_in_function_annotation_test',
 | 
| -      'instanceof2_test',
 | 
| -      'instanceof4_test_01_multi',
 | 
| -      'instanceof4_test_none_multi',
 | 
| -      'instanceof_optimized_test',
 | 
| -      'int_test',
 | 
| -      'integer_division_by_zero_test',
 | 
| -      'interceptor_test',
 | 
| -      'interceptor9_test',
 | 
| -      'is_nan_test',
 | 
| -      'issue10747_test',
 | 
| -      'issue13179_test',
 | 
| -      'issue21079_test',
 | 
| -      'issue21957_test',
 | 
| -      'issue_1751477_test',
 | 
| -      'issue_22780_test_01_multi',
 | 
| -      'issue_23914_test',
 | 
| -      'js_properties_test',
 | 
| -      'lazy_static3_test',
 | 
| -      'least_upper_bound_expansive_test_none_multi',
 | 
| -      'left_shift_test',
 | 
| -      'list_is_test',
 | 
| -      'list_literal3_test',
 | 
| -      'many_generic_instanceof_test',
 | 
| -      'map_literal10_test',
 | 
| -      'map_literal7_test',
 | 
| -      'memory_swap_test',
 | 
| -      'method_invocation_test',
 | 
| -      'mint_arithmetic_test',
 | 
| -      'mixin_forwarding_constructor3_test',
 | 
| -      'mixin_generic_test',
 | 
| -      'mixin_implements_test',
 | 
| -      'mixin_issue10216_2_test',
 | 
| -      'mixin_mixin2_test',
 | 
| -      'mixin_mixin3_test',
 | 
| -      'mixin_mixin4_test',
 | 
| -      'mixin_mixin5_test',
 | 
| -      'mixin_mixin6_test',
 | 
| -      'mixin_mixin7_test',
 | 
| -      'mixin_mixin_bound2_test',
 | 
| -      'mixin_mixin_bound_test',
 | 
| -      'mixin_mixin_test',
 | 
| -      'mixin_regress_13688_test',
 | 
| -      'mixin_type_parameter1_test',
 | 
| -      'mixin_type_parameter2_test',
 | 
| -      'mixin_type_parameter3_test',
 | 
| -      'modulo_test',
 | 
| -      'named_argument_test',
 | 
| -      'named_parameter_clash_test',
 | 
| -      'namer2_test',
 | 
| -      'nan_identical_test',
 | 
| -      'nested_switch_label_test',
 | 
| -      'no_such_method3_test',
 | 
| -      'no_such_method_empty_selector_test',
 | 
| -      'no_such_method_subtype_test',
 | 
| -      'null_no_such_method_test',
 | 
| -      'number_identifier_test_05_multi',
 | 
| -      'number_identity2_test',
 | 
| -      'numbers_test',
 | 
| -      'operator4_test',
 | 
| -      'operator_test',
 | 
| -      'optimized_hoisting_checked_mode_assert_test',
 | 
| -      'positive_bit_operations_test',
 | 
| -      'prefix_test1',
 | 
| -      'prefix_test2',
 | 
| -      'redirecting_factory_reflection_test',
 | 
| -      'regress_13462_0_test',
 | 
| -      'regress_13462_1_test',
 | 
| -      'regress_14105_test',
 | 
| -      'regress_16640_test',
 | 
| -      'regress_18535_test',
 | 
| -      'regress_21795_test',
 | 
| -      'regress_22443_test',
 | 
| -      'regress_22666_test',
 | 
| -      'regress_22719_test',
 | 
| -      'regress_23650_test',
 | 
| -      'regress_r24720_test',
 | 
| -      'setter_no_getter_test_01_multi',
 | 
| -      'smi_type_test',
 | 
| -      'stack_overflow_stacktrace_test',
 | 
| -      'stack_overflow_test',
 | 
| -      'stack_trace_test',
 | 
| -      'stacktrace_rethrow_nonerror_test', // mismatch from Karma's file hash
 | 
| -      'stacktrace_rethrow_error_test_none_multi',
 | 
| -      'stacktrace_rethrow_error_test_withtraceparameter_multi',
 | 
| -      'stacktrace_test',
 | 
| -      'string_interpolate_null_test',
 | 
| -      'string_interpolation_newline_test',
 | 
| -      'super_field_2_test',
 | 
| -      'super_field_test',
 | 
| -      'super_operator_index3_test',
 | 
| -      'super_operator_index4_test',
 | 
| -      'switch_label2_test',
 | 
| -      'switch_label_test',
 | 
| -      'switch_try_catch_test',
 | 
| -      'sync_generator1_test_none_multi',
 | 
| -      'throwing_lazy_variable_test',
 | 
| -      'top_level_non_prefixed_library_test',
 | 
| -      'truncdiv_test',
 | 
| -      'type_argument_substitution_test',
 | 
| -      'type_promotion_functions_test_none_multi',
 | 
| -      'type_variable_closure2_test',
 | 
| -      'type_variable_field_initializer_closure_test',
 | 
| -      'type_variable_field_initializer_test',
 | 
| -      'type_variable_nested_test',
 | 
| -      'type_variable_typedef_test',
 | 
| -      'typedef_is_test',
 | 
| +  let all_status = {
 | 
| +    'language': {
 | 
| +      'arithmetic2_test': fail,
 | 
| +      'assert_with_type_test_or_cast_test': skip_fail,
 | 
| +      'assertion_test': skip_fail,
 | 
| +      'async_await_test_none_multi': 'unittest',
 | 
| +      'async_star_await_pauses_test': skip_fail,
 | 
| +
 | 
| +      // TODO(jmesserly): figure out why this test is hanging.
 | 
| +      'async_star_cancel_and_throw_in_finally_test': skip_timeout,
 | 
| +
 | 
| +      'async_star_cancel_while_paused_test': skip_fail,
 | 
| +      'async_star_regression_fisk_test': skip_fail,
 | 
| +
 | 
| +      // TODO(vsm): Re-enable.
 | 
| +      // See https://github.com/dart-lang/dev_compiler/issues/456
 | 
| +      'async_star_test_none_multi': ['unittest', 'skip', 'fail'],
 | 
| +      'async_star_test_01_multi': ['unittest', 'skip', 'fail'],
 | 
| +      'async_star_test_02_multi': ['unittest', 'skip', 'fail'],
 | 
| +      'async_star_test_03_multi': ['unittest', 'skip', 'fail'],
 | 
| +      'async_star_test_04_multi': ['unittest', 'skip', 'fail'],
 | 
| +      'async_star_test_05_multi': ['unittest', 'skip', 'fail'],
 | 
| +
 | 
| +      'async_switch_test': skip_fail,
 | 
| +      'asyncstar_throw_in_catch_test': skip_fail,
 | 
| +      'await_future_test': skip_fail,
 | 
| +      'bit_operations_test_none_multi': skip_fail,
 | 
| +      'bit_shift_test': skip_fail,
 | 
| +      'bool_test': skip_fail,
 | 
| +      'bound_closure_equality_test': skip_fail,
 | 
| +      'branch_canonicalization_test': skip_fail,  // JS bit operations truncate to 32 bits.
 | 
| +      'call_closurization_test': skip_fail,
 | 
| +      'call_function_apply_test': skip_fail,
 | 
| +      'call_operator_test': skip_fail,
 | 
| +      'call_property_test': skip_fail,
 | 
| +      'call_test': skip_fail,
 | 
| +      'call_this_test': skip_fail,
 | 
| +      'call_through_null_getter_test': skip_fail,
 | 
| +      'call_with_no_such_method_test': skip_fail,
 | 
| +      'canonical_const2_test': skip_fail,
 | 
| +      'canonical_const_test': skip_fail,
 | 
| +      'cascade_precedence_test': skip_fail,
 | 
| +      'cast_test_01_multi': skip_fail,
 | 
| +      'cast_test_02_multi': skip_fail,
 | 
| +      'cast_test_03_multi': skip_fail,
 | 
| +      'cast_test_07_multi': skip_fail,
 | 
| +      'cast_test_10_multi': skip_fail,
 | 
| +      'cast_test_12_multi': skip_fail,
 | 
| +      'cast_test_13_multi': skip_fail,
 | 
| +      'cast_test_14_multi': skip_fail,
 | 
| +      'cast_test_15_multi': skip_fail,
 | 
| +      'cha_deopt1_test': skip_fail,
 | 
| +      'cha_deopt2_test': skip_fail,
 | 
| +      'cha_deopt3_test': skip_fail,
 | 
| +      'classes_static_method_clash_test': skip_fail,
 | 
| +      'closure_call_wrong_argument_count_negative_test': skip_fail,
 | 
| +      'closure_in_constructor_test': skip_fail,
 | 
| +      'closure_with_super_field_test': skip_fail,
 | 
| +      'closures_initializer_test': skip_fail,
 | 
| +      'code_after_try_is_executed_test_01_multi': skip_fail,
 | 
| +      'compile_time_constant10_test_none_multi': skip_fail,
 | 
| +      'compile_time_constant_a_test': skip_fail,
 | 
| +      'compile_time_constant_b_test': skip_fail,
 | 
| +      'compile_time_constant_d_test': skip_fail,
 | 
| +      'compile_time_constant_i_test': skip_fail,
 | 
| +      'compile_time_constant_k_test_none_multi': skip_fail,
 | 
| +      'compile_time_constant_o_test_none_multi': skip_fail,
 | 
| +      'const_constructor3_test_03_multi': skip_fail,
 | 
| +      'const_escape_frog_test': skip_fail,
 | 
| +      'const_evaluation_test_01_multi': skip_fail,
 | 
| +      'const_map4_test': skip_fail,
 | 
| +      'const_switch_test_02_multi': skip_fail,
 | 
| +      'const_switch_test_04_multi': skip_fail,
 | 
| +      'constructor11_test': skip_fail,
 | 
| +      'constructor12_test': skip_fail,
 | 
| +      'ct_const_test': skip_fail,
 | 
| +      'cyclic_type2_test': skip_fail,
 | 
| +      'cyclic_type_test_00_multi': skip_fail,
 | 
| +      'cyclic_type_test_01_multi': skip_fail,
 | 
| +      'cyclic_type_test_02_multi': skip_fail,
 | 
| +      'cyclic_type_test_03_multi': skip_fail,
 | 
| +      'cyclic_type_test_04_multi': skip_fail,
 | 
| +      'cyclic_type_variable_test_none_multi': skip_fail,
 | 
| +      'deferred_call_empty_before_load_test': skip_fail,
 | 
| +      'deferred_closurize_load_library_test': skip_fail,
 | 
| +      'deferred_constant_list_test': skip_fail,
 | 
| +      'deferred_function_type_test': skip_fail,
 | 
| +      'deferred_inlined_test': skip_fail,
 | 
| +      'deferred_load_inval_code_test': skip_fail,
 | 
| +      'deferred_mixin_test': skip_fail,
 | 
| +      'deferred_no_such_method_test': skip_fail,
 | 
| +      'deferred_not_loaded_check_test': skip_fail,
 | 
| +      'deferred_only_constant_test': skip_fail,
 | 
| +      'deferred_optimized_test': skip_fail,
 | 
| +      'deferred_redirecting_factory_test': skip_fail,
 | 
| +      'deferred_regression_22995_test': skip_fail,
 | 
| +      'deferred_shadow_load_library_test': skip_fail,
 | 
| +      'deferred_shared_and_unshared_classes_test': skip_fail,
 | 
| +      'deferred_static_seperate_test': skip_fail,
 | 
| +      'double_int_to_string_test': skip_fail,
 | 
| +      'double_to_string_test': skip_fail,
 | 
| +      'dynamic_test': skip_fail,
 | 
| +      'enum_mirror_test': skip_fail,
 | 
| +      'exception_test': skip_fail,
 | 
| +      'execute_finally6_test': skip_fail,
 | 
| +      'expect_test': skip_fail,
 | 
| +      'extends_test_lib': skip_fail,
 | 
| +      'external_test_10_multi': skip_fail,
 | 
| +      'external_test_13_multi': skip_fail,
 | 
| +      'external_test_20_multi': skip_fail,
 | 
| +      'f_bounded_quantification3_test': skip_fail,
 | 
| +      'factory_type_parameter_test': skip_fail,
 | 
| +      'fast_method_extraction_test': skip_fail,
 | 
| +      'field_increment_bailout_test': skip_fail,
 | 
| +      'field_optimization3_test': skip_fail,
 | 
| +      'field_test': skip_fail,
 | 
| +      'final_syntax_test_08_multi': skip_fail,
 | 
| +      'first_class_types_literals_test_01_multi': skip_fail,
 | 
| +      'first_class_types_literals_test_02_multi': skip_fail,
 | 
| +      'first_class_types_literals_test_none_multi': skip_fail,
 | 
| +      'first_class_types_test': skip_fail,
 | 
| +      'for_in2_test': skip_fail,
 | 
| +      'for_variable_capture_test': skip_fail,
 | 
| +      'function_propagation_test': skip_fail,
 | 
| +      'function_subtype0_test': skip_fail,
 | 
| +      'function_subtype1_test': skip_fail,
 | 
| +      'function_subtype2_test': skip_fail,
 | 
| +      'function_subtype3_test': skip_fail,
 | 
| +      'function_subtype_bound_closure0_test': skip_fail,
 | 
| +      'function_subtype_bound_closure1_test': skip_fail,
 | 
| +      'function_subtype_bound_closure2_test': skip_fail,
 | 
| +      'function_subtype_bound_closure3_test': skip_fail,
 | 
| +      'function_subtype_bound_closure4_test': skip_fail,
 | 
| +      'function_subtype_bound_closure5_test': skip_fail,
 | 
| +      'function_subtype_bound_closure5a_test': skip_fail,
 | 
| +      'function_subtype_bound_closure6_test': skip_fail,
 | 
| +      'function_subtype_call0_test': skip_fail,
 | 
| +      'function_subtype_call1_test': skip_fail,
 | 
| +      'function_subtype_call2_test': skip_fail,
 | 
| +      'function_subtype_cast0_test': skip_fail,
 | 
| +      'function_subtype_cast1_test': skip_fail,
 | 
| +      'function_subtype_cast2_test': skip_fail,
 | 
| +      'function_subtype_cast3_test': skip_fail,
 | 
| +      'function_subtype_factory0_test': skip_fail,
 | 
| +      'function_subtype_inline0_test': skip_fail,
 | 
| +      'function_subtype_local0_test': skip_fail,
 | 
| +      'function_subtype_local1_test': skip_fail,
 | 
| +      'function_subtype_local2_test': skip_fail,
 | 
| +      'function_subtype_local3_test': skip_fail,
 | 
| +      'function_subtype_local4_test': skip_fail,
 | 
| +      'function_subtype_local5_test': skip_fail,
 | 
| +      'function_subtype_named1_test': skip_fail,
 | 
| +      'function_subtype_named2_test': skip_fail,
 | 
| +      'function_subtype_not0_test': skip_fail,
 | 
| +      'function_subtype_not1_test': skip_fail,
 | 
| +      'function_subtype_not2_test': skip_fail,
 | 
| +      'function_subtype_not3_test': skip_fail,
 | 
| +      'function_subtype_optional1_test': skip_fail,
 | 
| +      'function_subtype_optional2_test': skip_fail,
 | 
| +      'function_subtype_top_level0_test': skip_fail,
 | 
| +      'function_subtype_top_level1_test': skip_fail,
 | 
| +      'function_subtype_typearg0_test': skip_fail,
 | 
| +      'function_subtype_typearg2_test': skip_fail,
 | 
| +      'function_subtype_typearg4_test': skip_fail,
 | 
| +      'function_type_alias2_test': skip_fail,
 | 
| +      'function_type_alias3_test': skip_fail,
 | 
| +      'function_type_alias4_test': skip_fail,
 | 
| +      'function_type_alias6_test_none_multi': skip_fail,
 | 
| +      'function_type_alias_test': skip_fail,
 | 
| +      'function_type_call_getter_test': skip_fail,
 | 
| +      'gc_test': skip_fail,
 | 
| +      'generic2_test': skip_fail,
 | 
| +      'generic_deep_test': skip_fail,
 | 
| +      'generic_field_mixin2_test': skip_fail,
 | 
| +      'generic_field_mixin3_test': skip_fail,
 | 
| +      'generic_field_mixin4_test': skip_fail,
 | 
| +      'generic_field_mixin5_test': skip_fail,
 | 
| +      'generic_field_mixin_test': skip_fail,
 | 
| +      'generic_inheritance_test': skip_fail,
 | 
| +      'generic_instanceof2_test': skip_fail,
 | 
| +      'generic_instanceof3_test': skip_fail,
 | 
| +      'generic_instanceof_test': skip_fail,
 | 
| +      'generic_is_check_test': skip_fail,
 | 
| +      'generic_native_test': skip_fail,
 | 
| +      'generic_parameterized_extends_test': skip_fail,
 | 
| +      'getter_closure_execution_order_test': skip_fail,
 | 
| +      'getter_override2_test_00_multi': skip_fail,
 | 
| +      'getters_setters_test': skip_fail,
 | 
| +      'hash_code_mangling_test': skip_fail,
 | 
| +      'identical_closure2_test': skip_fail,
 | 
| +      'if_null_behavior_test_14_multi': skip_fail,
 | 
| +      'infinite_switch_label_test': skip_fail,
 | 
| +      'infinity_test': skip_fail,
 | 
| +      'instance_creation_in_function_annotation_test': skip_fail,
 | 
| +      'instanceof2_test': skip_fail,
 | 
| +      'instanceof4_test_01_multi': skip_fail,
 | 
| +      'instanceof4_test_none_multi': skip_fail,
 | 
| +      'instanceof_optimized_test': skip_fail,
 | 
| +      'int_test': skip_fail,
 | 
| +      'integer_division_by_zero_test': skip_fail,
 | 
| +      'interceptor_test': skip_fail,
 | 
| +      'interceptor9_test': skip_fail,
 | 
| +      'is_nan_test': skip_fail,
 | 
| +      'issue10747_test': skip_fail,
 | 
| +      'issue13179_test': skip_fail,
 | 
| +      'issue21079_test': skip_fail,
 | 
| +      'issue21957_test': skip_fail,
 | 
| +      'issue_1751477_test': skip_fail,
 | 
| +      'issue_22780_test_01_multi': skip_fail,
 | 
| +      'issue_23914_test': skip_fail,
 | 
| +      'js_properties_test': skip_fail,
 | 
| +      'lazy_static3_test': skip_fail,
 | 
| +      'least_upper_bound_expansive_test_none_multi': skip_fail,
 | 
| +      'left_shift_test': skip_fail,
 | 
| +      'list_is_test': skip_fail,
 | 
| +      'list_literal3_test': skip_fail,
 | 
| +      'many_generic_instanceof_test': skip_fail,
 | 
| +      'map_literal10_test': skip_fail,
 | 
| +      'map_literal7_test': skip_fail,
 | 
| +      'memory_swap_test': skip_fail,
 | 
| +      'method_invocation_test': skip_fail,
 | 
| +      'mint_arithmetic_test': skip_fail,
 | 
| +      'mixin_forwarding_constructor3_test': skip_fail,
 | 
| +      'mixin_generic_test': skip_fail,
 | 
| +      'mixin_implements_test': skip_fail,
 | 
| +      'mixin_issue10216_2_test': skip_fail,
 | 
| +      'mixin_mixin2_test': skip_fail,
 | 
| +      'mixin_mixin3_test': skip_fail,
 | 
| +      'mixin_mixin4_test': skip_fail,
 | 
| +      'mixin_mixin5_test': skip_fail,
 | 
| +      'mixin_mixin6_test': skip_fail,
 | 
| +      'mixin_mixin7_test': skip_fail,
 | 
| +      'mixin_mixin_bound2_test': skip_fail,
 | 
| +      'mixin_mixin_bound_test': skip_fail,
 | 
| +      'mixin_mixin_test': skip_fail,
 | 
| +      'mixin_regress_13688_test': skip_fail,
 | 
| +      'mixin_type_parameter1_test': skip_fail,
 | 
| +      'mixin_type_parameter2_test': skip_fail,
 | 
| +      'mixin_type_parameter3_test': skip_fail,
 | 
| +      'modulo_test': skip_fail,
 | 
| +      'named_argument_test': skip_fail,
 | 
| +      'named_parameter_clash_test': skip_fail,
 | 
| +      'namer2_test': skip_fail,
 | 
| +      'nan_identical_test': skip_fail,
 | 
| +      'nested_switch_label_test': skip_fail,
 | 
| +      'no_such_method3_test': skip_fail,
 | 
| +      'no_such_method_empty_selector_test': skip_fail,
 | 
| +      'no_such_method_subtype_test': skip_fail,
 | 
| +      'null_no_such_method_test': skip_fail,
 | 
| +      'number_identifier_test_05_multi': skip_fail,
 | 
| +      'number_identity2_test': skip_fail,
 | 
| +      'numbers_test': skip_fail,
 | 
| +      'operator4_test': skip_fail,
 | 
| +      'operator_test': skip_fail,
 | 
| +      'optimized_hoisting_checked_mode_assert_test': skip_fail,
 | 
| +      'positive_bit_operations_test': skip_fail,
 | 
| +      'prefix_test1': skip_fail,
 | 
| +      'prefix_test2': skip_fail,
 | 
| +      'redirecting_factory_reflection_test': skip_fail,
 | 
| +      'regress_13462_0_test': skip_fail,
 | 
| +      'regress_13462_1_test': skip_fail,
 | 
| +      'regress_14105_test': skip_fail,
 | 
| +      'regress_16640_test': skip_fail,
 | 
| +      'regress_18535_test': skip_fail,
 | 
| +      'regress_21795_test': skip_fail,
 | 
| +      'regress_22443_test': skip_fail,
 | 
| +      'regress_22666_test': skip_fail,
 | 
| +      'regress_22719_test': skip_fail,
 | 
| +      'regress_23650_test': skip_fail,
 | 
| +      'regress_r24720_test': skip_fail,
 | 
| +      'setter_no_getter_test_01_multi': skip_fail,
 | 
| +      'smi_type_test': skip_fail,
 | 
| +      'stack_overflow_stacktrace_test': skip_fail,
 | 
| +      'stack_overflow_test': skip_fail,
 | 
| +      'stack_trace_test': skip_fail,
 | 
| +      'stacktrace_rethrow_nonerror_test': skip_fail, // mismatch from Karma's file hash
 | 
| +      'stacktrace_rethrow_error_test_none_multi': skip_fail,
 | 
| +      'stacktrace_rethrow_error_test_withtraceparameter_multi': skip_fail,
 | 
| +      'stacktrace_test': skip_fail,
 | 
| +      'string_interpolate_null_test': skip_fail,
 | 
| +      'string_interpolation_newline_test': skip_fail,
 | 
| +      'super_field_2_test': skip_fail,
 | 
| +      'super_field_test': skip_fail,
 | 
| +      'super_operator_index3_test': skip_fail,
 | 
| +      'super_operator_index4_test': skip_fail,
 | 
| +      'switch_label2_test': skip_fail,
 | 
| +      'switch_label_test': skip_fail,
 | 
| +      'switch_try_catch_test': skip_fail,
 | 
| +      'sync_generator1_test_none_multi': skip_fail,
 | 
| +      'throwing_lazy_variable_test': skip_fail,
 | 
| +      'top_level_non_prefixed_library_test': skip_fail,
 | 
| +      'truncdiv_test': skip_fail,
 | 
| +      'type_argument_substitution_test': skip_fail,
 | 
| +      'type_promotion_functions_test_none_multi': skip_fail,
 | 
| +      'type_variable_closure2_test': skip_fail,
 | 
| +      'type_variable_field_initializer_closure_test': skip_fail,
 | 
| +      'type_variable_field_initializer_test': skip_fail,
 | 
| +      'type_variable_nested_test': skip_fail,
 | 
| +      'type_variable_typedef_test': skip_fail,
 | 
| +      'typedef_is_test': skip_fail,
 | 
|  
 | 
| -      'bit_operations_test_01_multi',
 | 
| -      'bit_operations_test_02_multi',
 | 
| -      'bit_operations_test_03_multi',
 | 
| -      'bit_operations_test_04_multi',
 | 
| -      'bool_condition_check_test_01_multi',
 | 
| -      'deferred_constraints_constants_test_none_multi',
 | 
| -      'deferred_constraints_constants_test_reference_after_load_multi',
 | 
| -      'deferred_constraints_type_annotation_test_new_generic1_multi',
 | 
| -      'deferred_constraints_type_annotation_test_new_multi',
 | 
| -      'deferred_constraints_type_annotation_test_none_multi',
 | 
| -      'deferred_constraints_type_annotation_test_static_method_multi',
 | 
| -      'deferred_constraints_type_annotation_test_type_annotation_non_deferred_multi',
 | 
| -      'deferred_load_constants_test_none_multi',
 | 
| -      'deferred_load_library_wrong_args_test_01_multi',
 | 
| -      'deferred_load_library_wrong_args_test_none_multi',
 | 
| -      'external_test_21_multi',
 | 
| -      'external_test_24_multi',
 | 
| -      'main_not_a_function_test_01_multi',
 | 
| -      'multiline_newline_test_04_multi',
 | 
| -      'multiline_newline_test_05_multi',
 | 
| -      'multiline_newline_test_06_multi',
 | 
| -      'multiline_newline_test_none_multi',
 | 
| -      'no_main_test_01_multi',
 | 
| +      'bit_operations_test_01_multi': skip_fail,
 | 
| +      'bit_operations_test_02_multi': skip_fail,
 | 
| +      'bit_operations_test_03_multi': skip_fail,
 | 
| +      'bit_operations_test_04_multi': skip_fail,
 | 
| +      'bool_condition_check_test_01_multi': skip_fail,
 | 
| +      'deferred_constraints_constants_test_none_multi': skip_fail,
 | 
| +      'deferred_constraints_constants_test_reference_after_load_multi': skip_fail,
 | 
| +      'deferred_constraints_type_annotation_test_new_generic1_multi': skip_fail,
 | 
| +      'deferred_constraints_type_annotation_test_new_multi': skip_fail,
 | 
| +      'deferred_constraints_type_annotation_test_none_multi': skip_fail,
 | 
| +      'deferred_constraints_type_annotation_test_static_method_multi': skip_fail,
 | 
| +      'deferred_constraints_type_annotation_test_type_annotation_non_deferred_multi': skip_fail,
 | 
| +      'deferred_load_constants_test_none_multi': skip_fail,
 | 
| +      'deferred_load_library_wrong_args_test_01_multi': skip_fail,
 | 
| +      'deferred_load_library_wrong_args_test_none_multi': skip_fail,
 | 
| +      'external_test_21_multi': skip_fail,
 | 
| +      'external_test_24_multi': skip_fail,
 | 
| +      'main_not_a_function_test_01_multi': skip_fail,
 | 
| +      'multiline_newline_test_04_multi': skip_fail,
 | 
| +      'multiline_newline_test_05_multi': skip_fail,
 | 
| +      'multiline_newline_test_06_multi': skip_fail,
 | 
| +      'multiline_newline_test_none_multi': skip_fail,
 | 
| +      'no_main_test_01_multi': skip_fail,
 | 
|  
 | 
|        // https://github.com/dart-lang/sdk/issues/26123
 | 
| -      'bad_raw_string_negative_test',
 | 
| +      'bad_raw_string_negative_test': skip_fail,
 | 
|  
 | 
|        // https://github.com/dart-lang/sdk/issues/26124
 | 
| -      'prefix10_negative_test',
 | 
| +      'prefix10_negative_test': skip_fail,
 | 
|  
 | 
|  
 | 
|        // TODO(vsm): Right shift should not propagate sign
 | 
|        // https://github.com/dart-lang/dev_compiler/issues/446
 | 
| -      'float32x4_sign_mask_test',
 | 
| -      'int32x4_sign_mask_test',
 | 
| +      'float32x4_sign_mask_test': skip_fail,
 | 
| +      'int32x4_sign_mask_test': skip_fail,
 | 
|  
 | 
| +      // TODO(vsm): Triage further
 | 
| +      // exports._GeneratorIterable$ is not a function
 | 
| +      'typed_data_list_test': skip_fail,
 | 
| +      'byte_data_test': skip_fail,
 | 
| +      'endianness_test': skip_fail,
 | 
| +
 | 
| +      'library_prefixes_test1': 'helper',
 | 
| +      'library_prefixes_test2': 'helper',
 | 
| +      'top_level_prefixed_library_test': 'helper',
 | 
| +    },
 | 
| +
 | 
| +    'lib/typed_data': {
 | 
|        // No bigint or int64 support
 | 
| -      'int32x4_bigint_test',
 | 
| -      'int64_list_load_store_test',
 | 
| -      'typed_data_hierarchy_int64_test',
 | 
| +      'int32x4_bigint_test': skip_fail,
 | 
| +      'int64_list_load_store_test': skip_fail,
 | 
| +      'typed_data_hierarchy_int64_test': skip_fail,
 | 
|  
 | 
|        // TODO(vsm): List.toString is different in DDC
 | 
|        // https://github.com/dart-lang/dev_compiler/issues/445
 | 
| -      'setRange_1_test',
 | 
| -      'setRange_2_test',
 | 
| -      'setRange_3_test',
 | 
| -      'setRange_4_test',
 | 
| -      'setRange_5_test',
 | 
| +      'setRange_1_test': skip_fail,
 | 
| +      'setRange_2_test': skip_fail,
 | 
| +      'setRange_3_test': skip_fail,
 | 
| +      'setRange_4_test': skip_fail,
 | 
| +      'setRange_5_test': skip_fail,
 | 
| +    },
 | 
|  
 | 
| -      // TODO(vsm): Triage further
 | 
| -      // exports._GeneratorIterable$ is not a function
 | 
| -      'typed_data_list_test',
 | 
| -      'byte_data_test',
 | 
| -      'endianness_test'
 | 
| -    ]),
 | 
| -    helpers: new Set([
 | 
| -      'library_prefixes_test1',
 | 
| -      'library_prefixes_test2',
 | 
| -      'top_level_prefixed_library_test',
 | 
| -    ])
 | 
| +    'lib/html': {
 | 
| +    },
 | 
|    };
 | 
|  
 | 
| -  let languageTestPattern = new RegExp('(.*_test.*)');
 | 
| +  let unittest_tests = [];
 | 
| +
 | 
| +  let languageTestPattern = new RegExp('(.*)/([^/]*_test[^/]*)');
 | 
|    for (let testFile of dart_library.libraries()) {
 | 
|      let match = languageTestPattern.exec(testFile);
 | 
|      if (match != null) {
 | 
| -      let name = match[1];
 | 
| +      let status_group = match[1]
 | 
| +      let name = match[2];
 | 
| +      let module = match[0];
 | 
|  
 | 
| -      if (status.helpers.has(name)) {
 | 
| -        // These are not top-level tests.  They are used by other tests.
 | 
| -        continue;
 | 
| +      let status = all_status[status_group];
 | 
| +      if (status == null) throw "No status for '" + status_group + "'";
 | 
| +
 | 
| +      let expectation = status[name];
 | 
| +      if (expectation == null) expectation = [];
 | 
| +      if (typeof expectation == 'string') expectation = [expectation];
 | 
| +      function has(tag) {
 | 
| +        return expectation.indexOf(tag) >= 0;
 | 
|        }
 | 
|  
 | 
| -      // These two tests are special because they use package:unittest.
 | 
| -      // We run them below.
 | 
| -      if (name == 'async_await_test' ||
 | 
| -          name.startsWith('async_star_test')) {
 | 
| +      if (has('helper')) {
 | 
| +        // These are not top-level tests.  They are used by other tests.
 | 
|          continue;
 | 
|        }
 | 
|  
 | 
| -      // TODO(jmesserly): figure out why this test is hanging.
 | 
| -      if (name == 'async_star_cancel_and_throw_in_finally_test') {
 | 
| -        console.debug('Skipping known timeout: ' + name);
 | 
| +      if (has('skip')) {
 | 
| +        let why = 'for unknown reason';
 | 
| +        if (has('timeout')) why = 'known timeout';
 | 
| +        if (has('fail')) why = 'known failure';
 | 
| +        console.debug('Skipping ' + why + ': ' + name);
 | 
|          continue;
 | 
|        }
 | 
|  
 | 
| -      // TODO(jmesserly): better tracking of async test failures.
 | 
| -      // For now we skip tests that expect failure.
 | 
| -      if (status.expectedFailures.has(name)) {
 | 
| -        console.debug('Skipping known failure: ' + name);
 | 
| +      // A few tests are special because they use package:unittest.
 | 
| +      // We run them below.
 | 
| +      if (has('unittest')) {
 | 
| +        unittest_tests.push(() => {
 | 
| +          console.log('Running unittest test ' + testFile);
 | 
| +          dart_library.import(module)[name].main();
 | 
| +        });
 | 
|          continue;
 | 
|        }
 | 
|  
 | 
| @@ -393,8 +438,10 @@
 | 
|          async_helper.asyncTestInitialize(done);
 | 
|          console.debug('Running test:  ' + name);
 | 
|  
 | 
| -        let mainLibrary = dart_library.import(name)[name];
 | 
| -        if (/negative_test/.test(name)) {
 | 
| +        let mainLibrary = dart_library.import(module)[name];
 | 
| +        let negative = /negative_test/.test(name);
 | 
| +        if (has('fail')) negative = !negative;
 | 
| +        if (negative) {
 | 
|            assert.throws(mainLibrary.main);
 | 
|          } else {
 | 
|            mainLibrary.main();
 | 
| @@ -405,11 +452,7 @@
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  (dart_library.import('async_await_test_none_multi')
 | 
| -      .async_await_test_none_multi.main());
 | 
| -  // TODO(vsm): Re-enable.
 | 
| -  // See https://github.com/dart-lang/dev_compiler/issues/456
 | 
| -  // (dart_library.import('async_star_test_none_multi')
 | 
| -  //     .async_star_test_none_multi.main());
 | 
| -
 | 
| +  for (let action of unittest_tests) {
 | 
| +    action();
 | 
| +  }
 | 
|  })();
 | 
| 
 |