<!DOCTYPE html>
<title>Custom Elements: document.createElementNS should support custom elements</title>
<link rel="help" content="https://dom.spec.whatwg.org/#concept-create-element">
<link rel="help" content="https://dom.spec.whatwg.org/#internal-createelementns-steps">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
test(() => {
  class MyElement extends HTMLElement {};

  customElements.define('my-autonomous', MyElement);
  let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:my-autonomous');
  assert_true(element instanceof MyElement);
  assert_equals(element.prefix, 'p');
}, 'autonomous: document.createElementNS should create custom elements with prefixes.');

test(() => {
  class MyElement2 extends HTMLElement {};

  customElements.define('my-autonomous2', MyElement2);
  let element = document.createElementNS('urn:example', 'my-autonomous2');
  assert_false(element instanceof MyElement2);
}, 'autonomous: document.createElementNS should check namespaces.');

test(() => {
  const xhtmlNS = 'http://www.w3.org/1999/xhtml';
  assert_false(document.createElementNS(xhtmlNS, 'x-foo') instanceof HTMLUnknownElement);
  assert_false(document.createElementNS(xhtmlNS, 'x-foo', {}) instanceof HTMLUnknownElement);
  assert_false((new Document()).createElementNS(xhtmlNS, 'x-foo') instanceof HTMLUnknownElement);
  assert_false((new Document()).createElementNS(xhtmlNS, 'x-foo', {}) instanceof HTMLUnknownElement);
}, 'autonomous: document.createElementNS should not create HTMLUnknownElement for a valid custom element name');

test(() => {
  class MyElement3 extends HTMLElement {};
  customElements.define('my-autonomous3', MyElement3);

  const instance = document.createElementNS('http://www.w3.org/1999/xhtml', 'my-autonomous3', undefined);
  assert_true(instance instanceof MyElement3);
}, 'autonomous: document.createElementNS with undefined options value should be upgraded.');

test(() => {
  class MyBuiltinElement extends HTMLElement {};

  customElements.define('my-builtin', MyBuiltinElement, { extends: 'address' });
  let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:address', { is: 'my-builtin'});
  assert_true(element instanceof MyBuiltinElement);
  assert_equals(element.prefix, 'p');
  assert_false(element.hasAttribute('is'));
}, 'builtin: document.createElementNS should create custom elements with prefixes.');

test(() => {
  class MyBuiltinElement2 extends HTMLElement {};

  customElements.define('my-builtin2', MyBuiltinElement2, { extends: 'address'});
  let element = document.createElementNS('urn:example', 'address', { is: 'my-builtin2' });
  assert_false(element instanceof MyBuiltinElement2);
  assert_false(element.hasAttribute('is'));
}, 'builtin: document.createElementNS should check namespaces.');

test(() => {
    class SuperP extends HTMLParagraphElement {}
    customElements.define("super-p", SuperP, { extends: "p" });

    const superP = document.createElementNS("http://www.w3.org/1999/xhtml", "p", { is: "super-p" });
    assert_true(superP instanceof HTMLParagraphElement);
    assert_true(superP instanceof SuperP);
    assert_equals(superP.localName, "p");

    const notSuperP = document.createElementNS("http://www.w3.org/1999/xhtml", "p", "super-p");
    assert_true(notSuperP instanceof HTMLParagraphElement);
    assert_false(notSuperP instanceof SuperP);
    assert_equals(notSuperP.localName, "p");
}, "document.createElementNS()'s third argument is to be ignored when it's a string");
</script>
</body>
