RTCTrackEvent-constructor.html (5007B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>RTCTrackEvent constructor</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script> 7 'use strict'; 8 9 // Test is based on the following editor draft: 10 // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html 11 12 /* 13 5.7. RTCTrackEvent 14 [Constructor(DOMString type, RTCTrackEventInit eventInitDict)] 15 interface RTCTrackEvent : Event { 16 readonly attribute RTCRtpReceiver receiver; 17 readonly attribute MediaStreamTrack track; 18 [SameObject] 19 readonly attribute FrozenArray<MediaStream> streams; 20 readonly attribute RTCRtpTransceiver transceiver; 21 }; 22 23 dictionary RTCTrackEventInit : EventInit { 24 required RTCRtpReceiver receiver; 25 required MediaStreamTrack track; 26 sequence<MediaStream> streams = []; 27 required RTCRtpTransceiver transceiver; 28 }; 29 */ 30 31 test(t => { 32 const pc = new RTCPeerConnection(); 33 const transceiver = pc.addTransceiver('audio'); 34 const { receiver } = transceiver; 35 const { track } = receiver; 36 37 const trackEvent = new RTCTrackEvent('track', { 38 receiver, track, transceiver 39 }); 40 41 assert_equals(trackEvent.receiver, receiver); 42 assert_equals(trackEvent.track, track); 43 assert_array_equals(trackEvent.streams, []); 44 assert_equals(trackEvent.streams, trackEvent.streams, '[SameObject]'); 45 assert_equals(trackEvent.transceiver, transceiver); 46 47 assert_equals(trackEvent.type, 'track'); 48 assert_false(trackEvent.bubbles); 49 assert_false(trackEvent.cancelable); 50 51 }, `new RTCTrackEvent() with valid receiver, track, transceiver should succeed`); 52 53 test(t => { 54 const pc = new RTCPeerConnection(); 55 const transceiver = pc.addTransceiver('audio'); 56 const { receiver } = transceiver; 57 const { track } = receiver; 58 59 const stream = new MediaStream([track]); 60 61 const trackEvent = new RTCTrackEvent('track', { 62 receiver, track, transceiver, 63 streams: [stream] 64 }); 65 66 assert_equals(trackEvent.receiver, receiver); 67 assert_equals(trackEvent.track, track); 68 assert_array_equals(trackEvent.streams, [stream]); 69 assert_equals(trackEvent.transceiver, transceiver); 70 71 }, `new RTCTrackEvent() with valid receiver, track, streams, transceiver should succeed`); 72 73 test(t => { 74 const pc = new RTCPeerConnection(); 75 const transceiver = pc.addTransceiver('audio'); 76 const { receiver } = transceiver; 77 const { track } = receiver; 78 79 const stream1 = new MediaStream([track]); 80 const stream2 = new MediaStream([track]); 81 82 const trackEvent = new RTCTrackEvent('track', { 83 receiver, track, transceiver, 84 streams: [stream1, stream2] 85 }); 86 87 assert_equals(trackEvent.receiver, receiver); 88 assert_equals(trackEvent.track, track); 89 assert_array_equals(trackEvent.streams, [stream1, stream2]); 90 assert_equals(trackEvent.transceiver, transceiver); 91 92 }, `new RTCTrackEvent() with valid receiver, track, multiple streams, transceiver should succeed`); 93 94 test(t => { 95 const pc = new RTCPeerConnection(); 96 const transceiver = pc.addTransceiver('audio'); 97 const receiver = pc.addTransceiver('audio').receiver; 98 const track = pc.addTransceiver('audio').receiver.track; 99 100 const stream = new MediaStream(); 101 102 const trackEvent = new RTCTrackEvent('track', { 103 receiver, track, transceiver, 104 streams: [stream] 105 }); 106 107 assert_equals(trackEvent.receiver, receiver); 108 assert_equals(trackEvent.track, track); 109 assert_array_equals(trackEvent.streams, [stream]); 110 assert_equals(trackEvent.transceiver, transceiver); 111 112 }, `new RTCTrackEvent() with unrelated receiver, track, streams, transceiver should succeed`); 113 114 test(t => { 115 const pc = new RTCPeerConnection(); 116 const transceiver = pc.addTransceiver('audio'); 117 const { receiver } = transceiver; 118 const { track } = receiver; 119 120 assert_throws_js(TypeError, () => 121 new RTCTrackEvent('track', { 122 receiver, track 123 })); 124 125 }, `new RTCTrackEvent() with no transceiver should throw TypeError`); 126 127 test(t => { 128 const pc = new RTCPeerConnection(); 129 const transceiver = pc.addTransceiver('audio'); 130 const { receiver } = transceiver; 131 132 assert_throws_js(TypeError, () => 133 new RTCTrackEvent('track', { 134 receiver, transceiver 135 })); 136 137 }, `new RTCTrackEvent() with no track should throw TypeError`); 138 139 test(t => { 140 const pc = new RTCPeerConnection(); 141 const transceiver = pc.addTransceiver('audio'); 142 const { receiver } = transceiver; 143 const { track } = receiver; 144 145 assert_throws_js(TypeError, () => 146 new RTCTrackEvent('track', { 147 track, transceiver 148 })); 149 150 }, `new RTCTrackEvent() with no receiver should throw TypeError`); 151 152 /* 153 Coverage Report 154 Interface tests are counted as 1 trivial test 155 156 Tested 1 157 Total 1 158 */ 159 </script>