Migrated http_no_reason_phrase_test from SDK. (#48)

diff --git a/test/http_no_reason_phrase_test.dart b/test/http_no_reason_phrase_test.dart
new file mode 100644
index 0000000..97c1919
--- /dev/null
+++ b/test/http_no_reason_phrase_test.dart
@@ -0,0 +1,47 @@
+// (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io' show ServerSocket;
+
+import 'package:http_io/http_io.dart';
+import 'package:test/test.dart';
+
+// Test that a response line without any reason phrase is handled.
+Future<Null> missingReasonPhrase(int statusCode, bool includeSpace) {
+  final completer = new Completer<Null>();
+  var client = new HttpClient();
+  ServerSocket.bind("127.0.0.1", 0).then((server) {
+    server.listen((client) {
+      client.listen(null);
+      if (includeSpace) {
+        client.write("HTTP/1.1 $statusCode \r\n\r\n");
+      } else {
+        client.write("HTTP/1.1 $statusCode\r\n\r\n");
+      }
+      client.close();
+    });
+    client
+        .getUrl(Uri.parse("http://127.0.0.1:${server.port}/"))
+        .then((request) => request.close())
+        .then((response) {
+      expect(statusCode, equals(response.statusCode));
+      expect("", equals(response.reasonPhrase));
+      return response.drain();
+    }).whenComplete(() {
+      server.close();
+      completer.complete();
+    });
+  });
+  return completer.future;
+}
+
+void main() {
+  test('missingReasonOKSpace', () => missingReasonPhrase(HttpStatus.OK, true));
+  test('missingReasonErrorSpace',
+      () => missingReasonPhrase(HttpStatus.INTERNAL_SERVER_ERROR, true));
+  test('missingReasonOK', () => missingReasonPhrase(HttpStatus.OK, false));
+  test('missingReasonError',
+      () => missingReasonPhrase(HttpStatus.INTERNAL_SERVER_ERROR, false));
+}