From 52aef92ed88076a407263a7766c3b270c1802ce8 Mon Sep 17 00:00:00 2001 From: Dunqing Date: Fri, 30 Jun 2023 00:12:58 +0800 Subject: [PATCH] fix(core): DataView comparison does not work in `toStrictEqual` --- packages/expect/src/jest-utils.ts | 13 +++++++++---- test/core/test/jest-expect.test.ts | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/packages/expect/src/jest-utils.ts b/packages/expect/src/jest-utils.ts index 1237d4fbfaa0..ce73d598aafd 100644 --- a/packages/expect/src/jest-utils.ts +++ b/packages/expect/src/jest-utils.ts @@ -478,11 +478,16 @@ export function typeEquality(a: any, b: any): boolean | undefined { export function arrayBufferEquality(a: unknown, b: unknown): boolean | undefined { - if (!(a instanceof ArrayBuffer) || !(b instanceof ArrayBuffer)) - return undefined + let dataViewA = a as DataView + let dataViewB = b as DataView + + if (!(a instanceof DataView && b instanceof DataView)) { + if (!(a instanceof ArrayBuffer) || !(b instanceof ArrayBuffer)) + return undefined - const dataViewA = new DataView(a) - const dataViewB = new DataView(b) + dataViewA = new DataView(a) + dataViewB = new DataView(b) + } // Buffers are not equal when they do not have the same byte length if (dataViewA.byteLength !== dataViewB.byteLength) diff --git a/test/core/test/jest-expect.test.ts b/test/core/test/jest-expect.test.ts index 8d3bae18312e..eb2d8ce75b14 100644 --- a/test/core/test/jest-expect.test.ts +++ b/test/core/test/jest-expect.test.ts @@ -466,6 +466,25 @@ describe('.toStrictEqual()', () => { Uint8Array.from([9, 3]).buffer, ) }) + + it('does not pass for DataView', () => { + expect(new DataView(Uint8Array.from([1, 2, 3]).buffer)).not.toStrictEqual( + new DataView(Uint8Array.from([3, 2, 1]).buffer), + ) + + expect(new DataView(Uint16Array.from([1, 2]).buffer)).not.toStrictEqual( + new DataView(Uint16Array.from([2, 1]).buffer), + ) + }) + + it('passes for matching DataView', () => { + expect(new DataView(Uint8Array.from([1, 2, 3]).buffer)).toStrictEqual( + new DataView(Uint8Array.from([1, 2, 3]).buffer), + ) + expect(new DataView(Uint8Array.from([]).buffer)).toStrictEqual( + new DataView(Uint8Array.from([]).buffer), + ) + }) }) describe('toBeTypeOf()', () => {