<!DOCTYPE html>
<html>
<head>
    <title>mock-media-source</title>
    <script src="mock-media-source.js"></script>
    <script src="../video-test.js"></script>
    <script>
    var source;
    var sourceBuffer;
    var initSegment;

    if (window.internals)
        internals.initializeMockMediaSource();

    function runTest() {
        findMediaElement();

        source = new MediaSource();
        waitForEventOn(source, 'sourceopen', sourceOpen);
        run('video.src = URL.createObjectURL(source)');
    }

    function sourceOpen() {
        run('sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock")');

        waitForEventOn(sourceBuffer, 'updatestart');
        waitForEventOn(sourceBuffer, 'update');
        waitForEventOn(sourceBuffer, 'updateend', updateEnd);
        initSegment = makeAInit(100, [
            makeATrack(1, 'mock', TRACK_KIND.VIDEO),
        ]);
        run('sourceBuffer.appendBuffer(initSegment)');
        testExpected('sourceBuffer.updating', true);
    }
    
    function updateEnd() {
        testExpected('sourceBuffer.updating', false);
        testExpected('sourceBuffer.videoTracks.length', 1);
        testExpected('sourceBuffer.videoTracks[0].selected', true);
        testExpected('source.activeSourceBuffers.length', 1);
        endTest();
    }

    </script>
</head>
<body onload="runTest()">
    <video></video>
</body>
</html>
