| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title></title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="resources/common.js"></script> | |
| <script src="resources/manual.js"></script> | |
| </head> | |
| <body> | |
| <p> | |
| These tests require a serial device to be connected and disconnected. | |
| </p> | |
| <script> | |
| manual_serial_test(async (t, port) => { | |
| const watcher = new EventWatcher(t, navigator.serial, ['disconnect']); | |
| await port.open({baudRate: 115200, bufferSize: 1024}); | |
| const disconnectPromise = watcher.wait_for(['disconnect']) | |
| const reader = port.readable.getReader(); | |
| const disconnectMessage = document.createElement('div'); | |
| disconnectMessage.textContent = 'Disconnect the device now.'; | |
| document.body.appendChild(disconnectMessage); | |
| try { | |
| while (true) { | |
| const {value, done} = await reader.read(); | |
| // Ignore |value| in case the device happens to produce data. It is | |
| // not important for this test. | |
| assert_false(done); | |
| } | |
| } catch (e) { | |
| assert_equals(e.constructor, DOMException); | |
| assert_equals(e.name, 'NetworkError'); | |
| } | |
| reader.releaseLock(); | |
| assert_equals(port.readable, null); | |
| let event = await disconnectPromise; | |
| assert_equals(event.target, port); | |
| disconnectMessage.remove(); | |
| await port.close(); | |
| }, 'Disconnect during read is detected.'); | |
| manual_serial_test(async (t, port) => { | |
| const watcher = new EventWatcher(t, navigator.serial, ['disconnect']); | |
| await port.open({baudRate: 115200, bufferSize: 1024}); | |
| const disconnectPromise = watcher.wait_for(['disconnect']) | |
| const writer = port.writable.getWriter(); | |
| const disconnectMessage = document.createElement('div'); | |
| disconnectMessage.textContent = 'Disconnect the device now.'; | |
| document.body.appendChild(disconnectMessage); | |
| const data = new Uint8Array(4096); | |
| try { | |
| while (true) { | |
| await writer.write(data); | |
| } | |
| } catch (e) { | |
| assert_equals(e.constructor, DOMException); | |
| assert_equals(e.name, 'NetworkError'); | |
| } | |
| writer.releaseLock(); | |
| assert_equals(port.writable, null); | |
| let event = await disconnectPromise; | |
| assert_equals(event.target, port); | |
| disconnectMessage.remove(); | |
| await port.close(); | |
| }, 'Disconnect during write is detected.'); | |
| </script> | |
| </body> | |
| </html> |