#476. Adopt common co19 libraries to NNBD
diff --git a/Utils/async_utils.dart b/Utils/async_utils.dart
index fb06548..3c117d1 100644
--- a/Utils/async_utils.dart
+++ b/Utils/async_utils.dart
@@ -66,38 +66,15 @@
 
 /*----------------------------*/
 
-abstract class StreamListener<T> {
-  void onData(T event);
-
-  void onError(error){}
-
-  void onDone(){}
-
-  bool cancelOnError=false;
-
-  StreamSubscription<T> subscription;
-
-  StreamSubscription<T> listenTo(Stream<T> stream) {
-    if (subscription!=null) {
-       subscription.cancel();
-    }
-    subscription=stream.listen(onData, onError:onError, onDone:onDone,
-      cancelOnError:cancelOnError);
-    return subscription;
-  }
-}
-
-/*----------------------------*/
-
 class Sync2<T> {
   Function fire;
   bool firstPut = false, secondPut = false;
-  T val1, val2;
+  T? val1, val2;
 
   Sync2(this.fire);
 
   void put1(T val) {
-    val1=val;
+    val1 = val;
     firstPut = true;
     if (secondPut) {
       fire(val1, val2);
@@ -111,7 +88,6 @@
       fire(val1, val2);
     }
   }
-
 }
 /*----------------------------*/
 /**
@@ -127,9 +103,10 @@
  * is completed. [cleanup] is always called, regardless of test's status.
  *
  */
-void asyncTest<T>(Future test(T value), {Future<T> setup(), void cleanup(T value)}) {
+void asyncTest<T>(Future test(T value), {required Future<T> setup(),
+    required void cleanup(T value)}) {
   asyncStart();
-  Future<T> setupFuture = (setup != null) ? setup() : new Future.value(null);
+  Future<T?> setupFuture = (setup != null) ? setup() : new Future.value(null);
   setupFuture.then((T setupValue) {
     test(setupValue)
       .then((_) => asyncEnd())
@@ -155,8 +132,8 @@
    * the same way as supplied one. Otherwise, the returned future completes
    * with error.
    */
-  static Future<T> value<T>(T expected, Future<T> future, [String reason = null]) {
-    if (reason==null){
+  static Future<T> value<T>(T expected, Future<T> future, [String? reason = null]) {
+    if (reason == null){
       reason = StackTrace.current.toString();
     }
     asyncStart();
@@ -164,7 +141,7 @@
       if (expected is List) {
         Expect.listEquals(expected, value, reason);
       } else if (expected is Set) {
-        Expect.setEquals(expected, value as Iterable, reason);
+        Expect.setEquals(expected as Iterable<Object>, value as Iterable<Object>, reason);
       } else {
         Expect.equals(expected, value, reason);
       }
@@ -180,14 +157,14 @@
    * the same way as supplied one. Otherwise, the returned future completes
    * with error.
    */
-  static Future<T> error<T>(Object error, Future<T> future, [String reason = null]) {
-    if (reason==null){
+  static Future<T> error<T>(Object error, Future<T> future, [String? reason = null]) {
+    if (reason == null){
       reason = StackTrace.current.toString();
     }
     asyncStart();
     return future.then(
       (_) {
-        Expect.fail("The future is expected to complete with error " + reason);
+        Expect.fail("The future is expected to complete with error $reason");
       },
       onError: (e){
         if (error is Function){
@@ -196,7 +173,6 @@
           Expect.equals(error, e, reason);
         }
         asyncEnd();
-//        throw e;
       }
     );
   }
@@ -205,8 +181,8 @@
    * Checks whether the given stream contains expected data events.
    * Any error in the stream is unexpected and wil fail the test.
    */
-  static Future<bool> data<T>(List<T> data, Stream<T> stream, [String reason = null]) {
-    if (reason==null){
+  static Future<bool> data<T>(List<T> data, Stream<T> stream, [String? reason = null]) {
+    if (reason == null){
       reason = StackTrace.current.toString();
     }
     Completer<bool> completer = new Completer<bool>();
@@ -228,8 +204,8 @@
   /**
    * Checks whether the given stream contains expected data and error events.
    */
-  static Future<bool> events<T>(List<T> data, List errors, Stream<T> stream, [String reason = null]) {
-    if (reason==null){
+  static Future<bool> events<T>(List<T> data, List errors, Stream<T> stream, [String? reason = null]) {
+    if (reason == null){
       reason = StackTrace.current.toString();
     }
     Completer<bool> completer = new Completer<bool>();
diff --git a/Utils/expect_common.dart b/Utils/expect_common.dart
index 689af0c..d18a169 100644
--- a/Utils/expect_common.dart
+++ b/Utils/expect_common.dart
@@ -18,7 +18,7 @@
   /**
    * Checks whether the expected and actual values are equal (using `==`).
    */
-  static void equals(var expected, var actual, [String reason = null]) {
+  static void equals(var expected, var actual, [String? reason = null]) {
     if (expected == actual) return;
     if ((expected is double) &&
         (actual is double) &&
@@ -33,7 +33,7 @@
   /**
    * Checks whether the actual value is a bool and its value is true.
    */
-  static void isTrue(var actual, [String reason = null]) {
+  static void isTrue(var actual, [String? reason = null]) {
     if (_identical(actual, true)) return;
     String msg = _getMessage(reason);
     _fail("Expect.isTrue($actual$msg) fails.");
@@ -42,7 +42,7 @@
   /**
    * Checks whether the actual value is a bool and its value is false.
    */
-  static void isFalse(var actual, [String reason = null]) {
+  static void isFalse(var actual, [String? reason = null]) {
     if (_identical(actual, false)) return;
     String msg = _getMessage(reason);
     _fail("Expect.isFalse($actual$msg) fails.");
@@ -51,7 +51,7 @@
   /**
    * Checks whether [actual] is null.
    */
-  static void isNull(actual, [String reason = null]) {
+  static void isNull(actual, [String? reason = null]) {
     if (null == actual) return;
     String msg = _getMessage(reason);
     _fail("Expect.isNull(actual: <$actual>$msg) fails.");
@@ -60,7 +60,7 @@
   /**
    * Checks whether [actual] is not null.
    */
-  static void isNotNull(actual, [String reason = null]) {
+  static void isNotNull(actual, [String? reason = null]) {
     if (null != actual) return;
     String msg = _getMessage(reason);
     _fail("Expect.isNotNull(actual: <$actual>$msg) fails.");
@@ -70,7 +70,7 @@
    * Checks whether the expected and actual values are identical
    * (using `identical`).
    */
-  static void identical(var expected, var actual, [String reason = null]) {
+  static void identical(var expected, var actual, [String? reason = null]) {
     if (_identical(expected, actual)) return;
     String msg = _getMessage(reason);
     _fail("Expect.identical(expected: <$expected>, actual: <$actual>$msg) "
@@ -88,19 +88,19 @@
    * value 4 significant digits smaller than the value given for expected.
    */
   static void approxEquals(num expected, num actual,
-      [num tolerance = null, String reason = null]) {
+      [num? tolerance = null, String? reason = null]) {
     if (tolerance == null) {
       tolerance = (expected / 1e4).abs();
     }
     // Note: use !( <= ) rather than > so we fail on NaNs
-    if ((expected - actual).abs() <= tolerance) return;
+    if ((expected - actual).abs() <= (tolerance as num)) return;
 
     String msg = _getMessage(reason);
     _fail('Expect.approxEquals(expected:<$expected>, actual:<$actual>, '
         'tolerance:<$tolerance>$msg) fails');
   }
 
-  static void notEquals(unexpected, actual, [String reason = null]) {
+  static void notEquals(unexpected, actual, [String? reason = null]) {
     if (unexpected != actual) return;
     String msg = _getMessage(reason);
     _fail("Expect.notEquals(unexpected: <$unexpected>, actual:<$actual>$msg) "
@@ -108,61 +108,11 @@
   }
 
   /**
-   * Checks that all elements in [expected] and [actual] are equal `==`.
-   * This is different than the typical check for identity equality `identical`
-   * used by the standard list implementation.  It should also produce nicer
-   * error messages than just calling `Expect.equals(expected, actual)`.
-  static void listEquals(List expected, List actual, [String reason = null]) {
-    String msg = _getMessage(reason);
-    int n = (expected.length < actual.length) ? expected.length : actual.length;
-    for (int i = 0; i < n; i++) {
-      if (expected[i] != actual[i]) {
-        _fail('Expect.listEquals(at index $i, '
-              'expected: <${expected[i]}>, actual: <${actual[i]}>$msg) fails');
-      }
-    }
-    // We check on length at the end in order to provide better error
-    // messages when an unexpected item is inserted in a list.
-    if (expected.length != actual.length) {
-      _fail('Expect.listEquals(list length, '
-        'expected: <${expected.length}>, actual: <${actual.length}>$msg) '
-        'fails: Next element <'
-        '${expected.length > n ? expected[n] : actual[n]}>');
-    }
-  }
-   */
-
-  /**
-   * Checks that all [expected] and [actual] have the same set of keys (using
-   * the semantics of [Map.containsKey] to determine what "same" means. For
-   * each key, checks that the values in both maps are equal using `==`.
-  static void mapEquals(Map expected, Map actual, [String reason = null]) {
-    String msg = _getMessage(reason);
-
-    // Make sure all of the values are present in both and match.
-    for (final key in expected.keys) {
-      if (!actual.containsKey(key)) {
-        _fail('Expect.mapEquals(missing expected key: <$key>$msg) fails');
-      }
-
-      Expect.equals(expected[key], actual[key]);
-    }
-
-    // Make sure the actual map doesn't have any extra keys.
-    for (final key in actual.keys) {
-      if (!expected.containsKey(key)) {
-        _fail('Expect.mapEquals(unexpected key: <$key>$msg) fails');
-      }
-    }
-  }
-   */
-
-  /**
    * Specialized equality test for strings. When the strings don't match,
    * this method shows where the mismatch starts and ends.
    */
   static void stringEquals(String expected, String actual,
-      [String reason = null]) {
+      [String? reason = null]) {
     String msg = _getMessage(reason);
     String defaultMessage =
         'Expect.stringEquals(expected: <$expected>", <$actual>$msg) fails';
@@ -228,8 +178,8 @@
    * Checks that every element of [expected] is also in [actual], and that
    * every element of [actual] is also in [expected].
    */
-  static void setEquals(Iterable expected, Iterable actual,
-      [String reason = null]) {
+  static void setEquals(Iterable<Object> expected, Iterable<Object> actual,
+      [String? reason = null]) {
     final missingSet = new Set.from(expected);
     missingSet.removeAll(actual);
     final extraSet = new Set.from(actual);
@@ -268,7 +218,7 @@
    *     Expect.throws(myThrowingFunction, (e) => e is MyException);
    */
   static void throws(void f(),
-      [_CheckExceptionFn check = null, String reason = null]) {
+      [_CheckExceptionFn check = null, String? reason = null]) {
     if (!(f is Function)) {
       String msg = reason == null ? "" : reason;
       _fail(
@@ -289,11 +239,10 @@
     _fail('Expect.throws($msg) fails');
   }
 
-  static String _getMessage(String reason) =>
+  static String _getMessage(String? reason) =>
       (reason == null) ? "" : ", '$reason'";
 
-//  static void deepListEquals(var expected, var actual, [String reason = null]) {
-  static void listEquals(var expected, var actual, [String reason = null]) {
+  static void listEquals(var expected, var actual, [String? reason = null]) {
     if (expected is! List) {
       Expect.fail("expected is not a List:$expected");
     }
@@ -303,7 +252,7 @@
     deepEquals(expected, actual, reason);
   }
 
-  static void mapEquals(var expected, var actual, [String reason = null]) {
+  static void mapEquals(var expected, var actual, [String? reason = null]) {
     if ((expected is! Map) || (actual is! Map)) {
       Expect.fail("not a Map");
     }
@@ -313,7 +262,7 @@
   /** checks that both collections have identical topology and equal primitive elements.
    *  useful to check cyclic collections passed through ports and streams.
    */
-  static void deepEquals(var expected, var actual, [String reason = null]) {
+  static void deepEquals(var expected, var actual, [String? reason = null]) {
     Map planned = new Map();
     Map processed = new Map();
 
@@ -392,7 +341,7 @@
 typedef bool _CheckExceptionFn(exception);
 
 class ExpectException implements Exception {
-  String message;
+  String? message;
   ExpectException([this.message]);
-  String toString() => message;
+  String toString() => message ?? "";
 }