| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // TODO(miket): opening Bluetooth ports on OSX is unreliable. Investigate. | 5 // TODO(miket): opening Bluetooth ports on OSX is unreliable. Investigate. |
| 6 function shouldSkipPort(portName) { | 6 function shouldSkipPort(portName) { |
| 7 return portName.match(/[Bb]luetooth/); | 7 return portName.match(/[Bb]luetooth/); |
| 8 } | 8 } |
| 9 | 9 |
| 10 var createTestArrayBuffer = function() { |
| 11 var bufferSize = 8; |
| 12 var buffer = new ArrayBuffer(bufferSize); |
| 13 |
| 14 var uint8View = new Uint8Array(buffer); |
| 15 for (var i = 0; i < bufferSize; i++) { |
| 16 uint8View[i] = 42 + i * 2; // An arbitrary pattern. |
| 17 } |
| 18 return buffer; |
| 19 } |
| 20 |
| 10 var testSerial = function() { | 21 var testSerial = function() { |
| 11 var serialPort = null; | 22 var serialPort = null; |
| 12 var connectionId = -1; | 23 var connectionId = -1; |
| 13 var testBuffer = new ArrayBuffer(1); | |
| 14 var readTries = 10; | 24 var readTries = 10; |
| 15 | 25 var writeBuffer = createTestArrayBuffer(); |
| 16 var uint8View = new Uint8Array(testBuffer); | 26 var writeBufferUint8View = new Uint8Array(writeBuffer); |
| 17 uint8View[0] = 42; | 27 var bufferLength = writeBufferUint8View.length; |
| 28 var readBuffer = new ArrayBuffer(bufferLength); |
| 29 var readBufferUint8View = new Uint8Array(readBuffer); |
| 30 var bytesToRead = bufferLength; |
| 18 | 31 |
| 19 var operation = 0; | 32 var operation = 0; |
| 20 var doNextOperation = function() { | 33 var doNextOperation = function() { |
| 21 switch (operation++) { | 34 switch (operation++) { |
| 22 case 0: | 35 case 0: |
| 23 chrome.experimental.serial.getPorts(onGetPorts); | 36 chrome.experimental.serial.getPorts(onGetPorts); |
| 24 break; | 37 break; |
| 25 case 1: | 38 case 1: |
| 26 var bitrate = 57600; | 39 var bitrate = 57600; |
| 27 console.log('Opening serial device ' + serialPort + ' at ' + | 40 console.log('Opening serial device ' + serialPort + ' at ' + |
| 28 bitrate + ' bps.'); | 41 bitrate + ' bps.'); |
| 29 chrome.experimental.serial.open(serialPort, {bitrate: bitrate}, | 42 chrome.experimental.serial.open(serialPort, {bitrate: bitrate}, |
| 30 onOpen); | 43 onOpen); |
| 31 break; | 44 break; |
| 32 case 2: | 45 case 2: |
| 33 chrome.experimental.serial.setControlSignals( | 46 chrome.experimental.serial.setControlSignals( |
| 34 connectionId, {dtr: true}, onSetControlSignals); | 47 connectionId, {dtr: true}, onSetControlSignals); |
| 35 break; | 48 break; |
| 36 case 3: | 49 case 3: |
| 37 chrome.experimental.serial.getControlSignals(connectionId, | 50 chrome.experimental.serial.getControlSignals(connectionId, |
| 38 onGetControlSignals); | 51 onGetControlSignals); |
| 39 break; | 52 break; |
| 40 case 4: | 53 case 4: |
| 41 chrome.experimental.serial.write(connectionId, testBuffer, onWrite); | 54 chrome.experimental.serial.write(connectionId, writeBuffer, onWrite); |
| 42 break; | 55 break; |
| 43 case 5: | 56 case 5: |
| 44 chrome.experimental.serial.read(connectionId, onRead); | 57 chrome.experimental.serial.read(connectionId, bytesToRead, onRead); |
| 45 break; | 58 break; |
| 46 case 6: | 59 case 6: |
| 47 chrome.experimental.serial.flush(connectionId, onFlush); | 60 chrome.experimental.serial.flush(connectionId, onFlush); |
| 48 break; | 61 break; |
| 49 case 50: // GOTO 4 EVER | 62 case 50: // GOTO 4 EVER |
| 50 chrome.experimental.serial.close(connectionId, onClose); | 63 chrome.experimental.serial.close(connectionId, onClose); |
| 51 break; | 64 break; |
| 52 default: | 65 default: |
| 53 // Beware! If you forget to assign a case for your next test, the whole | 66 // Beware! If you forget to assign a case for your next test, the whole |
| 54 // test suite will appear to succeed! | 67 // test suite will appear to succeed! |
| (...skipping 16 matching lines...) Expand all Loading... |
| 71 chrome.test.assertTrue(result); | 84 chrome.test.assertTrue(result); |
| 72 doNextOperation(); | 85 doNextOperation(); |
| 73 }; | 86 }; |
| 74 | 87 |
| 75 var onFlush = function(result) { | 88 var onFlush = function(result) { |
| 76 chrome.test.assertTrue(result); | 89 chrome.test.assertTrue(result); |
| 77 doNextOperation(); | 90 doNextOperation(); |
| 78 } | 91 } |
| 79 | 92 |
| 80 var onRead = function(readInfo) { | 93 var onRead = function(readInfo) { |
| 81 if (readInfo.bytesRead == 1) { | 94 bytesToRead -= readInfo.bytesRead; |
| 82 var messageUint8View = new Uint8Array(readInfo.data); | 95 var readBufferIndex = bufferLength - readInfo.bytesRead; |
| 83 chrome.test.assertEq(uint8View[0], messageUint8View[0], | 96 var messageUint8View = new Uint8Array(readInfo.data); |
| 84 'Byte read was not equal to byte written.'); | 97 for (var i = 0; i < readInfo.bytesRead; i++) { |
| 98 readBufferUint8View[i + readBufferIndex] = messageUint8View[i]; |
| 99 } |
| 100 if (bytesToRead == 0) { |
| 101 chrome.test.assertEq(writeBufferUint8View, readBufferUint8View, |
| 102 'Buffer read was not equal to buffer written.'); |
| 85 doNextOperation(); | 103 doNextOperation(); |
| 86 } else { | 104 } else { |
| 87 if (--readTries > 0) | 105 if (--readTries > 0) |
| 88 setTimeout(repeatOperation, 100); | 106 setTimeout(repeatOperation, 100); |
| 89 else | 107 else |
| 90 chrome.test.assertTrue(false, | 108 chrome.test.assertTrue( |
| 91 'read() failed to return bytesRead 1.'); | 109 false, |
| 110 'read() failed to return requested number of bytes.'); |
| 92 } | 111 } |
| 93 }; | 112 }; |
| 94 | 113 |
| 95 var onWrite = function(writeInfo) { | 114 var onWrite = function(writeInfo) { |
| 96 chrome.test.assertEq(1, writeInfo.bytesWritten, | 115 chrome.test.assertEq(bufferLength, writeInfo.bytesWritten, |
| 97 'Failed to write byte.'); | 116 'Failed to write byte.'); |
| 98 if (writeInfo.bytesWritten == 1) | 117 doNextOperation(); |
| 99 doNextOperation(); | |
| 100 else | |
| 101 skipToTearDown(); | |
| 102 }; | 118 }; |
| 103 | 119 |
| 104 var onGetControlSignals = function(options) { | 120 var onGetControlSignals = function(options) { |
| 105 chrome.test.assertTrue(typeof options.dcd != 'undefined'); | 121 chrome.test.assertTrue(typeof options.dcd != 'undefined'); |
| 106 chrome.test.assertTrue(typeof options.cts != 'undefined'); | 122 chrome.test.assertTrue(typeof options.cts != 'undefined'); |
| 107 doNextOperation(); | 123 doNextOperation(); |
| 108 }; | 124 }; |
| 109 | 125 |
| 110 var onSetControlSignals = function(result) { | 126 var onSetControlSignals = function(result) { |
| 111 chrome.test.assertTrue(result); | 127 chrome.test.assertTrue(result); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 139 // No serial device found. This is still considered a success because we | 155 // No serial device found. This is still considered a success because we |
| 140 // can't rely on specific hardware being present on the machine. | 156 // can't rely on specific hardware being present on the machine. |
| 141 chrome.test.succeed(); | 157 chrome.test.succeed(); |
| 142 } | 158 } |
| 143 }; | 159 }; |
| 144 | 160 |
| 145 doNextOperation(); | 161 doNextOperation(); |
| 146 }; | 162 }; |
| 147 | 163 |
| 148 chrome.test.runTests([testSerial]); | 164 chrome.test.runTests([testSerial]); |
| OLD | NEW |