101 lines
3.8 KiB
HTML
101 lines
3.8 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/promise-utils.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
var stream;
|
|
var audioTrack;
|
|
var audioTrack2;
|
|
var videoTrack;
|
|
var sender;
|
|
var offer;
|
|
|
|
description("Test basic behavior of RTCRtpSender.replaceTrack()");
|
|
|
|
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];
|
|
|
|
audioTrack2 = audioTrack.clone();
|
|
audioTrack3 = audioTrack.clone();
|
|
|
|
shouldBe("pc.getSenders().length", "0");
|
|
|
|
shouldNotThrow("sender = pc.addTrack(audioTrack, stream)");
|
|
shouldBeType("sender", "RTCRtpSender");
|
|
shouldBe("sender.track", "audioTrack");
|
|
|
|
promiseShouldReject("sender.replaceTrack()")
|
|
.then(function () {
|
|
return promiseShouldReject("sender.replaceTrack(null)");
|
|
})
|
|
.then(function () {
|
|
return promiseShouldReject("sender.replaceTrack({})");
|
|
})
|
|
.then(function () {
|
|
debug("Test mismatching track kind");
|
|
return promiseShouldReject("sender.replaceTrack(videoTrack)");
|
|
})
|
|
.then(function () {
|
|
return promiseShouldResolve("sender.replaceTrack(audioTrack2)");
|
|
})
|
|
.then(function () {
|
|
testPassed("Track successfully replaced");
|
|
shouldBe("sender.track", "audioTrack2");
|
|
|
|
debug("Sender should still use old track (audioTrack) id in negotiation.");
|
|
return pc.createOffer();
|
|
})
|
|
.then(function (o) {
|
|
offer = o;
|
|
testPassed("offer created");
|
|
shouldNotBe("offer.sdp.indexOf(audioTrack.id)", "-1");
|
|
shouldBe("offer.sdp.indexOf(audioTrack2.id)", "-1");
|
|
|
|
debug("Stop sender, and try replacing the track");
|
|
pc.removeTrack(sender);
|
|
return promiseShouldReject("sender.replaceTrack(audioTrack2)");
|
|
})
|
|
.then(function () {
|
|
debug("Create a new sender");
|
|
shouldNotThrow("sender = pc.addTrack(audioTrack2, stream)");
|
|
debug("Close pc and try replacing the track");
|
|
pc.close();
|
|
return promiseShouldReject("sender.replaceTrack(audioTrack3)");
|
|
})
|
|
.then(function () {
|
|
debug("End of promise chain");
|
|
finishJSTest();
|
|
})
|
|
.catch(function (error) {
|
|
testFailed("Error in promise chain: " + error);
|
|
finishJSTest();
|
|
});
|
|
})
|
|
.catch(function (error) {
|
|
testFailed("getUserMedia error: " + error);
|
|
finishJSTest();
|
|
});
|
|
|
|
window.jsTestIsAsync = true;
|
|
window.successfullyParsed = true;
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|