Reflect.setPrototypeOf.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. load("test-common.js");
  2. try {
  3. assert(Reflect.setPrototypeOf.length === 2);
  4. [null, undefined, "foo", 123, NaN, Infinity].forEach(value => {
  5. assertThrowsError(() => {
  6. Reflect.setPrototypeOf(value);
  7. }, {
  8. error: TypeError,
  9. message: "First argument of Reflect.setPrototypeOf() must be an object"
  10. });
  11. if (value === null)
  12. return;
  13. assertThrowsError(() => {
  14. Reflect.setPrototypeOf({}, value);
  15. }, {
  16. error: TypeError,
  17. message: "Prototype must be an object or null"
  18. });
  19. });
  20. assert(Reflect.setPrototypeOf({}, null) === true);
  21. assert(Reflect.setPrototypeOf({}, {}) === true);
  22. assert(Reflect.setPrototypeOf({}, Object.prototype) === true);
  23. assert(Reflect.setPrototypeOf({}, Array.prototype) === true);
  24. assert(Reflect.setPrototypeOf({}, String.prototype) === true);
  25. assert(Reflect.setPrototypeOf({}, Reflect.getPrototypeOf({})) === true);
  26. var o = {};
  27. var p = { foo: "bar" };
  28. assert(o.foo === undefined);
  29. assert(Reflect.setPrototypeOf(o, p) === true);
  30. assert(o.foo === "bar");
  31. Reflect.preventExtensions(o);
  32. assert(Reflect.setPrototypeOf(o, {}) === false);
  33. assert(Reflect.setPrototypeOf(o, p) === true);
  34. console.log("PASS");
  35. } catch (e) {
  36. console.log("FAIL: " + e);
  37. }