<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<html>
    <head>
        <title>MediaSource.isTypeSupported() test cases.</title>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="mediasource-util.js"></script>
    </head>
    <body>
        <div id="log"></div>
        <script>
          // Generate a distinct test for each type in types
          function test_type_support(types, expectation, description)
          {
              for (var i = 0; i < types.length; ++i) {
                  test(function()
                  {
                      assert_equals(MediaSource.isTypeSupported(types[i]),
                                    expectation, 'supported');
                  },  description + ' "' + types[i] + '"');
              }
          };

          test_type_support([
              'video',
              'video/',
              'video/webm',
              'video/webm;',
              'video/webm;codecs',
              'video/webm;codecs=',
              'video/webm;codecs="',
              'video/webm;codecs=""',
              'video/webm;codecs=","',
              '',
              null
          ], false, 'Test invalid MIME format');

          test_type_support([
              'xxx',
              'text/html',
              'image/jpeg'
          ], false, 'Test invalid MSE MIME media type');

          test_type_support([
              'audio/webm;codecs="vp8"',
              'audio/mp4;codecs="avc1.4d001e"',
          ], false, 'Test invalid mismatch between major type and codec ID');

          test_type_support([
              'audio/mp4;codecs="vorbis"',
              'audio/webm;codecs="mp4a.40.2"',
              'video/mp4;codecs="vp8"',
              'video/webm;codecs="mp4a.40.2"',
              'video/mp4;codecs="vorbis"',
          ], false, 'Test invalid mismatch between minor type and codec ID');

          test_type_support([
              'audio/mp4;codecs="mp4a"',
              'audio/mp4;codecs="mp4a.40"',
              'audio/mp4;codecs="mp4a.40."',
              'audio/mp4;codecs="mp4a.67.3"'
          ], false, 'Test invalid codec ID');

          test_type_support([
              'video/webm;codecs="vp8"',
              'video/webm;codecs="vorbis"',
              'video/webm;codecs="vp8,vorbis"',
              'video/webm;codecs="vorbis, vp8"',
              'audio/webm;codecs="vorbis"',
              'AUDIO/WEBM;CODECS="vorbis"',
          ], true, 'Test valid WebM type');

          test_type_support([
              'video/mp4;codecs="avc1.4d001e"', // H.264 Main Profile level 3.0
              'video/mp4;codecs="avc1.42001e"', // H.264 Baseline Profile level 3.0
              'audio/mp4;codecs="mp4a.40.2"',   // MPEG4 AAC-LC
              'audio/mp4;codecs="mp4a.40.5"',   // MPEG4 HE-AAC
              'audio/mp4;codecs="mp4a.67"',     // MPEG2 AAC-LC
              'video/mp4;codecs="mp4a.40.2"',
              'video/mp4;codecs="avc1.4d001e,mp4a.40.2"',
              'video/mp4;codecs="mp4a.40.2 , avc1.4d001e "',
              'video/mp4;codecs="avc1.4d001e,mp4a.40.5"',
          ], true, 'Test valid MP4 type');
        </script>
    </body>
</html>
