<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharness-helpers.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="spec/resources/custom-elements-helpers.js"></script>
<body>
<script>
'use strict';

test_with_window((w) => {
  let doc = w.document;
  let e = doc.createElement('a-a');
  doc.body.appendChild(e);
  var misbehave = true;
  var invocations = [];
  class X extends w.HTMLElement {
    constructor() {
      if (misbehave) {
        misbehave = false;
        invocations.push('misbehaving');
        return new X();
      }
      super();
      invocations.push(this);
    }
  }
  w.customElements.define('a-a', X);
  assert_array_equals(invocations, ['misbehaving', e],
                      'returning the existing element should have succeeded');
}, 'HTMLElement constructor: poach but return upgrade candidate');

test_with_window((w) => {
  let doc = w.document;
  let e = doc.createElement('a-a');
  doc.body.appendChild(e);
  var misbehave = true;
  var invocations = [];
  var poacher;
  class X extends w.HTMLElement {
    constructor() {
      if (misbehave) {
        misbehave = false;
        poacher = new X();
      }
      try {
        super();
        invocations.push(this);
      } catch (e) {
        invocations.push(e);
      }
    }
  }
  w.customElements.define('a-a', X);
  assert_equals(invocations.length, 2,
                'the constructor should have been invoked once for upgrade ' +
                'and once for the recursive call to "new"');
  assert_equals(poacher, e,
                'the recursive "new" should steal the upgrade candidate');
  assert_equals(poacher, invocations[0],
                'the recursize "new" should happen first');
  assert_true(invocations[1] instanceof w.DOMException,
              'the super call should have thrown a DOMException');
  assert_equals(invocations[1].name, 'InvalidStateError',
                'the exception should be an InvalidStateError');
}, 'HTMLElement constructor: poach upgrade candidate');
</script>
