Index: extensions/test/data/data_receiver_unittest.js |
diff --git a/extensions/test/data/data_receiver_unittest.js b/extensions/test/data/data_receiver_unittest.js |
index 1bdda9663e687c01e1f70bdfb5c0496b34eef0ff..58720d660878b38a1fc9bca9128b4e73961675ea 100644 |
--- a/extensions/test/data/data_receiver_unittest.js |
+++ b/extensions/test/data/data_receiver_unittest.js |
@@ -7,84 +7,153 @@ |
var test = require('test').binding; |
var unittestBindings = require('test_environment_specific_bindings'); |
-var fatalErrorValue = 2; |
-var bufferSize = 10; |
+var BUFFER_SIZE = 10; |
+var FATAL_ERROR = 2; |
function createReceiver() { |
return Promise.all([ |
requireAsync('content/public/renderer/service_provider'), |
requireAsync('data_receiver'), |
requireAsync('device/serial/data_stream.mojom'), |
- ]).then(test.callbackPass(function(modules) { |
+ ]).then(function(modules) { |
var serviceProvider = modules[0]; |
var dataReceiver = modules[1]; |
var dataStream = modules[2]; |
return new dataReceiver.DataReceiver( |
serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_), |
- bufferSize, |
- fatalErrorValue); |
- })); |
+ BUFFER_SIZE, |
+ FATAL_ERROR); |
+ }); |
+} |
+ |
+function receiveAndCheckData(expectedData) { |
raymes
2014/09/18 03:16:06
It would be good to comment these functions and po
Sam McNally
2014/09/19 04:58:47
Done.
|
+ return function(receiver) { |
+ return receiver.receive().then(function(data) { |
+ test.assertEq(expectedData.length, data.byteLength); |
+ for (var i = 0; i < expectedData.length; i++) |
+ test.assertEq(expectedData.charCodeAt(i), new Int8Array(data)[i]); |
+ return receiver; |
+ }); |
+ test.assertThrows( |
+ receiver.receive, receiver, [], 'Receive already in progress.'); |
+ }; |
+} |
+ |
+function receiveAndCheckError(expectedError) { |
+ return function(receiver) { |
+ return receiver.receive().catch(function(error) { |
+ test.assertEq(expectedError, error.error); |
+ return receiver; |
+ }); |
+ test.assertThrows( |
+ receiver.receive, receiver, [], 'Receive already in progress.'); |
+ }; |
+} |
+ |
+function serializeRoundTrip(receiver) { |
+ return Promise.all([ |
+ receiver.serialize(), |
+ requireAsync('data_receiver'), |
raymes
2014/09/18 03:16:06
This seems weird to have here?
Sam McNally
2014/09/19 04:58:47
createReceiver does the same.
|
+ ]).then(function(promises) { |
+ var serialized = promises[0]; |
+ var dataReceiver = promises[1]; |
raymes
2014/09/18 03:16:07
this is really "dataReceiverModule", right?
Sam McNally
2014/09/19 04:58:47
Done.
|
+ return promises[1].DataReceiver.deserialize(promises[0]); |
raymes
2014/09/18 03:16:07
I think you meant to use the named vars here.
Sam McNally
2014/09/19 04:58:47
Done.
|
+ }); |
+} |
+ |
+function closeReceiver(receiver) { |
+ receiver.close(); |
+ return receiver; |
} |
unittestBindings.exportTests([ |
function testReceive() { |
- createReceiver().then(test.callbackPass(function(receiver) { |
- receiver.receive().then(test.callbackPass(function(data) { |
- test.assertEq(1, data.byteLength); |
- test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); |
- receiver.close(); |
- })); |
- test.assertThrows( |
- receiver.receive, receiver, [], 'Receive already in progress.'); |
- })); |
+ createReceiver() |
+ .then(receiveAndCheckData('a')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
}, |
function testReceiveError() { |
- createReceiver().then(test.callbackPass(function(receiver) { |
- receiver.receive().catch(test.callbackPass(function(error) { |
- test.assertEq(1, error.error); |
- receiver.close(); |
- })); |
- })); |
+ createReceiver() |
+ .then(receiveAndCheckError(1)) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
}, |
function testReceiveDataAndError() { |
- createReceiver().then(test.callbackPass(function(receiver) { |
- receiver.receive().then(test.callbackPass(function(data) { |
- test.assertEq(1, data.byteLength); |
- test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); |
- return receiver.receive(); |
- })).catch(test.callbackPass(function(error) { |
- test.assertEq(1, error.error); |
- return receiver.receive(); |
- })).then(test.callbackPass(function(data) { |
- test.assertEq(1, data.byteLength); |
- test.assertEq('b'.charCodeAt(0), new Int8Array(data)[0]); |
- receiver.close(); |
- })); |
- })); |
+ createReceiver() |
+ .then(receiveAndCheckData('a')) |
+ .then(receiveAndCheckError(1)) |
+ .then(receiveAndCheckData('b')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
}, |
function testReceiveErrorThenData() { |
- createReceiver().then(test.callbackPass(function(receiver) { |
- receiver.receive().catch(test.callbackPass(function(error) { |
- test.assertEq(1, error.error); |
- return receiver.receive(); |
- })).then(test.callbackPass(function(data) { |
- test.assertEq(1, data.byteLength); |
- test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); |
- receiver.close(); |
- })); |
- })); |
+ createReceiver() |
+ .then(receiveAndCheckError(1)) |
+ .then(receiveAndCheckData('a')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testReceiveWithSerialization() { |
+ createReceiver() |
+ .then(receiveAndCheckData('a')) |
+ .then(serializeRoundTrip) |
+ .then(receiveAndCheckData('b')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testReceiveErrorWithSerialization() { |
+ createReceiver() |
+ .then(receiveAndCheckError(1)) |
+ .then(serializeRoundTrip) |
+ .then(receiveAndCheckError(3)) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testReceiveDataAndErrorWithSerialization() { |
+ createReceiver() |
+ .then(receiveAndCheckData('a')) |
+ .then(receiveAndCheckError(1)) |
+ .then(serializeRoundTrip) |
+ .then(receiveAndCheckData('b')) |
+ .then(receiveAndCheckError(3)) |
+ .then(receiveAndCheckData('c')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testReceiveErrorThenDataWithSerialization() { |
+ createReceiver() |
+ .then(receiveAndCheckError(1)) |
+ .then(serializeRoundTrip) |
+ .then(receiveAndCheckData('a')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testSerializeDuringReceive() { |
+ var receiver = createReceiver(); |
+ receiver.then(receiveAndCheckError(FATAL_ERROR)); |
+ receiver |
+ .then(serializeRoundTrip) |
+ .then(receiveAndCheckData('a')) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
+ }, |
+ |
+ function testSerializeAfterClose() { |
+ function receiveAfterClose(receiver) { |
+ test.assertThrows( |
+ receiver.receive, receiver, [], 'DataReceiver has been closed'); |
+ } |
+ |
+ createReceiver() |
+ .then(closeReceiver) |
+ .then(serializeRoundTrip) |
+ .then(receiveAfterClose).then(test.succeed, test.fail); |
}, |
function testSourceShutdown() { |
- createReceiver().then(test.callbackPass(function(receiver) { |
- receiver.receive().catch(test.callbackPass(function(error) { |
- test.assertEq(fatalErrorValue, error.error); |
- receiver.close(); |
- })); |
- })); |
+ createReceiver() |
+ .then(receiveAndCheckError(FATAL_ERROR)) |
+ .then(closeReceiver).then(test.succeed, test.fail); |
}, |
], test.runTests, exports); |