Chromium Code Reviews| Index: pkg/mime/test/mime_multipart_transformer_test.dart |
| diff --git a/pkg/mime/test/mime_multipart_transformer_test.dart b/pkg/mime/test/mime_multipart_transformer_test.dart |
| index 86ab551e033d27b0e9c49b693533c42165e1f9d0..dbd0504b2e6d76fb3d909c1a1f86651c80ef9c22 100644 |
| --- a/pkg/mime/test/mime_multipart_transformer_test.dart |
| +++ b/pkg/mime/test/mime_multipart_transformer_test.dart |
| @@ -24,11 +24,18 @@ void _writeInChunks(List<int> data, |
| } |
| -void _testParse(String message, |
| - String boundary, |
| - [List<Map> expectedHeaders, |
| - List expectedParts, |
| - bool expectError = false]) { |
| +enum TestMode { |
| + IMMEDIATE_LISTEN, |
| + DELAY_LISTEN, |
| + PAUSE_RESUME |
| +} |
| + |
| +void _runParseTest(String message, |
| + String boundary, |
| + TestMode mode, |
| + [List<Map> expectedHeaders, |
| + List expectedParts, |
| + bool expectError = false]) { |
| Future testWrite(List<int> data, [int chunkSize = -1]) { |
| StreamController controller = new StreamController(sync: true); |
| @@ -42,12 +49,49 @@ void _testParse(String message, |
| if (expectedHeaders != null) { |
| expect(multipart.headers, equals(expectedHeaders[part])); |
| } |
| - futures.add(multipart.fold([], (buffer, data) => buffer..addAll(data)) |
| - .then((data) { |
| - if (expectedParts[part] != null) { |
| - expect(data, equals(expectedParts[part].codeUnits)); |
| - } |
| - })); |
| + switch (mode) { |
| + case TestMode.IMMEDIATE_LISTEN: |
| + futures.add(multipart.fold([], (buffer, data) => buffer..addAll(data)) |
| + .then((data) { |
| + if (expectedParts[part] != null) { |
| + expect(data, equals(expectedParts[part].codeUnits)); |
| + } |
| + })); |
| + break; |
| + |
| + case TestMode.DELAY_LISTEN: |
| + var completer = new Completer(); |
| + futures.add(completer.future); |
| + new Future(() { |
| + multipart.fold([], (buffer, data) => buffer..addAll(data)) |
| + .then((data) { |
| + if (expectedParts[part] != null) { |
| + expect(data, equals(expectedParts[part].codeUnits)); |
| + } |
| + completer.complete(); |
| + }); |
| + }); |
|
kustermann
2015/02/17 17:08:03
You don't need a completer here. Doing futures.add
Søren Gjesse
2015/02/18 07:27:18
Done.
|
| + break; |
| + |
| + case TestMode.PAUSE_RESUME: |
| + var completer = new Completer(); |
| + futures.add(completer.future); |
| + var buffer = []; |
| + var subscription; |
| + subscription = multipart.listen( |
| + (data) { |
| + buffer.addAll(data); |
| + subscription.pause(); |
| + new Future(() => subscription.resume()); |
| + }, |
| + onDone: () { |
| + if (expectedParts[part] != null) { |
| + expect(buffer, equals(expectedParts[part].codeUnits)); |
| + } |
| + completer.complete(); |
| + }); |
| + break; |
| + } |
| }, onError: (error) { |
| if (!expectError) throw error; |
| }, onDone: () { |
| @@ -162,6 +206,22 @@ void _testParse(String message, |
| } |
| } |
| +void _testParse(String message, |
| + String boundary, |
| + [List<Map> expectedHeaders, |
| + List expectedParts, |
| + bool expectError = false]) { |
| + _runParseTest( |
| + message, boundary, TestMode.IMMEDIATE_LISTEN, |
| + expectedHeaders, expectedParts, expectError); |
| + _runParseTest( |
| + message, boundary, TestMode.DELAY_LISTEN, |
| + expectedHeaders, expectedParts, expectError); |
| + _runParseTest( |
| + message, boundary, TestMode.PAUSE_RESUME, |
| + expectedHeaders, expectedParts, expectError); |
| +} |
| + |
| void _testParseValid() { |
| // Empty message from Chrome form post. |
| var message = '------WebKitFormBoundaryU3FBruSkJKG0Yor1--\r\n'; |