Chromium Code Reviews| OLD | NEW |
|---|---|
| (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); | |
| OLD | NEW |