1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
<!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>
|