124 lines
4.8 KiB
HTML
124 lines
4.8 KiB
HTML
<!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>
|