<!DOCTYPE html>
<meta charset=utf-8>
<title>script beforescriptexecute/afterscriptexecute events</title>
<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
<link rel=help href="https://html.spec.whatwg.org/multipage/#the-script-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
  var t1 = async_test("'beforescriptexecute'/'afterscriptexecute' events have been fired"),
      t2 = async_test("default prevented 'beforescriptexecute' event aborts script execution"),
      a = false,
      b = false;

  var before = function(e) {
    b = true;
    test(function(){
      assert_true(e.isTrusted);
      assert_true(e.bubbles);
      assert_true(e.cancelable);
    }, "'beforescriptexecute' event is trusted, bubbles and is cancelable");
  };

  var after = function(e) {
    a = true;
    test(function(){
      assert_true(e.isTrusted);
      assert_true(e.bubbles);
      assert_false(e.cancelable);
    }, "'afterscriptexecute' event is trusted, bubbles and isn't cancelable");
  };

  var prevent_default = function(e) {
    t2.step(function() {
      e.preventDefault();
      assert_true(e.defaultPrevented);
    });
  };

  document.body.onload = function() {
    t1.step(function() {
      assert_true(a && b);
    });
    t1.done();
    t2.done();
  };
</script>
<script onbeforescriptexecute=before(event) onafterscriptexecute=after(event)>
  document.querySelector("script");
</script>
<script onbeforescriptexecute=prevent_default(event)>
  t2.step(function() {
    assert_unreached("script execution not aborted by default prevented 'beforescriptexecute' event");
  });
</script>
