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

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: 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 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 function createReceiver() { 13 function createReceiver() {
14 return Promise.all([ 14 return Promise.all([
15 requireAsync('content/public/renderer/service_provider'), 15 requireAsync('content/public/renderer/service_provider'),
16 requireAsync('data_receiver'), 16 requireAsync('data_receiver'),
17 requireAsync('device/serial/data_stream.mojom'), 17 requireAsync('device/serial/data_stream.mojom'),
18 ]).then(test.callbackPass(function(modules) { 18 ]).then(function(modules) {
19 var serviceProvider = modules[0]; 19 var serviceProvider = modules[0];
20 var dataReceiver = modules[1]; 20 var dataReceiver = modules[1];
21 var dataStream = modules[2]; 21 var dataStream = modules[2];
22 return new dataReceiver.DataReceiver( 22 return new dataReceiver.DataReceiver(
23 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_), 23 serviceProvider.connectToService(dataStream.DataSourceProxy.NAME_),
24 bufferSize, 24 BUFFER_SIZE,
25 fatalErrorValue); 25 FATAL_ERROR);
26 })); 26 });
27 }
28
29 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.
30 return function(receiver) {
31 return receiver.receive().then(function(data) {
32 test.assertEq(expectedData.length, data.byteLength);
33 for (var i = 0; i < expectedData.length; i++)
34 test.assertEq(expectedData.charCodeAt(i), new Int8Array(data)[i]);
35 return receiver;
36 });
37 test.assertThrows(
38 receiver.receive, receiver, [], 'Receive already in progress.');
39 };
40 }
41
42 function receiveAndCheckError(expectedError) {
43 return function(receiver) {
44 return receiver.receive().catch(function(error) {
45 test.assertEq(expectedError, error.error);
46 return receiver;
47 });
48 test.assertThrows(
49 receiver.receive, receiver, [], 'Receive already in progress.');
50 };
51 }
52
53 function serializeRoundTrip(receiver) {
54 return Promise.all([
55 receiver.serialize(),
56 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.
57 ]).then(function(promises) {
58 var serialized = promises[0];
59 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.
60 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.
61 });
62 }
63
64 function closeReceiver(receiver) {
65 receiver.close();
66 return receiver;
27 } 67 }
28 68
29 unittestBindings.exportTests([ 69 unittestBindings.exportTests([
30 function testReceive() { 70 function testReceive() {
31 createReceiver().then(test.callbackPass(function(receiver) { 71 createReceiver()
32 receiver.receive().then(test.callbackPass(function(data) { 72 .then(receiveAndCheckData('a'))
33 test.assertEq(1, data.byteLength); 73 .then(closeReceiver).then(test.succeed, test.fail);
34 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]);
35 receiver.close();
36 }));
37 test.assertThrows(
38 receiver.receive, receiver, [], 'Receive already in progress.');
39 }));
40 }, 74 },
41 75
42 function testReceiveError() { 76 function testReceiveError() {
43 createReceiver().then(test.callbackPass(function(receiver) { 77 createReceiver()
44 receiver.receive().catch(test.callbackPass(function(error) { 78 .then(receiveAndCheckError(1))
45 test.assertEq(1, error.error); 79 .then(closeReceiver).then(test.succeed, test.fail);
46 receiver.close();
47 }));
48 }));
49 }, 80 },
50 81
51 function testReceiveDataAndError() { 82 function testReceiveDataAndError() {
52 createReceiver().then(test.callbackPass(function(receiver) { 83 createReceiver()
53 receiver.receive().then(test.callbackPass(function(data) { 84 .then(receiveAndCheckData('a'))
54 test.assertEq(1, data.byteLength); 85 .then(receiveAndCheckError(1))
55 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); 86 .then(receiveAndCheckData('b'))
56 return receiver.receive(); 87 .then(closeReceiver).then(test.succeed, test.fail);
57 })).catch(test.callbackPass(function(error) {
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 }, 88 },
67 89
68 function testReceiveErrorThenData() { 90 function testReceiveErrorThenData() {
69 createReceiver().then(test.callbackPass(function(receiver) { 91 createReceiver()
70 receiver.receive().catch(test.callbackPass(function(error) { 92 .then(receiveAndCheckError(1))
71 test.assertEq(1, error.error); 93 .then(receiveAndCheckData('a'))
72 return receiver.receive(); 94 .then(closeReceiver).then(test.succeed, test.fail);
73 })).then(test.callbackPass(function(data) { 95 },
74 test.assertEq(1, data.byteLength); 96
75 test.assertEq('a'.charCodeAt(0), new Int8Array(data)[0]); 97 function testReceiveWithSerialization() {
76 receiver.close(); 98 createReceiver()
77 })); 99 .then(receiveAndCheckData('a'))
78 })); 100 .then(serializeRoundTrip)
101 .then(receiveAndCheckData('b'))
102 .then(closeReceiver).then(test.succeed, test.fail);
103 },
104
105 function testReceiveErrorWithSerialization() {
106 createReceiver()
107 .then(receiveAndCheckError(1))
108 .then(serializeRoundTrip)
109 .then(receiveAndCheckError(3))
110 .then(closeReceiver).then(test.succeed, test.fail);
111 },
112
113 function testReceiveDataAndErrorWithSerialization() {
114 createReceiver()
115 .then(receiveAndCheckData('a'))
116 .then(receiveAndCheckError(1))
117 .then(serializeRoundTrip)
118 .then(receiveAndCheckData('b'))
119 .then(receiveAndCheckError(3))
120 .then(receiveAndCheckData('c'))
121 .then(closeReceiver).then(test.succeed, test.fail);
122 },
123
124 function testReceiveErrorThenDataWithSerialization() {
125 createReceiver()
126 .then(receiveAndCheckError(1))
127 .then(serializeRoundTrip)
128 .then(receiveAndCheckData('a'))
129 .then(closeReceiver).then(test.succeed, test.fail);
130 },
131
132 function testSerializeDuringReceive() {
133 var receiver = createReceiver();
134 receiver.then(receiveAndCheckError(FATAL_ERROR));
135 receiver
136 .then(serializeRoundTrip)
137 .then(receiveAndCheckData('a'))
138 .then(closeReceiver).then(test.succeed, test.fail);
139 },
140
141 function testSerializeAfterClose() {
142 function receiveAfterClose(receiver) {
143 test.assertThrows(
144 receiver.receive, receiver, [], 'DataReceiver has been closed');
145 }
146
147 createReceiver()
148 .then(closeReceiver)
149 .then(serializeRoundTrip)
150 .then(receiveAfterClose).then(test.succeed, test.fail);
79 }, 151 },
80 152
81 function testSourceShutdown() { 153 function testSourceShutdown() {
82 createReceiver().then(test.callbackPass(function(receiver) { 154 createReceiver()
83 receiver.receive().catch(test.callbackPass(function(error) { 155 .then(receiveAndCheckError(FATAL_ERROR))
84 test.assertEq(fatalErrorValue, error.error); 156 .then(closeReceiver).then(test.succeed, test.fail);
85 receiver.close();
86 }));
87 }));
88 }, 157 },
89 158
90 ], test.runTests, exports); 159 ], test.runTests, exports);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698