[observatory] Progress toward static mode compatibility.

(Mostly package:unittest -> package:test)

Bug: https://github.com/dart-lang/sdk/issues/32503
Change-Id: I3486cceb97792707b2dc92c1ee78372731bfb92f
Reviewed-on: https://dart-review.googlesource.com/65202
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/observatory/.packages b/runtime/observatory/.packages
index 08b8b0b..69347be 100644
--- a/runtime/observatory/.packages
+++ b/runtime/observatory/.packages
@@ -3,7 +3,6 @@
 collection:../../third_party/observatory_pub_packages/packages/collection/lib
 intl:../../third_party/observatory_pub_packages/packages/intl/lib
 logging:../../third_party/observatory_pub_packages/packages/logging/lib
-matcher:../../third_party/observatory_pub_packages/packages/matcher/lib
 meta:../../third_party/observatory_pub_packages/packages/meta/lib
 observable:../../third_party/observatory_pub_packages/packages/observable/lib
 path:../../third_party/observatory_pub_packages/packages/path/lib
@@ -11,4 +10,25 @@
 stack_trace:../../third_party/observatory_pub_packages/packages/stack_trace/lib
 unittest:../../third_party/observatory_pub_packages/packages/unittest/lib
 usage:../../third_party/observatory_pub_packages/packages/usage/lib
-observatory:lib/
+observatory:lib
+
+# Testing only
+async:../../third_party/pkg/async/lib
+boolean_selector:../../third_party/pkg/boolean_selector/lib
+charcode:../../third_party/pkg/charcode/lib
+dart_internal:../../pkg/dart_internal/lib
+http:../../third_party/pkg/http/lib
+http_parser:../../third_party/pkg/http_parser/lib
+matcher:../../third_party/pkg/matcher/lib
+package_config:../../third_party/pkg_tested/package_config/lib
+package_resolver:../../third_party/pkg_tested/package_resolver/lib
+pool:../../third_party/pkg/pool/lib
+pub_semver:../../third_party/pkg/pub_semver/lib
+source_map_stack_trace:../../third_party/pkg/source_map_stack_trace/lib
+source_maps:../../third_party/pkg/source_maps/lib
+source_span:../../third_party/pkg/source_span/lib
+stream_channel:../../third_party/pkg/stream_channel/lib
+string_scanner:../../third_party/pkg/string_scanner/lib
+term_glyph:../../third_party/pkg/term_glyph/lib
+test:../../third_party/pkg/test/lib
+typed_data:../../third_party/pkg/typed_data/lib
diff --git a/runtime/observatory/tests/observatory_ui/allocation_profile/element_test.dart b/runtime/observatory/tests/observatory_ui/allocation_profile/element_test.dart
index 5fe996a..3673da4 100644
--- a/runtime/observatory/tests/observatory_ui/allocation_profile/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/allocation_profile/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/allocation_profile.dart';
 import 'package:observatory/src/elements/class_ref.dart';
@@ -32,7 +32,7 @@
     final completer = new Completer<AllocationProfileMock>();
     final repo = new AllocationProfileRepositoryMock(
         getter:
-            expectAsync((M.IsolateRef i, bool gc, bool reset, bool combine) {
+            expectAsync4((M.IsolateRef i, bool gc, bool reset, bool combine) {
       expect(i, equals(isolate));
       expect(gc, isFalse);
       expect(reset, isFalse);
@@ -57,7 +57,7 @@
       int step = 0;
       final repo = new AllocationProfileRepositoryMock(
           getter:
-              expectAsync((M.IsolateRef i, bool gc, bool reset, bool combine) {
+              expectAsync4((M.IsolateRef i, bool gc, bool reset, bool combine) {
         expect(i, equals(isolate));
         expect(combine, isFalse);
         switch (step) {
@@ -100,7 +100,7 @@
       int count = 0;
       final repo = new AllocationProfileRepositoryMock(
           getter:
-              expectAsync((M.IsolateRef i, bool gc, bool reset, bool combine) {
+              expectAsync4((M.IsolateRef i, bool gc, bool reset, bool combine) {
         expect(i, equals(isolate));
         expect(gc, isFalse);
         expect(reset, isFalse);
@@ -151,7 +151,7 @@
       final completer = new Completer<AllocationProfileMock>();
       final repo = new AllocationProfileRepositoryMock(
           getter:
-              expectAsync((M.IsolateRef i, bool gc, bool reset, bool combine) {
+              expectAsync4((M.IsolateRef i, bool gc, bool reset, bool combine) {
         expect(i, equals(isolate));
         expect(gc, isFalse);
         expect(reset, isFalse);
diff --git a/runtime/observatory/tests/observatory_ui/class_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/class_ref/element_test.dart
index 41aeb10..3baccf5 100644
--- a/runtime/observatory/tests/observatory_ui/class_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/class_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/class_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/class_tree/element_test.dart b/runtime/observatory/tests/observatory_ui/class_tree/element_test.dart
index 495e841..ed05811 100644
--- a/runtime/observatory/tests/observatory_ui/class_tree/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/class_tree/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/class_tree.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import '../mocks.dart';
@@ -43,12 +43,12 @@
           events,
           notifications,
           new ClassRepositoryMock(
-              object: expectAsync((i) async {
+              object: expectAsync1((i) async {
                 expect(i, equals(isolate));
                 expect(rendered, isFalse);
                 return object;
               }, count: 1),
-              getter: expectAsync((i, id) async {
+              getter: expectAsync2((i, id) async {
                 expect(i, equals(isolate));
                 expect(ids.contains(id), isTrue);
                 switch (id) {
diff --git a/runtime/observatory/tests/observatory_ui/code_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/code_ref/element_test.dart
index 7a65c84..4f9e229 100644
--- a/runtime/observatory/tests/observatory_ui/code_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/code_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/code_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/context_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/context_ref/element_test.dart
index dadeb4d..857f99b 100644
--- a/runtime/observatory/tests/observatory_ui/context_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/context_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/context_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/context_view/element_test.dart b/runtime/observatory/tests/observatory_ui/context_view/element_test.dart
index 6228d54..f2552d3 100644
--- a/runtime/observatory/tests/observatory_ui/context_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/context_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/context_view.dart';
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/object_common.dart';
@@ -35,7 +35,7 @@
   });
   test('elements created after attachment', () async {
     final contexts = new ContextRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(context.id));
       return context;
diff --git a/runtime/observatory/tests/observatory_ui/cpu_profile/element_test.dart b/runtime/observatory/tests/observatory_ui/cpu_profile/element_test.dart
index 1bba139..a596684 100644
--- a/runtime/observatory/tests/observatory_ui/cpu_profile/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/cpu_profile/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/cpu_profile.dart';
 import 'package:observatory/src/elements/cpu_profile/virtual_tree.dart';
diff --git a/runtime/observatory/tests/observatory_ui/cpu_profile/virtual-tree/element_test.dart b/runtime/observatory/tests/observatory_ui/cpu_profile/virtual-tree/element_test.dart
index cb93e56..1f15445 100644
--- a/runtime/observatory/tests/observatory_ui/cpu_profile/virtual-tree/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/cpu_profile/virtual-tree/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/cpu_profile/virtual_tree.dart';
 import '../../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/cpu_profile_table/element_test.dart b/runtime/observatory/tests/observatory_ui/cpu_profile_table/element_test.dart
index f4bd1c8..9857f12 100644
--- a/runtime/observatory/tests/observatory_ui/cpu_profile_table/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/cpu_profile_table/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/cpu_profile_table.dart';
 import 'package:observatory/src/elements/cpu_profile/virtual_tree.dart';
diff --git a/runtime/observatory/tests/observatory_ui/curly_block/element_test.dart b/runtime/observatory/tests/observatory_ui/curly_block/element_test.dart
index 882f665..e647e5f 100644
--- a/runtime/observatory/tests/observatory_ui/curly_block/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/curly_block/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/curly_block.dart';
 
 main() {
@@ -152,7 +152,7 @@
       await e.onRendered.first;
     });
     test('fires on toggle', () async {
-      e.onToggle.listen(expectAsync((CurlyBlockToggleEvent event) {
+      e.onToggle.listen(expectAsync1((CurlyBlockToggleEvent event) {
         expect(event, isNotNull);
         expect(event.control, equals(e));
       }, count: 1));
@@ -160,7 +160,7 @@
       await e.onRendered.first;
     });
     test('fires on manual toggle', () async {
-      e.onToggle.listen(expectAsync((CurlyBlockToggleEvent event) {
+      e.onToggle.listen(expectAsync1((CurlyBlockToggleEvent event) {
         expect(event, isNotNull);
         expect(event.control, equals(e));
       }, count: 1));
@@ -168,7 +168,7 @@
       await e.onRendered.first;
     });
     test('does not fire if setting same expanded value', () async {
-      e.onToggle.listen(expectAsync((_) {}, count: 0));
+      e.onToggle.listen(expectAsync1((_) {}, count: 0));
       e.expanded = e.expanded;
       await e.onRendered.first;
     });
diff --git a/runtime/observatory/tests/observatory_ui/error_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/error_ref/element_test.dart
index 59bddca..867b5f2 100644
--- a/runtime/observatory/tests/observatory_ui/error_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/error_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/error_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/error_view/element_test.dart b/runtime/observatory/tests/observatory_ui/error_view/element_test.dart
index 7d30a03..e69fec7 100644
--- a/runtime/observatory/tests/observatory_ui/error_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/error_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/error_view.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/field_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/field_ref/element_test.dart
index 653f0c6..75df874 100644
--- a/runtime/observatory/tests/observatory_ui/field_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/field_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/field_ref.dart';
 import 'package:observatory/src/elements/instance_ref.dart';
diff --git a/runtime/observatory/tests/observatory_ui/flag_list/element_test.dart b/runtime/observatory/tests/observatory_ui/flag_list/element_test.dart
index e2c74f5..023f08a 100644
--- a/runtime/observatory/tests/observatory_ui/flag_list/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/flag_list/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'package:observatory/models.dart' as M;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/flag_list.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import '../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/function_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/function_ref/element_test.dart
index 4068493..516b9d5 100644
--- a/runtime/observatory/tests/observatory_ui/function_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/function_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/function_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/general_error/element_test.dart b/runtime/observatory/tests/observatory_ui/general_error/element_test.dart
index 4957467..2509c92 100644
--- a/runtime/observatory/tests/observatory_ui/general_error/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/general_error/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/general_error.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import '../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/heap_snapshot/element_test.dart b/runtime/observatory/tests/observatory_ui/heap_snapshot/element_test.dart
index ecebb93..1907d27 100644
--- a/runtime/observatory/tests/observatory_ui/heap_snapshot/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/heap_snapshot/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/containers/virtual_tree.dart';
 import 'package:observatory/src/elements/heap_snapshot.dart';
diff --git a/runtime/observatory/tests/observatory_ui/icdata_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/icdata_ref/element_test.dart
index 89063c4..263c4fb 100644
--- a/runtime/observatory/tests/observatory_ui/icdata_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/icdata_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/instance_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/icdata_view/element_test.dart b/runtime/observatory/tests/observatory_ui/icdata_view/element_test.dart
index 9599570..3e4907b 100644
--- a/runtime/observatory/tests/observatory_ui/icdata_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/icdata_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/icdata_view.dart';
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/object_common.dart';
@@ -35,7 +35,7 @@
   });
   test('elements created after attachment', () async {
     final icdatas = new ICDataRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(icdata.id));
       return icdata;
diff --git a/runtime/observatory/tests/observatory_ui/inbound_references/element_test.dart b/runtime/observatory/tests/observatory_ui/inbound_references/element_test.dart
index 5ecf47b..aa0eac2 100644
--- a/runtime/observatory/tests/observatory_ui/inbound_references/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/inbound_references/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/curly_block.dart';
 import 'package:observatory/src/elements/inbound_references.dart';
 import 'package:observatory/src/elements/instance_ref.dart';
@@ -32,7 +32,7 @@
         elements: const [const InboundReferenceMock(source: source)]);
     bool invoked = false;
     final inbounds = new InboundReferencesRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(object.id));
       invoked = true;
diff --git a/runtime/observatory/tests/observatory_ui/instance_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/instance_ref/element_test.dart
index e156fa7..bbec367 100644
--- a/runtime/observatory/tests/observatory_ui/instance_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/instance_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/icdata_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/isolate/counter_chart/element_test.dart b/runtime/observatory/tests/observatory_ui/isolate/counter_chart/element_test.dart
index 8aef7df..af3b05f 100644
--- a/runtime/observatory/tests/observatory_ui/isolate/counter_chart/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/isolate/counter_chart/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/isolate/counter_chart.dart';
 
 main() {
diff --git a/runtime/observatory/tests/observatory_ui/isolate/isolate-shared-summary/element_test.dart b/runtime/observatory/tests/observatory_ui/isolate/isolate-shared-summary/element_test.dart
index f87a61a..fbbfaf1 100644
--- a/runtime/observatory/tests/observatory_ui/isolate/isolate-shared-summary/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/isolate/isolate-shared-summary/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/isolate/counter_chart.dart';
 import 'package:observatory/src/elements/isolate/shared_summary.dart';
 import '../../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/isolate_reconnect/element_test.dart b/runtime/observatory/tests/observatory_ui/isolate_reconnect/element_test.dart
index 9a40331c..10ba984 100644
--- a/runtime/observatory/tests/observatory_ui/isolate_reconnect/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/isolate_reconnect/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/isolate_reconnect.dart';
 import 'package:observatory/src/elements/nav/notify.dart';
 import '../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/isolate_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/isolate_ref/element_test.dart
index 6d4e25b..7dd81cc 100644
--- a/runtime/observatory/tests/observatory_ui/isolate_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/isolate_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/isolate_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/library_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/library_ref/element_test.dart
index f1e2dda..53d176d 100644
--- a/runtime/observatory/tests/observatory_ui/library_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/library_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/library_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/local_var_descriptor_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/local_var_descriptor_ref/element_test.dart
index c3071a8..eeae150 100644
--- a/runtime/observatory/tests/observatory_ui/local_var_descriptor_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/local_var_descriptor_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/local_var_descriptors_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/megamorphiccache_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/megamorphiccache_ref/element_test.dart
index 41e879d..7a48808 100644
--- a/runtime/observatory/tests/observatory_ui/megamorphiccache_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/megamorphiccache_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/megamorphiccache_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/megamorphiccache_view/element_test.dart b/runtime/observatory/tests/observatory_ui/megamorphiccache_view/element_test.dart
index 7024d41..81dc1cd 100644
--- a/runtime/observatory/tests/observatory_ui/megamorphiccache_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/megamorphiccache_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/megamorphiccache_view.dart';
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/object_common.dart';
@@ -45,7 +45,7 @@
   });
   test('elements created after attachment', () async {
     final caches = new MegamorphicCacheRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(cache.id));
       return cache;
diff --git a/runtime/observatory/tests/observatory_ui/mocks/repositories/event.dart b/runtime/observatory/tests/observatory_ui/mocks/repositories/event.dart
index 2bbdb4b..8b74218 100644
--- a/runtime/observatory/tests/observatory_ui/mocks/repositories/event.dart
+++ b/runtime/observatory/tests/observatory_ui/mocks/repositories/event.dart
@@ -6,134 +6,146 @@
 
 class EventRepositoryMock implements M.EventRepository {
   final _onEvent = new StreamController<M.Event>.broadcast();
-  get onEvent => _onEvent.stream;
+  Stream<M.Event> get onEvent => _onEvent.stream;
   get onEventHasListener => _onEvent.hasListener;
 
   final _onVMEvent = new StreamController<M.VMEvent>.broadcast();
-  get onVMEvent => _onVMEvent.stream;
+  Stream<M.VMEvent> get onVMEvent => _onVMEvent.stream;
   get onVMEventHasListener => _onVMEvent.hasListener;
 
-  final _onVMUpdate = new StreamController<M.Event>.broadcast();
-  get onVMUpdate => _onVMUpdate.stream;
+  final _onVMUpdate = new StreamController<M.VMUpdateEvent>.broadcast();
+  Stream<M.VMUpdateEvent> get onVMUpdate => _onVMUpdate.stream;
   get onVMUpdateHasListener => _onVMUpdate.hasListener;
 
   final _onIsolateEvent = new StreamController<M.IsolateEvent>.broadcast();
-  get onIsolateEvent => _onIsolateEvent.stream;
+  Stream<M.IsolateEvent> get onIsolateEvent => _onIsolateEvent.stream;
   get onIsolateEventHasListener => _onIsolateEvent.hasListener;
 
   final _onIsolateStart = new StreamController<M.IsolateStartEvent>.broadcast();
-  get onIsolateStart => _onIsolateStart.stream;
+  Stream<M.IsolateStartEvent> get onIsolateStart => _onIsolateStart.stream;
   get onIsolateStartHasListener => _onIsolateStart.hasListener;
 
   final _onIsolateRunnable =
       new StreamController<M.IsolateRunnableEvent>.broadcast();
-  get onIsolateRunnable => _onIsolateRunnable.stream;
+  Stream<M.IsolateRunnableEvent> get onIsolateRunnable =>
+      _onIsolateRunnable.stream;
   get onIsolateRunnableHasListener => _onIsolateRunnable.hasListener;
 
   final _onIsolateExit = new StreamController<M.IsolateExitEvent>.broadcast();
-  get onIsolateExit => _onIsolateExit.stream;
+  Stream<M.IsolateExitEvent> get onIsolateExit => _onIsolateExit.stream;
   get onIsolateExitHasListener => _onIsolateExit.hasListener;
 
   final _onIsolateUpdate =
       new StreamController<M.IsolateUpdateEvent>.broadcast();
-  get onIsolateUpdate => _onIsolateUpdate.stream;
+  Stream<M.IsolateUpdateEvent> get onIsolateUpdate => _onIsolateUpdate.stream;
   get onIsolateUpdateHasListener => _onIsolateUpdate.hasListener;
 
   final _onIsolateReload =
       new StreamController<M.IsolateReloadEvent>.broadcast();
-  get onIsolateReload => _onIsolateReload.stream;
+  Stream<M.IsolateReloadEvent> get onIsolateReload => _onIsolateReload.stream;
   get onIsolateReloadHasListener => _onIsolateReload.hasListener;
 
   final _onServiceExtensionAdded =
       new StreamController<M.ServiceExtensionAddedEvent>.broadcast();
-  get onServiceExtensionAdded => _onServiceExtensionAdded.stream;
+  Stream<M.ServiceExtensionAddedEvent> get onServiceExtensionAdded =>
+      _onServiceExtensionAdded.stream;
   get onServiceExtensionAddedHasListener =>
       _onServiceExtensionAdded.hasListener;
 
   final _onDebugEvent = new StreamController<M.DebugEvent>.broadcast();
-  get onDebugEvent => _onDebugEvent.stream;
+  Stream<M.DebugEvent> get onDebugEvent => _onDebugEvent.stream;
   get onDebugEventHasListener => _onDebugEvent.hasListener;
 
   final _onPauseStart = new StreamController<M.PauseStartEvent>.broadcast();
-  get onPauseStart => _onPauseStart.stream;
+  Stream<M.PauseStartEvent> get onPauseStart => _onPauseStart.stream;
   get onPauseStartHasListener => _onPauseStart.hasListener;
 
   final _onPauseExit = new StreamController<M.PauseExitEvent>.broadcast();
-  get onPauseExit => _onPauseExit.stream;
+  Stream<M.PauseExitEvent> get onPauseExit => _onPauseExit.stream;
   get onPauseExitHasListener => _onPauseExit.hasListener;
 
   final _onPauseBreakpoint =
       new StreamController<M.PauseBreakpointEvent>.broadcast();
-  get onPauseBreakpoint => _onPauseBreakpoint.stream;
+  Stream<M.PauseBreakpointEvent> get onPauseBreakpoint =>
+      _onPauseBreakpoint.stream;
   get onPauseBreakpointHasListener => _onPauseBreakpoint.hasListener;
 
   final _onPauseInterrupted =
       new StreamController<M.PauseInterruptedEvent>.broadcast();
-  get onPauseInterrupted => _onPauseInterrupted.stream;
+  Stream<M.PauseInterruptedEvent> get onPauseInterrupted =>
+      _onPauseInterrupted.stream;
   get onPauseInterruptedHasListener => _onPauseInterrupted.hasListener;
 
   final _onPauseException =
       new StreamController<M.PauseExceptionEvent>.broadcast();
-  get onPauseException => _onPauseException.stream;
+  Stream<M.PauseExceptionEvent> get onPauseException =>
+      _onPauseException.stream;
   get onPauseExceptionHasListener => _onPauseException.hasListener;
 
   final _onResume = new StreamController<M.ResumeEvent>.broadcast();
-  get onResume => _onResume.stream;
+  Stream<M.ResumeEvent> get onResume => _onResume.stream;
   get onResumeHasListener => _onResume.hasListener;
 
   final _onBreakpointAdded =
       new StreamController<M.BreakpointAddedEvent>.broadcast();
-  get onBreakpointAdded => _onBreakpointAdded.stream;
+  Stream<M.BreakpointAddedEvent> get onBreakpointAdded =>
+      _onBreakpointAdded.stream;
   get onBreakpointAddedHasListener => _onBreakpointAdded.hasListener;
 
   final _onBreakpointResolved =
       new StreamController<M.BreakpointResolvedEvent>.broadcast();
-  get onBreakpointResolved => _onBreakpointResolved.stream;
+  Stream<M.BreakpointResolvedEvent> get onBreakpointResolved =>
+      _onBreakpointResolved.stream;
   get onBreakpointResolvedHasListener => _onBreakpointResolved.hasListener;
 
   final _onBreakpointRemoved =
       new StreamController<M.BreakpointRemovedEvent>.broadcast();
-  get onBreakpointRemoved => _onBreakpointRemoved.stream;
+  Stream<M.BreakpointRemovedEvent> get onBreakpointRemoved =>
+      _onBreakpointRemoved.stream;
   get onBreakpointRemovedHasListener => _onBreakpointRemoved.hasListener;
 
   final _onInspect = new StreamController<M.InspectEvent>.broadcast();
-  get onInspect => _onInspect.stream;
+  Stream<M.InspectEvent> get onInspect => _onInspect.stream;
   get onInspectHasListener => _onInspect.hasListener;
 
   final _onGCEvent = new StreamController<M.GCEvent>.broadcast();
-  get onGCEvent => _onGCEvent.stream;
+  Stream<M.GCEvent> get onGCEvent => _onGCEvent.stream;
   get onGCEventHasListener => _onGCEvent.hasListener;
 
   final _onLoggingEvent = new StreamController<M.LoggingEvent>.broadcast();
-  get onLoggingEvent => _onLoggingEvent.stream;
+  Stream<M.LoggingEvent> get onLoggingEvent => _onLoggingEvent.stream;
   get onLoggingEventHasListener => _onLoggingEvent.hasListener;
 
   final _onExtensionEvent = new StreamController<M.ExtensionEvent>.broadcast();
-  get onExtensionEvent => _onExtensionEvent.stream;
+  Stream<M.ExtensionEvent> get onExtensionEvent => _onExtensionEvent.stream;
   get onExtensionEventHasListener => _onExtensionEvent.hasListener;
 
   final _onTimelineEvents =
       new StreamController<M.TimelineEventsEvent>.broadcast();
-  get onTimelineEvents => _onTimelineEvents.stream;
+  Stream<M.TimelineEventsEvent> get onTimelineEvents =>
+      _onTimelineEvents.stream;
   get onTimelineEventsEventHasListener => _onTimelineEvents.hasListener;
 
   final _onConnectionClosed =
       new StreamController<M.ConnectionClosedEvent>.broadcast();
-  get onConnectionClosed => _onConnectionClosed.stream;
+  Stream<M.ConnectionClosedEvent> get onConnectionClosed =>
+      _onConnectionClosed.stream;
   get onConnectionClosedHasListener => _onConnectionClosed.hasListener;
 
   final _onServiceEvent = new StreamController<M.ServiceEvent>.broadcast();
-  get onServiceEvent => _onServiceEvent.stream;
+  Stream<M.ServiceEvent> get onServiceEvent => _onServiceEvent.stream;
   get onServiceEventHasListener => _onServiceEvent.hasListener;
 
   final _onServiceRegistered =
       new StreamController<M.ServiceRegisteredEvent>.broadcast();
-  get onServiceRegistered => _onServiceRegistered.stream;
+  Stream<M.ServiceRegisteredEvent> get onServiceRegistered =>
+      _onServiceRegistered.stream;
   get onServiceRegisteredHasListener => _onServiceRegistered.hasListener;
 
   final _onServiceUnregistered =
       new StreamController<M.ServiceUnregisteredEvent>.broadcast();
-  get onServiceUnregistered => _onServiceUnregistered.stream;
+  Stream<M.ServiceUnregisteredEvent> get onServiceUnregistered =>
+      _onServiceUnregistered.stream;
   get onServiceUnregisteredHasListener => _onServiceUnregistered.hasListener;
 
   void add(M.Event event) {
diff --git a/runtime/observatory/tests/observatory_ui/nav/class-menu/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/class-menu/element_test.dart
index 263ab43..ba755bc 100644
--- a/runtime/observatory/tests/observatory_ui/nav/class-menu/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/class-menu/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/class_menu.dart';
 import '../../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/nav/isolate-menu/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/isolate-menu/element_test.dart
index 5d40f27..80d3e70 100644
--- a/runtime/observatory/tests/observatory_ui/nav/isolate-menu/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/isolate-menu/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/isolate_menu.dart';
 import '../../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/nav/library-menu/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/library-menu/element_test.dart
index c566588..59c59b6 100644
--- a/runtime/observatory/tests/observatory_ui/nav/library-menu/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/library-menu/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/library_menu.dart';
 import '../../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/nav/menu-item/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/menu-item/element_test.dart
index ccb778f..8f77748 100644
--- a/runtime/observatory/tests/observatory_ui/nav/menu-item/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/menu-item/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/menu_item.dart';
 
 main() {
diff --git a/runtime/observatory/tests/observatory_ui/nav/notify/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/notify/element_test.dart
index 1b647d8..3fafd60 100644
--- a/runtime/observatory/tests/observatory_ui/nav/notify/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/notify/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html' hide Notification, NotificationEvent;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/nav/notify_event.dart';
diff --git a/runtime/observatory/tests/observatory_ui/nav/notify_event/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/notify_event/element_test.dart
index e653dbc..557a278 100644
--- a/runtime/observatory/tests/observatory_ui/nav/notify_event/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/notify_event/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/notify_event.dart';
 import '../../mocks.dart';
 
@@ -14,9 +14,11 @@
   final event = new PauseStartEventMock(
       isolate: new IsolateMock(id: 'isolate-id', name: 'isolate-name'));
   group('instantiation', () {
-    final e = new NavNotifyEventElement(event);
-    expect(e, isNotNull, reason: 'element correctly created');
-    expect(e.event, equals(event));
+    test('default', () {
+      final e = new NavNotifyEventElement(event);
+      expect(e, isNotNull, reason: 'element correctly created');
+      expect(e.event, equals(event));
+    });
   });
   group('elements', () {
     test('created after attachment', () async {
@@ -43,18 +45,18 @@
     });
     test('navigation after connect', () async {
       sub = window.onPopState
-          .listen(expectAsync((_) {}, count: 1, reason: 'event is fired'));
+          .listen(expectAsync1((_) {}, count: 1, reason: 'event is fired'));
       e.querySelector('a').click();
     });
     test('onDelete events (DOM)', () async {
-      sub = e.onDelete.listen(expectAsync((EventDeleteEvent ev) {
+      sub = e.onDelete.listen(expectAsync1((EventDeleteEvent ev) {
         expect(ev, isNotNull, reason: 'event is passed');
         expect(ev.event, equals(event), reason: 'exception is the same');
       }, count: 1, reason: 'event is fired'));
       e.querySelector('button').click();
     });
     test('onDelete events (code)', () async {
-      sub = e.onDelete.listen(expectAsync((EventDeleteEvent ev) {
+      sub = e.onDelete.listen(expectAsync1((EventDeleteEvent ev) {
         expect(ev, isNotNull, reason: 'event is passed');
         expect(ev.event, equals(event), reason: 'exception is the same');
       }, count: 1, reason: 'event is fired'));
diff --git a/runtime/observatory/tests/observatory_ui/nav/notify_exception/connection_exception_test.dart b/runtime/observatory/tests/observatory_ui/nav/notify_exception/connection_exception_test.dart
index 4f19e64..473ab77 100644
--- a/runtime/observatory/tests/observatory_ui/nav/notify_exception/connection_exception_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/notify_exception/connection_exception_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/notify_exception.dart';
 import '../../mocks.dart';
 
@@ -39,11 +39,11 @@
     });
     test('navigation after connect', () async {
       sub = window.onPopState
-          .listen(expectAsync((_) {}, count: 1, reason: 'event is fired'));
+          .listen(expectAsync1((_) {}, count: 1, reason: 'event is fired'));
       e.querySelector('a').click();
     });
     test('onDelete events (DOM)', () async {
-      sub = e.onDelete.listen(expectAsync((ExceptionDeleteEvent event) {
+      sub = e.onDelete.listen(expectAsync1((ExceptionDeleteEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.exception, equals(exception),
             reason: 'exception is the same');
@@ -52,7 +52,7 @@
       e.querySelector('button').click();
     });
     test('onDelete events (code)', () async {
-      sub = e.onDelete.listen(expectAsync((ExceptionDeleteEvent event) {
+      sub = e.onDelete.listen(expectAsync1((ExceptionDeleteEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.exception, equals(exception),
             reason: 'exception is the same');
diff --git a/runtime/observatory/tests/observatory_ui/nav/notify_exception/exception_test.dart b/runtime/observatory/tests/observatory_ui/nav/notify_exception/exception_test.dart
index 8d4b94e..d521aa2 100644
--- a/runtime/observatory/tests/observatory_ui/nav/notify_exception/exception_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/notify_exception/exception_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/notify_exception.dart';
 
 main() {
@@ -65,11 +65,11 @@
       });
       test('navigation after connect', () async {
         sub = window.onPopState
-            .listen(expectAsync((_) {}, count: 1, reason: 'event is fired'));
+            .listen(expectAsync1((_) {}, count: 1, reason: 'event is fired'));
         e.querySelector('a').click();
       });
       test('onDelete events (DOM)', () async {
-        sub = e.onDelete.listen(expectAsync((ExceptionDeleteEvent event) {
+        sub = e.onDelete.listen(expectAsync1((ExceptionDeleteEvent event) {
           expect(event, isNotNull, reason: 'event is passed');
           expect(event.exception, equals(ex), reason: 'exception is the same');
           expect(event.stacktrace, equals(st),
@@ -78,7 +78,7 @@
         e.querySelector('button').click();
       });
       test('onDelete events (code)', () async {
-        sub = e.onDelete.listen(expectAsync((ExceptionDeleteEvent event) {
+        sub = e.onDelete.listen(expectAsync1((ExceptionDeleteEvent event) {
           expect(event, isNotNull, reason: 'event is passed');
           expect(event.exception, equals(ex), reason: 'exception is the same');
           expect(event.stacktrace, equals(st),
diff --git a/runtime/observatory/tests/observatory_ui/nav/refresh/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/refresh/element_test.dart
index 6752929..6880244 100644
--- a/runtime/observatory/tests/observatory_ui/nav/refresh/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/refresh/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/refresh.dart';
 
 main() {
@@ -95,7 +95,7 @@
       await e.onRendered.first;
     });
     test('fires', () async {
-      sub = e.onRefresh.listen(expectAsync((event) {
+      sub = e.onRefresh.listen(expectAsync1((event) {
         expect(event, isNotNull, reason: 'event passed');
         expect(event is RefreshEvent, isTrue, reason: 'is the right event');
         expect(event.element, equals(e), reason: 'is related to the element');
@@ -103,7 +103,7 @@
       e.refresh();
     });
     test('fires on click', () async {
-      sub = e.onRefresh.listen(expectAsync((event) {
+      sub = e.onRefresh.listen(expectAsync1((event) {
         expect(event, isNotNull, reason: 'event passed');
         expect(event is RefreshEvent, isTrue, reason: 'is the right event');
         expect(event.element, equals(e), reason: 'is related to the element');
@@ -112,12 +112,12 @@
     });
     test('does not fire if disabled', () async {
       e.disabled = true;
-      sub = e.onRefresh.listen(expectAsync((_) {}, count: 0));
+      sub = e.onRefresh.listen(expectAsync1((_) {}, count: 0));
       e.refresh();
     });
     test('does not fires on click if disabled', () async {
       e.disabled = true;
-      sub = e.onRefresh.listen(expectAsync((_) {}, count: 0));
+      sub = e.onRefresh.listen(expectAsync1((_) {}, count: 0));
       e.querySelector('button').click();
     });
   });
diff --git a/runtime/observatory/tests/observatory_ui/nav/top_menu/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/top_menu/element_test.dart
index 165bfe5..7ddd2ca 100644
--- a/runtime/observatory/tests/observatory_ui/nav/top_menu/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/top_menu/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/top_menu.dart';
 
 main() {
diff --git a/runtime/observatory/tests/observatory_ui/nav/vm_menu/element_test.dart b/runtime/observatory/tests/observatory_ui/nav/vm_menu/element_test.dart
index e29cb9a..be95c7a 100644
--- a/runtime/observatory/tests/observatory_ui/nav/vm_menu/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/nav/vm_menu/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/menu_item.dart';
 import 'package:observatory/src/elements/nav/vm_menu.dart';
 import '../../mocks.dart';
diff --git a/runtime/observatory/tests/observatory_ui/object_common/element_test.dart b/runtime/observatory/tests/observatory_ui/object_common/element_test.dart
index b0813be..c589cbf 100644
--- a/runtime/observatory/tests/observatory_ui/object_common/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/object_common/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/class_ref.dart';
 import 'package:observatory/src/elements/inbound_references.dart';
 import 'package:observatory/src/elements/object_common.dart';
@@ -50,7 +50,7 @@
           const InstanceMock(valueAsString: '10'));
       bool invoked = false;
       final reachableSizes = new ReachableSizeRepositoryMock(
-          getter: expectAsync((i, id) async {
+          getter: expectAsync2((i, id) async {
         expect(i, equals(isolate));
         expect(id, equals(object.id));
         invoked = true;
@@ -77,7 +77,7 @@
           const InstanceMock(valueAsString: '10'));
       bool invoked = false;
       final retainedSizes = new RetainedSizeRepositoryMock(
-          getter: expectAsync((i, id) async {
+          getter: expectAsync2((i, id) async {
         expect(i, equals(isolate));
         expect(id, equals(object.id));
         invoked = true;
diff --git a/runtime/observatory/tests/observatory_ui/objectpool_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/objectpool_ref/element_test.dart
index f38ab9f..5c5ec9d 100644
--- a/runtime/observatory/tests/observatory_ui/objectpool_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/objectpool_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/objectpool_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/objectpool_view/element_test.dart b/runtime/observatory/tests/observatory_ui/objectpool_view/element_test.dart
index 52680fb..a8c1d4a 100644
--- a/runtime/observatory/tests/observatory_ui/objectpool_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/objectpool_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/nav/refresh.dart';
 import 'package:observatory/src/elements/object_common.dart';
 import 'package:observatory/src/elements/objectpool_view.dart';
@@ -35,7 +35,7 @@
   });
   test('elements created after attachment', () async {
     final pools = new ObjectPoolRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(pool.id));
       return pool;
diff --git a/runtime/observatory/tests/observatory_ui/objectstore_view/element_test.dart b/runtime/observatory/tests/observatory_ui/objectstore_view/element_test.dart
index 924085d..1c8ca9b 100644
--- a/runtime/observatory/tests/observatory_ui/objectstore_view/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/objectstore_view/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/objectstore_view.dart';
 import '../mocks.dart';
 
@@ -30,7 +30,7 @@
     ];
     const store = const ObjectStoreMock(fields: fields);
     final stores = new ObjectStoreRepositoryMock(
-        getter: expectAsync((i) async {
+        getter: expectAsync1((i) async {
       expect(i, equals(isolate));
       return store;
     }, count: 1));
diff --git a/runtime/observatory/tests/observatory_ui/observatory_ui.status b/runtime/observatory/tests/observatory_ui/observatory_ui.status
index 002abb6..eba0fce 100644
--- a/runtime/observatory/tests/observatory_ui/observatory_ui.status
+++ b/runtime/observatory/tests/observatory_ui/observatory_ui.status
@@ -4,34 +4,8 @@
 
 [ $strong ]
 allocation_profile/element_test: CompileTimeError # observatory is not strong clean (Issue 32503)
-class_tree/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-context_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-cpu_profile/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-cpu_profile_table/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-curly_block/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-flag_list/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-icdata_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-inbound_references/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
 isolate/counter_chart/element_test: CompileTimeError # observatory is not strong clean (Issue 32503)
 isolate/isolate-shared-summary/element_test: CompileTimeError # observatory is not strong clean (Issue 32503)
-isolate_reconnect/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-megamorphiccache_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-nav/notify_event/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-nav/notify_exception/connection_exception_test: Timeout, RuntimeError # observatory is not strong clean (Issue 32503)
-nav/notify_exception/exception_test: Timeout, RuntimeError # observatory is not strong clean (Issue 32503)
-nav/vm_menu/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-object_common/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-objectpool_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-objectstore_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-persistent_handles_page/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-ports/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-retaining_path/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-source_link/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-vm_connect/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-vm_connect_target/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-
-[ $runtime == chrome || $runtime == ff || $runtime == safari ]
-heap_snapshot/element_test: RuntimeError # Issue 27925
 
 [ $runtime == drt || !$browser || $fast_startup ]
 *: SkipByDesign
diff --git a/runtime/observatory/tests/observatory_ui/pc_descriptors_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/pc_descriptors_ref/element_test.dart
index 472df2b..4b5c081 100644
--- a/runtime/observatory/tests/observatory_ui/pc_descriptors_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/pc_descriptors_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/sentinel_value.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/persistent_handles_page/element_test.dart b/runtime/observatory/tests/observatory_ui/persistent_handles_page/element_test.dart
index 43d8c76..75cafc5 100644
--- a/runtime/observatory/tests/observatory_ui/persistent_handles_page/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/persistent_handles_page/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/persistent_handles.dart';
 import '../mocks.dart';
 
@@ -24,7 +24,7 @@
   });
   test('elements created after attachment', () async {
     final repository = new PersistentHandlesRepositoryMock(
-        getter: expectAsync((i) async {
+        getter: expectAsync1((i) async {
       expect(i, equals(isolate));
       return const PersistentHandlesMock();
     }, count: 1));
diff --git a/runtime/observatory/tests/observatory_ui/ports/element_test.dart b/runtime/observatory/tests/observatory_ui/ports/element_test.dart
index f614a53..876f0db 100644
--- a/runtime/observatory/tests/observatory_ui/ports/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/ports/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/ports.dart';
 import '../mocks.dart';
 
@@ -30,7 +30,7 @@
     ];
     const isolatePorts = const PortsAndHandlesMock(elements: elements);
     final ports = new PortsRepositoryMock(
-        getter: expectAsync((i) async {
+        getter: expectAsync1((i) async {
       expect(i, equals(isolate));
       return isolatePorts;
     }, count: 1));
diff --git a/runtime/observatory/tests/observatory_ui/retaining_path/element_test.dart b/runtime/observatory/tests/observatory_ui/retaining_path/element_test.dart
index 5770fa6..2f10ece 100644
--- a/runtime/observatory/tests/observatory_ui/retaining_path/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/retaining_path/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/curly_block.dart';
 import 'package:observatory/src/elements/instance_ref.dart';
 import 'package:observatory/src/elements/retaining_path.dart';
@@ -31,7 +31,7 @@
         elements: const [const RetainingPathItemMock(source: source)]);
     bool invoked = false;
     final paths = new RetainingPathRepositoryMock(
-        getter: expectAsync((i, id) async {
+        getter: expectAsync2((i, id) async {
       expect(i, equals(isolate));
       expect(id, equals(object.id));
       invoked = true;
diff --git a/runtime/observatory/tests/observatory_ui/sample_buffer_control/element_test.dart b/runtime/observatory/tests/observatory_ui/sample_buffer_control/element_test.dart
index 226ee35..9820989 100644
--- a/runtime/observatory/tests/observatory_ui/sample_buffer_control/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/sample_buffer_control/element_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:html';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/sample_buffer_control.dart';
 import '../mocks.dart';
@@ -150,7 +150,7 @@
               profile: new SampleProfileMock())));
       await e.onRendered.first;
       expect(e.selectedTag, equals(M.SampleProfileTag.none));
-      e.onTagChange.listen(expectAsync((_) {
+      e.onTagChange.listen(expectAsync1((_) {
         expect(e.selectedTag, equals(M.SampleProfileTag.userOnly));
       }, count: 1));
       final select = (e.querySelector('.tag-select') as SelectElement);
diff --git a/runtime/observatory/tests/observatory_ui/script_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/script_ref/element_test.dart
index fad7cf8..ae6d7f5 100644
--- a/runtime/observatory/tests/observatory_ui/script_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/script_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/script_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/sentinel_value/element_test.dart b/runtime/observatory/tests/observatory_ui/sentinel_value/element_test.dart
index 304adbc..69d3b11 100644
--- a/runtime/observatory/tests/observatory_ui/sentinel_value/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/sentinel_value/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/pc_descriptors_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/source_link/element_test.dart b/runtime/observatory/tests/observatory_ui/source_link/element_test.dart
index 8a8efe9..a6c10bb 100644
--- a/runtime/observatory/tests/observatory_ui/source_link/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/source_link/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/source_link.dart';
 import '../mocks.dart';
 
@@ -30,7 +30,7 @@
   test('elements created after attachment', () async {
     bool rendered = false;
     final repository = new ScriptRepositoryMock(
-        getter: expectAsync((isolate, id) async {
+        getter: expectAsync2((isolate, id) async {
       expect(rendered, isFalse);
       expect(id, equals(script_id));
       return script;
diff --git a/runtime/observatory/tests/observatory_ui/stack_trace_tree_config/element_test.dart b/runtime/observatory/tests/observatory_ui/stack_trace_tree_config/element_test.dart
index 1a8bef1..3649041 100644
--- a/runtime/observatory/tests/observatory_ui/stack_trace_tree_config/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/stack_trace_tree_config/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/stack_trace_tree_config.dart';
 
@@ -138,7 +138,7 @@
       document.body.append(e);
       await e.onRendered.first;
       expect(e.mode, equals(ProfileTreeMode.function));
-      e.onModeChange.listen(expectAsync((_) {
+      e.onModeChange.listen(expectAsync1((_) {
         expect(e.mode, equals(ProfileTreeMode.code));
       }, count: 1));
       final select = (e.querySelector('.mode-select') as SelectElement);
@@ -155,7 +155,7 @@
       document.body.append(e);
       await e.onRendered.first;
       expect(e.direction, equals(M.ProfileTreeDirection.exclusive));
-      e.onDirectionChange.listen(expectAsync((_) {
+      e.onDirectionChange.listen(expectAsync1((_) {
         expect(e.direction, equals(M.ProfileTreeDirection.inclusive));
       }, count: 1));
       final select = (e.querySelector('.direction-select') as SelectElement);
@@ -172,7 +172,7 @@
       document.body.append(e);
       await e.onRendered.first;
       expect(e.direction, equals(M.ProfileTreeDirection.exclusive));
-      e.onFilterChange.listen(expectAsync((_) {
+      e.onFilterChange.listen(expectAsync1((_) {
         expect(e.filter, equals('value'));
       }, count: 1));
       var input = (e.querySelector('input') as TextInputElement);
diff --git a/runtime/observatory/tests/observatory_ui/token_stream_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/token_stream_ref/element_test.dart
index 16c22fd..12f7351 100644
--- a/runtime/observatory/tests/observatory_ui/token_stream_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/token_stream_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/token_stream_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/unknown_ref/element_test.dart b/runtime/observatory/tests/observatory_ui/unknown_ref/element_test.dart
index f966374..66f907d 100644
--- a/runtime/observatory/tests/observatory_ui/unknown_ref/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/unknown_ref/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/unknown_ref.dart';
 import '../mocks.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/view_footer/element_test.dart b/runtime/observatory/tests/observatory_ui/view_footer/element_test.dart
index 77cb4cc..cc0e635 100644
--- a/runtime/observatory/tests/observatory_ui/view_footer/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/view_footer/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/view_footer.dart';
 
 main() {
diff --git a/runtime/observatory/tests/observatory_ui/virtual_tree/element_test.dart b/runtime/observatory/tests/observatory_ui/virtual_tree/element_test.dart
index f2040cf..2520f74 100644
--- a/runtime/observatory/tests/observatory_ui/virtual_tree/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/virtual_tree/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/containers/virtual_collection.dart';
 import 'package:observatory/src/elements/containers/virtual_tree.dart';
 
diff --git a/runtime/observatory/tests/observatory_ui/vm_connect/element_test.dart b/runtime/observatory/tests/observatory_ui/vm_connect/element_test.dart
index f087af7..8727212 100644
--- a/runtime/observatory/tests/observatory_ui/vm_connect/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/vm_connect/element_test.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
+import 'package:observatory/models.dart' as M;
 import 'package:observatory/src/elements/nav/notify.dart';
 import 'package:observatory/src/elements/vm_connect_target.dart';
 import 'package:observatory/src/elements/vm_connect.dart';
@@ -76,7 +77,7 @@
       final list = <TargetMock>[const TargetMock(name: 't-1')];
       final targets = new TargetRepositoryMock(
           list: list,
-          add: expectAsync((String val) {
+          add: expectAsync1((String val) {
             expect(val, equals(address));
           }, count: 1, reason: 'should be invoked'));
       final e = new VMConnectElement(
@@ -92,7 +93,7 @@
       final list = <TargetMock>[const TargetMock(name: 't-1')];
       final targets = new TargetRepositoryMock(
           list: list,
-          setCurrent: expectAsync((TargetMock t) {
+          setCurrent: expectAsync1((M.Target t) {
             expect(t, equals(list[0]));
           }, count: 1, reason: 'should be invoked'));
       final e =
@@ -107,7 +108,7 @@
       final list = <TargetMock>[const TargetMock(name: 't-1')];
       final targets = new TargetRepositoryMock(
           list: list,
-          delete: expectAsync((TargetMock t) {
+          delete: expectAsync1((M.Target t) {
             expect(t, equals(list[0]));
           }, count: 1, reason: 'should be invoked'));
       final e =
diff --git a/runtime/observatory/tests/observatory_ui/vm_connect_target/element_test.dart b/runtime/observatory/tests/observatory_ui/vm_connect_target/element_test.dart
index 082e588..79003c8 100644
--- a/runtime/observatory/tests/observatory_ui/vm_connect_target/element_test.dart
+++ b/runtime/observatory/tests/observatory_ui/vm_connect_target/element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:html';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:observatory/src/elements/vm_connect_target.dart';
 import '../mocks.dart';
 
@@ -55,28 +55,28 @@
       await e.onRendered.first;
     });
     test('onConnect events (DOM)', () async {
-      e.onConnect.listen(expectAsync((TargetEvent event) {
+      e.onConnect.listen(expectAsync1((TargetEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.target, t, reason: 'target is the same');
       }, count: 1, reason: 'event is fired'));
       e.querySelector('a').click();
     });
     test('onConnect events (code)', () async {
-      e.onConnect.listen(expectAsync((TargetEvent event) {
+      e.onConnect.listen(expectAsync1((TargetEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.target, t, reason: 'target is the same');
       }, count: 1, reason: 'event is fired'));
       e.connect();
     });
     test('onRemove events (DOM)', () async {
-      e.onDelete.listen(expectAsync((TargetEvent event) {
+      e.onDelete.listen(expectAsync1((TargetEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.target, t, reason: 'target is the same');
       }, count: 1, reason: 'event is fired'));
       e.querySelector('button').click();
     });
     test('onRemove events (code)', () async {
-      e.onDelete.listen(expectAsync((TargetEvent event) {
+      e.onDelete.listen(expectAsync1((TargetEvent event) {
         expect(event, isNotNull, reason: 'event is passed');
         expect(event.target, t, reason: 'target is the same');
       }, count: 1, reason: 'event is fired'));