diff --git a/packages/shared/__tests__/toDisplayString.spec.ts b/packages/shared/__tests__/toDisplayString.spec.ts index 33c0af8df32..3b02911b8f0 100644 --- a/packages/shared/__tests__/toDisplayString.spec.ts +++ b/packages/shared/__tests__/toDisplayString.spec.ts @@ -181,10 +181,10 @@ describe('toDisplayString', () => { ]) expect(toDisplayString(m)).toMatchInlineSnapshot(` "{ - \\"Map(3)\\": { - \\"Symbol(0) =>\\": \\"foo\\", - \\"Symbol(1) =>\\": \\"bar\\", - \\"Symbol(baz) =>\\": \\"baz\\" + "Map(3)": { + "Symbol(0) =>": "foo", + "Symbol(1) =>": "bar", + "Symbol(baz) =>": "baz" } }" `) @@ -193,4 +193,27 @@ describe('toDisplayString', () => { String(Symbol('foo')) ) }) + + test('Set with Symbol values', () => { + const s = new Set([Symbol('foo'), Symbol('bar'), Symbol()]) + expect(toDisplayString(s)).toMatchInlineSnapshot(` + "{ + "Set(3)": [ + "Symbol(foo)", + "Symbol(bar)", + "Symbol()" + ] + }" + `) + }) + + test('Object with Symbol values', () => { + expect(toDisplayString({ foo: Symbol('x'), bar: Symbol() })) + .toMatchInlineSnapshot(` + "{ + "foo": "Symbol(x)", + "bar": "Symbol()" + }" + `) + }) }) diff --git a/packages/shared/src/toDisplayString.ts b/packages/shared/src/toDisplayString.ts index 83f340e9257..c002287c839 100644 --- a/packages/shared/src/toDisplayString.ts +++ b/packages/shared/src/toDisplayString.ts @@ -34,9 +34,7 @@ const replacer = (_key: string, val: any): any => { return { [`Map(${val.size})`]: [...val.entries()].reduce( (entries, [key, val], i) => { - entries[ - `${isSymbol(key) ? `Symbol(${key.description ?? i})` : key} =>` - ] = val + entries[stringiySymbol(key, i) + ' =>'] = val return entries }, {} as Record @@ -44,10 +42,16 @@ const replacer = (_key: string, val: any): any => { } } else if (isSet(val)) { return { - [`Set(${val.size})`]: [...val.values()] + [`Set(${val.size})`]: [...val.values()].map(v => stringiySymbol(v)) } + } else if (isSymbol(val)) { + return stringiySymbol(val) } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + // native elements return String(val) } return val } + +const stringiySymbol = (v: unknown, i: number | string = ''): any => + isSymbol(v) ? `Symbol(${v.description ?? i})` : v