| Index: tests/standalone/io/http_parser_test.dart
 | 
| diff --git a/tests/standalone/io/http_parser_test.dart b/tests/standalone/io/http_parser_test.dart
 | 
| index 95edf3bcd461c25219319aeb3d4a604fcace013a..a467f051a8a438512d728e7e520f18d2d70536fd 100644
 | 
| --- a/tests/standalone/io/http_parser_test.dart
 | 
| +++ b/tests/standalone/io/http_parser_test.dart
 | 
| @@ -48,17 +48,16 @@ class HttpParserTest {
 | 
|      testParseInvalidResponse();
 | 
|    }
 | 
|  
 | 
| -  static void _testParseRequest(String request,
 | 
| -                                String expectedMethod,
 | 
| -                                String expectedUri,
 | 
| -                                {int expectedTransferLength: 0,
 | 
| -                                 int expectedBytesReceived: 0,
 | 
| -                                 Map expectedHeaders: null,
 | 
| -                                 bool chunked: false,
 | 
| -                                 bool upgrade: false,
 | 
| -                                 int unparsedLength: 0,
 | 
| -                                 bool connectionClose: false,
 | 
| -                                 String expectedVersion: "1.1"}) {
 | 
| +  static void _testParseRequest(
 | 
| +      String request, String expectedMethod, String expectedUri,
 | 
| +      {int expectedTransferLength: 0,
 | 
| +      int expectedBytesReceived: 0,
 | 
| +      Map expectedHeaders: null,
 | 
| +      bool chunked: false,
 | 
| +      bool upgrade: false,
 | 
| +      int unparsedLength: 0,
 | 
| +      bool connectionClose: false,
 | 
| +      String expectedVersion: "1.1"}) {
 | 
|      StreamController controller;
 | 
|      void reset() {
 | 
|        _HttpParser httpParser = new _HttpParser.requestParser();
 | 
| @@ -88,38 +87,33 @@ class HttpParserTest {
 | 
|            Expect.equals(-1, incoming.transferLength);
 | 
|          }
 | 
|          if (expectedHeaders != null) {
 | 
| -          expectedHeaders.forEach(
 | 
| -              (String name, String value) =>
 | 
| +          expectedHeaders.forEach((String name, String value) =>
 | 
|                Expect.equals(value, headers[name][0]));
 | 
|          }
 | 
| -        incoming.listen(
 | 
| -            (List<int> data) {
 | 
| -              Expect.isFalse(upgraded);
 | 
| -              bytesReceived += data.length;
 | 
| -            },
 | 
| -            onDone: () {
 | 
| -              port2.close();
 | 
| -              Expect.equals(expectedMethod, method);
 | 
| -              Expect.stringEquals(expectedUri, uri.toString());
 | 
| -              Expect.equals(expectedVersion, headers.protocolVersion);
 | 
| -              if (upgrade) {
 | 
| -                Expect.equals(0, bytesReceived);
 | 
| -                // port1 is closed by the listener on the detached data.
 | 
| -              } else {
 | 
| -                Expect.equals(expectedBytesReceived, bytesReceived);
 | 
| -              }
 | 
| -            });
 | 
| +        incoming.listen((List<int> data) {
 | 
| +          Expect.isFalse(upgraded);
 | 
| +          bytesReceived += data.length;
 | 
| +        }, onDone: () {
 | 
| +          port2.close();
 | 
| +          Expect.equals(expectedMethod, method);
 | 
| +          Expect.stringEquals(expectedUri, uri.toString());
 | 
| +          Expect.equals(expectedVersion, headers.protocolVersion);
 | 
| +          if (upgrade) {
 | 
| +            Expect.equals(0, bytesReceived);
 | 
| +            // port1 is closed by the listener on the detached data.
 | 
| +          } else {
 | 
| +            Expect.equals(expectedBytesReceived, bytesReceived);
 | 
| +          }
 | 
| +        });
 | 
|  
 | 
|          if (upgraded) {
 | 
|            port1.close();
 | 
| -          httpParser.detachIncoming().listen(
 | 
| -              (List<int> data) {
 | 
| -                unparsedBytesReceived += data.length;
 | 
| -              },
 | 
| -              onDone: () {
 | 
| -                Expect.equals(unparsedLength, unparsedBytesReceived);
 | 
| -                port2.close();
 | 
| -              });
 | 
| +          httpParser.detachIncoming().listen((List<int> data) {
 | 
| +            unparsedBytesReceived += data.length;
 | 
| +          }, onDone: () {
 | 
| +            Expect.equals(unparsedLength, unparsedBytesReceived);
 | 
| +            port2.close();
 | 
| +          });
 | 
|          }
 | 
|  
 | 
|          incoming.dataDone.then((_) {
 | 
| @@ -153,40 +147,35 @@ class HttpParserTest {
 | 
|      testWrite(requestData, 1);
 | 
|    }
 | 
|  
 | 
| -  static void _testParseRequestLean(String request,
 | 
| -                                    String expectedMethod,
 | 
| -                                    String expectedUri,
 | 
| -                                    {int expectedTransferLength: 0,
 | 
| -                                     int expectedBytesReceived: 0,
 | 
| -                                     Map expectedHeaders: null,
 | 
| -                                     bool chunked: false,
 | 
| -                                     bool upgrade: false,
 | 
| -                                     int unparsedLength: 0,
 | 
| -                                     bool connectionClose: false,
 | 
| -                                     String expectedVersion: "1.1"}) {
 | 
| -    _testParseRequest(request,
 | 
| -                      expectedMethod,
 | 
| -                      expectedUri,
 | 
| -                      expectedTransferLength: expectedTransferLength,
 | 
| -                      expectedBytesReceived: expectedBytesReceived,
 | 
| -                      expectedHeaders: expectedHeaders,
 | 
| -                      chunked: chunked,
 | 
| -                      upgrade: upgrade,
 | 
| -                      unparsedLength: unparsedLength,
 | 
| -                      connectionClose: connectionClose,
 | 
| -                      expectedVersion: expectedVersion);
 | 
| +  static void _testParseRequestLean(
 | 
| +      String request, String expectedMethod, String expectedUri,
 | 
| +      {int expectedTransferLength: 0,
 | 
| +      int expectedBytesReceived: 0,
 | 
| +      Map expectedHeaders: null,
 | 
| +      bool chunked: false,
 | 
| +      bool upgrade: false,
 | 
| +      int unparsedLength: 0,
 | 
| +      bool connectionClose: false,
 | 
| +      String expectedVersion: "1.1"}) {
 | 
| +    _testParseRequest(request, expectedMethod, expectedUri,
 | 
| +        expectedTransferLength: expectedTransferLength,
 | 
| +        expectedBytesReceived: expectedBytesReceived,
 | 
| +        expectedHeaders: expectedHeaders,
 | 
| +        chunked: chunked,
 | 
| +        upgrade: upgrade,
 | 
| +        unparsedLength: unparsedLength,
 | 
| +        connectionClose: connectionClose,
 | 
| +        expectedVersion: expectedVersion);
 | 
|      // Same test but with only \n instead of \r\n terminating each header line.
 | 
| -    _testParseRequest(request.replaceAll('\r', ''),
 | 
| -                      expectedMethod,
 | 
| -                      expectedUri,
 | 
| -                      expectedTransferLength: expectedTransferLength,
 | 
| -                      expectedBytesReceived: expectedBytesReceived,
 | 
| -                      expectedHeaders: expectedHeaders,
 | 
| -                      chunked: chunked,
 | 
| -                      upgrade: upgrade,
 | 
| -                      unparsedLength: unparsedLength,
 | 
| -                      connectionClose: connectionClose,
 | 
| -                      expectedVersion: expectedVersion);
 | 
| +    _testParseRequest(request.replaceAll('\r', ''), expectedMethod, expectedUri,
 | 
| +        expectedTransferLength: expectedTransferLength,
 | 
| +        expectedBytesReceived: expectedBytesReceived,
 | 
| +        expectedHeaders: expectedHeaders,
 | 
| +        chunked: chunked,
 | 
| +        upgrade: upgrade,
 | 
| +        unparsedLength: unparsedLength,
 | 
| +        connectionClose: connectionClose,
 | 
| +        expectedVersion: expectedVersion);
 | 
|    }
 | 
|  
 | 
|    static void _testParseInvalidRequest(String request) {
 | 
| @@ -216,8 +205,8 @@ class HttpParserTest {
 | 
|        if (chunkSize == -1) chunkSize = requestData.length;
 | 
|        reset();
 | 
|        for (int pos = 0;
 | 
| -           pos < requestData.length && !errorCalled;
 | 
| -           pos += chunkSize) {
 | 
| +          pos < requestData.length && !errorCalled;
 | 
| +          pos += chunkSize) {
 | 
|          int end = min(requestData.length, pos + chunkSize);
 | 
|          controller.add(requestData.sublist(pos, end));
 | 
|        }
 | 
| @@ -232,19 +221,18 @@ class HttpParserTest {
 | 
|      testWrite(requestData, 1);
 | 
|    }
 | 
|  
 | 
| -  static void _testParseResponse(String response,
 | 
| -                                 int expectedStatusCode,
 | 
| -                                 String expectedReasonPhrase,
 | 
| -                                 {int expectedTransferLength: 0,
 | 
| -                                  int expectedBytesReceived: 0,
 | 
| -                                  Map expectedHeaders: null,
 | 
| -                                  bool chunked: false,
 | 
| -                                  bool close: false,
 | 
| -                                  String responseToMethod: null,
 | 
| -                                  bool connectionClose: false,
 | 
| -                                  bool upgrade: false,
 | 
| -                                  int unparsedLength: 0,
 | 
| -                                  String expectedVersion: "1.1"}) {
 | 
| +  static void _testParseResponse(
 | 
| +      String response, int expectedStatusCode, String expectedReasonPhrase,
 | 
| +      {int expectedTransferLength: 0,
 | 
| +      int expectedBytesReceived: 0,
 | 
| +      Map expectedHeaders: null,
 | 
| +      bool chunked: false,
 | 
| +      bool close: false,
 | 
| +      String responseToMethod: null,
 | 
| +      bool connectionClose: false,
 | 
| +      bool upgrade: false,
 | 
| +      int unparsedLength: 0,
 | 
| +      String expectedVersion: "1.1"}) {
 | 
|      StreamController controller;
 | 
|      bool upgraded;
 | 
|  
 | 
| @@ -278,7 +266,9 @@ class HttpParserTest {
 | 
|            if (close) Expect.isTrue(dataEndClose);
 | 
|            Expect.equals(dataEndClose, connectionClose);
 | 
|          }
 | 
| -      };
 | 
| +      }
 | 
| +
 | 
| +      ;
 | 
|  
 | 
|        var subscription = httpParser.listen((incoming) {
 | 
|          port.close();
 | 
| @@ -298,16 +288,14 @@ class HttpParserTest {
 | 
|          }
 | 
|          Expect.equals(upgrade, httpParser.upgrade);
 | 
|          headersCompleteCalled = true;
 | 
| -        incoming.listen(
 | 
| -            (List<int> data) {
 | 
| -              Expect.isTrue(headersCompleteCalled);
 | 
| -              bytesReceived += data.length;
 | 
| -            },
 | 
| -            onDone: () {
 | 
| -              dataEndCalled = true;
 | 
| -              dataEndClose = close;
 | 
| -              whenDone();
 | 
| -            });
 | 
| +        incoming.listen((List<int> data) {
 | 
| +          Expect.isTrue(headersCompleteCalled);
 | 
| +          bytesReceived += data.length;
 | 
| +        }, onDone: () {
 | 
| +          dataEndCalled = true;
 | 
| +          dataEndClose = close;
 | 
| +          whenDone();
 | 
| +        });
 | 
|        }, onDone: whenDone);
 | 
|  
 | 
|        headersCompleteCalled = false;
 | 
| @@ -325,7 +313,6 @@ class HttpParserTest {
 | 
|        for (int pos = 0; pos < requestData.length; pos += chunkSize) {
 | 
|          int end = min(requestData.length, pos + chunkSize);
 | 
|          controller.add(requestData.sublist(pos, end));
 | 
| -
 | 
|        }
 | 
|        if (close) controller.close();
 | 
|      }
 | 
| @@ -342,19 +329,18 @@ class HttpParserTest {
 | 
|      void testWrite(List<int> requestData, [int chunkSize = -1]) {
 | 
|        _HttpParser httpParser = new _HttpParser.responseParser();
 | 
|        StreamController controller = new StreamController(sync: true);
 | 
| -      bool errorCalled = false;;
 | 
| +      bool errorCalled = false;
 | 
| +      ;
 | 
|  
 | 
|        if (chunkSize == -1) chunkSize = requestData.length;
 | 
|  
 | 
|        var port = new ReceivePort();
 | 
|        httpParser.listenToStream(controller.stream);
 | 
|        var subscription = httpParser.listen((incoming) {
 | 
| -        incoming.listen(
 | 
| -          (data) {},
 | 
| -          onError: (e) {
 | 
| -            Expect.isFalse(errorCalled);
 | 
| -            errorCalled = true;
 | 
| -          });
 | 
| +        incoming.listen((data) {}, onError: (e) {
 | 
| +          Expect.isFalse(errorCalled);
 | 
| +          errorCalled = true;
 | 
| +        });
 | 
|        });
 | 
|        subscription.onError((e) {
 | 
|          Expect.isFalse(errorCalled);
 | 
| @@ -367,8 +353,8 @@ class HttpParserTest {
 | 
|  
 | 
|        errorCalled = false;
 | 
|        for (int pos = 0;
 | 
| -           pos < requestData.length && !errorCalled;
 | 
| -           pos += chunkSize) {
 | 
| +          pos < requestData.length && !errorCalled;
 | 
| +          pos += chunkSize) {
 | 
|          int end = min(requestData.length, pos + chunkSize);
 | 
|          controller.add(requestData.sublist(pos, end));
 | 
|        }
 | 
| @@ -387,25 +373,25 @@ class HttpParserTest {
 | 
|      String request;
 | 
|      Map headers;
 | 
|      var methods = [
 | 
| -        // RFC 2616 methods.
 | 
| -        "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "CONNECT",
 | 
| -        // WebDAV methods from RFC 4918.
 | 
| -        "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK",
 | 
| -        // WebDAV methods from RFC 5323.
 | 
| -        "SEARCH",
 | 
| -        // Methods with HTTP prefix.
 | 
| -        "H", "HT", "HTT", "HTTP", "HX", "HTX", "HTTX", "HTTPX"];
 | 
| +      // RFC 2616 methods.
 | 
| +      "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "CONNECT",
 | 
| +      // WebDAV methods from RFC 4918.
 | 
| +      "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK",
 | 
| +      // WebDAV methods from RFC 5323.
 | 
| +      "SEARCH",
 | 
| +      // Methods with HTTP prefix.
 | 
| +      "H", "HT", "HTT", "HTTP", "HX", "HTX", "HTTX", "HTTPX"
 | 
| +    ];
 | 
|      methods = ['GET'];
 | 
|      methods.forEach((method) {
 | 
| -       request = "$method / HTTP/1.1\r\n\r\n";
 | 
| +      request = "$method / HTTP/1.1\r\n\r\n";
 | 
|        _testParseRequestLean(request, method, "/");
 | 
| -       request = "$method /index.html HTTP/1.1\r\n\r\n";
 | 
| +      request = "$method /index.html HTTP/1.1\r\n\r\n";
 | 
|        _testParseRequestLean(request, method, "/index.html");
 | 
|      });
 | 
|      request = "GET / HTTP/1.0\r\n\r\n";
 | 
|      _testParseRequestLean(request, "GET", "/",
 | 
| -                          expectedVersion: "1.0",
 | 
| -                          connectionClose: true);
 | 
| +        expectedVersion: "1.0", connectionClose: true);
 | 
|  
 | 
|      request = "GET / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n";
 | 
|      _testParseRequestLean(request, "GET", "/", expectedVersion: "1.0");
 | 
| @@ -477,11 +463,8 @@ POST /test HTTP/1.1\r
 | 
|  Content-Length: 10\r
 | 
|  \r
 | 
|  0123456789""";
 | 
| -    _testParseRequestLean(request,
 | 
| -                          "POST",
 | 
| -                          "/test",
 | 
| -                          expectedTransferLength: 10,
 | 
| -                          expectedBytesReceived: 10);
 | 
| +    _testParseRequestLean(request, "POST", "/test",
 | 
| +        expectedTransferLength: 10, expectedBytesReceived: 10);
 | 
|  
 | 
|      // Test connection close header.
 | 
|      request = "GET /test HTTP/1.1\r\nConnection: close\r\n\r\n";
 | 
| @@ -497,12 +480,8 @@ Transfer-Encoding: chunked\r
 | 
|  5\r
 | 
|  56789\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseRequest(request,
 | 
| -                      "POST",
 | 
| -                      "/test",
 | 
| -                      expectedTransferLength: -1,
 | 
| -                      expectedBytesReceived: 10,
 | 
| -                      chunked: true);
 | 
| +    _testParseRequest(request, "POST", "/test",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 10, chunked: true);
 | 
|  
 | 
|      // Test mixing chunked encoding and content length (content length
 | 
|      // is ignored).
 | 
| @@ -516,12 +495,8 @@ Transfer-Encoding: chunked\r
 | 
|  5\r
 | 
|  56789\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseRequest(request,
 | 
| -                      "POST",
 | 
| -                      "/test",
 | 
| -                      expectedTransferLength: -1,
 | 
| -                      expectedBytesReceived: 10,
 | 
| -                      chunked: true);
 | 
| +    _testParseRequest(request, "POST", "/test",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 10, chunked: true);
 | 
|  
 | 
|      // Test mixing chunked encoding and content length (content length
 | 
|      // is ignored).
 | 
| @@ -535,12 +510,8 @@ Content-Length: 3\r
 | 
|  5\r
 | 
|  56789\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseRequest(request,
 | 
| -                      "POST",
 | 
| -                      "/test",
 | 
| -                      expectedTransferLength: -1,
 | 
| -                      expectedBytesReceived: 10,
 | 
| -                      chunked: true);
 | 
| +    _testParseRequest(request, "POST", "/test",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 10, chunked: true);
 | 
|  
 | 
|      // Test upper and lower case hex digits in chunked encoding.
 | 
|      request = """
 | 
| @@ -552,12 +523,8 @@ Transfer-Encoding: chunked\r
 | 
|  1e\r
 | 
|  012345678901234567890123456789\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseRequest(request,
 | 
| -                      "POST",
 | 
| -                      "/test",
 | 
| -                      expectedTransferLength: -1,
 | 
| -                      expectedBytesReceived: 60,
 | 
| -                      chunked: true);
 | 
| +    _testParseRequest(request, "POST", "/test",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 60, chunked: true);
 | 
|  
 | 
|      // Test chunk extensions in chunked encoding.
 | 
|      request = """
 | 
| @@ -569,12 +536,8 @@ Transfer-Encoding: chunked\r
 | 
|  1E;yyy=zzz\r
 | 
|  012345678901234567890123456789\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseRequest(request,
 | 
| -                      "POST",
 | 
| -                      "/test",
 | 
| -                      expectedTransferLength: -1,
 | 
| -                      expectedBytesReceived: 60,
 | 
| -                      chunked: true);
 | 
| +    _testParseRequest(request, "POST", "/test",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 60, chunked: true);
 | 
|  
 | 
|      // Test HTTP upgrade.
 | 
|      request = """
 | 
| @@ -584,12 +547,8 @@ Connection: Upgrade\r
 | 
|  \r\n\x01\x01\x01\x01\x01\x02\x02\x02\x02\xFF""";
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "irc/1.2";
 | 
| -    _testParseRequest(request,
 | 
| -                      "GET",
 | 
| -                      "/irc",
 | 
| -                      expectedHeaders: headers,
 | 
| -                      upgrade: true,
 | 
| -                      unparsedLength: 10);
 | 
| +    _testParseRequest(request, "GET", "/irc",
 | 
| +        expectedHeaders: headers, upgrade: true, unparsedLength: 10);
 | 
|  
 | 
|      // Test HTTP upgrade with protocol data.
 | 
|      request = """
 | 
| @@ -599,11 +558,8 @@ Connection: Upgrade\r
 | 
|  \r\n""";
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "irc/1.2";
 | 
| -    _testParseRequest(request,
 | 
| -                      "GET",
 | 
| -                      "/irc",
 | 
| -                      expectedHeaders: headers,
 | 
| -                      upgrade: true);
 | 
| +    _testParseRequest(request, "GET", "/irc",
 | 
| +        expectedHeaders: headers, upgrade: true);
 | 
|  
 | 
|      // Test websocket upgrade.
 | 
|      request = """
 | 
| @@ -621,12 +577,8 @@ Sec-WebSocket-Version: 13\r
 | 
|      headers["sec-websocket-key"] = "dGhlIHNhbXBsZSBub25jZQ==";
 | 
|      headers["origin"] = "http://example.com";
 | 
|      headers["sec-websocket-version"] = "13";
 | 
| -    _testParseRequest(request,
 | 
| -                      "GET",
 | 
| -                      "/chat",
 | 
| -                      expectedHeaders: headers,
 | 
| -                      upgrade: true);
 | 
| -
 | 
| +    _testParseRequest(request, "GET", "/chat",
 | 
| +        expectedHeaders: headers, upgrade: true);
 | 
|  
 | 
|      // Test websocket upgrade with protocol data. NOTE: When using the
 | 
|      // WebSocket protocol this should never happen as the client
 | 
| @@ -648,12 +600,8 @@ Sec-WebSocket-Version: 13\r
 | 
|      headers["sec-websocket-key"] = "dGhlIHNhbXBsZSBub25jZQ==";
 | 
|      headers["origin"] = "http://example.com";
 | 
|      headers["sec-websocket-version"] = "13";
 | 
| -    _testParseRequest(request,
 | 
| -                      "GET",
 | 
| -                      "/chat",
 | 
| -                      expectedHeaders: headers,
 | 
| -                      upgrade: true,
 | 
| -                      unparsedLength: 7);
 | 
| +    _testParseRequest(request, "GET", "/chat",
 | 
| +        expectedHeaders: headers, upgrade: true, unparsedLength: 7);
 | 
|    }
 | 
|  
 | 
|    static void testParseResponse() {
 | 
| @@ -666,46 +614,28 @@ Sec-WebSocket-Version: 13\r
 | 
|      _testParseResponse(response, 100, "Continue");
 | 
|  
 | 
|      response = "HTTP/1.1 100 Continue\r\nContent-Length: 10\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       100,
 | 
| -                       "Continue",
 | 
| -                       expectedTransferLength: 10,
 | 
| -                       expectedBytesReceived: 0);
 | 
| +    _testParseResponse(response, 100, "Continue",
 | 
| +        expectedTransferLength: 10, expectedBytesReceived: 0);
 | 
|  
 | 
|      response = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n"
 | 
| -               "Connection: Close\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       connectionClose: true);
 | 
| +        "Connection: Close\r\n\r\n";
 | 
| +    _testParseResponse(response, 200, "OK", connectionClose: true);
 | 
|  
 | 
|      response = "HTTP/1.0 200 OK\r\nContent-Length: 0\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       expectedVersion: "1.0",
 | 
| -                       connectionClose: true);
 | 
| +    _testParseResponse(response, 200, "OK",
 | 
| +        expectedVersion: "1.0", connectionClose: true);
 | 
|  
 | 
|      response = "HTTP/1.0 200 OK\r\nContent-Length: 0\r\n"
 | 
| -               "Connection: Keep-Alive\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       expectedVersion: "1.0");
 | 
| +        "Connection: Keep-Alive\r\n\r\n";
 | 
| +    _testParseResponse(response, 200, "OK", expectedVersion: "1.0");
 | 
|  
 | 
|      response = "HTTP/1.1 204 No Content\r\nContent-Length: 11\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       204,
 | 
| -                       "No Content",
 | 
| -                       expectedTransferLength: 11,
 | 
| -                       expectedBytesReceived: 0);
 | 
| +    _testParseResponse(response, 204, "No Content",
 | 
| +        expectedTransferLength: 11, expectedBytesReceived: 0);
 | 
|  
 | 
|      response = "HTTP/1.1 304 Not Modified\r\nContent-Length: 12\r\n\r\n";
 | 
| -    _testParseResponse(response,
 | 
| -                       304,
 | 
| -                       "Not Modified",
 | 
| -                       expectedTransferLength: 12,
 | 
| -                       expectedBytesReceived: 0);
 | 
| +    _testParseResponse(response, 304, "Not Modified",
 | 
| +        expectedTransferLength: 12, expectedBytesReceived: 0);
 | 
|  
 | 
|      response = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n";
 | 
|      _testParseResponse(response, 200, "OK");
 | 
| @@ -725,13 +655,11 @@ Content-Type: text/html\r
 | 
|      headers = new Map();
 | 
|      headers["content-length"] = "20";
 | 
|      headers["content-type"] = "text/html";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       responseToMethod: "HEAD",
 | 
| -                       expectedTransferLength: 20,
 | 
| -                       expectedBytesReceived: 0,
 | 
| -                       expectedHeaders: headers);
 | 
| +    _testParseResponse(response, 200, "OK",
 | 
| +        responseToMethod: "HEAD",
 | 
| +        expectedTransferLength: 20,
 | 
| +        expectedBytesReceived: 0,
 | 
| +        expectedHeaders: headers);
 | 
|  
 | 
|      // Test content.
 | 
|      response = """
 | 
| @@ -739,11 +667,8 @@ HTTP/1.1 200 OK\r
 | 
|  Content-Length: 20\r
 | 
|  \r
 | 
|  01234567890123456789""";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       expectedTransferLength: 20,
 | 
| -                       expectedBytesReceived: 20);
 | 
| +    _testParseResponse(response, 200, "OK",
 | 
| +        expectedTransferLength: 20, expectedBytesReceived: 20);
 | 
|  
 | 
|      // Test upper and lower case hex digits in chunked encoding.
 | 
|      response = """
 | 
| @@ -755,12 +680,8 @@ Transfer-Encoding: chunked\r
 | 
|  1f\r
 | 
|  0123456789012345678901234567890\r
 | 
|  0\r\n\r\n""";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       expectedTransferLength: -1,
 | 
| -                       expectedBytesReceived: 57,
 | 
| -                       chunked: true);
 | 
| +    _testParseResponse(response, 200, "OK",
 | 
| +        expectedTransferLength: -1, expectedBytesReceived: 57, chunked: true);
 | 
|  
 | 
|      // Test connection close header.
 | 
|      response = """
 | 
| @@ -768,10 +689,7 @@ HTTP/1.1 200 OK\r
 | 
|  Content-Length: 0\r
 | 
|  Connection: close\r
 | 
|  \r\n""";
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       connectionClose: true);
 | 
| +    _testParseResponse(response, 200, "OK", connectionClose: true);
 | 
|  
 | 
|      // Test HTTP response without any transfer length indications
 | 
|      // where closing the connections indicates end of body.
 | 
| @@ -781,13 +699,11 @@ HTTP/1.1 200 OK\r
 | 
|  01234567890123456789012345
 | 
|  0123456789012345678901234567890
 | 
|  """;
 | 
| -    _testParseResponse(response,
 | 
| -                       200,
 | 
| -                       "OK",
 | 
| -                       expectedTransferLength: -1,
 | 
| -                       expectedBytesReceived: 59,
 | 
| -                       close: true,
 | 
| -                       connectionClose: true);
 | 
| +    _testParseResponse(response, 200, "OK",
 | 
| +        expectedTransferLength: -1,
 | 
| +        expectedBytesReceived: 59,
 | 
| +        close: true,
 | 
| +        connectionClose: true);
 | 
|  
 | 
|      // Test HTTP upgrade.
 | 
|      response = """
 | 
| @@ -797,11 +713,8 @@ Connection: Upgrade\r
 | 
|  \r\n""";
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "irc/1.2";
 | 
| -    _testParseResponse(response,
 | 
| -                       101,
 | 
| -                       "Switching Protocols",
 | 
| -                       expectedHeaders: headers,
 | 
| -                       upgrade: true);
 | 
| +    _testParseResponse(response, 101, "Switching Protocols",
 | 
| +        expectedHeaders: headers, upgrade: true);
 | 
|  
 | 
|      // Test HTTP upgrade with protocol data.
 | 
|      response = """
 | 
| @@ -811,12 +724,8 @@ Connection: Upgrade\r
 | 
|  \r\n\x00\x10\x20\x30\x40\x50\x60\x70\x80\x90\xA0\xB0\xC0\xD0\xE0\xF0""";
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "irc/1.2";
 | 
| -    _testParseResponse(response,
 | 
| -                       101,
 | 
| -                       "Switching Protocols",
 | 
| -                       expectedHeaders: headers,
 | 
| -                       upgrade: true,
 | 
| -                       unparsedLength: 16);
 | 
| +    _testParseResponse(response, 101, "Switching Protocols",
 | 
| +        expectedHeaders: headers, upgrade: true, unparsedLength: 16);
 | 
|  
 | 
|      // Test websocket upgrade.
 | 
|      response = """
 | 
| @@ -828,11 +737,8 @@ Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "websocket";
 | 
|      headers["sec-websocket-accept"] = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=";
 | 
| -    _testParseResponse(response,
 | 
| -                       101,
 | 
| -                       "Switching Protocols",
 | 
| -                       expectedHeaders: headers,
 | 
| -                       upgrade: true);
 | 
| +    _testParseResponse(response, 101, "Switching Protocols",
 | 
| +        expectedHeaders: headers, upgrade: true);
 | 
|  
 | 
|      // Test websocket upgrade with protocol data.
 | 
|      response = """
 | 
| @@ -844,12 +750,8 @@ Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r
 | 
|      headers = new Map();
 | 
|      headers["upgrade"] = "websocket";
 | 
|      headers["sec-websocket-accept"] = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=";
 | 
| -    _testParseResponse(response,
 | 
| -                       101,
 | 
| -                       "Switching Protocols",
 | 
| -                       expectedHeaders: headers,
 | 
| -                       upgrade: true,
 | 
| -                       unparsedLength: 4);
 | 
| +    _testParseResponse(response, 101, "Switching Protocols",
 | 
| +        expectedHeaders: headers, upgrade: true, unparsedLength: 4);
 | 
|    }
 | 
|  
 | 
|    static void testParseInvalidRequest() {
 | 
| @@ -934,7 +836,6 @@ Transfer-Encoding: chunked\r
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -
 | 
|  void main() {
 | 
|    HttpParserTest.runAllTests();
 | 
|  }
 | 
| 
 |