<!DOCTYPE html>
<html>
    <head>
        <title>Invalid MediaSource.endOfStream() parameter 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>
          mediasource_test(function(test, mediaElement, mediaSource)
          {
              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
              assert_equals(mediaSource.readyState, 'open');

              assert_throws(new TypeError(),
                  function() { mediaSource.endOfStream('garbage'); },
                  'endOfStream(\'garbage\') throws TypeError');

              assert_equals(mediaSource.readyState, 'open');
              test.done();
          }, 'Test MediaSource.endOfStream() with invalid non-empty error string.');

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
              assert_equals(mediaSource.readyState, 'open');

              assert_throws(new TypeError(),
                  function() { mediaSource.endOfStream(''); },
                  'endOfStream(\'\') throws TypeError');

              assert_equals(mediaSource.readyState, 'open');
              test.done();
          }, 'Test MediaSource.endOfStream() with invalid empty error string.');

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
              assert_equals(mediaSource.readyState, 'open');

              assert_throws(new TypeError(),
                  function() { mediaSource.endOfStream(null); },
                  'endOfStream(null) throws TypeError');

              assert_equals(mediaSource.readyState, 'open');
              test.done();
          }, 'Test MediaSource.endOfStream() with invalid null error parameter.');
        </script>
    </body>
</html>
