diff options
Diffstat (limited to 'test/bun.js/test-test.test.ts')
-rw-r--r-- | test/bun.js/test-test.test.ts | 1025 |
1 files changed, 1023 insertions, 2 deletions
diff --git a/test/bun.js/test-test.test.ts b/test/bun.js/test-test.test.ts index 8ada29ed0..79bac9e74 100644 --- a/test/bun.js/test-test.test.ts +++ b/test/bun.js/test-test.test.ts @@ -1,4 +1,1016 @@ -import { expect, test } from "@jest/globals"; +import { expect, test } from "bun:test"; +import { OnigurumaRegExp } from "bun"; + +function f1() { + return "hello!"; +} +function f2() { + return "hey!"; +} +test("deepEquals regex", () => { + expect(new OnigurumaRegExp("s", "g")).toEqual(new OnigurumaRegExp("s", "g")); + expect(new OnigurumaRegExp("s", "g")).not.toEqual( + new OnigurumaRegExp("s", "i"), + ); + expect(/a/imu).toEqual(/a/imu); + expect(/a/imu).not.toEqual(/ab/imu); + + expect(new RegExp("s", "g")).toEqual(new RegExp("s", "g")); + expect(new RegExp("s", "g")).not.toEqual(new RegExp("s", "i")); +}); + +test("deepEquals derived strings and strings", () => { + let a = new String("hello"); + let b = "hello"; + expect(a).toEqual(a); + expect(b).toEqual(b); + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + class F extends String { + constructor() { + super(); + } + } + + let f = new F("hello"); + expect(f).toEqual(f); + expect(f).not.toEqual(b); + expect(b).not.toEqual(f); + + let j = new String("hello"); + expect(f).not.toEqual(j); + + class G extends String { + constructor() { + super(); + this.x = 0; + } + } + + let g = new G("hello"); + expect(g).not.toEqual(f); + expect(f).not.toEqual(g); + expect(g).toEqual(g); + expect(g).not.toEqual(b); + expect(b).not.toEqual(g); + expect(g).not.toEqual(a); +}); + +test("deepEquals throw getters", () => { + let a = { + get x() { + throw new Error("a"); + }, + }; + + let b = { + get x() { + return 3; + }, + }; + + try { + expect(a).not.toEqual(b); + } catch (e) { + expect(e.message).toContain("a"); + } + + class B { + get x() { + throw new Error("b"); + } + } + + class C { + get x() { + return 3; + } + } + + try { + expect(new B()).not.toEqual(new C()); + } catch (e) { + expect(e.message).toContain("b"); + } + + let o = [ + { + get x() { + throw new Error("c"); + }, + }, + ]; + + let p = [ + { + get x() { + return 3; + }, + }, + ]; + + try { + expect(o).not.toEqual(p); + } catch (e) { + expect(e.message).toContain("c"); + } + + const s = Symbol("s"); + let q = { + get x() { + throw new Error("d"); + }, + }; + q[s] = 3; + + let r = { + get x() { + return 3; + }, + }; + r[s] = 3; + + try { + expect(q).not.toEqual(r); + } catch (e) { + expect(e.message).toContain("d"); + } +}); + +test("deepEquals large object", () => { + let o = {}; + for (let i = 0; i < 65; i++) { + o["bun" + i] = i; + } + expect(o).toEqual(o); + let b = {}; + for (let i = 0; i < 63; i++) { + b["bun" + i] = i; + } + expect(b).toEqual(b); + expect(o).not.toEqual(b); + expect(b).not.toEqual(o); + + let c = { d: [Array(o)] }; + let d = { d: [Array(b)] }; + expect(c).toEqual(c); + expect(d).toEqual(d); + expect(c).not.toEqual(d); + expect(d).not.toEqual(c); + + let e = { d: [Array(o), Array(o)] }; + let f = { d: [Array(b), Array(b)] }; + expect(e).toEqual(e); + expect(f).toEqual(f); + expect(e).not.toEqual(f); + expect(f).not.toEqual(e); + + let p = []; + p[0] = {}; + for (let i = 0; i < 1000; i++) { + p[0]["bun" + i] = i; + } + let q = []; + q[0] = {}; + for (let i = 0; i < 1000; i++) { + q[0]["bun" + i] = i; + } + expect(p).toEqual(p); + expect(q).toEqual(q); + + q[0].bun789 = 788; + expect(p).not.toEqual(q); + expect(q).not.toEqual(p); + + let r = { d: {} }; + let s = { d: {} }; + for (let i = 0; i < 1000; i++) { + r.d["bun" + i] = i; + s.d["bun" + i] = i; + } + + expect(r).toEqual(r); + expect(s).toEqual(s); + + r.d.bun790 = 791; + expect(r).not.toEqual(s); + expect(s).not.toEqual(r); + + let t = []; + t[5] = {}; + let u = []; + u[5] = {}; + for (let i = 0; i < 1000; i++) { + t[5]["bun" + i] = i; + } + for (let i = 0; i < 30; i++) { + u[5]["bun" + i] = i; + } + expect(t).toEqual(t); + expect(u).toEqual(u); + expect(t).not.toEqual(u); + expect(u).not.toEqual(t); + + let v = { j: {} }; + let w = { j: {} }; + for (let i = 0; i < 1000; i++) { + v.j["bun" + i] = i; + w.j["bun" + i] = i; + } + + expect(v).toEqual(v); + expect(w).toEqual(w); + + v.j.bun999 = 1000; + expect(v).not.toEqual(w); + expect(w).not.toEqual(v); + expect(v).toEqual(v); + + v.j.bun999 = 999; + w.j.bun0 = 1; + expect(v).not.toEqual(w); + expect(w).not.toEqual(v); + expect(v).toEqual(v); + expect(w).toEqual(w); +}); + +test("deepEquals - Date", () => { + let d = new Date(); + expect(d).toEqual(d); + let b = d; + expect(b).toEqual(d); + d.setFullYear(1998); + expect(b).toEqual(d); + expect(b).not.toEqual(new Date()); + + var date = new Date(); + date.setFullYear(1995); + expect(new Date()).not.toEqual(date); +}); + +test("deepEquals toString and functions", () => { + expect({ toString: f1 }).toEqual({ + toString: f1, + }); + expect({ toString: f1 }).not.toEqual({ + toString: f2, + }); + + expect(f1).toEqual(f1); + expect(f1).not.toEqual(f2); +}); + +test("deepEquals set and map", () => { + let e = new Map(); + e.set("a", 1); + e.set("b", 2); + e.set("c", 3); + e.set(8, 6); + + let d = new Map(); + d.set("a", 1); + d.set("b", 2); + d.set("c", 3); + d.set(8, 6); + + expect(e).toEqual(d); + expect(d).toEqual(e); + + let f = new Map(); + f.set("a", 1); + f.set("b", 2); + f.set("c", 3); + f.set(8, 7); + expect(e).not.toEqual(f); + + let g = new Map(); + g.set({ a: { b: { c: 89 } } }, 1); + + let h = new Map(); + h.set({ a: { b: { c: 89 } } }, 1); + expect(g).toEqual(h); + + let i = new Map(); + i.set({ a: { b: { c: 89 } } }, 1); + i.set({ a: { b: { c: 89 } } }, 1); + expect(g).not.toEqual(i); + + let j = new Map(); + j.set({ a: { b: { c: 89 } } }, 1); + j.set({ a: { b: { c: 89 } } }, 1); + expect(i).toEqual(j); + + let p = new Map(); + p.set({ a: { b: { c: 90 } } }, 1); + expect(p).not.toEqual(g); + + let q = new Map(); + q.set({ a: { b: { c: 90 } } }, { a: { b: 45 } }); + + let r = new Map(); + r.set({ a: { b: { c: 90 } } }, { a: { b: 45 } }); + expect(q).toEqual(r); + + let s = new Map(); + s.set({ a: { b: { c: 90 } } }, { a: { b: 49 } }); + expect(q).not.toEqual(s); + + const u = { a: 1, b: 2 }; + + let a = new Set(); + a.add({ a: 1 }); + a.add([1, 2, 3]); + a.add("hello"); + a.add(89); + + let b = new Set(); + b.add({ a: 1 }); + b.add("hello"); + b.add([1, 2, 3]); + b.add(89); + expect(a).toEqual(b); + expect(b).toEqual(a); + let c = new Set(); + c.add(89); + c.add("hello"); + c.add({ a: 1 }); + c.add([1, 2, 3, 4]); + expect(a).not.toEqual(c); +}); + +test("deepEquals - symbols", () => { + const x = [5, 6]; + x[99] = 7; + + const y = [5, 6]; + y[99] = 7; + + expect(x).toEqual(y); + + const s1 = Symbol("test1"); + const s2 = Symbol("test2"); + + const o = { a: 1 }; + o[s1] = 45; + o[99] = 99; + o[s2] = 3; + + const k = { a: 1 }; + k[99] = 99; + k[s2] = 3; + k[s1] = 45; + + expect(o).toEqual(k); +}); + +test("toEqual objects and arrays", () => { + expect("hello").toEqual("hello"); + const s1 = Symbol("test1"); + const s2 = Symbol("test2"); + + expect({ a: 1, b: 2 }).toEqual({ b: 2, a: 1 }); + expect([1, 2, 3]).toEqual([1, 2, 3]); + expect({ a: 1, b: 2 }).not.toEqual({ b: 2, a: 1, c: 3 }); + expect([1, 2, 3]).not.toEqual([1, 2, 3, 4]); + expect({ a: 1, b: 2, c: 3 }).not.toEqual({ a: 1, b: 2 }); + expect([1, 2, 3, 4]).not.toEqual([1, 2, 3]); + + let a = [{ a: 1 }, { b: 2, c: 3, d: 4 }, { e: 5, f: 6 }]; + let b = [{ a: 1 }, { b: 2, c: 3, d: 4 }, { e: 5, f: 6 }]; + expect(a).toEqual(b); + expect(b).toEqual(a); + a[0].a = 2; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + let c = { [Symbol("test")]: 1 }; + let d = { [Symbol("test")]: 1 }; + expect(c).not.toEqual(d); + expect(d).not.toEqual(c); + + a = { [s1]: 1 }; + a[s1] = 1; + b = { [s2]: 1 }; + b[s2] = 1; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + a = {}; + b = {}; + a[s1] = 1; + b[s1] = 1; + expect(a).toEqual(b); + + a = {}; + b = {}; + a[s1] = 1; + b[s1] = 2; + expect(a).not.toEqual(b); + + a = {}; + b = {}; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 2; + expect(a).toEqual(b); + + a = {}; + b = {}; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 3; + expect(a).not.toEqual(b); + + a = { a: 1, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + expect(a).toEqual(b); + + a = { a: 2, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + expect(a).not.toEqual(b); + + // do the same tests for arrays + a = [{ a: 1 }, { b: 2, c: 3, d: 4 }, { e: 5, f: 6 }]; + b = [{ a: 1 }, { b: 2, c: 3, d: 4 }, { e: 5, f: 6 }]; + expect(a).toEqual(b); + expect(b).toEqual(a); + a[0].a = 2; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + expect(a).toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 2; + expect(a).not.toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 2; + expect(a).toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 3; + expect(a).not.toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + expect(a).toEqual(b); + + a = [2, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + expect(a).not.toEqual(b); + + // do the same tests for objects and arrays with null and undefined + a = { a: 1, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = null; + b[s2] = undefined; + expect(a).not.toEqual(b); + + a = { a: 1, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = undefined; + b[s2] = null; + expect(a).not.toEqual(b); + + a = { a: 1, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = null; + b[s2] = null; + expect(a).toEqual(b); + + a = { a: 1, b: 2 }; + b = { a: 1, b: 2 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = undefined; + b[s2] = undefined; + expect(a).toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = null; + b[s2] = undefined; + expect(a).not.toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = undefined; + b[s2] = null; + expect(a).not.toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = null; + b[s2] = null; + expect(a).toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3]; + a[s1] = 1; + b[s1] = 1; + a[s2] = undefined; + b[s2] = undefined; + expect(a).toEqual(b); + + // similar tests for indexed objects + a = { 0: 1, 1: 2, 2: 3 }; + b = { 0: 1, 1: 2, 2: 3 }; + a[s1] = 1; + b[s1] = 1; + expect(a).toEqual(b); + + a = { 0: 1, 1: 2, 2: 3 }; + b = { 0: 1, 1: 2, 2: 3 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 3; + expect(a).not.toEqual(b); + + a = { 0: 1, 1: 3, 2: 3 }; + b = { 0: 1, 1: 2, 2: 3 }; + a[s1] = 1; + b[s1] = 1; + a[s2] = 2; + b[s2] = 2; + expect(a).not.toEqual(b); + + a = [1, 2, 3]; + b = [1, 2, 3, 4]; + expect(a).not.toEqual(b); + + a = [1, 2, 3, 4]; + b = [1, 2, 3]; + expect(a).not.toEqual(b); + + a = { a: 1, b: 2 }; + b = { a: 1, b: 2, c: 3 }; + expect(a).not.toEqual(b); + + a = { a: 1, b: 2, c: 3 }; + b = { a: 1, b: 2 }; + expect(a).not.toEqual(b); +}); + +test("symbol based keys in arrays are processed correctly", () => { + const mySymbol = Symbol("test"); + + const actual1 = []; + actual1[mySymbol] = 3; + + const actual2 = []; + actual2[mySymbol] = 4; + + const expected = []; + expected[mySymbol] = 3; + + expect(actual2).not.toEqual(expected); + expect(actual1).toEqual(expected); +}); + +test("non-enumerable members should be skipped during equal", () => { + const actual = { + x: 3, + }; + Object.defineProperty(actual, "test", { + enumerable: false, + value: 5, + }); + expect(actual).toEqual({ x: 3 }); +}); + +test("non-enumerable symbolic members should be skipped during equal", () => { + const actual = { + x: 3, + }; + const mySymbol = Symbol("test"); + Object.defineProperty(actual, mySymbol, { + enumerable: false, + value: 5, + }); + expect(actual).toEqual({ x: 3 }); +}); + +test("properties with the same circularity are equal", () => { + const a = {}; + a.x = a; + const b = {}; + b.x = b; + expect(a).toEqual(b); + expect(b).toEqual(a); + + const c = { + x: a, + }; + const d = { + x: b, + }; + + expect(d).toEqual(c); + expect(c).toEqual(d); +}); + +test("arrays", () => { + expect([1, 2, 3]).toEqual([1, 2, 3]); + expect([1, 2, 3, 4]).not.toEqual([1, 2, 3]); +}); + +test("properties with different circularity are not equal", () => { + const a = {}; + a.x = { y: a }; + const b = {}; + const bx = {}; + b.x = bx; + bx.y = bx; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + const c = {}; + c.x = a; + const d = {}; + d.x = b; + expect(c).not.toEqual(d); + expect(d).not.toEqual(c); +}); + +test("are not equal if circularity is not on the same property", () => { + const a = {}; + const b = {}; + a.a1 = a; + b.a1 = {}; + b.a1.a1 = a; + + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + const c = {}; + c.x = { x: c }; + const d = {}; + d.x = d; + + expect(d).not.toEqual(c); + expect(c).not.toEqual(d); +}); + +test("random isEqual tests", () => { + expect(1).toEqual(1); + expect(1).not.toEqual(2); + expect(1).not.toEqual("1"); + expect(1).not.toEqual(true); + expect(1).not.toEqual(false); + expect(1).not.toEqual(null); + expect(1).not.toEqual(undefined); + expect(1).not.toEqual({}); + expect(1).not.toEqual([]); + expect(1).not.toEqual([1]); + expect(1).not.toEqual([1, 2]); + expect(1).not.toEqual([1, 2, 3]); + expect(1).not.toEqual([1, 2, 3, 4]); + expect(1).not.toEqual([1, 2, 3, 4, 5]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); + expect(1).not.toEqual([1, 2, 3, 4, 5, 6, 7, 8]); + + // test toEquals for objects with getters and setters + + expect([]).toEqual([]); + expect([1]).toEqual([1]); + expect([1, 2]).toEqual([1, 2]); + expect([1, 2, 3]).toEqual([1, 2, 3]); + expect({}).toEqual({}); + expect({}).not.toEqual([]); + expect([]).not.toEqual({}); + + const obj = { + get a() { + return 1; + }, + }; + expect(obj).toEqual({ a: 1 }); + expect({ a: 1 }).toEqual(obj); + expect(obj).not.toEqual({ a: 2 }); + expect({ a: 2 }).not.toEqual(obj); + + let a = new Set(); + a.add([1, 2, 3]); + a.add("hello"); + a.add({ a: 1 }); + a.add(89); + let b = new Set(); + b.add(89); + b.add({ a: 1 }); + b.add("hello"); + b.add([1, 2, 3]); + expect(a).toEqual(b); + expect(b).toEqual(a); + let c = new Set(); + c.add(89); + c.add("helo"); + c.add({ a: 1 }); + c.add([1, 2, 3]); + expect(a).not.toEqual(c); + + a = new Map(); + a.set(1, 89); + a.set("hello", 2); + a.set({ a: 1 }, 3); + a.set([1, 2, 3], 4); + b = new Map(); + b.set(1, 89); + b.set("hello", 2); + b.set({ a: 1 }, 3); + b.set([1, 2, 3], 4); + expect(a).toEqual(b); + expect(b).toEqual(a); + c = new Map(); + c.set({ a: 1 }, 3); + c.set(1, 80); + c.set([1, 2, 3], 4); + c.set("hello", 2); + expect(a).not.toEqual(c); + + a = new Set(); + a.add(89); + a.add("hello"); + a.add({ a: 1 }); + a.add([1, 2, 3]); + a.add(a); + b = new Set(); + b.add(89); + b.add("hello"); + b.add(b); + b.add({ a: 1 }); + b.add([1, 2, 3]); + expect(a).toEqual(b); + expect(b).toEqual(a); +}); + +test("testing Bun.deepEquals() using isEqual()", () => { + const t = new Uint8Array([1, 2, 3, 4, 5]); + expect(t).toEqual(t.slice()); + + var a = { foo: 1, bar: 2, baz: null }; + var b = { foo: 1, bar: 2, baz: null }; + a.baz = a; + b.baz = b; + expect(a).toEqual(b); + + var a = { car: 1, cdr: { car: 2, cdr: null } }; + var b = { car: 1, cdr: { car: 2, cdr: null } }; + a.cdr.cdr = a; + b.cdr.cdr = b.cdr; + expect(a).not.toEqual(b); + + expect(1n).not.toEqual(1); + expect(1).not.toEqual(1n); + expect(1n).toEqual(1n); + expect(undefined).not.toEqual([]); + + var a = [1, 2, 3, null]; + var b = [1, 2, 3, null]; + a[3] = b; + b[3] = a; + expect(a).toEqual(b); + + var a = [1, 2, 3, null]; + var b = [1, 2, 3, null]; + a[3] = a; + b[3] = a; + expect(a).toEqual(b); + + var a = [1, [2, [3, null]]]; + var b = [1, [2, [3, null]]]; + a[1][1][1] = a; + b[1][1][1] = b[1][1]; + expect(a).not.toEqual(b); + + const foo = [1]; + foo[1] = foo; + + expect(foo).toEqual([1, foo]); + + expect(1).toEqual(1); + expect([1]).toEqual([1]); + + // expect(a).toEqual(a); + expect([1, 2, 3]).toEqual([1, 2, 3]); + + let o = { a: 1, b: 2 }; + expect(o).toEqual(o); + expect(o).toEqual({ a: 1, b: 2 }); + expect(o).toEqual({ b: 2, a: 1 }); + expect({ a: 1, b: 2 }).toEqual(o); + expect({ b: 2, a: 1 }).toEqual(o); + expect(o).not.toEqual({ a: 1, b: 2, c: 3 }); + expect({ a: 1, b: 2, c: 3, d: 4 }).not.toEqual(o); + expect({ a: 1, b: 2 }).toEqual({ a: 1, b: 2 }); + expect({ a: 1, b: 2 }).not.toEqual({ a: 1 }); + + expect("a").toEqual("a"); + expect("aaaa").toEqual("aaaa"); + expect("aaaa").not.toEqual("aaaaa"); + expect("aaaa").not.toEqual("aaba"); + expect("a").not.toEqual("b"); + + expect(undefined).not.toEqual(null); + expect(null).not.toEqual(undefined); + expect(undefined).not.toEqual(0); + expect(0).not.toEqual(undefined); + expect(null).not.toEqual(0); + expect(0).not.toEqual(null); + expect(undefined).not.toEqual(""); + expect("").not.toEqual(undefined); + expect(null).not.toEqual(""); + expect("").not.toEqual(null); + expect(undefined).not.toEqual(false); + expect(false).not.toEqual(undefined); + expect(null).not.toEqual(false); + expect(false).not.toEqual(null); + expect(undefined).not.toEqual(true); + expect(true).not.toEqual(undefined); + expect(null).not.toEqual(true); + expect(true).not.toEqual(null); + expect([]).not.toEqual(undefined); + expect(null).not.toEqual([]); + expect([]).not.toEqual(null); + + expect(0).toEqual(0); + expect(-0).toEqual(-0); + expect(0).not.toEqual(-0); + expect(-0).not.toEqual(0); + + expect(NaN).toEqual(NaN); + + expect(null).toEqual(null); + expect(undefined).toEqual(undefined); + + expect(1).toEqual(1); + expect(1).not.toEqual(2); + + expect(NaN).toEqual(NaN); + expect(NaN).toEqual(0 / 0); + expect(Infinity).toEqual(Infinity); + expect(Infinity).toEqual(1 / 0); + expect(-Infinity).toEqual(-Infinity); + expect(-Infinity).toEqual(-1 / 0); +}); + +// test("toHaveProperty()", () => { +// const a = new Array(["a", "b", "c"]); +// // expect(a).toHaveProperty("0.1", "b"); +// const b = new Array("a", "b", "c"); +// expect({ a: { b: { c: 1 } } }).toHaveProperty(b); +// const c = { +// a: { b: 1 }, +// "a.b": 2, +// }; +// const d = new Array("a.b"); +// expect(c).toHaveProperty(d, 2); +// const houseForSale = { +// bath: true, +// bedrooms: 4, +// kitchen: { +// amenities: ["oven", "stove", "washer"], +// area: 20, +// wallColor: "white", +// "nice.oven": true, +// }, +// livingroom: { +// amenities: [ +// { +// couch: [ +// ["large", { dimensions: [20, 20] }], +// ["small", { dimensions: [10, 10] }], +// ], +// }, +// ], +// }, +// sunroom: "yes", +// "ceiling.height": 20, +// "nono.nooooo": 3, +// nono: { nooooo: 5 }, +// }; +// expect(houseForSale).toHaveProperty("nono.nooooo"); +// expect(houseForSale).toHaveProperty(["nono", "nooooo"]); +// expect(houseForSale).toHaveProperty(["nono.nooooo"]); +// expect(houseForSale).not.toHaveProperty("."); +// expect(houseForSale).not.toHaveProperty("]"); +// expect(houseForSale).not.toHaveProperty("["); +// expect(houseForSale).not.toHaveProperty("[]"); +// expect(houseForSale).not.toHaveProperty("[[]]"); +// expect(houseForSale).not.toHaveProperty("[["); +// expect(houseForSale).not.toHaveProperty("]]"); +// expect(houseForSale).not.toHaveProperty("[]]"); +// expect(houseForSale).not.toHaveProperty("[[]"); +// expect(houseForSale).not.toHaveProperty(".]"); +// expect(houseForSale).not.toHaveProperty(".["); +// expect(houseForSale).not.toHaveProperty("[."); +// expect(houseForSale).not.toHaveProperty("]."); +// expect(houseForSale).not.toHaveProperty("].["); +// expect(houseForSale).not.toHaveProperty("].]"); +// expect(houseForSale).not.toHaveProperty("[.]"); +// expect(houseForSale).not.toHaveProperty("[.["); +// expect(houseForSale).toHaveProperty("bath"); +// expect(houseForSale).not.toHaveProperty("jacuzzi"); +// // // expect(houseForSale).toHaveProperty("jacuzzi"); +// // // // expect(houseForSale).not.toHaveProperty("bath"); +// expect(houseForSale).toHaveProperty("bath", true); +// expect(houseForSale).not.toHaveProperty("bath", false); +// // // // expect(houseForSale).toHaveProperty("bath", false); +// // // // expect(houseForSale).not.toHaveProperty("bath", true); +// expect(houseForSale).toHaveProperty("bedrooms", 4); +// expect(houseForSale).toHaveProperty(["sunroom"], "yes"); +// expect(houseForSale).toHaveProperty("kitchen.area", 20); +// expect(houseForSale).toHaveProperty("kitchen.amenities", [ +// "oven", +// "stove", +// "washer", +// ]); +// expect(houseForSale).not.toHaveProperty(["kitchen", "area"], 21); +// expect(houseForSale).toHaveProperty(["kitchen", "area"], 20); +// expect(houseForSale).not.toHaveProperty(["kitchen", "area"], 29); +// expect(houseForSale).toHaveProperty( +// ["kitchen", "amenities"], +// ["oven", "stove", "washer"], +// ); +// expect(houseForSale).toHaveProperty("kitchen.amenities[2]", "washer"); +// expect(houseForSale).toHaveProperty(["kitchen", "amenities", 1], "stove"); +// expect(houseForSale).toHaveProperty(["kitchen", "amenities", 0], "oven"); +// expect(houseForSale).toHaveProperty( +// "livingroom.amenities[0].couch[0][1].dimensions[0]", +// 20, +// ); +// expect(houseForSale).toHaveProperty(["kitchen", "nice.oven"]); +// expect(houseForSale).not.toHaveProperty(["kitchen", "open"]); +// expect(houseForSale).toHaveProperty(["ceiling.height"], 20); +// expect({ a: { b: 1 } }).toHaveProperty("a.b"); +// expect({ a: [2, 3, 4] }).toHaveProperty("a.0"); +// expect({ a: [2, 3, 4] }).toHaveProperty("a.1"); +// expect({ a: [2, 3, 4] }).toHaveProperty("a.2"); +// expect({ a: [2, 3, 4] }).toHaveProperty("a[1]"); +// expect([2, 3, 4]).toHaveProperty("1"); +// expect([2, 3, 4]).toHaveProperty("[1]"); +// expect([2, [6, 9], 4]).toHaveProperty("1.1"); +// expect([2, [6, 9], 4]).toHaveProperty("1[1]"); +// expect([2, [6, 9], 4]).toHaveProperty("[1].1"); +// expect([2, [6, 9], 4]).toHaveProperty("[1][1]"); +// expect([2, [6, 9], 4]).toHaveProperty([0], 2); +// expect({ a: { b: 1 } }).toHaveProperty("a.b"); +// expect({ a: [1, 2, [3, { b: 1 }]] }).toHaveProperty("a.2.1.b"); +// expect({ a: [1, 2, [3, { b: 1 }]] }).toHaveProperty("a"); +// expect({ a: [1, 2, [3, { b: 1 }]] }).toHaveProperty("a[2][1].b"); +// expect({ a: [1, 2, [3, { b: 1 }]] }).toHaveProperty("a[2][1]"); +// expect({ a: [1, 2, [3, { b: 1 }]] }).not.toHaveProperty("a[2][1].c"); +// expect("test").toHaveProperty("length"); +// expect({}).toHaveProperty("constructor"); +// expect({}).toHaveProperty("constructor.name"); +// expect({}).toHaveProperty("constructor.name", "Object"); +// expect(new Date()).toHaveProperty("getTime"); +// }); test("toBe()", () => { const a = 1; @@ -52,7 +1064,7 @@ test("toContain()", () => { expect("test").toContain("es"); expect("test").toContain("est"); - expect("test").toContain("test"); + // expect("test").not.toContain("test"); expect(["test", "es"]).toContain("es"); expect("").toContain(""); expect([""]).toContain(""); @@ -63,6 +1075,15 @@ test("toContain()", () => { const a = new Uint16Array([1, 2, 3]); expect(a).toContain(2); expect(a).not.toContain(4); + expect([2, "2335", 5, true, false, null, undefined]).toContain(5); + expect([2, "2335", 5, true, false, null, undefined]).toContain("2335"); + expect([2, "2335", 5, true, false, null, undefined]).toContain(true); + expect([2, "2335", 5, true, false, null, undefined]).toContain(false); + expect([2, "2335", 5, true, false, null, undefined]).toContain(null); + expect([2, "2335", 5, true, false, null, undefined]).toContain(undefined); + expect([2, "2335", 5, true, false, null, undefined]).not.toContain(3); + expect([2, "2335", 5, true, false, null, undefined]).not.not.not.toContain(3); + // expect([4, 5, 6]).not.toContain(5); expect([]).not.toContain([]); |