Chromium Code Reviews| 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); |