}"
`)
})
+
+ //#9727
+ test('Map with Symbol keys', () => {
+ const m = new Map<any, any>([
+ [Symbol(), 'foo'],
+ [Symbol(), 'bar'],
+ [Symbol('baz'), 'baz']
+ ])
+ expect(toDisplayString(m)).toMatchInlineSnapshot(`
+ "{
+ \\"Map(3)\\": {
+ \\"Symbol(0) =>\\": \\"foo\\",
+ \\"Symbol(1) =>\\": \\"bar\\",
+ \\"Symbol(baz) =>\\": \\"baz\\"
+ }
+ }"
+ `)
+ // confirming the symbol renders Symbol(foo)
+ expect(toDisplayString(new Map([[Symbol('foo'), 'foo']]))).toContain(
+ String(Symbol('foo'))
+ )
+ })
})
isPlainObject,
isSet,
objectToString,
- isString
+ isString,
+ isSymbol
} from './general'
/**
return replacer(_key, val.value)
} else if (isMap(val)) {
return {
- [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
- ;(entries as any)[`${key} =>`] = val
- return entries
- }, {})
+ [`Map(${val.size})`]: [...val.entries()].reduce(
+ (entries, [key, val], i) => {
+ entries[
+ `${isSymbol(key) ? `Symbol(${key.description ?? i})` : key} =>`
+ ] = val
+ return entries
+ },
+ {} as Record<string, any>
+ )
}
} else if (isSet(val)) {
return {