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

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: 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 function wrapAsyncTest(func) {
11 Promise.all([
12 requireAsync('content/public/renderer/service_provider'),
13 requireAsync('data_sender'),
14 requireAsync('device/serial/data_stream.mojom'),
15 ]).then(test.callbackPass(function(modules) {
16 func(modules[0], modules[1], modules[2]);
17 }));
18 }
19
20 function generateData(size, character) {
21 if (!character)
22 character = 'a';
23 var buffer = new ArrayBuffer(size);
24 var intView = new Int8Array(buffer);
25 for (var i = 0; i < size; i++) {
26 intView[i] = character.charCodeAt(0);
27 }
28 return buffer;
29 }
30
31 unittestBindings.exportTests([
32 function testSend() {
33 wrapAsyncTest(
34 function testSend(serviceProvider, dataSender, mojom) {
raymes 2014/08/20 04:23:13 Couldn't we define all of the real test bodies in
Sam McNally 2014/08/20 04:50:15 exportTests uses the function names to decide the
35 var sender = new dataSender.DataSender(
36 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
raymes 2014/08/20 04:23:13 use constants for construction. If it's easier, pu
Sam McNally 2014/08/20 04:50:16 Done.
37 var seen = null;
38 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
39 test.assertEq(1, bytesSent);
40 test.assertEq(null, seen);
41 seen = 'first';
42 }));
43 sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
44 sender.close();
45 test.assertEq(1, bytesSent);
46 test.assertEq('first', seen);
47 seen = 'second';
48 }));
49 });
50 },
51
52 function testLargeSend() {
53 wrapAsyncTest(
54 function testSend(serviceProvider, dataSender, mojom) {
55 var sender = new dataSender.DataSender(
56 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
57 sender.send(generateData(100)).then(test.callbackPass(
58 function(bytesSent) {
59 test.assertEq(100, bytesSent);
raymes 2014/08/20 04:23:13 As before consider using a multiple of the buffer
Sam McNally 2014/08/20 04:50:16 Done.
60 sender.close();
61 }));
62 });
63 },
64
65 function testSendError() {
66 wrapAsyncTest(
67 function testSend(serviceProvider, dataSender, mojom) {
68 var sender = new dataSender.DataSender(
69 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
70 sender.send(generateData(100, 'b')).catch(test.callbackPass(function(e) {
71 test.assertEq(1, e.error);
72 test.assertEq(0, e.bytesSent);
73 sender.send(generateData(1)).then(test.callbackPass(
74 function(bytesSent) {
75 test.assertEq(1, bytesSent);
76 sender.close();
77 }));
78 }));
79 });
80 },
81
82 function testSendErrorPartialSuccess() {
83 wrapAsyncTest(
84 function testSend(serviceProvider, dataSender, mojom) {
85 var sender = new dataSender.DataSender(
86 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
87 sender.send(generateData(100, 'b')).catch(test.callbackPass(function(e) {
88 test.assertEq(1, e.error);
89 test.assertEq(5, e.bytesSent);
90 sender.send(generateData(1)).then(test.callbackPass(
91 function(bytesSent) {
92 test.assertEq(1, bytesSent);
93 sender.close();
94 }));
95 }));
96 });
97 },
98
99 function testSendErrorBetweenPackets() {
100 wrapAsyncTest(
101 function testSend(serviceProvider, dataSender, mojom) {
102 var sender = new dataSender.DataSender(
103 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
104 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
105 test.assertEq(1, e.error);
106 test.assertEq(2, e.bytesSent);
107 }));
108 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
raymes 2014/08/20 04:23:13 It's easy to forget why this is expected to fail.
Sam McNally 2014/08/20 04:50:16 Done.
109 test.assertEq(1, e.error);
110 test.assertEq(0, e.bytesSent);
111 sender.send(generateData(1)).then(test.callbackPass(
112 function(bytesSent) {
113 test.assertEq(1, bytesSent);
114 sender.close();
115 }));
116 }));
117 });
118 },
119
120 function testSendErrorInSecondPacket() {
121 wrapAsyncTest(
122 function testSend(serviceProvider, dataSender, mojom) {
123 var sender = new dataSender.DataSender(
124 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
125 sender.send(generateData(2, 'b')).then(test.callbackPass(
126 function(bytesSent) {
127 test.assertEq(2, bytesSent);
128 }));
129 sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) {
130 test.assertEq(1, e.error);
131 test.assertEq(1, e.bytesSent);
132 sender.send(generateData(1)).then(test.callbackPass(
133 function(bytesSent) {
134 test.assertEq(1, bytesSent);
135 sender.close();
136 }));
137 }));
138 });
139 },
140
141 function testSendErrorBeforeLargeSend() {
142 wrapAsyncTest(
143 function testSend(serviceProvider, dataSender, mojom) {
144 var sender = new dataSender.DataSender(
145 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
146 sender.send(generateData(5, 'b')).catch(test.callbackPass(function(e) {
147 test.assertEq(1, e.error);
148 test.assertEq(2, e.bytesSent);
149 }));
150 sender.send(generateData(1000, 'b')).catch(test.callbackPass(function(e) {
151 test.assertEq(1, e.error);
152 test.assertEq(0, e.bytesSent);
153 sender.send(generateData(1)).then(test.callbackPass(
154 function(bytesSent) {
155 test.assertEq(1, bytesSent);
156 sender.close();
157 }));
158 }));
159 });
160 },
161
162 function testCancelWithoutSend() {
163 wrapAsyncTest(
164 function testSend(serviceProvider, dataSender, mojom) {
165 var sender = new dataSender.DataSender(
166 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
167 sender.cancel(3).then(test.callbackPass(function() {
168 sender.close();
169 }));
170 });
171 },
172
173 function testCancel() {
174 wrapAsyncTest(
175 function testSend(serviceProvider, dataSender, mojom) {
176 var seen = null;
177 var sender = new dataSender.DataSender(
178 serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2);
179 sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
180 test.assertEq(3, e.error);
181 test.assertEq(0, e.bytesSent);
182 test.assertEq(null, seen);
183 seen = 'send';
184 }));
185 sender.cancel(3).then(test.callbackPass(function() {
186 test.assertEq('send', seen);
187 seen = 'cancel';
188 sender.close();
189 }));
190 test.assertThrows(
191 sender.cancel, sender, [], 'Cancel already in progress');
192 test.assertThrows(sender.send, sender, [], 'Cancel in progress');
193 });
194 },
195
196 ], test.runTests, exports);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698