<!DOCTYPE html>
<meta charset="utf-8">
<title>Attributes are Nodes but should not be accepted outside of the `attributes` NamedNodeMap</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-core-changes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
"use strict";

test(() => {

  const attribute = document.createAttribute("newattribute");

  assert_true(attribute instanceof Node, "attribute instances are instances of Node");
  assert_true(Attr.prototype instanceof Node, "attribute instances are instances of Node");

}, "Attrs are subclasses of Nodes");

test(() => {

  const parent = document.createElement("p");

  const attribute = document.createAttribute("newattribute");
  assert_throws_dom("HierarchyRequestError", () => {
    parent.appendChild(attribute);
  });

}, "appendChild with an attribute as the child should fail");

test(() => {

  const parent = document.createElement("p");
  parent.appendChild(document.createElement("span"));

  const attribute = document.createAttribute("newattribute");
  assert_throws_dom("HierarchyRequestError", () => {
    parent.replaceChild(attribute, parent.firstChild);
  });

}, "replaceChild with an attribute as the child should fail");

test(() => {

  const parent = document.createElement("p");
  parent.appendChild(document.createElement("span"));

  const attribute = document.createAttribute("newattribute");
  assert_throws_dom("HierarchyRequestError", () => {
    parent.insertBefore(attribute, parent.firstChild);
  });

}, "insertBefore with an attribute as the child should fail");

</script>
