<!doctype html>
<meta charset="utf-8">
<title>Legacy callback interface objects</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
<link rel="help" href="https://heycam.github.io/webidl/#legacy-callback-interface-object">

<script>
test(() => {
  assert_equals(typeof NodeFilter, "function");
}, "Must be a function according to typeof");

test(() => {
  assert_true(Object.getPrototypeOf(NodeFilter) === Function.prototype);
}, "Must have the correct [[Prototype]]");

test(() => {
  const propDesc = Object.getOwnPropertyDescriptor(window, "NodeFilter");
  assert_true(propDesc.writable, "writable");
  assert_false(propDesc.enumerable, "enumerable");
  assert_true(propDesc.configurable, "configurable");
}, "Must have the correct property descriptor");

test(() => {
  assert_throws_js(TypeError, () => NodeFilter(), "call");
  assert_throws_js(TypeError, () => new NodeFilter(), "construct");
}, "Must throw a TypeError when called or constructed")

test(() => {
  assert_false(NodeFilter.hasOwnProperty("prototype"));
}, "Must not have a .prototype property");

test(() => {
  assert_true(NodeFilter.hasOwnProperty("name"));
  assert_equals(NodeFilter.name, "NodeFilter");

  const propDesc = Object.getOwnPropertyDescriptor(NodeFilter, "name");
  assert_false(propDesc.writable, "writable");
  assert_false(propDesc.enumerable, "enumerable");
  assert_true(propDesc.configurable, "configurable");
}, "Must have an own name property equal to the interface name and with the correct descriptors");

test(() => {
  assert_true(NodeFilter.hasOwnProperty("length"));
  assert_equals(NodeFilter.length, 0);

  const propDesc = Object.getOwnPropertyDescriptor(NodeFilter, "length");
  assert_false(propDesc.writable, "writable");
  assert_false(propDesc.enumerable, "enumerable");
  assert_true(propDesc.configurable, "configurable");
}, "Must have an own length property with value zero and the correct descriptors");

test(() => {
  // The JS spec (OrdinaryHasInstance) bails out early for non-objects
  // Historically we overrode [[HasInstance]] to throw anyway, but this was removed:
  // https://github.com/heycam/webidl/pull/356
  assert_false(5 instanceof NodeFilter, "5");

  // OrdinaryHasInstance throws a TypeError if the right-hand-side doesn't have a .prototype object,
  // which is the case for callback interfaces.
  assert_throws_js(TypeError, () => {
    (function () { }) instanceof NodeFilter;
  });
  assert_throws_js(TypeError, () => {
    ({ }) instanceof NodeFilter;
  });
}, "instanceof must throw but only when we don't bail out early");
</script>
