Revision d0d62244432d329aa22e9278d3e83184301c3e7f authored by Chris Nardi on 07 April 2018, 01:36:26 UTC, committed by Xidorn Quan on 07 April 2018, 02:05:46 UTC
See https://github.com/w3c/csswg-drafts/issues/2509#issuecomment-379152590 for the change to target9. Also remove the extra whitespace in target8 and target1 which causes these tests to fail in Chrome and Firefox.

Also remove testcase.propertyName from each test's name as this doesn't exist and just outputs undefined.
1 parent 6e68c44
Raw File
mediasource-seekable.html
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="mediasource-util.js"></script>
<script>
    mediasource_test(function(test, mediaElement, mediaSource)
    {
        mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
        mediaElement.addEventListener('ended', test.step_func_done(function () {}));

        var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);

        assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');
        test.done();
    }, 'Get seekable time ranges when the sourcebuffer is empty.');

    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
    {
        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
        test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration');
        sourceBuffer.appendBuffer(initSegment);
        test.waitForExpectedEvents(function()
        {
            assert_equals(mediaElement.duration, segmentInfo.duration);
            assertSeekableEquals(mediaElement, '{ [0.000, ' + segmentInfo.duration.toFixed(3) + ') }', 'mediaElement.seekable');
            test.done();
        });
    }, 'Get seekable time ranges after init segment received.');

    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
    {
        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
        test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration after initsegment');
        test.expectEvent(sourceBuffer, 'update');
        test.expectEvent(sourceBuffer, 'updateend');
        sourceBuffer.appendBuffer(initSegment);
        test.waitForExpectedEvents(function()
        {
            assert_false(sourceBuffer.updating, "updating attribute is false");
            test.expectEvent(mediaElement, 'durationchange', 'mediaElement got infinity duration');
            mediaSource.duration = Infinity;
            test.waitForExpectedEvents(function()
            {
                assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');

                // Append a segment from the middle of the stream to make sure that seekable does not use buffered.start(0) or duration as first or last value
                var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[2]);
                test.expectEvent(sourceBuffer, 'update');
                test.expectEvent(sourceBuffer, 'updateend');
                sourceBuffer.appendBuffer(midSegment);
                test.waitForExpectedEvents(function()
                {
                    assert_equals(mediaElement.seekable.length, 1, 'mediaElement.seekable.length');
                    assert_equals(mediaElement.buffered.length, 1, 'mediaElement.buffered.length');
                    assert_not_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0));
                    assert_equals(mediaElement.seekable.start(0), 0);
                    assert_not_equals(mediaElement.seekable.end(0), mediaElement.duration);
                    assert_not_equals(mediaElement.seekable.end(0), mediaElement.buffered.start(0));
                    assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0));
                    test.done();
                });
            });
        });
    }, 'Get seekable time ranges on an infinite stream.');
</script>
back to top