blob: 7b4e28afdd27aa09663229f9d4ea256e24adb074 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<link rel="stylesheet" href="../js/resources/js-test-style.css">
<script src="../js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Tests webkitMediaStream.");
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 error() {
testFailed('Stream generation failed.');
finishJSTest();
}
function getUserMedia(dictionary, callback) {
try {
navigator.webkitGetUserMedia(dictionary, callback, error);
} catch (e) {
testFailed('webkitGetUserMedia threw exception :' + e);
finishJSTest();
}
}
function gotStream(s) {
localStream = s;
testPassed('Got local stream.');
shouldBe('localStream.getAudioTracks().length', '1');
shouldBe('localStream.getVideoTracks().length', '1');
shouldBeTrue("typeof webkitMediaStream === 'function'");
shouldBeTrue('checkIdAttribute(localStream.id)');
testConstructor(localStream);
}
function testConstructor(s) {
stream = s;
shouldThrow('new webkitMediaStream(document)');
shouldThrow('new webkitMediaStream([document])');
shouldThrow('new webkitMediaStream([stream.getAudioTracks()[0], document])');
shouldThrow('new webkitMediaStream([null])');
shouldThrow('new webkitMediaStream([undefined])');
shouldThrow('new webkitMediaStream(null)');
shouldThrow('new webkitMediaStream(undefined)');
verifyStream(new webkitMediaStream(), 0, 0);
verifyStream(new webkitMediaStream([]), 0, 0);
verifyStream(new webkitMediaStream(s), s.getAudioTracks().length, s.getVideoTracks().length);
verifyStream(new webkitMediaStream([s.getAudioTracks()[0]]), 1, 0);
verifyStream(new webkitMediaStream([s.getVideoTracks()[0]]), 0, 1);
verifyStream(new webkitMediaStream([s.getAudioTracks()[0], s.getVideoTracks()[0]]), 1, 1);
verifyStream(new webkitMediaStream([s.getVideoTracks()[0], s.getAudioTracks()[0], s.getVideoTracks()[0]]), 1, 1);
s.onended = function () {
verifyStream(new webkitMediaStream([s.getAudioTracks()[0]]), 0, 0);
verifyStream(new webkitMediaStream([s.getVideoTracks()[0]]), 0, 0);
verifyStream(new webkitMediaStream([s.getAudioTracks()[0], s.getVideoTracks()[0]]), 0, 0);
verifyStream(new webkitMediaStream(s), 0, 0);
finishJSTest();
};
s.stop();
}
function verifyStream(s, numAudioTracks, numVideoTracks) {
newStream = s;
nAudio = numAudioTracks;
nVideo = numVideoTracks;
testPassed('Stream constructed');
shouldBeNonNull(newStream);
shouldBeDefined(newStream);
shouldBe("newStream.constructor.name", "'MediaStream'");
shouldBe('newStream.getAudioTracks().length', 'nAudio');
shouldBe('newStream.getVideoTracks().length', 'nVideo');
shouldBeTrue('checkIdAttribute(newStream.id)');
}
getUserMedia({video:true, audio:true}, gotStream);
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>