serialPort_disconnect-manual.https.html (2664B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="resources/common.js"></script> 9 <script src="resources/manual.js"></script> 10 </head> 11 <body> 12 <p> 13 These tests require a serial device to be connected and disconnected. 14 </p> 15 <script> 16 manual_serial_test(async (t, port) => { 17 const watcher = new EventWatcher(t, navigator.serial, ['disconnect']); 18 19 await port.open({baudRate: 115200, bufferSize: 1024}); 20 21 const disconnectPromise = watcher.wait_for(['disconnect']) 22 const reader = port.readable.getReader(); 23 24 const disconnectMessage = document.createElement('div'); 25 disconnectMessage.textContent = 'Disconnect the device now.'; 26 document.body.appendChild(disconnectMessage); 27 28 try { 29 while (true) { 30 const {value, done} = await reader.read(); 31 // Ignore |value| in case the device happens to produce data. It is 32 // not important for this test. 33 assert_false(done); 34 } 35 } catch (e) { 36 assert_equals(e.constructor, DOMException); 37 assert_equals(e.name, 'NetworkError'); 38 } 39 reader.releaseLock(); 40 assert_equals(port.readable, null); 41 42 let event = await disconnectPromise; 43 assert_equals(event.target, port); 44 45 disconnectMessage.remove(); 46 47 await port.close(); 48 }, 'Disconnect during read is detected.'); 49 50 manual_serial_test(async (t, port) => { 51 const watcher = new EventWatcher(t, navigator.serial, ['disconnect']); 52 53 await port.open({baudRate: 115200, bufferSize: 1024}); 54 55 const disconnectPromise = watcher.wait_for(['disconnect']) 56 const writer = port.writable.getWriter(); 57 58 const disconnectMessage = document.createElement('div'); 59 disconnectMessage.textContent = 'Disconnect the device now.'; 60 document.body.appendChild(disconnectMessage); 61 62 const data = new Uint8Array(4096); 63 try { 64 while (true) { 65 await writer.write(data); 66 } 67 } catch (e) { 68 assert_equals(e.constructor, DOMException); 69 assert_equals(e.name, 'NetworkError'); 70 } 71 writer.releaseLock(); 72 assert_equals(port.writable, null); 73 74 let event = await disconnectPromise; 75 assert_equals(event.target, port); 76 77 disconnectMessage.remove(); 78 79 await port.close(); 80 }, 'Disconnect during write is detected.'); 81 </script> 82 </body> 83 </html>