close-connecting-async.any.js (1309B)
1 // META: script=../../../constants.sub.js 2 // META: variant=?default 3 // META: variant=?wpt_flags=h2 4 // META: variant=?wss 5 6 async_test(t => { 7 const ws = new WebSocket(SCHEME_DOMAIN_PORT + '/handshake_sleep_2'); 8 let closeMethodReturned = false; 9 let errorEventSeen = false; 10 let closeEventSeen = false; 11 ws.onerror = t.step_func(() => { 12 assert_true(closeMethodReturned, 'ws.close() should have returned'); 13 assert_false(errorEventSeen, 'error event should only fire once'); 14 errorEventSeen = true; 15 assert_false(closeEventSeen, 'error event should come before close event'); 16 }); 17 ws.onclose = t.step_func_done(() => { 18 assert_true(closeMethodReturned, 'ws.close() should have returned'); 19 assert_true(errorEventSeen, 'error event should have fired'); 20 assert_false(closeEventSeen, 'close event should only fire once'); 21 closeEventSeen = true; 22 assert_equals(ws.readyState, WebSocket.CLOSED, 23 'readyState should be CLOSED'); 24 }); 25 assert_equals(ws.readyState, WebSocket.CONNECTING, 26 'readyState should be CONNECTING'); 27 ws.close(); 28 closeMethodReturned = true; 29 assert_equals(ws.readyState, WebSocket.CLOSING, 30 'readyState should be CLOSING'); 31 }, 'close event should be fired asynchronously when WebSocket is connecting');