Skip to content

Commit

Permalink
Fix type enforcement for mergeWith/deep + tests
Browse files Browse the repository at this point in the history
  • Loading branch information
davecoates committed Sep 12, 2016
1 parent 6f2765d commit 0db3ae0
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
15 changes: 9 additions & 6 deletions src/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,26 +276,29 @@ class TypeInferedList extends BaseImmutableList {

mergeWith(merger, ...iterables) {
const maxSize = maxSizeFromIterables(iterables);
const typedIterables = iterables.map(convertValuesToType.bind(null, this[$type]));
if (maxSize > this.size) {
return change(this, store => store.setSize(maxSize).mergeWith(merger, ...iterables));
return change(this, store => store.setSize(maxSize).mergeWith(merger, ...typedIterables));
}
return change(this, store => store.mergeWith(merger, ...iterables));
return change(this, store => store.mergeWith(merger, ...typedIterables));
}

mergeDeep(...iterables) {
const maxSize = maxSizeFromIterables(iterables);
const typedIterables = iterables.map(convertValuesToType.bind(null, this[$type]));
if (maxSize > this.size) {
return change(this, store => store.setSize(maxSize).mergeDeep(...iterables));
return change(this, store => store.setSize(maxSize).mergeDeep(...typedIterables));
}
return change(this, store => store.mergeDeep(...iterables));
return change(this, store => store.mergeDeep(...typedIterables));
}

mergeDeepWith(merger, ...iterables) {
const maxSize = maxSizeFromIterables(iterables);
const typedIterables = iterables.map(convertValuesToType.bind(null, this[$type]));
if (maxSize > this.size) {
return change(this, store => store.setSize(maxSize).mergeDeepWith(merger, ...iterables));
return change(this, store => store.setSize(maxSize).mergeDeepWith(merger, ...typedIterables));
}
return change(this, store => store.mergeDeepWith(merger, ...iterables));
return change(this, store => store.mergeDeepWith(merger, ...typedIterables));
}

__ensureOwner(ownerID) {
Expand Down
6 changes: 3 additions & 3 deletions src/test/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -1028,7 +1028,7 @@ test('mergeWith', assert => {
const useExisting = (prev, next) => prev != null ? prev : next;
assert.deepEqual(numbers.mergeWith(useExisting, NumberList.of(4, 5, 6, 7)).toArray(), [1, 2, 3, 7])
assert.deepEqual(numbers.mergeWith(useExisting, NumberList.of(4)).toArray(), [1, 2, 3])
assert.throws(() => numbers.merge(useExisting, [4, 5, 6, '7']), /is not a number/)
assert.throws(() => numbers.mergeWith(useExisting, [4, 5, 6, '7']), /is not a number/)
})

test('mergeDeep', assert => {
Expand All @@ -1039,7 +1039,7 @@ test('mergeDeep', assert => {
assert.deepEqual(
numbers.mergeDeep([[10, 11, 12, 13], [20, 21]]).toJS(),
[[10, 11, 12, 13], [20, 21, 6]])
assert.throws(() => numbers.mergeDeep([[10], ['11']], /is not a number/)
assert.throws(() => numbers.mergeDeep([[10], ['11']]), /is not a number/)
})

test('mergeDeepWith', assert => {
Expand All @@ -1051,5 +1051,5 @@ test('mergeDeepWith', assert => {
assert.deepEqual(
numbers.mergeDeepWith(add, [[10, 11, 12, 13], [20, 21]]).toJS(),
[[11, 13, 15, 13], [24, 26, 6]])
assert.throws(() => numbers.mergeDeep(add, [[10], ['11']], /is not a number/)
assert.throws(() => numbers.mergeDeepWith(add, [[10], ['11']]), /is not a number/)
})

0 comments on commit 0db3ae0

Please sign in to comment.