Fix tests and lints (#66)

diff --git a/.gitignore b/.gitignore
index 7dbf035..8cfcc0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
 build/
 packages
 .packages
+.dart_tool/
 
 # Or the files created by dart2js.
 *.dart.js
@@ -12,4 +13,4 @@
 *.js.map
 
 # Include when developing application packages.
-pubspec.lock
\ No newline at end of file
+pubspec.lock
diff --git a/lib/src/http_impl.dart b/lib/src/http_impl.dart
index 19970d3..43b5f72 100644
--- a/lib/src/http_impl.dart
+++ b/lib/src/http_impl.dart
@@ -968,8 +968,9 @@
   }
 
   Future<HttpClientResponse> get done {
-    _response ??= Future.wait([_responseCompleter.future, super.done],
-        eagerError: true).then((list) => list[0]);
+    _response ??=
+        Future.wait([_responseCompleter.future, super.done], eagerError: true)
+            .then((list) => list[0]);
     return _response;
   }
 
@@ -1585,8 +1586,8 @@
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
       // for proxy basic authorization.
-      String auth = CryptoUtils
-          .bytesToBase64(utf8.encode("${proxy.username}:${proxy.password}"));
+      String auth = CryptoUtils.bytesToBase64(
+          utf8.encode("${proxy.username}:${proxy.password}"));
       request.headers.set(HttpHeaders.PROXY_AUTHORIZATION, "Basic $auth");
     } else if (!proxy.isDirect && _httpClient._proxyCredentials.isNotEmpty) {
       proxyCreds = _httpClient._findProxyCredentials(proxy);
@@ -1707,8 +1708,8 @@
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
       // for proxy basic authorization.
-      String auth = CryptoUtils
-          .bytesToBase64(utf8.encode("${proxy.username}:${proxy.password}"));
+      String auth = CryptoUtils.bytesToBase64(
+          utf8.encode("${proxy.username}:${proxy.password}"));
       request.headers.set(HttpHeaders.PROXY_AUTHORIZATION, "Basic $auth");
     }
     return request.close().then((response) {
@@ -2368,8 +2369,8 @@
 
   static Future<HttpServer> bind(
       address, int port, int backlog, bool v6Only, bool shared) {
-    return ServerSocket
-        .bind(address, port, backlog: backlog, v6Only: v6Only, shared: shared)
+    return ServerSocket.bind(address, port,
+            backlog: backlog, v6Only: v6Only, shared: shared)
         .then<HttpServer>((socket) {
       return new _HttpServer._(socket, true);
     });
@@ -2383,8 +2384,7 @@
       bool v6Only,
       bool requestClientCertificate,
       bool shared) {
-    return SecureServerSocket
-        .bind(address, port, context,
+    return SecureServerSocket.bind(address, port, context,
             backlog: backlog,
             v6Only: v6Only,
             requestClientCertificate: requestClientCertificate,
diff --git a/lib/src/http_parser.dart b/lib/src/http_parser.dart
index ee2e3da..5b228c8 100644
--- a/lib/src/http_parser.dart
+++ b/lib/src/http_parser.dart
@@ -765,7 +765,7 @@
     }
   }
 
-  void _onData(Uint8List buffer) {
+  void _onData(List<int> buffer) {
     _socketSubscription.pause();
     assert(_buffer == null);
     _buffer = buffer;
diff --git a/lib/src/http_session_impl.dart b/lib/src/http_session_impl.dart
index 1328a96..a89ff0f 100644
--- a/lib/src/http_session_impl.dart
+++ b/lib/src/http_session_impl.dart
@@ -88,9 +88,6 @@
   }
 
   Map<K, V> cast<K, V>() => _data.cast<K, V>();
-
-  Map<K, V> retype<K, V>() => _data.retype<K, V>();
-
   update(key, update(value), {ifAbsent()}) =>
       _data.update(key, update, ifAbsent: ifAbsent);
 
diff --git a/test/http_auth_digest_test.dart b/test/http_auth_digest_test.dart
index 5101744..d2d3bd5 100644
--- a/test/http_auth_digest_test.dart
+++ b/test/http_auth_digest_test.dart
@@ -214,7 +214,7 @@
     client.authenticate = (Uri url, String scheme, String realm) {
       expect("Digest", equals(scheme));
       expect("test", equals(realm));
-      Completer completer = new Completer();
+      Completer<bool> completer = new Completer<bool>();
       new Timer(const Duration(milliseconds: 10), () {
         client.addCredentials(
             Uri.parse("http://127.0.0.1:${server.port}/digest"),
@@ -287,8 +287,7 @@
 
 Future<Null> testNextNonce() {
   Completer<Null> completer = new Completer();
-  Server
-      .start("MD5", "auth", nonceStaleAfter: 2, useNextNonce: true)
+  Server.start("MD5", "auth", nonceStaleAfter: 2, useNextNonce: true)
       .then((server) {
     HttpClient client = new HttpClient();
 
diff --git a/test/http_auth_test.dart b/test/http_auth_test.dart
index 6688bcb..995ce87 100644
--- a/test/http_auth_test.dart
+++ b/test/http_auth_test.dart
@@ -168,7 +168,7 @@
       String username = url.path.substring(1, 6);
       String password = url.path.substring(1, 6);
       if (passwordChanged) password = "${password}1";
-      Completer completer = new Completer();
+      Completer<bool> completer = new Completer<bool>();
       new Timer(const Duration(milliseconds: 10), () {
         client.addCredentials(
             url, realm, new HttpClientBasicCredentials(username, password));
diff --git a/test/http_client_stays_alive_test.dart b/test/http_client_stays_alive_test.dart
index 749f03a..3e208af 100644
--- a/test/http_client_stays_alive_test.dart
+++ b/test/http_client_stays_alive_test.dart
@@ -22,9 +22,7 @@
 const SECONDS = 4;
 
 List<String> packageOptions() {
-  if (Platform.packageRoot != null) {
-    return <String>['--package-root=${Platform.packageRoot}'];
-  } else if (Platform.packageConfig != null) {
+  if (Platform.packageConfig != null) {
     return <String>['--packages=${Platform.packageConfig}'];
   } else {
     return <String>[];
@@ -56,8 +54,8 @@
     }
 
     var arguments = packageOptions()..add(script);
-    Process.run(Platform.executable, arguments, environment: {'URL': url}).then(
-        (res) {
+    Process.run(Platform.executable, arguments, environment: {'URL': url})
+        .then((res) {
       subscription.cancel();
       if (res.exitCode != 0) {
         throw "Child exited with ${res.exitCode} instead of 0. "
diff --git a/test/http_compression_test.dart b/test/http_compression_test.dart
index a0c8f52..90114ac 100644
--- a/test/http_compression_test.dart
+++ b/test/http_compression_test.dart
@@ -25,7 +25,7 @@
     }).then((response) {
       expect(
           "gzip", equals(response.headers.value(HttpHeaders.CONTENT_ENCODING)));
-      response.fold([], (list, b) {
+      response.fold(<int>[], (list, b) {
         list.addAll(b);
         return list;
       }).then((list) {
diff --git a/test/http_cookie_date_test.dart b/test/http_cookie_date_test.dart
index e5ea628..0d4b0cc 100644
--- a/test/http_cookie_date_test.dart
+++ b/test/http_cookie_date_test.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 
 void testParseHttpCookieDate() {
-  expect(() => parseCookieDate(""), throwsA(new isInstanceOf<HttpException>()));
+  expect(() => parseCookieDate(""), throwsA(new TypeMatcher<HttpException>()));
 
   test(int year, int month, int day, int hours, int minutes, int seconds,
       String formatted) {
diff --git a/test/http_cross_process_test.dart b/test/http_cross_process_test.dart
index 906aa45..56f198f 100644
--- a/test/http_cross_process_test.dart
+++ b/test/http_cross_process_test.dart
@@ -50,8 +50,7 @@
         .toFilePath();
   }
 
-  return Process
-      .run(
+  return Process.run(
           Platform.executable,
           []
             ..addAll(Platform.executableArguments)
diff --git a/test/http_date_test.dart b/test/http_date_test.dart
index a8d07e0..38a848b 100644
--- a/test/http_date_test.dart
+++ b/test/http_date_test.dart
@@ -43,7 +43,7 @@
 void testParseHttpDateFailures() {
   // The calls below can throw different exceptions based on the iteration of
   // the loop. This matcher catches all exceptions.
-  final throws = throwsA(new isInstanceOf<Object>());
+  final throws = throwsA(new TypeMatcher<Object>());
   expect(() {
     HttpDate.parse("");
   }, throws);
diff --git a/test/http_detach_socket_test.dart b/test/http_detach_socket_test.dart
index 6e712ab..c0b645d 100644
--- a/test/http_detach_socket_test.dart
+++ b/test/http_detach_socket_test.dart
@@ -88,7 +88,7 @@
       var response = request.response;
       response.contentLength = 0;
       response.close();
-      expect(response.detachSocket, throwsA(new isInstanceOf<StateError>()));
+      expect(response.detachSocket, throwsA(new TypeMatcher<StateError>()));
       server.close();
       completer.complete();
     });
@@ -123,7 +123,7 @@
         lines.sort(); // Lines 1-3 becomes 3-5 in a fixed order.
         expect("accept-encoding: gzip", lines[3]);
         expect("content-length: 0", lines[4]);
-        expect("host: 127.0.0.1:${port}", lines[5]);
+        expect("host: 127.0.0.1:$port", lines[5]);
         socket.close();
       });
       server.close();
diff --git a/test/http_head_test.dart b/test/http_head_test.dart
index 0833eac..a38ad7c 100644
--- a/test/http_head_test.dart
+++ b/test/http_head_test.dart
@@ -7,7 +7,7 @@
 import 'package:http_io/http_io.dart';
 import 'package:test/test.dart';
 
-Future<Null> testHEAD(int totalConnections) async {
+Future<Null> testHEAD(int totalConnections) {
   final completer = new Completer<Null>();
   HttpServer.bind("127.0.0.1", 0).then((server) async {
     server.listen((request) {
diff --git a/test/http_headers_state_test.dart b/test/http_headers_state_test.dart
index 799efd7..dd5f0fb 100644
--- a/test/http_headers_state_test.dart
+++ b/test/http_headers_state_test.dart
@@ -14,7 +14,7 @@
       HttpResponse response = request.response;
       // Cannot mutate request headers.
       expect(() => request.headers.add("X-Request-Header", "value"),
-          throwsA(new isInstanceOf<HttpException>()));
+          throwsA(new TypeMatcher<HttpException>()));
       expect("value", request.headers.value("X-Request-Header"));
       request.listen((_) {}, onDone: () {
         // Can still mutate response headers as long as no data has been sent.
@@ -26,7 +26,7 @@
           expect(() => response.reasonPhrase = "OK", throwsStateError);
           // Cannot mutate response headers when data has been sent.
           expect(() => response.headers.add("X-Request-Header", "value2"),
-              throwsA(new isInstanceOf<HttpException>()));
+              throwsA(new TypeMatcher<HttpException>()));
         }
         response..close();
         // Cannot change state or reason after connection is closed.
@@ -34,7 +34,7 @@
         expect(() => response.reasonPhrase = "OK", throwsStateError);
         // Cannot mutate response headers after connection is closed.
         expect(() => response.headers.add("X-Request-Header", "value3"),
-            throwsA(new isInstanceOf<HttpException>()));
+            throwsA(new TypeMatcher<HttpException>()));
       });
     });
 
@@ -53,17 +53,17 @@
           request.write(body);
           // Cannot mutate request headers when data has been sent.
           expect(() => request.headers.add("X-Request-Header", "value2"),
-              throwsA(new isInstanceOf<HttpException>()));
+              throwsA(new TypeMatcher<HttpException>()));
         }
         request.close();
         // Cannot mutate request headers when data has been sent.
         expect(() => request.headers.add("X-Request-Header", "value3"),
-            throwsA(new isInstanceOf<HttpException>()));
+            throwsA(new TypeMatcher<HttpException>()));
         return request.done;
       }).then((HttpClientResponse response) {
         // Cannot mutate response headers.
         expect(() => response.headers.add("X-Response-Header", "value"),
-            throwsA(new isInstanceOf<HttpException>()));
+            throwsA(new TypeMatcher<HttpException>()));
         expect("value", response.headers.value("X-Response-Header"));
         response.listen((_) {}, onDone: () {
           // Do not close the connections before we have read the
diff --git a/test/http_parser_test.dart b/test/http_parser_test.dart
index a567838..33b2160 100644
--- a/test/http_parser_test.dart
+++ b/test/http_parser_test.dart
@@ -25,7 +25,7 @@
       String request, String expectedMethod, String expectedUri,
       {int expectedTransferLength: 0,
       int expectedBytesReceived: 0,
-      Map<String, String> expectedHeaders: null,
+      Map<String, String> expectedHeaders,
       bool chunked: false,
       bool upgrade: false,
       int unparsedLength: 0,
@@ -123,7 +123,7 @@
       String request, String expectedMethod, String expectedUri,
       {int expectedTransferLength: 0,
       int expectedBytesReceived: 0,
-      Map<String, String> expectedHeaders: null,
+      Map<String, String> expectedHeaders,
       bool chunked: false,
       bool upgrade: false,
       int unparsedLength: 0,
@@ -197,10 +197,10 @@
       String response, int expectedStatusCode, String expectedReasonPhrase,
       {int expectedTransferLength: 0,
       int expectedBytesReceived: 0,
-      Map<String, String> expectedHeaders: null,
+      Map<String, String> expectedHeaders,
       bool chunked: false,
       bool close: false,
-      String responseToMethod: null,
+      String responseToMethod,
       bool connectionClose: false,
       bool upgrade: false,
       int unparsedLength: 0,
@@ -238,8 +238,6 @@
         }
       }
 
-      ;
-
       httpParser.listen((incoming) {
         port.close();
         statusCode = incoming.statusCode;
@@ -300,7 +298,6 @@
       HttpParser httpParser = new HttpParser.responseParser();
       StreamController<List<int>> controller = new StreamController(sync: true);
       bool errorCalled = false;
-      ;
 
       if (chunkSize == -1) chunkSize = requestData.length;
 
diff --git a/test/http_proxy_advanced_test.dart b/test/http_proxy_advanced_test.dart
index 5276acc..21c90e0 100644
--- a/test/http_proxy_advanced_test.dart
+++ b/test/http_proxy_advanced_test.dart
@@ -38,8 +38,9 @@
 
   Future<Server> start() {
     return (secure
-        ? HttpServer.bindSecure("localhost", 0, serverContext)
-        : HttpServer.bind("localhost", 0)).then((s) {
+            ? HttpServer.bindSecure("localhost", 0, serverContext)
+            : HttpServer.bind("localhost", 0))
+        .then((s) {
       server = s;
       server.listen(requestHandler);
       return this;
@@ -98,7 +99,7 @@
   String username;
   String password;
 
-  var ha1;
+  String ha1;
   String serverAlgorithm = "MD5";
   String serverQop = "auth";
   Set ncs = new Set();
@@ -119,7 +120,7 @@
     authScheme = "Digest";
 
     // Calculate ha1.
-    var digest = md5.convert("${username}:${realm}:${password}".codeUnits);
+    var digest = md5.convert("$username:$realm:$password".codeUnits);
     ha1 = hex.encode(digest.bytes);
   }
 
@@ -209,14 +210,14 @@
               }
               expect(header.parameters["response"], isNotNull);
 
-              var digest = md5.convert("${request.method}:${uri}".codeUnits);
+              var digest = md5.convert("${request.method}:$uri".codeUnits);
               var ha2 = hex.encode(digest.bytes);
 
               if (qop == null || qop == "" || qop == "none") {
-                digest = md5.convert("$ha1:${nonce}:$ha2".codeUnits);
+                digest = md5.convert("$ha1:$nonce:$ha2".codeUnits);
               } else {
-                digest = md5.convert(
-                    "$ha1:${nonce}:${nc}:${cnonce}:${qop}:$ha2".codeUnits);
+                digest =
+                    md5.convert("$ha1:$nonce:$nc:$cnonce:$qop:$ha2".codeUnits);
               }
               expect(hex.encode(digest.bytes),
                   equals(header.parameters["response"]));
diff --git a/test/http_proxy_test.dart b/test/http_proxy_test.dart
index 4df58be..ab759ea 100644
--- a/test/http_proxy_test.dart
+++ b/test/http_proxy_test.dart
@@ -38,8 +38,9 @@
 
   Future<Server> start() {
     return (secure
-        ? HttpServer.bindSecure("localhost", 0, serverContext)
-        : HttpServer.bind("localhost", 0)).then((s) {
+            ? HttpServer.bindSecure("localhost", 0, serverContext)
+            : HttpServer.bind("localhost", 0))
+        .then((s) {
       server = s;
       server.listen(requestHandler);
       return this;
@@ -99,7 +100,7 @@
   String username;
   String password;
 
-  var ha1;
+  String ha1;
   String serverAlgorithm = "MD5";
   String serverQop = "auth";
   Set ncs = new Set();
@@ -200,14 +201,14 @@
               }
               expect(header.parameters["response"], isNotNull);
 
-              var digest = md5.convert("${request.method}:${uri}".codeUnits);
+              var digest = md5.convert("${request.method}:$uri".codeUnits);
               var ha2 = hex.encode(digest.bytes);
 
               if (qop == null || qop == "" || qop == "none") {
-                digest = md5.convert("$ha1:${nonce}:$ha2".codeUnits);
+                digest = md5.convert("$ha1:$nonce:$ha2".codeUnits);
               } else {
-                digest = md5.convert(
-                    "$ha1:${nonce}:${nc}:${cnonce}:${qop}:$ha2".codeUnits);
+                digest =
+                    md5.convert("$ha1:$nonce:$nc:$cnonce:$qop:$ha2".codeUnits);
               }
               expect(hex.encode(digest.bytes),
                   equals(header.parameters["response"]));
diff --git a/test/http_read_test.dart b/test/http_read_test.dart
index 989fd1b..59c4b6d 100644
--- a/test/http_read_test.dart
+++ b/test/http_read_test.dart
@@ -53,7 +53,7 @@
 
   ReceivePort _statusPort; // Port for receiving messages from the server.
   SendPort _serverPort; // Port for sending messages to the server.
-  var _startedCallback;
+  void Function(int) _startedCallback;
 }
 
 class IsolatedHttpServerCommand {
@@ -145,8 +145,6 @@
       _server.close();
       _dispatchPort.close();
       replyTo.send(new IsolatedHttpServerStatus.stopped());
-    } else if (command.isChunkedEncoding) {
-      _chunkedEncoding = true;
     }
   }
 
@@ -162,7 +160,6 @@
   HttpServer _server; // HTTP server instance.
   ReceivePort _dispatchPort;
   Map _requestHandlers;
-  bool _chunkedEncoding = false;
 }
 
 Future<Null> testRead(bool chunkedEncoding) {
diff --git a/test/http_redirect_test.dart b/test/http_redirect_test.dart
index 0cea8a2..f1e9f15 100644
--- a/test/http_redirect_test.dart
+++ b/test/http_redirect_test.dart
@@ -442,8 +442,8 @@
     }
 
     client
-        .getUrl(Uri
-            .parse("http://127.0.0.1:${server.port}/some/relativeToAbsolute"))
+        .getUrl(Uri.parse(
+            "http://127.0.0.1:${server.port}/some/relativeToAbsolute"))
         .then((HttpClientRequest request) {
       request.followRedirects = false;
       return request.close();
diff --git a/test/http_reuse_server_port_test.dart b/test/http_reuse_server_port_test.dart
index ba2d754..3ee4ea9 100644
--- a/test/http_reuse_server_port_test.dart
+++ b/test/http_reuse_server_port_test.dart
@@ -8,7 +8,7 @@
 import 'package:test/test.dart';
 
 Future<int> runServer(int port, int connections, bool clean) {
-  var completer = new Completer();
+  Completer<int> completer = new Completer<int>();
   HttpServer.bind("127.0.0.1", port).then((server) {
     int i = 0;
     server.listen((request) {
@@ -20,8 +20,7 @@
       }
     });
 
-    Future
-        .wait(new List.generate(connections, (_) {
+    Future.wait(new List.generate(connections, (_) {
       var client = new HttpClient();
       return client
           .get("127.0.0.1", server.port, "/")
@@ -30,8 +29,7 @@
           .catchError((e) {
         if (clean) throw e;
       });
-    }))
-        .then((_) {
+    })).then((_) {
       if (clean) {
         int port = server.port;
         server.close().then((_) => completer.complete(port));
diff --git a/test/http_server_close_response_after_error_test.dart b/test/http_server_close_response_after_error_test.dart
index 9f5f975..16c04f9 100644
--- a/test/http_server_close_response_after_error_test.dart
+++ b/test/http_server_close_response_after_error_test.dart
@@ -22,8 +22,8 @@
     if (!new File(name).existsSync()) {
       name = Platform.script.resolve(CLIENT_SCRIPT).toString();
     }
-    Process.run(Platform.executable, [name, server.port.toString()]).then(
-        (result) {
+    Process.run(Platform.executable, [name, server.port.toString()])
+        .then((result) {
       if (result.exitCode != 0) throw "Bad exit code";
       server.close();
       completer.complete();
diff --git a/test/http_server_early_client_close_test.dart b/test/http_server_early_client_close_test.dart
index f16ae44..c16a702 100644
--- a/test/http_server_early_client_close_test.dart
+++ b/test/http_server_early_client_close_test.dart
@@ -137,7 +137,7 @@
   final completer = new Completer<Null>();
   HttpServer.bind("127.0.0.1", 0).then((server) {
     server.listen((request) {
-      var subscription;
+      StreamSubscription subscription;
       subscription = request.listen((_) {}, onError: (error) {
         // subscription.cancel should not trigger an error.
         subscription.cancel();
diff --git a/test/http_server_response_test.dart b/test/http_server_response_test.dart
index f16bab9..66e3a91 100644
--- a/test/http_server_response_test.dart
+++ b/test/http_server_response_test.dart
@@ -30,7 +30,7 @@
         .then((request) => request.close())
         .then((response) {
       int received = 0;
-      var subscription;
+      StreamSubscription subscription;
       subscription = response.listen((data) {
         if (closeClient == true) {
           subscription.cancel();
@@ -121,7 +121,7 @@
 
   final completer3 = new Completer<Null>();
   testServerRequest((server, request) {
-    var controller = new StreamController(sync: true);
+    var controller = new StreamController<List<int>>(sync: true);
     request.response.addStream(controller.stream).then((response) {
       response.close();
       response.done.then((_) {
diff --git a/test/https_unauthorized_test.dart b/test/https_unauthorized_test.dart
index 6bb9882..dacaf10 100644
--- a/test/https_unauthorized_test.dart
+++ b/test/https_unauthorized_test.dart
@@ -41,8 +41,7 @@
   ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
 
 Future<HttpServer> runServer() {
-  return HttpServer
-      .bindSecure(HOST_NAME, 0, untrustedServerContext, backlog: 5)
+  return HttpServer.bindSecure(HOST_NAME, 0, untrustedServerContext, backlog: 5)
       .then((server) {
     server.listen((HttpRequest request) {
       request.listen((_) {}, onDone: () {
@@ -59,9 +58,8 @@
   final completer = new Completer<Null>();
   var clientScript = localFile('https_unauthorized_client.dart');
   Future clientProcess(int port) {
-    return Process
-        .run(Platform.executable, [clientScript, port.toString()]).then(
-            (ProcessResult result) {
+    return Process.run(Platform.executable, [clientScript, port.toString()])
+        .then((ProcessResult result) {
       if (result.exitCode != 0 || !result.stdout.contains('SUCCESS')) {
         print("Client failed");
         print("  stdout:");