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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Tests launched by extensions/renderer/api/serial/data_receiver_unittest.cc 5 // Tests launched by extensions/renderer/api/serial/data_receiver_unittest.cc
6 6
7 var test = require('test').binding; 7 var test = require('test').binding;
8 var unittestBindings = require('test_environment_specific_bindings'); 8 var unittestBindings = require('test_environment_specific_bindings');
9 9
10 var fatalErrorValue = 2; 10 var BUFFER_SIZE = 10;
11 var bufferSize = 10; 11 var FATAL_ERROR = 2;
12 12
13 // Returns a promise to a newly created DataReceiver.
13 function createReceiver() { 14 function createReceiver() {
14 return Promise.all([ 15 return Promise.all([
15 requireAsync('content/public/renderer/service_provider'), 16 requireAsync('content/public/renderer/service_provider'),
16 requireAsync('data_receiver'), 17 requireAsync('data_receiver'),
17 requireAsync('device/serial/data_stream.mojom'), 18 requireAsync('device/serial/data_stream.mojom'),
18 ]).then(test.callbackPass(function(modules) { 19 ]).then(function(modules) {
19 var serviceProvider = modules[0]; 20 var serviceProvider = modules[0];
20 var dataReceiver = modules[1]; 21 var dataReceiver = modules[1];
21 var dataStream = modules[2]; 22 var dataStream = modules[2];
22 return new dataReceiver.DataReceiver( 23 return new dataReceiver.DataReceiver(
23 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_), 24 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_),
24 bufferSize, 25 BUFFER_SIZE,
25 fatalErrorValue); 26 FATAL_ERROR);
26 })); 27 });
28 }
29
30 // Returns a promise that will resolve to |receiver| when it has received an
31 // error from its DataSource.
32 function waitForReceiveError(receiver) {
33 return new Promise(function(resolve, reject) {
34 var onError = receiver.onError;
35 receiver.onError = function() {
36 $Function.apply(onError, receiver, arguments);
37 resolve(receiver);
38 };
39 });
40 }
41
42 // Returns a function that receives data from a provided DataReceiver
43 // |receiver|, checks that it matches the expected data and returns a promise
44 // that will resolve to |receiver|.
45 function receiveAndCheckData(expectedData) {
46 return function(receiver) {
47 return receiver.receive().then(function(data) {
48 test.assertEq(expectedData.length, data.byteLength);
49 for (var i = 0; i < expectedData.length; i++)
50 test.assertEq(expectedData.charCodeAt(i), new Int8Array(data)[i]);
51 return receiver;
52 });
53 test.assertThrows(
54 receiver.receive, receiver, [], 'Receive already in progress.');
55 };
56 }
57
58 // Returns a function that attempts to receive data from a provided DataReceiver
59 // |receiver|, checks that the correct error is reported and returns a promise
60 // that will resolve to |receiver|.
61 function receiveAndCheckError(expectedError) {
62 return function(receiver) {
63 return receiver.receive().catch(function(error) {
64 test.assertEq(expectedError, error.error);
65 return receiver;
66 });
67 test.assertThrows(
68 receiver.receive, receiver, [], 'Receive already in progress.');
69 };
70 }
71
72 // Serializes and deserializes the provided DataReceiver |receiver|, returning
73 // a promise that will resolve to the newly deserialized DataReceiver.
74 function serializeRoundTrip(receiver) {
75 return Promise.all([
76 receiver.serialize(),
77 requireAsync('data_receiver'),
78 ]).then(function(promises) {
79 var serialized = promises[0];
80 var dataReceiverModule = promises[1];
81 return dataReceiverModule.DataReceiver.deserialize(serialized);
82 });
83 }
84
85 // Closes and returns the provided DataReceiver |receiver|.
86 function closeReceiver(receiver) {
87 receiver.close();
88 return receiver;
27 } 89 }
28 90
29 unittestBindings.exportTests([ 91 unittestBindings.exportTests([
30 function testReceive() { 92 function testReceive() {
31 createReceiver().then(test.callbackPass(function(receiver) { 93 createReceiver()
32 receiver.receive().then(test.callbackPass(function(data) { 94 .then(receiveAndCheckData('a'))
33 test.assertEq(1, data.byteLength); 95 .then(closeReceiver)
34 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); 96 .then(test.succeed, test.fail);
35 receiver.close();
36 }));
37 test.assertThrows(
38 receiver.receive, receiver, [], 'Receive already in progress.');
39 }));
40 }, 97 },
41 98
42 function testReceiveError() { 99 function testReceiveError() {
43 createReceiver().then(test.callbackPass(function(receiver) { 100 createReceiver()
44 receiver.receive().catch(test.callbackPass(function(error) { 101 .then(receiveAndCheckError(1))
45 test.assertEq(1, error.error); 102 .then(closeReceiver)
46 receiver.close(); 103 .then(test.succeed, test.fail);
47 }));
48 }));
49 }, 104 },
50 105
51 function testReceiveDataAndError() { 106 function testReceiveDataAndError() {
52 createReceiver().then(test.callbackPass(function(receiver) { 107 createReceiver()
53 receiver.receive().then(test.callbackPass(function(data) { 108 .then(receiveAndCheckData('a'))
54 test.assertEq(1, data.byteLength); 109 .then(receiveAndCheckError(1))
55 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); 110 .then(receiveAndCheckData('b'))
56 return receiver.receive(); 111 .then(closeReceiver)
57 })).catch(test.callbackPass(function(error) { 112 .then(test.succeed, test.fail);
58 test.assertEq(1, error.error);
59 return receiver.receive();
60 })).then(test.callbackPass(function(data) {
61 test.assertEq(1, data.byteLength);
62 test.assertEq('b'.charCodeAt(0), new Int8Array(data)[0]);
63 receiver.close();
64 }));
65 }));
66 }, 113 },
67 114
68 function testReceiveErrorThenData() { 115 function testReceiveErrorThenData() {
69 createReceiver().then(test.callbackPass(function(receiver) { 116 createReceiver()
70 receiver.receive().catch(test.callbackPass(function(error) { 117 .then(receiveAndCheckError(1))
71 test.assertEq(1, error.error); 118 .then(receiveAndCheckData('a'))
72 return receiver.receive(); 119 .then(closeReceiver)
73 })).then(test.callbackPass(function(data) { 120 .then(test.succeed, test.fail);
74 test.assertEq(1, data.byteLength); 121 },
75 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); 122
76 receiver.close(); 123 function testReceiveBeforeAndAfterSerialization() {
77 })); 124 createReceiver()
78 })); 125 .then(receiveAndCheckData('a'))
126 .then(serializeRoundTrip)
127 .then(receiveAndCheckData('b'))
128 .then(closeReceiver)
129 .then(test.succeed, test.fail);
130 },
131
132 function testReceiveErrorSerialization() {
133 createReceiver()
134 .then(waitForReceiveError)
135 .then(serializeRoundTrip)
136 .then(receiveAndCheckError(1))
137 .then(receiveAndCheckError(3))
138 .then(closeReceiver)
139 .then(test.succeed, test.fail);
140 },
141
142 function testReceiveDataAndErrorSerialization() {
143 createReceiver()
144 .then(waitForReceiveError)
145 .then(receiveAndCheckData('a'))
146 .then(serializeRoundTrip)
147 .then(receiveAndCheckError(1))
148 .then(receiveAndCheckData('b'))
149 .then(receiveAndCheckError(3))
150 .then(closeReceiver)
151 .then(test.succeed, test.fail);
152 },
153
154 function testSerializeDuringReceive() {
155 var receiver = createReceiver();
156 Promise.all([
157 receiver.then(receiveAndCheckError(FATAL_ERROR)),
158 receiver
159 .then(serializeRoundTrip)
160 .then(receiveAndCheckData('a'))
161 .then(closeReceiver)
162 ]).then(test.succeed, test.fail);
163 },
164
165 function testSerializeAfterClose() {
166 function receiveAfterClose(receiver) {
167 test.assertThrows(
168 receiver.receive, receiver, [], 'DataReceiver has been closed');
169 }
170
171 createReceiver()
172 .then(closeReceiver)
173 .then(serializeRoundTrip)
174 .then(receiveAfterClose)
175 .then(test.succeed, test.fail);
79 }, 176 },
80 177
81 function testSourceShutdown() { 178 function testSourceShutdown() {
82 createReceiver().then(test.callbackPass(function(receiver) { 179 createReceiver()
83 receiver.receive().catch(test.callbackPass(function(error) { 180 .then(receiveAndCheckError(FATAL_ERROR))
84 test.assertEq(fatalErrorValue, error.error); 181 .then(closeReceiver)
85 receiver.close(); 182 .then(test.succeed, test.fail);
86 }));
87 }));
88 }, 183 },
89 184
90 ], test.runTests, exports); 185 ], test.runTests, exports);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698