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 140 141 142 143 144 145 146 147 148
|
<!doctype html>
<meta charset="utf-8">
<!--
4.8.2 RTCPeerConnectionIceEvent
The icecandidate event of the RTCPeerConnection uses the RTCPeerConnectionIceEvent interface.
-->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
/*
RTCPeerConnectionIceEvent
[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict)]
interface RTCPeerConnectionIceEvent : Event {
readonly attribute RTCIceCandidate? candidate;
readonly attribute DOMString? url;
};
*/
test(() => {
assert_throws(new TypeError(), () => {
new RTCPeerConnectionIceEvent();
});
}, "RTCPeerConnectionIceEvent with no arguments throws TypeError");
test(() => {
const event = new RTCPeerConnectionIceEvent("type");
/*
candidate of type RTCIceCandidate, readonly, nullable
url of type DOMString, readonly, nullable
*/
assert_equals(event.candidate, null);
assert_equals(event.url, null);
/*
Firing an RTCPeerConnectionIceEvent event named e with an RTCIceCandidate
candidate means that an event with the name e, which does not bubble
(except where otherwise stated) and is not cancelable
(except where otherwise stated),
*/
assert_false(event.bubbles);
assert_false(event.cancelable);
}, "RTCPeerConnectionIceEvent with no eventInitDict (default)");
test(() => {
const event = new RTCPeerConnectionIceEvent("type", {});
/*
candidate of type RTCIceCandidate, readonly, nullable
url of type DOMString, readonly, nullable
*/
assert_equals(event.candidate, null);
assert_equals(event.url, null);
/*
Firing an RTCPeerConnectionIceEvent event named e with an RTCIceCandidate
candidate means that an event with the name e, which does not bubble
(except where otherwise stated) and is not cancelable
(except where otherwise stated),
*/
assert_false(event.bubbles);
assert_false(event.cancelable);
}, "RTCPeerConnectionIceEvent with empty object as eventInitDict (default)");
test(() => {
const event = new RTCPeerConnectionIceEvent("type", {
candidate: null
});
assert_equals(event.candidate, null);
}, "RTCPeerConnectionIceEvent.candidate is null when constructed with { candidate: null }");
test(() => {
const event = new RTCPeerConnectionIceEvent("type", {
candidate: undefined
});
assert_equals(event.candidate, null);
}, "RTCPeerConnectionIceEvent.candidate is null when constructed with { candidate: undefined }");
/*
4.8.1 RTCIceCandidate Interface
The RTCIceCandidate() constructor takes a dictionary argument, candidateInitDict,
whose content is used to initialize the new RTCIceCandidate object. When run, if
both the sdpMid and sdpMLineIndex dictionary members are null, throw a TypeError.
*/
const candidate = "";
const sdpMid = "sdpMid";
const sdpMLineIndex = 1;
const ufrag = "";
const url = "foo.bar";
test(() => {
const iceCandidate = new RTCIceCandidate({ candidate, sdpMid, sdpMLineIndex, ufrag });
const event = new RTCPeerConnectionIceEvent("type", {
candidate: iceCandidate,
url,
});
assert_equals(event.candidate, iceCandidate);
assert_false(event.bubbles);
assert_false(event.cancelable);
}, "RTCPeerConnectionIceEvent with RTCIceCandidate");
test(() => {
const plain = { candidate, sdpMid, sdpMLineIndex, ufrag };
assert_throws(new TypeError(), () => new RTCPeerConnectionIceEvent("type", { candidate: plain }));
}, "RTCPeerConnectionIceEvent with non RTCIceCandidate object throws");
/*
This will remain commented out until https://github.com/w3c/webrtc-pc/issues/1232
is resolved.
test(() => {
// When firing an RTCPeerConnectionIceEvent event that contains a RTCIceCandidate
// object, it must include values for both sdpMid and sdpMLineIndex.
assert_throws(new TypeError(), () => {
new RTCPeerConnectionIceEvent("type", {
candidate: new RTCIceCandidate({ candidate, sdpMid, ufrag })
});
});
assert_throws(new TypeError(), () => {
new RTCPeerConnectionIceEvent("type", {
candidate: new RTCIceCandidate({ candidate, sdpMLineIndex, ufrag })
});
});
}, "RTCIceCandidate must include values for both sdpMid and sdpMLineIndex");
*/
test(() => {
const event = new RTCPeerConnectionIceEvent("type", {
candidate: null,
bubbles: true,
cancelable: true,
});
assert_true(event.bubbles);
assert_true(event.cancelable);
}, "RTCPeerConnectionIceEvent bubbles and cancelable");
</script>
|