<html>
<head>
    <title>media-source-change-source</title>
    <script src="../../../../media/media-source/media-source-loader.js"></script>
    <script src="../../../../media/video-test.js"></script>
    <script>
    window.addEventListener('load', event => {
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="bad-parameter"')`, false);
        consoleWrite('');
        consoleWrite('Test invalid number of required parameters:')
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.41"')`, false);
        consoleWrite('');
        consoleWrite('Test valid default optional parameters:')
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.41.08"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid number of optional parameters:')
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09"')`, false);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.01.00"')`, false);
        consoleWrite('');
        consoleWrite('Test valid required and optional parameters:')
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid codec type');
        testExpected(`MediaSource.isTypeSupported('vp10.00.41.08"')`, false);
        consoleWrite('');
        consoleWrite('Test invalid combination of matrixCoefficients and chromaSubsampling');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.41.08.01.01.01.00.00"')`, false);
        consoleWrite('');
        consoleWrite('Test valid profiles:');
        for (let profile of [0, 2])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.${profile.toString().padStart(2, '0')}.41.08"')`, true);
        consoleWrite('Test invalid profiles:');
        for (let profile of [1, 3, 4])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.${profile.toString().padStart(2, '0')}.41.08"')`, false);
        consoleWrite('');
        consoleWrite('Test valid levels:');
        for (let level of [10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 52, 60])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.${level.toString().padStart(2, '0')}.08"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid levels:');
        for (let level of [61, 62, 70])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.${level.toString().padStart(2, '0')}.08"')`, false);
        consoleWrite('');
        consoleWrite('Test valid bitDepths:');
        for (let bitDepth of [8, 10])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.41.${bitDepth.toString().padStart(2, '0')}"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid bitDepths:');
        for (let bitDepth of [12, 14])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.00.41.${bitDepth.toString().padStart(2, '0')}"')`, false);
        consoleWrite('');
        consoleWrite('Test valid chromaSubsampling:');
        for (let chromaSubsampling of [0, 1])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.${chromaSubsampling.toString().padStart(2, '0')}.09.16.09.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid chromaSubsampling:');
        for (let chromaSubsampling of [2, 3, 4])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.${chromaSubsampling.toString().padStart(2, '0')}.09.16.09.01"')`, false);
        consoleWrite('');
        consoleWrite('Test valid colorPrimaries:');
        for (let colorPrimaries of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.${colorPrimaries.toString().padStart(2, '0')}.16.09.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid colorPrimaries:');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.03.16.09.01"')`, false);
        consoleWrite('');
        consoleWrite('Test valid transferCharacteristics:');
        for (let transferCharacteristics of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.${transferCharacteristics.toString().padStart(2, '0')}.09.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid transferCharacteristics:');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.03.09.01"')`, false);
        consoleWrite('');
        consoleWrite('Test valid matrixCoefficients:');
        for (let matrixCoefficients of [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
            testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.${matrixCoefficients.toString().padStart(2, '0')}.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid matrixCoefficients:');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.03"')`, false);
        consoleWrite('');
        consoleWrite('Test valid videoFullRangeFlag:');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.01.00"')`, true);
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.01.01"')`, true);
        consoleWrite('');
        consoleWrite('Test invalid videoFullRangeFlag:');
        testExpected(`MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.01.02"')`, false);

		consoleWrite('');
		endTest();
	});
    </script>
</head>
