<!DOCTYPE html>
<meta charset="utf-8">
<title>Location.prototype objects don't have own "toString" and "valueOf" properties</title>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
"use strict";

test(t => {
  assert_not_own_property(Location.prototype, "toString");
  t.add_cleanup(() => { delete Location.prototype.toString; });

  let val;
  Object.defineProperty(Location.prototype, "toString", {
    get: () => val,
    set: newVal => { val = newVal; },
    enumerable: false,
    configurable: true,
  });

  Location.prototype.toString = 2;
  assert_equals(Location.prototype.toString, 2);
}, "'toString' accessor property is defined");

test(t => {
  assert_not_own_property(Location.prototype, "toString");
  t.add_cleanup(() => { delete Location.prototype.toString; });

  Location.prototype.toString = 4;
  assert_equals(Location.prototype.toString, 4);
}, "'toString' data property is created via [[Set]]");

test(t => {
  assert_not_own_property(Location.prototype, "valueOf");
  t.add_cleanup(() => { delete Location.prototype.valueOf; });

  Object.defineProperty(Location.prototype, "valueOf", {
    get: () => 6,
    enumerable: true,
    configurable: true,
  });

  assert_equals(Location.prototype.valueOf, 6);
}, "'valueOf' accessor property is defined");

test(t => {
  assert_not_own_property(Location.prototype, "valueOf");
  t.add_cleanup(() => { delete Location.prototype.valueOf; });

  Location.prototype.valueOf = 8;
  assert_equals(Object.getOwnPropertyDescriptor(Location.prototype, "valueOf").value, 8);
}, "'valueOf' data property is created via [[Set]]");
</script>
