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..50389998faa677b5f2cba98aa48e833cb6c30f35 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,46 @@ 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: |
+ futures.add(new Future(() { |
+ return multipart.fold([], (buffer, data) => buffer..addAll(data)) |
+ .then((data) { |
+ if (expectedParts[part] != null) { |
+ expect(data, equals(expectedParts[part].codeUnits)); |
+ } |
+ }); |
})); |
+ 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 +203,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'; |