websocket-error.any.js (2340B)
1 // META: global=window,worker 2 3 'use strict'; 4 5 test(() => { 6 const error = new WebSocketError(); 7 assert_equals(error.code, 0, 'DOMException code should be 0'); 8 assert_equals(error.name, 'WebSocketError', 'name should be correct'); 9 assert_equals(error.message, '', 'DOMException message should be empty'); 10 assert_equals(error.closeCode, null, 'closeCode should be null'); 11 assert_equals(error.reason, '', 'reason should be empty'); 12 }, 'WebSocketError defaults should be correct'); 13 14 test(() => { 15 const error = new WebSocketError('message', { closeCode: 3456, reason: 'reason' }); 16 assert_equals(error.code, 0, 'DOMException code should be 0'); 17 assert_equals(error.name, 'WebSocketError', 'name should be correct'); 18 assert_equals(error.message, 'message', 'DOMException message should be set'); 19 assert_equals(error.closeCode, 3456, 'closeCode should match'); 20 assert_equals(error.reason, 'reason', 'reason should match'); 21 }, 'WebSocketError should be initialised from arguments'); 22 23 for (const invalidCode of [999, 1001, 2999, 5000]) { 24 test(() => { 25 assert_throws_dom('InvalidAccessError', () => new WebSocketError('', { closeCode: invalidCode }), 26 'invalid code should throw an InvalidAccessError'); 27 }, `new WebSocketError with invalid code ${invalidCode} should throw`); 28 } 29 30 test(() => { 31 const error = new WebSocketError('', { closeCode: 3333 }); 32 assert_equals(error.closeCode, 3333, 'code should be used'); 33 assert_equals(error.reason, '', 'reason should be empty'); 34 }, 'passing only close code to WebSocketError should work'); 35 36 test(() => { 37 const error = new WebSocketError('', { reason: 'specified' }); 38 assert_equals(error.closeCode, 1000, 'code should be defaulted'); 39 assert_equals(error.reason, 'specified', 'reason should be used'); 40 }, 'passing a non-empty reason should cause the close code to be set to 1000'); 41 42 test(() => { 43 assert_throws_dom('SyntaxError', () => new WebSocketError('', { closeCode: 1000, reason: 'x'.repeat(124) }), 44 'overlong reason should trigger SyntaxError'); 45 }, 'overlong reason should throw'); 46 47 test(() => { 48 assert_throws_dom('SyntaxError', () => new WebSocketError('', { reason: '🔌'.repeat(32) }), 49 'overlong reason should throw'); 50 }, 'reason should be rejected based on utf-8 bytes, not character count');