Reflect.get.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. test("length is 2", () => {
  2. expect(Reflect.get).toHaveLength(2);
  3. });
  4. describe("errors", () => {
  5. test("target must be an object", () => {
  6. [null, undefined, "foo", 123, NaN, Infinity].forEach(value => {
  7. expect(() => {
  8. Reflect.get(value);
  9. }).toThrowWithMessage(TypeError, `${value} is not an object`);
  10. });
  11. });
  12. });
  13. describe("normal behavior", () => {
  14. test("regular object", () => {
  15. expect(Reflect.get({})).toBeUndefined();
  16. expect(Reflect.get({ undefined: 1 })).toBe(1);
  17. expect(Reflect.get({ foo: 1 })).toBeUndefined();
  18. expect(Reflect.get({ foo: 1 }, "foo")).toBe(1);
  19. });
  20. test("array", () => {
  21. expect(Reflect.get([])).toBeUndefined();
  22. expect(Reflect.get([1, 2, 3])).toBeUndefined();
  23. expect(Reflect.get([1, 2, 3], "0")).toBe(1);
  24. expect(Reflect.get([1, 2, 3], 0)).toBe(1);
  25. expect(Reflect.get([1, 2, 3], 1)).toBe(2);
  26. expect(Reflect.get([1, 2, 3], 2)).toBe(3);
  27. expect(Reflect.get([1, 2, 3], 4)).toBeUndefined();
  28. });
  29. test("string object", () => {
  30. expect(Reflect.get(new String())).toBeUndefined();
  31. expect(Reflect.get(new String(), 0)).toBeUndefined();
  32. expect(Reflect.get(new String("foo"), "0")).toBe("f");
  33. expect(Reflect.get(new String("foo"), 0)).toBe("f");
  34. expect(Reflect.get(new String("foo"), 1)).toBe("o");
  35. expect(Reflect.get(new String("foo"), 2)).toBe("o");
  36. expect(Reflect.get(new String("foo"), 3)).toBeUndefined();
  37. });
  38. test("getter function", () => {
  39. const foo = {
  40. get prop() {
  41. this.getPropCalled = true;
  42. },
  43. };
  44. const bar = {};
  45. Object.setPrototypeOf(bar, foo);
  46. expect(foo.getPropCalled).toBeUndefined();
  47. expect(bar.getPropCalled).toBeUndefined();
  48. Reflect.get(bar, "prop");
  49. expect(foo.getPropCalled).toBeUndefined();
  50. expect(bar.getPropCalled).toBeTrue();
  51. Reflect.get(bar, "prop", foo);
  52. expect(foo.getPropCalled).toBeTrue();
  53. expect(bar.getPropCalled).toBeTrue();
  54. });
  55. test("native getter function", () => {
  56. const typedArray = new Uint8Array(3);
  57. expect(Reflect.get(Uint8Array.prototype, "length", typedArray)).toBe(3);
  58. });
  59. });