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 |