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..d3a2a21b3ea1de91605fcc238932edc4032b5bbe |
--- /dev/null |
+++ b/extensions/test/data/data_sender_unittest.js |
@@ -0,0 +1,218 @@ |
+// 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'); |
+ |
+var BUFFER_SIZE = 10; |
+var FATAL_ERROR = 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; |
+} |
+ |
+function createSender() { |
+ return Promise.all([ |
+ requireAsync('content/public/renderer/service_provider'), |
+ requireAsync('data_sender'), |
+ requireAsync('device/serial/data_stream.mojom'), |
+ ]).then(test.callbackPass(function(modules) { |
+ var serviceProvider = modules[0]; |
+ var dataSender = modules[1]; |
+ var dataStream = modules[2]; |
+ return new dataSender.DataSender( |
+ serviceProvider.connectToService(dataStream.DataSinkProxy.NAME_), |
+ BUFFER_SIZE, |
+ FATAL_ERROR); |
+ })); |
+} |
+ |
+unittestBindings.exportTests([ |
+ function testSend() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ 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() { |
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.
|
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(BUFFER_SIZE * 100)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(BUFFER_SIZE * 100, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ }, |
+ |
+ function testSendError() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(BUFFER_SIZE * 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() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(BUFFER_SIZE * 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() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(2, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(2, e.bytesSent); |
+ })); |
+ // After an error, all sends in progress will be cancelled. |
+ sender.send(generateData(2, '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 testSendErrorInSecondPacket() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ 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 testSendErrorInLargeSend() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(BUFFER_SIZE * 100, 'b')).catch(test.callbackPass( |
+ function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(2, e.bytesSent); |
+ sender.send(generateData(1)).then(test.callbackPass( |
+ function(bytesSent) { |
+ test.assertEq(1, bytesSent); |
+ sender.close(); |
+ })); |
+ })); |
+ })); |
+ }, |
+ |
+ function testSendErrorBeforeLargeSend() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.send(generateData(5, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(1, e.error); |
+ test.assertEq(2, e.bytesSent); |
+ })); |
+ sender.send(generateData(BUFFER_SIZE * 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 testCancelWithoutSend() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ sender.cancel(3).then(test.callbackPass(function() { |
+ sender.close(); |
+ })); |
+ })); |
+ }, |
+ |
+ function testCancel() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ var seen = null; |
+ 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'); |
+ })); |
+ }, |
+ |
+ function testClose() { |
+ createSender().then(test.callbackPass(function(sender) { |
+ var seen = null; |
+ sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) { |
+ test.assertEq(FATAL_ERROR, 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(); |
+ })); |
+ sender.close(); |
+ test.assertThrows( |
+ sender.cancel, sender, [], 'DataSender has been closed'); |
+ test.assertThrows(sender.send, sender, [], 'DataSender has been closed'); |
+ })); |
+ }, |
+ |
+], test.runTests, exports); |