<!doctype html>
<meta charset="utf-8">
<title>CSSOM - Symbol.toStringTag value of CSS namespace object</title>
<link rel="help" href="https://heycam.github.io/webidl/#es-namespaces">
<link rel="help" href="https://drafts.csswg.org/cssom/#namespacedef-css">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
"use strict";

test(() => {
  assert_own_property(CSS, Symbol.toStringTag);

  const propDesc = Object.getOwnPropertyDescriptor(CSS, Symbol.toStringTag);
  assert_equals(propDesc.value, "CSS", "value");
  assert_equals(propDesc.writable, false, "writable");
  assert_equals(propDesc.enumerable, false, "enumerable");
  assert_equals(propDesc.configurable, true, "configurable");
}, "@@toStringTag exists on the namespace object with the appropriate descriptor");

test(() => {
  assert_equals(CSS.toString(), "[object CSS]");
  assert_equals(Object.prototype.toString.call(CSS), "[object CSS]");
}, "Object.prototype.toString applied to the namespace object");

test(t => {
  assert_own_property(CSS, Symbol.toStringTag, "Precondition: @@toStringTag on the namespace object");
  t.add_cleanup(() => {
    Object.defineProperty(CSS, Symbol.toStringTag, { value: "CSS" });
  });

  Object.defineProperty(CSS, Symbol.toStringTag, { value: "Test" });
  assert_equals(CSS.toString(), "[object Test]");
  assert_equals(Object.prototype.toString.call(CSS), "[object Test]");
}, "Object.prototype.toString applied after modifying the namespace object's @@toStringTag");

test(t => {
  assert_own_property(CSS, Symbol.toStringTag, "Precondition: @@toStringTag on the namespace object");
  t.add_cleanup(() => {
    Object.defineProperty(CSS, Symbol.toStringTag, { value: "CSS" });
  });

  assert_true(delete CSS[Symbol.toStringTag]);
  assert_equals(CSS.toString(), "[object Object]");
  assert_equals(Object.prototype.toString.call(CSS), "[object Object]");
}, "Object.prototype.toString applied after deleting @@toStringTag");
</script>
