1 // META: script=/resources/testdriver.js
2 // META: script=/resources/testdriver-vendor.js
3 // META: script=/resources/test-only-api.js
4 // META: script=/serial/resources/common.js
5 // META: script=resources/automation.js
7 serial_test((t, fake) => {
8 return promise_rejects_dom(
9 t, 'SecurityError', navigator.serial.requestPort());
10 }, 'requestPort() rejects without a user gesture');
12 serial_test(async (t, fake) => {
14 return promise_rejects_dom(
15 t, 'NotFoundError', navigator.serial.requestPort());
16 }, 'requestPort() rejects if no port has been selected');
18 serial_test(async (t, fake) => {
19 let token = fake.addPort();
20 fake.setSelectedPort(token);
23 let port = await navigator.serial.requestPort();
24 assert_true(port instanceof SerialPort);
25 }, 'requestPort() returns the selected port');
27 serial_test(async (t, fake) => {
28 let token = fake.addPort();
29 fake.setSelectedPort(token);
32 let firstPort = await navigator.serial.requestPort();
33 assert_true(firstPort instanceof SerialPort);
34 let secondPort = await navigator.serial.requestPort();
35 assert_true(secondPort instanceof SerialPort);
36 assert_true(firstPort === secondPort);
37 }, 'requestPort() returns the same port object every time');
39 serial_test(async (t, fake) => {
40 let token = fake.addPort();
41 fake.setSelectedPort(token);
44 let port = await navigator.serial.requestPort({filters: []});
45 assert_true(port instanceof SerialPort);
46 }, 'An empty list of filters is valid');
48 serial_test(async (t, fake) => {
49 let token = fake.addPort();
50 fake.setSelectedPort(token);
53 return promise_rejects_js(t, TypeError, navigator.serial.requestPort({
56 }, 'An empty filter is not valid');
58 serial_test(async (t, fake) => {
59 let token = fake.addPort();
60 fake.setSelectedPort(token);
63 return promise_rejects_js(t, TypeError, navigator.serial.requestPort({
64 filters: [{usbProductId: 0x0001}],
66 }, 'requestPort() requires a USB vendor ID if a product ID specified');