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

Side by Side Diff: extensions/test/data/data_sender_unittest.js

Issue 488003002: Add the JS data pipe client to be used to implement serial send. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@js-receive-pipe
Patch Set: address comments Created 6 years, 4 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
(Empty)
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
3 // found in the LICENSE file.
4
5 // Tests launched by extensions/renderer/api/serial/data_sender_unittest.cc
6
7 var test = require('test').binding;
8 var unittestBindings = require('test_environment_specific_bindings');
9
10 var BUFFER_SIZE = 10;
11 var FATAL_ERROR = 2;
12
13 function generateData(size, character) {
14 if (!character)
15 character = 'a';
16 var buffer = new ArrayBuffer(size);
17 var intView = new Int8Array(buffer);
18 for (var i = 0; i < size; i++) {
19 intView[i] = character.charCodeAt(0);
20 }
21 return buffer;
22 }
23
24 function createSender() {
25 return Promise.all([
26 requireAsync('content/public/renderer/service_provider'),
27 requireAsync('data_sender'),
28 requireAsync('device/serial/data_stream.mojom'),
29 ]).then(test.callbackPass(function(modules) {
30 var serviceProvider = modules[0];
31 var dataSender = modules[1];
32 var dataStream = modules[2];
33 return new dataSender.DataSender(
34 serviceProvider.connectToService(dataStream.DataSinkProxy.NAME_),
35 BUFFER_SIZE,
36 FATAL_ERROR);
37 }));
38 }
39
40 unittestBindings.exportTests([
41 function testSend() {
42 createSender().then(test.callbackPass(function(sender) {
43 var seen = null;
44 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
45 test.assertEq(1, bytesSent);
46 test.assertEq(null, seen);
47 seen = 'first';
48 }));
49 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
50 sender.close();
51 test.assertEq(1, bytesSent);
52 test.assertEq('first', seen);
53 seen = 'second';
54 }));
55 }));
56 },
57
58 function testLargeSend() {
benwells 2014/08/20 06:13:47 Could you also add a test which sends heterogenous
Sam McNally 2014/08/20 06:30:56 Done.
59 createSender().then(test.callbackPass(function(sender) {
60 sender.send(generateData(BUFFER_SIZE * 100)).then(test.callbackPass(
61 function(bytesSent) {
62 test.assertEq(BUFFER_SIZE * 100, bytesSent);
63 sender.close();
64 }));
65 }));
66 },
67
68 function testSendError() {
69 createSender().then(test.callbackPass(function(sender) {
70 sender.send(generateData(BUFFER_SIZE * 100, 'b')).catch(test.callbackPass(
71 function(e) {
72 test.assertEq(1, e.error);
73 test.assertEq(0, e.bytesSent);
74 sender.send(generateData(1)).then(test.callbackPass(
75 function(bytesSent) {
76 test.assertEq(1, bytesSent);
77 sender.close();
78 }));
79 }));
80 }));
81 },
82
83 function testSendErrorPartialSuccess() {
84 createSender().then(test.callbackPass(function(sender) {
85 sender.send(generateData(BUFFER_SIZE * 100, 'b')).catch(test.callbackPass(
86 function(e) {
87 test.assertEq(1, e.error);
88 test.assertEq(5, e.bytesSent);
89 sender.send(generateData(1)).then(test.callbackPass(
90 function(bytesSent) {
91 test.assertEq(1, bytesSent);
92 sender.close();
93 }));
94 }));
95 }));
96 },
97
98 function testSendErrorBetweenPackets() {
99 createSender().then(test.callbackPass(function(sender) {
100 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
101 test.assertEq(1, e.error);
102 test.assertEq(2, e.bytesSent);
103 }));
104 // After an error, all sends in progress will be cancelled.
105 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
106 test.assertEq(1, e.error);
107 test.assertEq(0, e.bytesSent);
108 sender.send(generateData(1)).then(test.callbackPass(
109 function(bytesSent) {
110 test.assertEq(1, bytesSent);
111 sender.close();
112 }));
113 }));
114 }));
115 },
116
117 function testSendErrorInSecondPacket() {
118 createSender().then(test.callbackPass(function(sender) {
119 sender.send(generateData(2, 'b')).then(test.callbackPass(
120 function(bytesSent) {
121 test.assertEq(2, bytesSent);
122 }));
123 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
124 test.assertEq(1, e.error);
125 test.assertEq(1, e.bytesSent);
126 sender.send(generateData(1)).then(test.callbackPass(
127 function(bytesSent) {
128 test.assertEq(1, bytesSent);
129 sender.close();
130 }));
131 }));
132 }));
133 },
134
135 function testSendErrorInLargeSend() {
136 createSender().then(test.callbackPass(function(sender) {
137 sender.send(generateData(BUFFER_SIZE * 100, 'b')).catch(test.callbackPass(
138 function(e) {
139 test.assertEq(1, e.error);
140 test.assertEq(2, e.bytesSent);
141 sender.send(generateData(1)).then(test.callbackPass(
142 function(bytesSent) {
143 test.assertEq(1, bytesSent);
144 sender.close();
145 }));
146 }));
147 }));
148 },
149
150 function testSendErrorBeforeLargeSend() {
151 createSender().then(test.callbackPass(function(sender) {
152 sender.send(generateData(5, 'b')).catch(test.callbackPass(function(e) {
153 test.assertEq(1, e.error);
154 test.assertEq(2, e.bytesSent);
155 }));
156 sender.send(generateData(BUFFER_SIZE * 100, 'b')).catch(test.callbackPass(
157 function(e) {
158 test.assertEq(1, e.error);
159 test.assertEq(0, e.bytesSent);
160 sender.send(generateData(1)).then(test.callbackPass(
161 function(bytesSent) {
162 test.assertEq(1, bytesSent);
163 sender.close();
164 }));
165 }));
166 }));
167 },
168
169 function testCancelWithoutSend() {
170 createSender().then(test.callbackPass(function(sender) {
171 sender.cancel(3).then(test.callbackPass(function() {
172 sender.close();
173 }));
174 }));
175 },
176
177 function testCancel() {
178 createSender().then(test.callbackPass(function(sender) {
179 var seen = null;
180 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
181 test.assertEq(3, e.error);
182 test.assertEq(0, e.bytesSent);
183 test.assertEq(null, seen);
184 seen = 'send';
185 }));
186 sender.cancel(3).then(test.callbackPass(function() {
187 test.assertEq('send', seen);
188 seen = 'cancel';
189 sender.close();
190 }));
191 test.assertThrows(
192 sender.cancel, sender, [], 'Cancel already in progress');
193 test.assertThrows(sender.send, sender, [], 'Cancel in progress');
194 }));
195 },
196
197 function testClose() {
198 createSender().then(test.callbackPass(function(sender) {
199 var seen = null;
200 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
201 test.assertEq(FATAL_ERROR, e.error);
202 test.assertEq(0, e.bytesSent);
203 test.assertEq(null, seen);
204 seen = 'send';
205 }));
206 sender.cancel(3).then(test.callbackPass(function() {
207 test.assertEq('send', seen);
208 seen = 'cancel';
209 sender.close();
210 }));
211 sender.close();
212 test.assertThrows(
213 sender.cancel, sender, [], 'DataSender has been closed');
214 test.assertThrows(sender.send, sender, [], 'DataSender has been closed');
215 }));
216 },
217
218 ], test.runTests, exports);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698