| <!doctype html> | |
| <title>USVString test relate to url</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script src="../../webrtc/RTCPeerConnection-helper.js"></script> | |
| <div id=log></div> | |
| <script> | |
| // Unpaired surrogate codepoints present in USVString are replaced | |
| // with U+FFFD. %EF%BF%BD is UTF-8 encoding of U+FFFD. | |
| 'use strict'; | |
| test(() => { | |
| location.hash = '\uD999'; | |
| assert_equals(location.hash, '#%EF%BF%BD'); | |
| }, "location.hash : unpaired surrogate codepoint should be replaced with U+FFFD"); | |
| test(() => { | |
| var w = window.open("about:blank#\uD800"); | |
| assert_equals(w.location.href, 'about:blank#%EF%BF%BD'); | |
| w.location.href = 'about:blank#\uD999'; | |
| assert_equals(w.location.href, 'about:blank#%EF%BF%BD'); | |
| }, "location.href : unpaired surrogate codepoint should be replaced with U+FFFD"); | |
| test(() => { | |
| var w = window.open("about:blank#\uD800"); | |
| assert_equals(w.location.hash, '#%EF%BF%BD'); | |
| }, "window.open : unpaired surrogate codepoint should be replaced with U+FFFD"); | |
| test(() => { | |
| var w = document.open("about:blank#\uD800", "", ""); | |
| assert_equals(w.location.hash, '#%EF%BF%BD'); | |
| }, "document.open : unpaired surrogate codepoint should be replaced with U+FFFD"); | |
| test(() => { | |
| var element = document.createElement("a"); | |
| element.ping = '\uD989'; | |
| assert_equals(element.ping, '\uFFFD'); | |
| }, "anchor : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("area"); | |
| element.ping = '\uDA99'; | |
| assert_equals(element.ping, '\uFFFD'); | |
| }, "area : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("base"); | |
| element.href = '\uD989'; | |
| assert_equals(element.href.endsWith('%EF%BF%BD'), true); | |
| }, "base : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var src = new EventSource('\uD899'); | |
| assert_equals(src.url.endsWith('%EF%BF%BD'), true); | |
| }, "EventSource : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("frame"); | |
| element.src = '\uDCA9'; | |
| element.longDesc = '\uDCA8'; | |
| assert_equals(element.src.endsWith('%EF%BF%BD'), true); | |
| assert_equals(element.longDesc.endsWith('%EF%BF%BD'), true); | |
| }, "frame : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("iframe"); | |
| element.src = '\uDC89'; | |
| element.longDesc = '\uDC88'; | |
| assert_equals(element.src.endsWith('%EF%BF%BD'), true); | |
| assert_equals(element.longDesc.endsWith('%EF%BF%BD'), true); | |
| }, "iframe : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("link"); | |
| element.href = '\uDB89'; | |
| assert_equals(element.href.endsWith('%EF%BF%BD'), true); | |
| }, "link : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var element = document.createElement("source"); | |
| element.src = '\uDDDD'; | |
| element.srcset = '\uD800'; | |
| assert_equals(element.src.endsWith('%EF%BF%BD'), true); | |
| assert_equals(element.srcset, '\uFFFD'); | |
| }, "source : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| const event = new StorageEvent('storage', { | |
| url: window.location.href + '\uD999', | |
| }); | |
| assert_equals(event.url, window.location.href + "\uFFFD"); | |
| }, "storage event : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| var wsocket = new EventSource('ws://www.example.com/socketserve\uD899/'); | |
| assert_true(wsocket.url.endsWith('ws://www.example.com/socketserve%EF%BF%BD/')); | |
| }, "websocket url : unpaired surrogate codepoint should be replaced with U+FFFD") | |
| test(() => { | |
| try { | |
| navigator.sendBeacon("resources/\uD800blank.txt"); | |
| assert_true(true); | |
| } catch (e) { | |
| assert_true(false); | |
| } | |
| }, "sendBeacon URL: unpaired surrogate codepoint should not make any exceptions.") | |
| test(() => { | |
| // This shouldn't throw an exception. | |
| window.navigator.registerProtocolHandler('web+myprotocol', "custom-scheme\uD800/url=%s", "title"); | |
| }, "RegisterProtocolHandler URL: unpaired surrogate codepoint should not make any exceptions.") | |
| test(() => { | |
| // This shouldn't throw an exception. | |
| window.navigator.unregisterProtocolHandler('web+myprotocol', "custom-scheme\uD800/url=%s"); | |
| }, "UnregisterProtocolHandler URL: unpaired surrogate codepoint should not make any exceptions.") | |
| test(() => { | |
| var w = window.open("about:blank#\uD800"); | |
| assert_equals(w.document.URL, 'about:blank#%EF%BF%BD'); | |
| assert_equals(w.document.documentURI, 'about:blank#%EF%BF%BD'); | |
| }, "Document URLs: unpaired surrogate codepoint should be replaced with U+FFFD") | |
| promise_test(t => { | |
| const sendString = 'hello\uD999'; | |
| const receiveString = 'hello\uFFFD'; | |
| return createDataChannelPair(t) | |
| .then(([channel1, channel2]) => { | |
| channel1.send(sendString); | |
| return awaitMessage(channel2) | |
| }).then(message => { | |
| assert_equals(typeof message, 'string', | |
| 'Expect message to be a string'); | |
| assert_equals(message, receiveString); | |
| }); | |
| }, "RTCDataChannel.send: unpaired surrogate codepoint should be replaced with U+FFFD.") | |
| </script> |