<!doctype html>
<html>
 <head>
  <title>window.onerror - compile error in &lt;script src=...></title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
 </head>
 <body>
  <div id=log></div>
  <script>
    setup({allow_uncaught_exception:true});
    var t = async_test();
    var t_col = async_test(document.title+' (column)');
    var ran = false;
    var col_value;
    window.onerror = t.step_func(function(a, b, c, d){
        ran = true;
        col_value = d;
        assert_equals(typeof a, 'string', 'first arg');
        assert_equals(b, document.querySelector('script[src="support/syntax-error.js"]').src, 'second arg');
        assert_equals(typeof c, 'number', 'third arg');
    });
  </script>
  <script src="support/syntax-error.js"></script>
  <script>
    t.step(function(){
        assert_true(ran, 'ran');
        t.done();
    });
    t_col.step(function(){
        assert_equals(typeof col_value, 'number', 'fourth arg');
        t_col.done();
    });
  </script>
 </body>
</html>