| Index: pkg/dev_compiler/test/browser/language_tests.js | 
| diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js | 
| index ab45d2730b817c9d6d095070f82d2c083292a210..f6a7673d33cbc0fdcf6a51897d5690b31de462b6 100644 | 
| --- a/pkg/dev_compiler/test/browser/language_tests.js | 
| +++ b/pkg/dev_compiler/test/browser/language_tests.js | 
| @@ -2,11 +2,12 @@ | 
| // 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. | 
|  | 
| -define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
| -      function(dart_sdk, async_helper, unittest, require) { | 
| +define(['dart_sdk', 'async_helper', 'minitest', 'unittest', 'require'], | 
| +      function(dart_sdk, async_helper, minitest, unittest, require) { | 
| 'use strict'; | 
|  | 
| async_helper = async_helper.async_helper; | 
| +  minitest = minitest.minitest; | 
|  | 
| dart_sdk._isolate_helper.startRootIsolate(function() {}, []); | 
| let html_config = unittest.html_config; | 
| @@ -25,10 +26,17 @@ define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
| const skip_fail = ['skip', 'fail']; | 
| const skip_timeout = ['skip', 'timeout']; | 
|  | 
| +  // Tests marked with this are still using the deprecated unittest package | 
| +  // because they rely on its support for futures and asynchronous tests, which | 
| +  // expect and minitest do not handle. | 
| +  // TODO(rnystrom): Move all of these away from using the async test API so | 
| +  // they can stop using unittest. | 
| +  const async_unittest = ['unittest', 'skip', 'fail']; | 
| + | 
| // The number of expected unittest errors should be zero but unfortunately | 
| // there are a lot of broken html unittests. | 
| -  let num_expected_unittest_fails = 5; | 
| -  let num_expected_unittest_errors = 8; | 
| +  let num_expected_unittest_fails = 3; | 
| +  let num_expected_unittest_errors = 2; | 
|  | 
| // TODO(jmesserly): separate StrongModeError from other errors. | 
| let all_status = { | 
| @@ -406,94 +414,74 @@ define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
| // more hope of passing. Triage tests that can never run in this test | 
| // runner and track them separately. | 
| 'lib/html': { | 
| -      'async_spawnuri_test': ['unittest', 'skip', 'fail'], | 
| -      'async_test': ['unittest', 'skip', 'fail'], | 
| -      'audiobuffersourcenode_test': ['unittest', 'skip', 'fail'], | 
| -      'audiocontext_test': ['unittest', 'skip', 'fail'], | 
| -      'audioelement_test': ['unittest', 'skip', 'fail'], | 
| -      'b_element_test': ['unittest', 'skip', 'fail'], | 
| -      'blob_constructor_test': ['unittest', 'skip', 'fail'], | 
| -      'cache_test': ['unittest', 'skip', 'fail'], | 
| -      'callbacks_test': ['unittest', 'skip', 'fail'], | 
| -      'canvas_pixel_array_type_alias_test': ['unittest'], | 
| -      'canvasrenderingcontext2d_test': ['unittest'], | 
| +      'async_spawnuri_test': async_unittest, | 
| +      'async_test': async_unittest, | 
| +      'audiobuffersourcenode_test': 'fail', // sdk#27578. | 
| +      'audiocontext_test': 'fail', // sdk#27578. | 
| +      'blob_constructor_test': 'fail', // sdk#27578. | 
| +      'cache_test': 'fail', // sdk#27578. | 
| 'canvas_test': ['unittest'], | 
| -      'cdata_test': ['unittest', 'skip', 'fail'], | 
| -      'client_rect_test': ['unittest', 'skip', 'fail'], | 
| -      'cross_domain_iframe_test': ['unittest', 'skip', 'fail'], | 
| -      'cross_frame_test': ['unittest', 'skip', 'fail'], | 
| -      'crypto_test': ['unittest', 'skip', 'fail'], | 
| -      'css_rule_list_test': ['unittest', 'skip', 'fail'], | 
| -      'cssstyledeclaration_test': ['unittest', 'skip', 'fail'], | 
| -      'css_test': ['unittest', 'skip', 'fail'], | 
| -      'custom_element_method_clash_test': ['unittest', 'skip', 'fail'], | 
| -      'custom_element_name_clash_test': ['unittest', 'skip', 'fail'], | 
| -      'custom_elements_23127_test': ['unittest', 'skip', 'fail'], | 
| -      'custom_elements_test': ['unittest', 'skip', 'fail'], | 
| -      'custom_tags_test': ['unittest', 'skip', 'fail'], | 
| -      'dart_object_local_storage_test': ['unittest', 'skip', 'fail'], | 
| -      'datalistelement_test': ['unittest', 'skip', 'fail'], | 
| -      'documentfragment_test': ['unittest', 'skip', 'fail'], | 
| -      'document_test': ['unittest'], | 
| -      'dom_constructors_test': ['unittest', 'skip', 'fail'], | 
| -      'domparser_test': ['unittest', 'skip', 'fail'], | 
| -      'element_add_test': ['unittest', 'skip', 'fail'], | 
| -      'element_animate_test': ['unittest', 'skip', 'fail'], | 
| -      'element_classes_svg_test': ['unittest', 'skip', 'fail'], | 
| -      'element_classes_test': ['unittest', 'skip', 'fail'], | 
| -      'element_constructor_1_test': ['unittest', 'skip', 'fail'], | 
| -      'element_dimensions_test': ['unittest', 'skip', 'fail'], | 
| -      'element_offset_test': ['unittest', 'skip', 'fail'], | 
| -      'element_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors1_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors2_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors3_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors4_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors5_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_constructors6_test': ['unittest', 'skip', 'fail'], | 
| -      'element_types_test': ['unittest', 'skip', 'fail'], | 
| -      'event_customevent_test': ['unittest', 'skip', 'fail'], | 
| -      'events_test': ['unittest', 'skip', 'fail'], | 
| -      'event_test': ['unittest', 'skip', 'fail'], | 
| -      'exceptions_test': ['unittest', 'skip', 'fail'], | 
| -      'fileapi_test': ['unittest', 'skip', 'fail'], | 
| -      'filereader_test': ['unittest', 'skip', 'fail'], | 
| -      'filteredelementlist_test': ['unittest', 'skip', 'fail'], | 
| -      'fontface_loaded_test': ['unittest', 'skip', 'fail'], | 
| -      'fontface_test': ['unittest', 'skip', 'fail'], | 
| -      'form_data_test': ['unittest', 'skip', 'fail'], | 
| -      'form_element_test': ['unittest', 'skip', 'fail'], | 
| -      'geolocation_test': ['unittest', 'skip', 'fail'], | 
| -      'hidden_dom_1_test': ['unittest', 'skip', 'fail'], | 
| -      'hidden_dom_2_test': ['unittest', 'skip', 'fail'], | 
| -      'history_test': ['unittest', 'skip', 'fail'], | 
| -      'htmlcollection_test': ['unittest', 'skip', 'fail'], | 
| -      'htmlelement_test': ['unittest', 'skip', 'fail'], | 
| -      'htmloptionscollection_test': ['unittest', 'skip', 'fail'], | 
| -      'indexeddb_1_test': ['unittest', 'skip', 'fail'], | 
| -      'indexeddb_2_test': ['unittest', 'skip', 'fail'], | 
| -      'indexeddb_3_test': ['unittest', 'skip', 'fail'], | 
| -      'indexeddb_4_test': ['unittest', 'skip', 'fail'], | 
| -      'indexeddb_5_test': ['unittest', 'skip', 'fail'], | 
| -      'input_element_test': ['unittest', 'skip', 'fail'], | 
| -      'instance_of_test': ['unittest', 'skip', 'fail'], | 
| -      'interactive_test': ['unittest', 'skip', 'fail'], | 
| -      'isolates_test': ['unittest', 'skip', 'fail'], | 
| -      'js_function_getter_test': 'unittest', | 
| -      'js_function_getter_trust_types_test': 'unittest', | 
| -      'js_interop_1_test': 'unittest', | 
| -      'js_test': 'unittest', | 
| -      'js_util_test': 'unittest', | 
| -      'js_typed_interop_anonymous2_exp_test': 'unittest', | 
| -      'js_typed_interop_anonymous2_test': 'unittest', | 
| -      'js_typed_interop_anonymous_exp_test': 'unittest', | 
| -      'js_typed_interop_anonymous_test': 'unittest', | 
| -      'js_typed_interop_anonymous_unreachable_exp_test': 'unittest', | 
| -      'js_typed_interop_anonymous_unreachable_test': 'unittest', | 
| -      'js_typed_interop_default_arg_test': 'unittest', | 
| -      'js_typed_interop_side_cast_exp_test': 'unittest', | 
| -      'js_typed_interop_side_cast_test': 'unittest', | 
| -      'js_typed_interop_test': 'unittest', | 
| +      'canvasrenderingcontext2d_test': ['unittest'], | 
| +      'cross_domain_iframe_test': async_unittest, | 
| +      'crypto_test': 'fail', // sdk#27578. | 
| +      'cssstyledeclaration_test': async_unittest, | 
| +      'css_test': async_unittest, | 
| + | 
| +      // This is failing with a range error, I'm guessing because it's looking | 
| +      // for a stylesheet and the page has none. | 
| +      'css_rule_list_test': 'fail', | 
| +      'custom_element_method_clash_test': async_unittest, | 
| +      'custom_element_name_clash_test': async_unittest, | 
| +      'custom_elements_23127_test': async_unittest, | 
| +      'custom_elements_test': async_unittest, | 
| +      'datalistelement_test': 'fail', // sdk#27578. | 
| +      'dom_constructors_test': 'fail', // sdk#27578. | 
| +      'element_animate_test': async_unittest, | 
| +      'element_classes_test': 'fail', // sdk#27579. | 
| +      'element_classes_svg_test': 'fail', // sdk#27579. | 
| + | 
| +      // This fails because we get 150 instead of 10 on line 45. | 
| +      'element_dimensions_test': 'fail', | 
| + | 
| +      // Failure: 'Expected 364 to be in the inclusive range [111, 160].'. | 
| +      'element_offset_test': 'fail', | 
| +      'element_test': async_unittest, | 
| +      'element_types_test': 'fail', // sdk#27578. | 
| +      'event_customevent_test': async_unittest, | 
| +      'events_test': async_unittest, | 
| + | 
| +      // Failure: "Failed to execute 'dispatchEvent' on 'EventTarget': parameter | 
| +      // 1 is not of type 'Event'." | 
| +      'event_test': 'fail', | 
| +      'fileapi_test': async_unittest, | 
| +      'filereader_test': async_unittest, | 
| +      'fontface_loaded_test': async_unittest, | 
| + | 
| +      // Failed because it's expecting "Ahem" but getting null. Maybe sdk#27579? | 
| +      'fontface_test': 'fail', | 
| +      'form_data_test': async_unittest, | 
| +      'history_test': async_unittest, | 
| + | 
| +      // Failing because innerHtml should be 'Hello World' but was ''. | 
| +      'htmlelement_test': 'fail', | 
| +      'indexeddb_1_test': async_unittest, | 
| +      'indexeddb_2_test': async_unittest, | 
| +      'indexeddb_3_test': async_unittest, | 
| +      'indexeddb_4_test': async_unittest, | 
| +      'indexeddb_5_test': async_unittest, | 
| +      'input_element_test': 'fail', // sdk#27578. | 
| +      'interactive_test': async_unittest, | 
| +      'isolates_test': async_unittest, | 
| + | 
| +      // Failing on "identical JS objects should have identical proxies". | 
| +      'js_test': 'fail', | 
| +      'js_interop_1_test': async_unittest, | 
| + | 
| +      // Failing because accessing "zSomeInvalidName" does not throw. | 
| +      'js_typed_interop_test': 'fail', | 
| + | 
| +      // The "typed literal" test fails because the object does not have "_c". | 
| +      'js_util_test': 'fail', | 
| 'keyboard_event_test': ['unittest', 'skip', 'fail'], | 
| 'localstorage_test': ['unittest', 'skip', 'fail'], | 
| 'location_test': ['unittest', 'skip', 'fail'], | 
| @@ -528,7 +516,6 @@ define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
| 'svgelement_test': ['unittest', 'skip', 'fail'], | 
| 'svg_test': ['unittest', 'skip', 'fail'], | 
| 'table_test': ['unittest', 'skip', 'fail'], | 
| -      'text_event_test': ['unittest', 'skip', 'fail'], | 
| 'touchevent_test': ['unittest', 'skip', 'fail'], | 
| 'track_element_constructor_test': ['unittest', 'skip', 'fail'], | 
| 'transferables_test': ['unittest', 'skip', 'fail'], | 
| @@ -564,7 +551,9 @@ define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
|  | 
| 'js_typed_interop_default_arg_test_none_multi': ['unittest', 'skip', 'fail'], | 
| 'js_typed_interop_default_arg_test_explicit_argument_multi': ['unittest', 'skip', 'fail'], | 
| -      'js_typed_interop_default_arg_test_default_value_multi': ['unittest', 'skip', 'fail'] | 
| + | 
| +      // Failing when it gets 3 instead of 42. | 
| +      'js_typed_interop_default_arg_test_default_value_multi': 'fail', | 
| }, | 
|  | 
| 'lib/html/custom': { | 
| @@ -820,10 +809,14 @@ define(['dart_sdk', 'async_helper', 'unittest', 'require'], | 
| } | 
| } | 
| } else { | 
| -          if (negative) { | 
| -            assert.throws(mainLibrary.main); | 
| -          } else { | 
| -            mainLibrary.main(); | 
| +          try { | 
| +            if (negative) { | 
| +              assert.throws(mainLibrary.main); | 
| +            } else { | 
| +              mainLibrary.main(); | 
| +            } | 
| +          } finally { | 
| +            minitest.finishTests(); | 
| } | 
| } | 
|  | 
|  |