Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: extensions/test/data/data_receiver_unittest.js

Issue 571333002: Add serialization support to the JS DataSender and DataReceiver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@stash-service
Patch Set: address comments Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698