summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html')
-rw-r--r--testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html83
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html b/testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html
new file mode 100644
index 0000000000..5386201e6c
--- /dev/null
+++ b/testing/web-platform/tests/serial/serialPort_disconnect-manual.https.html
@@ -0,0 +1,83 @@
+<!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>