| 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..d47b58122536c0211fc4588576d58e52fa38f4a5 100644
|
| --- a/extensions/test/data/data_receiver_unittest.js
|
| +++ b/extensions/test/data/data_receiver_unittest.js
|
| @@ -7,84 +7,179 @@
|
| 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;
|
|
|
| +// Returns a promise to a newly created DataReceiver.
|
| 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);
|
| + });
|
| +}
|
| +
|
| +// Returns a promise that will resolve to |receiver| when it has received an
|
| +// error from its DataSource.
|
| +function waitForReceiveError(receiver) {
|
| + return new Promise(function(resolve, reject) {
|
| + var onError = receiver.onError;
|
| + receiver.onError = function() {
|
| + $Function.apply(onError, receiver, arguments);
|
| + resolve(receiver);
|
| + };
|
| + });
|
| +}
|
| +
|
| +// Returns a function that receives data from a provided DataReceiver
|
| +// |receiver|, checks that it matches the expected data and returns a promise
|
| +// that will resolve to |receiver|.
|
| +function receiveAndCheckData(expectedData) {
|
| + 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.');
|
| + };
|
| +}
|
| +
|
| +// Returns a function that attempts to receive data from a provided DataReceiver
|
| +// |receiver|, checks that the correct error is reported and returns a promise
|
| +// that will resolve to |receiver|.
|
| +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.');
|
| + };
|
| +}
|
| +
|
| +// Serializes and deserializes the provided DataReceiver |receiver|, returning
|
| +// a promise that will resolve to the newly deserialized DataReceiver.
|
| +function serializeRoundTrip(receiver) {
|
| + return Promise.all([
|
| + receiver.serialize(),
|
| + requireAsync('data_receiver'),
|
| + ]).then(function(promises) {
|
| + var serialized = promises[0];
|
| + var dataReceiverModule = promises[1];
|
| + return dataReceiverModule.DataReceiver.deserialize(serialized);
|
| + });
|
| +}
|
| +
|
| +// Closes and returns the provided DataReceiver |receiver|.
|
| +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 testReceiveBeforeAndAfterSerialization() {
|
| + createReceiver()
|
| + .then(receiveAndCheckData('a'))
|
| + .then(serializeRoundTrip)
|
| + .then(receiveAndCheckData('b'))
|
| + .then(closeReceiver)
|
| + .then(test.succeed, test.fail);
|
| + },
|
| +
|
| + function testReceiveErrorSerialization() {
|
| + createReceiver()
|
| + .then(waitForReceiveError)
|
| + .then(serializeRoundTrip)
|
| + .then(receiveAndCheckError(1))
|
| + .then(receiveAndCheckError(3))
|
| + .then(closeReceiver)
|
| + .then(test.succeed, test.fail);
|
| + },
|
| +
|
| + function testReceiveDataAndErrorSerialization() {
|
| + createReceiver()
|
| + .then(waitForReceiveError)
|
| + .then(receiveAndCheckData('a'))
|
| + .then(serializeRoundTrip)
|
| + .then(receiveAndCheckError(1))
|
| + .then(receiveAndCheckData('b'))
|
| + .then(receiveAndCheckError(3))
|
| + .then(closeReceiver)
|
| + .then(test.succeed, test.fail);
|
| + },
|
| +
|
| + function testSerializeDuringReceive() {
|
| + var receiver = createReceiver();
|
| + Promise.all([
|
| + 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);
|
|
|