Index: extensions/test/data/data_sender_unittest.js |
diff --git a/extensions/test/data/data_sender_unittest.js b/extensions/test/data/data_sender_unittest.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..479a7945ca006fdc8168e976879ee8e7ed3e1760 |
--- /dev/null |
+++ b/extensions/test/data/data_sender_unittest.js |
@@ -0,0 +1,196 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Tests launched by extensions/renderer/api/serial/data_sender_unittest.cc |
+ |
+var test = require('test').binding; |
+var unittestBindings = require('test_environment_specific_bindings'); |
+ |
+function wrapAsyncTest(func) { |
+ Promise.all([ |
+ requireAsync('content/public/renderer/service_provider'), |
+ requireAsync('data_sender'), |
+ requireAsync('device/serial/data_stream.mojom'), |
+ ]).then(test.callbackPass(function(modules) { |
+ func(modules[0], modules[1], modules[2]); |
+ })); |
+} |
+ |
+function generateData(size, character) { |
+ if (!character) |
+ character = 'a'; |
+ var buffer = new ArrayBuffer(size); |
+ var intView = new Int8Array(buffer); |
+ for (var i = 0; i < size; i++) { |
+ intView[i] = character.charCodeAt(0); |
+ } |
+ return buffer; |
+} |
+ |
+unittestBindings.exportTests([ |
+ function testSend() { |
+ wrapAsyncTest( |
+ 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
|
+ var sender = new dataSender.DataSender( |
+ 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.
|
+ var seen = null; |
+ sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ test.assertEq(null, seen); |
+ seen = 'first'; |
+ })); |
+ sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) { |
+ sender.close(); |
+ test.assertEq(1, bytesSent); |
+ test.assertEq('first', seen); |
+ seen = 'second'; |
+ })); |
+ }); |
+ }, |
+ |
+ function testLargeSend() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(100)).then(test.callbackPass( |
+ function(bytesSent) { |
+ 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.
|
+ sender.close(); |
+ })); |
+ }); |
+ }, |
+ |
+ function testSendError() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(100, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(0, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }); |
+ }, |
+ |
+ function testSendErrorPartialSuccess() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(100, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(5, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }); |
+ }, |
+ |
+ function testSendErrorBetweenPackets() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(2, e.bytesSent); |
+ })); |
+ 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.
|
+ test.assertEq(1, e.error); |
+ test.assertEq(0, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }); |
+ }, |
+ |
+ function testSendErrorInSecondPacket() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(2, 'b')).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(2, bytesSent); |
+ })); |
+ sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(1, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }); |
+ }, |
+ |
+ function testSendErrorBeforeLargeSend() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(5, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(2, e.bytesSent); |
+ })); |
+ sender.send(generateData(1000, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(0, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }); |
+ }, |
+ |
+ function testCancelWithoutSend() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.cancel(3).then(test.callbackPass(function() { |
+ sender.close(); |
+ })); |
+ }); |
+ }, |
+ |
+ function testCancel() { |
+ wrapAsyncTest( |
+ function testSend(serviceProvider, dataSender, mojom) { |
+ var seen = null; |
+ var sender = new dataSender.DataSender( |
+ serviceProvider.connectToService(mojom.DataSinkProxy.NAME_), 10, 2); |
+ sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(3, e.error); |
+ test.assertEq(0, e.bytesSent); |
+ test.assertEq(null, seen); |
+ seen = 'send'; |
+ })); |
+ sender.cancel(3).then(test.callbackPass(function() { |
+ test.assertEq('send', seen); |
+ seen = 'cancel'; |
+ sender.close(); |
+ })); |
+ test.assertThrows( |
+ sender.cancel, sender, [], 'Cancel already in progress'); |
+ test.assertThrows(sender.send, sender, [], 'Cancel in progress'); |
+ }); |
+ }, |
+ |
+], test.runTests, exports); |