blob: 202230fea3380bcd0c72f1936d7c95331d967602 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
var stream;
var stream2;
var track;
var track2;
var sender;
var sender2;
var senderFromPc2
var receiver;
var transceiver;
description("Test basic behavior of RTCPeerConnection.add/removeTrack()");
if (window.testRunner)
testRunner.setUserMediaPermission(true);
else {
debug("This test can not be run without the testRunner");
finishJSTest();
}
var pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
var pc2 = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
navigator.mediaDevices.getUserMedia({ "video": true })
.then(function (s) {
stream = s;
track = stream.getTracks()[0];
debug("Test bad addTrack() arguments");
shouldThrow("pc.addTrack()");
shouldThrow("pc.addTrack(null)");
shouldThrow("pc.addTrack({})");
shouldThrow("pc.addTrack(track, null)");
shouldThrow("pc.addTrack(track, {})");
shouldThrow("pc.addTrack(track, stream, null)");
debug("");
debug("Test bad removeTrack() arguments");
shouldThrow("pc.removeTrack()");
shouldThrow("pc.removeTrack(null)");
shouldThrow("pc.removeTrack({})");
debug("");
shouldBe("pc.getSenders().length", "0");
shouldNotThrow("sender = pc.addTrack(track, stream)");
shouldBeType("sender", "RTCRtpSender");
shouldBe("sender.track", "track");
shouldBe("pc.getSenders().length", "1");
shouldBe("pc.getSenders()[0]", "sender");
shouldBe("pc.getReceivers().length", "1");
receiver = pc.getReceivers()[0];
shouldBeType("receiver.track", "MediaStreamTrack");
shouldBeTrue("receiver.track.muted");
shouldBe("receiver.track.kind", "sender.track.kind");
shouldBe("pc.getTransceivers().length", "1");
transceiver = pc.getTransceivers()[0];
shouldBeNull("transceiver.mid");
shouldBe("transceiver.sender", "sender");
shouldBe("transceiver.receiver", "receiver");
shouldBeFalse("transceiver.stopped");
debug("Try to add same track again");
shouldThrow("sender = pc.addTrack(track, stream)");
track2 = track.clone();
stream2 = stream.clone();
shouldNotThrow("sender2 = pc.addTrack(track2, stream, stream2)");
shouldBe("pc.getSenders().length", "2");
// Order in list returned by getSenders() is unspecified.
if (pc.getSenders()[0] == sender) {
shouldBe("pc.getSenders()[0]", "sender");
shouldBe("pc.getSenders()[1]", "sender2");
} else {
shouldBe("pc.getSenders()[0]", "sender2");
shouldBe("pc.getSenders()[1]", "sender1");
}
shouldNotThrow("pc.removeTrack(sender)");
debug("Sender is still in getSenders() list")
shouldBe("pc.getSenders().length", "2");
shouldThrow("pc.addTrack(null);");
shouldThrow("pc.addTrack(undefined);");
shouldThrow("pc.removeTrack(null);");
shouldThrow("pc.removeTrack(undefined);");
finishJSTest();
})
.catch(function (error) {
testFailed("Error caught in promise chain: " + error);
finishJSTest();
});
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>