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