8000 Demonstrates correct handling of Symbol keys in Map.mergeDeep when th… · immutable-js/immutable-js@e25b48d · GitHub
[go: up one dir, main page]

Skip to content

Commit e25b48d

Browse files
abacaphiliacleebyron
authored andcommitted
Demonstrates correct handling of Symbol keys in Map.mergeDeep when the Maps are nested, and initialized with Symbol KV tuples instead of plain JS object literals. (#1404)
1 parent 140c399 commit e25b48d

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

__tests__/Map.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,4 +395,40 @@ describe('Map', () => {
395395
expect(map.toString()).toEqual('Map { 2: 2 }');
396396
});
397397

398+
it('supports Symbols as tuple keys', () => {
399+
const a = Symbol('a');
400+
const b = Symbol('b');
401+
const c = Symbol('c');
402+
const m = Map([[a, 'a'], [b, 'b'], [c, 'c']]);
403+
expect(m.size).toBe(3);
404+
expect(m.get(a)).toBe('a');
405+
expect(m.get(b)).toBe('b');
406+
expect(m.get(c)).toBe('c');
407+
});
408+
409+
it('Symbol keys are unique', () => {
410+
const a = Symbol('FooBar');
411+
const b = Symbol('FooBar');
412+
const m = Map([[a, 'FizBuz'], [b, 'FooBar']);
413+
expect(m.size).toBe(2);
414+
expect(m.get(a)).toBe('FizBuz');
415+
expect(m.get(b)).toBe('FooBar');
416+
});
417+
418+
it('mergeDeep with tuple Symbol keys', () => {
419+
const a = Symbol('a');
420+
const b = Symbol('b');
421+
const c = Symbol('c');
422+
const d = Symbol('d');
423+
const e = Symbol('e');
424+
const f = Symbol('f');
425+
const g = Symbol('g');
426+
427+
// Note the use of nested Map constructors, Map() does not do a deep conversion!
428+
const m1 = Map([[a, Map([[b, Map([[c, 1], [d, 2]])]])]]);
429+
const m2 = Map([[a, Map([[b, Map([[c, 10], [e, 20], [f, 30], [g, 40]])]])]]);
430+
const merged = m1.mergeDeep(m2);
431+
432+
expect(merged).toEqual(Map([[a, Map([[b, Map([[c, 10], [d, 2], [e, 20], [f, 30], [g, 40]])]])]]));
433+
});
398434
});

__tests__/merge.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,22 @@ describe('merge', () => {
200200
expect(merge(a, [], [])).toBe(a);
201201
});
202202

203+
it('mergeDeep with tuple Symbol keys', () => {
204+
const a = Symbol('a');
205+
const b = Symbol('b');
206+
const c = Symbol('c');
207+
const d = Symbol('d');
208+
const e = Symbol('e');
209+
const f = Symbol('f');
210+
const g = Symbol('g');
211+
212+
// Note the use of nested Map constructors, Map() does not do a deep conversion!
213+
const m1 = Map([[a, Map([[b, Map([[c, 1], [d, 2]])]])]]);
214+
215+
// mergeDeep can be directly given a nested set of `Iterable<[K, V]>`
216+
const merged = m1.mergeDeep([[a, [[b, [[c, 10], [e, 20], [f, 30], [g, 40]]]]]]);
217+
218+
expect(merged).toEqual(Map([[a, Map([[b, Map([[c, 10], [d, 2], [e, 20], [f, 30], [g, 40]])]])]]));
219+
});
220+
203221
});

0 commit comments

Comments
 (0)
0