blob: bd7e18470e0013b09f20ecae788cefa44b27743a [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 audioTrack;
var videoTrack;
var transceiver;
var expected;
description("Test basic behavior of RTCPeerConnection.addTransceiver");
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'}]});
navigator.mediaDevices.getUserMedia({ "audio": true, "video": true })
.then(function (s) {
stream = s;
audioTrack = stream.getAudioTracks()[0];
videoTrack = stream.getVideoTracks()[0];
shouldBe("pc.getTransceivers().length", "0");
debug("");
debug("*** Test arguments");
debug("*** 'trackOrKind' argument is mandatory");
shouldThrow("pc.addTransceiver()");
shouldThrow("pc.addTransceiver({})");
debug("*** Bad type as first argument");
shouldThrow("pc.addTransceiver(null)");
shouldThrow("pc.addTransceiver(null, {})");
shouldThrow("pc.addTransceiver(stream)");
debug("*** Bad track kind");
shouldThrow("pc.addTransceiver('foo')");
debug("*** Bad direction value");
shouldThrow('pc.addTransceiver("audio", {"direction": "foo"})');
debug("");
function checkTranscevier(expectedArg) {
expected = expectedArg;
shouldBe("pc.getTransceivers().length", expected.transceiverCount);
shouldBeTrue("pc.getTransceivers().includes(transceiver)");
shouldBe("transceiver.direction", expected.direction);
shouldBeNull("transceiver.mid");
shouldBeFalse("transceiver.stopped");
debug("*** Check sender");
shouldBeType("transceiver.sender", "RTCRtpSender");
shouldBe("transceiver.sender.track", expected.senderTrack);
debug("*** Check receiver");
shouldBeType("transceiver.receiver", "RTCRtpReceiver");
shouldBeType("transceiver.receiver.track", "MediaStreamTrack");
shouldBe("transceiver.receiver.track.kind", expected.receiverTrackType);
debug("");
}
shouldNotThrow('transceiver = pc.addTransceiver("audio")');
checkTranscevier({
"transceiverCount": "1",
"direction": "'sendrecv'",
"senderTrack": "null",
"receiverTrackType": "'audio'"
});
shouldNotThrow('transceiver = pc.addTransceiver("video")');
checkTranscevier({
"transceiverCount": "2",
"direction": "'sendrecv'",
"senderTrack": "null",
"receiverTrackType": "'video'"
});
shouldNotThrow('transceiver = pc.addTransceiver(audioTrack)');
checkTranscevier({
"transceiverCount": "3",
"direction": "'sendrecv'",
"senderTrack": "audioTrack",
"receiverTrackType": "'audio'"
});
shouldNotThrow('transceiver = pc.addTransceiver(videoTrack)');
checkTranscevier({
"transceiverCount": "4",
"direction": "'sendrecv'",
"senderTrack": "videoTrack",
"receiverTrackType": "'video'"
});
["sendrecv", "recvonly", "sendonly", "inactive"].forEach(function (direction, i) {
shouldNotThrow(`transceiver = pc.addTransceiver("audio", {"direction": "${direction}"})`);
checkTranscevier({
"transceiverCount": String(5 + i),
"direction": `'${direction}'`,
"senderTrack": "null",
"receiverTrackType": "'audio'"
});
});
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>