From 18042a76be36fa7184344fb632f4c494de250aed Mon Sep 17 00:00:00 2001 From: unadlib Date: Mon, 6 Feb 2023 00:51:45 +0800 Subject: [PATCH] test(case): add circular ref case --- test/immer-non-support.test.ts | 35 ++++++++++++++++++++++++++++++++++ test/index.test.ts | 7 ++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/test/immer-non-support.test.ts b/test/immer-non-support.test.ts index bc8cadf9..c888d171 100644 --- a/test/immer-non-support.test.ts +++ b/test/immer-non-support.test.ts @@ -268,3 +268,38 @@ test('Unexpected access to getter property in irrelevant plain objects', () => { expect(isAgeGetterCalled).toBe(false); } }); + +test('circular reference', () => { + { + const data = { a: { b: { c: 1 } } }; + // @ts-expect-error + data.a.b.c1 = data.a.b; + + setAutoFreeze(true); + + expect(() => { + produce(data, () => { + // + }); + }).not.toThrowError(); + } + + { + const data = { a: { b: { c: 1 } } }; + // @ts-expect-error + data.a.b.c1 = data.a.b; + expect(() => { + create( + data, + (draft) => { + // + }, + { + enableAutoFreeze: true, + } + ); + }).toThrowErrorMatchingInlineSnapshot( + `"Forbids circular reference: ~/a/b"` + ); + } +}); diff --git a/test/index.test.ts b/test/index.test.ts index 93b6163a..d78d88ae 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -2558,9 +2558,10 @@ test('circular reference - set - 2 - 1', () => { test('circular reference - map - 1', () => { const base = { a: { b: { c: 1 } } }; + const key = Symbol(1); const data = new Map([ [null, null], - [1, base], + [key, base], ]); // @ts-ignore base.a.b.c1 = base.a.b; @@ -2569,14 +2570,14 @@ test('circular reference - map - 1', () => { data, (draft) => { // @ts-expect-error - draft.get(1).a.b.c = 2; + draft.get(key).a.b.c = 2; }, { enableAutoFreeze: true, } ); }).toThrowErrorMatchingInlineSnapshot( - `"Forbids circular reference: ~/1/a/b"` + `"Forbids circular reference: ~/[Symbol(1)]/a/b"` ); });