mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Co-authored-by: DonIsaac <22823424+DonIsaac@users.noreply.github.com> Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import vm from "node:vm";
|
|
|
|
describe.each([true, false])("Bun.deepEquals(a, b, strict: %p)", strict => {
|
|
const deepEquals = (a: unknown, b: unknown) => Bun.deepEquals(a, b, strict);
|
|
it.each([
|
|
[1, 1],
|
|
[true, true],
|
|
[undefined, undefined],
|
|
[null, null],
|
|
["foo", "foo"],
|
|
[{}, {}],
|
|
[{ a: 1 }, { a: 1 }],
|
|
[new Map(), new Map()],
|
|
[new Set(), new Set()],
|
|
[Symbol.for("foo"), Symbol.for("foo")],
|
|
[NaN, NaN],
|
|
])("Bun.deepEquals(%p, %p) === true, regardless of strict modee", (a, b) => {
|
|
expect(Bun.deepEquals(a, b, true)).toBe(true);
|
|
expect(Bun.deepEquals(a, b, false)).toBe(true);
|
|
});
|
|
|
|
it.each([
|
|
[0, 1],
|
|
[-0, +0], //
|
|
[{ a: 1 }, { a: 2 }],
|
|
["foo", "bar"],
|
|
])("Bun.deepEquals(%p, %p) !== true, regardless of strict modee", (a, b) => {
|
|
expect(Bun.deepEquals(a, b, true)).toBe(false);
|
|
expect(Bun.deepEquals(a, b, false)).toBe(false);
|
|
});
|
|
|
|
// https://github.com/nodejs/node/issues/10258
|
|
it("fake dates are not equal", () => {
|
|
function FakeDate() {}
|
|
FakeDate.prototype = Date.prototype;
|
|
const a = new Date("2016");
|
|
const b = new FakeDate();
|
|
expect(deepEquals(a, b)).toBe(false);
|
|
expect(deepEquals(b, a)).toBe(false);
|
|
});
|
|
|
|
it("fake maps are not equal", () => {
|
|
function FakeMap() {}
|
|
FakeMap.prototype = Map.prototype;
|
|
const a = new Map();
|
|
const b = new FakeMap();
|
|
expect(deepEquals(a, b)).toBe(false);
|
|
expect(deepEquals(b, a)).toBe(false);
|
|
});
|
|
|
|
// we may change this in the future
|
|
it("functions that are not reference-equal are never equal", () => {
|
|
function foo() {}
|
|
function bar() {}
|
|
function baz(a) {}
|
|
expect(deepEquals(foo, foo)).toBe(true);
|
|
expect(deepEquals(foo, bar)).toBe(false);
|
|
expect(deepEquals(foo, baz)).toBe(false);
|
|
});
|
|
|
|
describe("global object", () => {
|
|
let contexts: [vm.Context, vm.Context];
|
|
|
|
beforeEach(() => {
|
|
contexts = [vm.createContext(), vm.createContext()];
|
|
});
|
|
afterEach(() => {});
|
|
|
|
// TODO: re-enable when https://github.com/oven-sh/bun/issues/17080 is resolved
|
|
it.skip("main global object is not equal to vm global objects", () => {
|
|
const [ctx] = contexts;
|
|
expect(deepEquals(global, ctx)).toBe(false);
|
|
|
|
ctx.mainGlobal = global;
|
|
const areEqual = vm.runInContext("Bun.deepEquals(globalThis, mainGlobal)", ctx);
|
|
expect(areEqual).toBe(false);
|
|
});
|
|
});
|
|
});
|