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

Unified 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: address comments 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 side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698