| 1 | import { copyWithStructuralSharing } from '@reduxjs/toolkit/query'
|
|---|
| 2 |
|
|---|
| 3 | test('equal object from JSON Object', () => {
|
|---|
| 4 | const json = JSON.stringify({
|
|---|
| 5 | a: { b: { c: { d: 1, e: '2', f: true }, g: false }, h: null },
|
|---|
| 6 | i: null,
|
|---|
| 7 | })
|
|---|
| 8 | const objA = JSON.parse(json)
|
|---|
| 9 | const objB = JSON.parse(json)
|
|---|
| 10 | expect(objA).toStrictEqual(objB)
|
|---|
| 11 | expect(objA).not.toBe(objB)
|
|---|
| 12 | const newCopy = copyWithStructuralSharing(objA, objB)
|
|---|
| 13 | expect(newCopy).toBe(objA)
|
|---|
| 14 | expect(newCopy).not.toBe(objB)
|
|---|
| 15 | expect(newCopy).toStrictEqual(objB)
|
|---|
| 16 | })
|
|---|
| 17 |
|
|---|
| 18 | test('equal object from JSON Object', () => {
|
|---|
| 19 | const json = JSON.stringify({
|
|---|
| 20 | a: { b: { c: { d: 1, e: '2', f: true }, g: false }, h: null },
|
|---|
| 21 | i: null,
|
|---|
| 22 | })
|
|---|
| 23 | const objA = JSON.parse(json)
|
|---|
| 24 | const objB = JSON.parse(json)
|
|---|
| 25 | objB.a.h = 4
|
|---|
| 26 | expect(objA).not.toStrictEqual(objB)
|
|---|
| 27 | expect(objA).not.toBe(objB)
|
|---|
| 28 | expect(objA.a.b).toStrictEqual(objB.a.b)
|
|---|
| 29 | expect(objA.a.b).not.toBe(objB.a.b)
|
|---|
| 30 |
|
|---|
| 31 | const newCopy = copyWithStructuralSharing(objA, objB)
|
|---|
| 32 | expect(newCopy).not.toBe(objA)
|
|---|
| 33 | expect(newCopy).not.toStrictEqual(objA)
|
|---|
| 34 | expect(newCopy).toStrictEqual(objB)
|
|---|
| 35 |
|
|---|
| 36 | expect(newCopy.a.b).toBe(objA.a.b)
|
|---|
| 37 | expect(newCopy.a.b).not.toBe(objB.a.b)
|
|---|
| 38 | expect(newCopy.a.b).toStrictEqual(objB.a.b)
|
|---|
| 39 | })
|
|---|
| 40 |
|
|---|
| 41 | test('equal object from JSON Array', () => {
|
|---|
| 42 | const json = JSON.stringify([
|
|---|
| 43 | 1,
|
|---|
| 44 | 'a',
|
|---|
| 45 | { 2: 'b' },
|
|---|
| 46 | { 3: { 4: 'c' }, d: null },
|
|---|
| 47 | null,
|
|---|
| 48 | 5,
|
|---|
| 49 | ])
|
|---|
| 50 | const objA = JSON.parse(json)
|
|---|
| 51 | const objB = JSON.parse(json)
|
|---|
| 52 |
|
|---|
| 53 | expect(objA).toStrictEqual(objB)
|
|---|
| 54 | expect(objA).not.toBe(objB)
|
|---|
| 55 | const newCopy = copyWithStructuralSharing(objA, objB)
|
|---|
| 56 | expect(newCopy).toBe(objA)
|
|---|
| 57 | expect(newCopy).not.toBe(objB)
|
|---|
| 58 | expect(newCopy).toStrictEqual(objB)
|
|---|
| 59 | })
|
|---|
| 60 |
|
|---|
| 61 | test('equal object from JSON Array', () => {
|
|---|
| 62 | const json = JSON.stringify([
|
|---|
| 63 | 1,
|
|---|
| 64 | 'a',
|
|---|
| 65 | { 2: 'b' },
|
|---|
| 66 | { 3: { 4: 'c' }, d: null },
|
|---|
| 67 | null,
|
|---|
| 68 | 5,
|
|---|
| 69 | ])
|
|---|
| 70 | const objA = JSON.parse(json)
|
|---|
| 71 | const objB = JSON.parse(json)
|
|---|
| 72 | objB[2][2] = 'x'
|
|---|
| 73 |
|
|---|
| 74 | expect(objA).not.toStrictEqual(objB)
|
|---|
| 75 | expect(objA).not.toBe(objB)
|
|---|
| 76 | const newCopy = copyWithStructuralSharing(objA, objB)
|
|---|
| 77 | expect(newCopy).not.toBe(objA)
|
|---|
| 78 | expect(newCopy).not.toBe(objB)
|
|---|
| 79 | expect(newCopy).toStrictEqual(objB)
|
|---|
| 80 |
|
|---|
| 81 | expect(newCopy[3]).toBe(objA[3])
|
|---|
| 82 | expect(newCopy[3]).not.toBe(objB[3])
|
|---|
| 83 | expect(newCopy[3]).toStrictEqual(objB[3])
|
|---|
| 84 |
|
|---|
| 85 | expect(newCopy[2]).not.toBe(objA[2])
|
|---|
| 86 | expect(newCopy[2]).not.toBe(objB[2])
|
|---|
| 87 | expect(newCopy[2]).toStrictEqual(objB[2])
|
|---|
| 88 | })
|
|---|