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

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: 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..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);

Powered by Google App Engine
This is Rietveld 408576698