diff options
author | kjellander@chromium.org <kjellander@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-21 11:43:46 +0000 |
---|---|---|
committer | kjellander@chromium.org <kjellander@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-21 11:43:46 +0000 |
commit | 833f06b02f7896285a251d54c30bc08551f78e66 (patch) | |
tree | 3bed2014bf338843bfc057e02cb551a08e8ef2d3 /chrome/test/data/extensions | |
parent | 0c659c7db0ba800fa73f1ae83a99c1d58139a7f0 (diff) | |
download | chromium_src-833f06b02f7896285a251d54c30bc08551f78e66.zip chromium_src-833f06b02f7896285a251d54c30bc08551f78e66.tar.gz chromium_src-833f06b02f7896285a251d54c30bc08551f78e66.tar.bz2 |
Revert 236464 "Update serial API."
Since XP bots started failing mysteriously, not being able even execute
browser_tests.
> Update serial API.
>
> Original review: https://codereview.chromium.org/27246008/
>
> Modified to prevent invalid API calls on Windows XP and avoid ~150kB size increase on Mac by removing IOKit dependency.
>
> R=miket@chromium.org, rpaquay@chromium.org
> BUG=155861,148741,140125,169555,171948,281908
>
> Review URL: https://codereview.chromium.org/79203003
TBR=rockot@chromium.org
Review URL: https://codereview.chromium.org/80833002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236498 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/data/extensions')
-rw-r--r-- | chrome/test/data/extensions/api_test/serial/api/background.js | 87 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/serial/real_hardware/background.js | 70 |
2 files changed, 109 insertions, 48 deletions
diff --git a/chrome/test/data/extensions/api_test/serial/api/background.js b/chrome/test/data/extensions/api_test/serial/api/background.js index bdc3df7..67c0e30 100644 --- a/chrome/test/data/extensions/api_test/serial/api/background.js +++ b/chrome/test/data/extensions/api_test/serial/api/background.js @@ -23,19 +23,19 @@ var createTestArrayBuffer = function() { var testSerial = function() { var serialPort = null; var connectionId = -1; - var receiveTries = 10; - var sendBuffer = createTestArrayBuffer(); - var sendBufferUint8View = new Uint8Array(sendBuffer); - var bufferLength = sendBufferUint8View.length; - var receiveBuffer = new ArrayBuffer(bufferLength); - var receiveBufferUint8View = new Uint8Array(receiveBuffer); - var bytesToReceive = bufferLength; + var readTries = 10; + var writeBuffer = createTestArrayBuffer(); + var writeBufferUint8View = new Uint8Array(writeBuffer); + var bufferLength = writeBufferUint8View.length; + var readBuffer = new ArrayBuffer(bufferLength); + var readBufferUint8View = new Uint8Array(readBuffer); + var bytesToRead = bufferLength; var operation = 0; var doNextOperation = function() { switch (operation++) { case 0: - serial.getDevices(onGetDevices); + serial.getPorts(onGetPorts); break; case 1: var bitrate = 57600; @@ -50,9 +50,13 @@ var testSerial = function() { serial.getControlSignals(connectionId,onGetControlSignals); break; case 4: - serial.onReceive.addListener(onReceive); - serial.onReceiveError.addListener(onReceiveError); - serial.send(connectionId, sendBuffer, onSend); + serial.write(connectionId, writeBuffer, onWrite); + break; + case 5: + serial.read(connectionId, bytesToRead, onRead); + break; + case 6: + serial.flush(connectionId, onFlush); break; case 50: // GOTO 4 EVER serial.close(connectionId, onClose); @@ -80,35 +84,40 @@ var testSerial = function() { doNextOperation(); }; - var onReceive = function(receiveInfo) { - var data = new Uint8Array(receiveInfo.data); - bytesToReceive -= data.length; - var receiveBufferIndex = bufferLength - data.length; - for (var i = 0; i < data.length; i++) - receiveBufferUint8View[i + receiveBufferIndex] = data[i]; - if (bytesToReceive == 0) { - chrome.test.assertEq(sendBufferUint8View, receiveBufferUint8View, - 'Buffer received was not equal to buffer sent.'); + var onFlush = function(result) { + chrome.test.assertTrue(result); + doNextOperation(); + } + + var onRead = function(readInfo) { + bytesToRead -= readInfo.bytesRead; + var readBufferIndex = bufferLength - readInfo.bytesRead; + var messageUint8View = new Uint8Array(readInfo.data); + for (var i = 0; i < readInfo.bytesRead; i++) + readBufferUint8View[i + readBufferIndex] = messageUint8View[i]; + if (bytesToRead == 0) { + chrome.test.assertEq(writeBufferUint8View, readBufferUint8View, + 'Buffer read was not equal to buffer written.'); doNextOperation(); - } else if (--receiveTries <= 0) { - chrome.test.fail('receive() failed to return requested number of bytes.'); + } else { + if (--readTries > 0) + setTimeout(repeatOperation, 100); + else + chrome.test.assertTrue( + false, + 'read() failed to return requested number of bytes.'); } }; - var onReceiveError = function(errorInfo) { - chrome.test.fail('Failed to receive serial data'); - }; - - var onSend = function(sendInfo) { - chrome.test.assertEq(bufferLength, sendInfo.bytesSent, - 'Failed to send byte.'); + var onWrite = function(writeInfo) { + chrome.test.assertEq(bufferLength, writeInfo.bytesWritten, + 'Failed to write byte.'); + doNextOperation(); }; var onGetControlSignals = function(options) { - chrome.test.assertTrue(typeof options.dcd != 'undefined', "No DCD set"); - chrome.test.assertTrue(typeof options.cts != 'undefined', "No CTS set"); - chrome.test.assertTrue(typeof options.dtr != 'undefined', "No DTR set"); - chrome.test.assertTrue(typeof options.ri != 'undefined', "No RI set"); + chrome.test.assertTrue(typeof options.dcd != 'undefined'); + chrome.test.assertTrue(typeof options.cts != 'undefined'); doNextOperation(); }; @@ -123,18 +132,18 @@ var testSerial = function() { doNextOperation(); }; - var onGetDevices = function(devices) { - if (devices.length > 0) { + var onGetPorts = function(ports) { + if (ports.length > 0) { var portNumber = 0; - while (portNumber < devices.length) { - if (shouldSkipPort(devices[portNumber].path)) { + while (portNumber < ports.length) { + if (shouldSkipPort(ports[portNumber])) { portNumber++; continue; } else break; } - if (portNumber < devices.length) { - serialPort = devices[portNumber].path; + if (portNumber < ports.length) { + serialPort = ports[portNumber]; doNextOperation(); } else { // We didn't find a port that we think we should try. diff --git a/chrome/test/data/extensions/api_test/serial/real_hardware/background.js b/chrome/test/data/extensions/api_test/serial/real_hardware/background.js index 19d86d9..27e033d 100644 --- a/chrome/test/data/extensions/api_test/serial/real_hardware/background.js +++ b/chrome/test/data/extensions/api_test/serial/real_hardware/background.js @@ -2,21 +2,73 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -var testGetDevices = function() { - var onGetDevices = function(devices) { +// TODO(miket): opening Bluetooth ports on OSX is unreliable. Investigate. +function shouldSkipPort(portName) { + return portName.match(/[Bb]luetooth/); +} + +var testGetPorts = function() { + var onGetPorts = function(ports) { // Any length is potentially valid, because we're on unknown hardware. But - // we are testing at least that the devices member was filled in, so it's + // we are testing at least that the ports member was filled in, so it's // still a somewhat meaningful test. - chrome.test.assertTrue(devices.length >= 0); + chrome.test.assertTrue(ports.length >= 0); chrome.test.succeed(); } - chrome.serial.getDevices(onGetDevices); + chrome.serial.getPorts(onGetPorts); }; -// TODO(rockot): As infrastructure is built for testing device APIs in Chrome, -// we should obviously build real hardware tests here. For now, no attempt is -// made to open real devices on the test system. +var testMaybeOpenPort = function() { + var onGetPorts = function(ports) { + // We're testing as much as we can here without actually assuming the + // existence of attached hardware. + // + // TODO(miket): is there any chance that just opening a serial port but not + // doing anything could be harmful to devices attached to a developer's + // machine? + if (ports.length > 0) { + var currentPort = 0; + + var onFinishedWithPort = function() { + if (currentPort >= ports.length) + chrome.test.succeed(); + else + testPort(); + }; + + var onClose = function(r) { + onFinishedWithPort(); + }; + + var onOpen = function(connectionInfo) { + var id = connectionInfo.connectionId; + if (id > 0) + chrome.serial.close(id, onClose); + else + onFinishedWithPort(); + }; + + var testPort = function() { + var port = ports[currentPort++]; + + if (shouldSkipPort(port)) { + onFinishedWithPort(); + } else { + console.log("Opening serial device " + port); + chrome.serial.open(port, onOpen); + } + } + + testPort(); + } else { + // There aren't any valid ports on this machine. That's OK. + chrome.test.succeed(); + } + } + + chrome.serial.getPorts(onGetPorts); +}; -var tests = [testGetDevices]; +var tests = [testGetPorts, testMaybeOpenPort]; chrome.test.runTests(tests); |