blob: de20bdb825e82838e594f9a1bd95abf9f70b323d [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="./resources/getUserMedia-helper.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Tests MediaStream.");
var undefined;
var stream;
var newStream;
var nAudio;
var nVideo;
var idArray = new Array();
function checkIdAttribute(id) {
if (id.length != 36)
return false;
for (var i = 0; i < id.length; i++) {
charCode = id.charCodeAt(i);
if (charCode == 0x21
|| (charCode >= 0x23 && charCode <= 0x27)
|| (charCode >= 0x2A && charCode <= 0x2B)
|| (charCode >= 0x2D && charCode <= 0x2E)
|| (charCode >= 0x30 && charCode <= 0x39)
|| (charCode >= 0x41 && charCode <= 0x5A)
|| (charCode >= 0x5E && charCode <= 0x7E))
continue;
return false;
}
for (var i = 0; i < idArray.length; i++) {
if (id === idArray[i])
return false;
}
idArray.push(id);
return true;
}
function gotStream(s) {
localStream = s;
testPassed('Got local stream.');
shouldBe('localStream.getAudioTracks().length', '1');
shouldBe('localStream.getVideoTracks().length', '1');
shouldBeTrue("typeof MediaStream === 'function'");
shouldBeTrue('checkIdAttribute(localStream.id)');
testConstructor(localStream);
}
function testConstructor(s) {
stream = s;
shouldThrow('new MediaStream(document)');
shouldThrow('new MediaStream([document])');
shouldThrow('new MediaStream([stream.getAudioTracks()[0], document])');
shouldThrow('new MediaStream([null])');
shouldThrow('new MediaStream([undefined])');
shouldThrow('new MediaStream(null)');
shouldThrow('new MediaStream(undefined)');
verifyStream("new MediaStream()", 0, 0);
verifyStream("new MediaStream([])", 0, 0);
verifyStream("new MediaStream(stream)", s.getAudioTracks().length, s.getVideoTracks().length);
verifyStream("new MediaStream([stream.getAudioTracks()[0]])", 1, 0);
verifyStream("new MediaStream([stream.getVideoTracks()[0]])", 0, 1);
verifyStream("new MediaStream([stream.getAudioTracks()[0], stream.getVideoTracks()[0]])", 1, 1);
verifyStream("new MediaStream([stream.getVideoTracks()[0], stream.getAudioTracks()[0], stream.getVideoTracks()[0]])", 1, 1);
finishJSTest();
}
function verifyStream(script, numAudioTracks, numVideoTracks) {
debug("<br>*** testing \"" + script + "\"");
newStream = eval(script);
nAudio = numAudioTracks;
nVideo = numVideoTracks;
testPassed('Stream constructed');
shouldBeNonNull(newStream);
shouldBeDefined(newStream);
shouldBeEqualToString("newStream.constructor.toString()", "function MediaStream() {\n [native code]\n}");
shouldBe('newStream.getAudioTracks().length', 'nAudio');
shouldBe('newStream.getVideoTracks().length', 'nVideo');
shouldBeTrue('checkIdAttribute(newStream.id)');
}
getUserMedia("allow", {video:true, audio:true}, gotStream);
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>