<!doctype html>
<html>
 <head>
  <title>window.onerror: runtime scripterrors</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <!--

    https://html.spec.whatwg.org/multipage/#runtime-script-errors
    says what to do for uncaught runtime script errors, and just below
    describes what to do when onerror is a Function.

    -->
 </head>
 <body>

  <div id="log"></div>
  <script>
    setup({allow_uncaught_exception:true});
    var error_count = 0;
    window.onerror = function(msg, url, lineno) {
      ++error_count;
      test(function() {assert_equals(url, window.location.href)},
           "correct url passed to window.onerror");
      test(function() {assert_equals(lineno, 36)},
           "correct line number passed to window.onerror");
    };
  </script>
  <script>
  try {
    // This error is caught, so it should NOT trigger onerror.
    window.nonexistentproperty.oops();
  } catch (ex) {
  }
  // This error is NOT caught, so it should trigger onerror.
  window.nonexistentproperty.oops();
  </script>
  <script>
  test(function() {assert_equals(error_count, 1)},
       "correct number of calls to window.onerror");
  </script>
 </body>
</html>
