| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <link rel="stylesheet" href="../js/resources/js-test-style.css"> |
| <script src="../../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="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |