<!doctype html>
<meta charset=utf-8>
<title>RTCTrackEvent constructor</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
// Test is based on the following editor draft:
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
/*
5.7. RTCTrackEvent
[Constructor(DOMString type, RTCTrackEventInit eventInitDict)]
interface RTCTrackEvent : Event {
readonly attribute RTCRtpReceiver receiver;
readonly attribute MediaStreamTrack track;
[SameObject]
readonly attribute FrozenArray<MediaStream> streams;
readonly attribute RTCRtpTransceiver transceiver;
};
dictionary RTCTrackEventInit : EventInit {
required RTCRtpReceiver receiver;
required MediaStreamTrack track;
sequence<MediaStream> streams = [];
required RTCRtpTransceiver transceiver;
};
*/
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
const { track } = receiver;
const trackEvent = new RTCTrackEvent('track', {
receiver, track, transceiver
});
assert_equals(trackEvent.receiver, receiver);
assert_equals(trackEvent.track, track);
assert_array_equals(trackEvent.streams, []);
assert_equals(trackEvent.streams, trackEvent.streams, '[SameObject]');
assert_equals(trackEvent.transceiver, transceiver);
assert_equals(trackEvent.type, 'track');
assert_false(trackEvent.bubbles);
assert_false(trackEvent.cancelable);
}, `new RTCTrackEvent() with valid receiver, track, transceiver should succeed`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
const { track } = receiver;
const stream = new MediaStream([track]);
const trackEvent = new RTCTrackEvent('track', {
receiver, track, transceiver,
streams: [stream]
});
assert_equals(trackEvent.receiver, receiver);
assert_equals(trackEvent.track, track);
assert_array_equals(trackEvent.streams, [stream]);
assert_equals(trackEvent.transceiver, transceiver);
}, `new RTCTrackEvent() with valid receiver, track, streams, transceiver should succeed`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
const { track } = receiver;
const stream1 = new MediaStream([track]);
const stream2 = new MediaStream([track]);
const trackEvent = new RTCTrackEvent('track', {
receiver, track, transceiver,
streams: [stream1, stream2]
});
assert_equals(trackEvent.receiver, receiver);
assert_equals(trackEvent.track, track);
assert_array_equals(trackEvent.streams, [stream1, stream2]);
assert_equals(trackEvent.transceiver, transceiver);
}, `new RTCTrackEvent() with valid receiver, track, multiple streams, transceiver should succeed`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const receiver = pc.addTransceiver('audio').receiver;
const track = pc.addTransceiver('audio').receiver.track;
const stream = new MediaStream();
const trackEvent = new RTCTrackEvent('track', {
receiver, track, transceiver,
streams: [stream]
});
assert_equals(trackEvent.receiver, receiver);
assert_equals(trackEvent.track, track);
assert_array_equals(trackEvent.streams, [stream]);
assert_equals(trackEvent.transceiver, transceiver);
}, `new RTCTrackEvent() with unrelated receiver, track, streams, transceiver should succeed`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
const { track } = receiver;
assert_throws_js(TypeError, () =>
new RTCTrackEvent('track', {
receiver, track
}));
}, `new RTCTrackEvent() with no transceiver should throw TypeError`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
assert_throws_js(TypeError, () =>
new RTCTrackEvent('track', {
receiver, transceiver
}));
}, `new RTCTrackEvent() with no track should throw TypeError`);
test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
const { receiver } = transceiver;
const { track } = receiver;
assert_throws_js(TypeError, () =>
new RTCTrackEvent('track', {
track, transceiver
}));
}, `new RTCTrackEvent() with no receiver should throw TypeError`);
/*
Coverage Report
Interface tests are counted as 1 trivial test
Tested 1
Total 1
*/
</script>