fix: Collection iterations should yield observable values

This commit is contained in:
Evan You
2018-09-21 16:54:12 -04:00
parent de76daf073
commit 9fcd30b483
6 changed files with 253 additions and 34 deletions

View File

@@ -236,14 +236,70 @@ describe('observer/collections', () => {
expect(dummy).toBe(2)
})
it('should observe iterated values (forEach)', () => {})
it('should observe nested values in iterations (forEach)', () => {
const map = observable(new Map([[1, { foo: 1 }]]))
let dummy: any
autorun(() => {
dummy = 0
map.forEach(value => {
expect(isObservable(value)).toBe(true)
dummy += value.foo
})
})
expect(dummy).toBe(1)
;(map.get(1) as any).foo++
expect(dummy).toBe(2)
})
it('should observe iterated values (values)', () => {})
it('should observe nested values in iterations (values)', () => {
const map = observable(new Map([[1, { foo: 1 }]]))
let dummy: any
autorun(() => {
dummy = 0
for (const value of map.values()) {
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
;(map.get(1) as any).foo++
expect(dummy).toBe(2)
})
it('should observe iterated values (keys)', () => {})
it('should observe nested values in iterations (entries)', () => {
const key = {}
const map = observable(new Map([[key, { foo: 1 }]]))
let dummy: any
autorun(() => {
dummy = 0
for (const [key, value] of map.entries()) {
key
expect(isObservable(key)).toBe(true)
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
;(map.get(key) as any).foo++
expect(dummy).toBe(2)
})
it('should observe iterated values (entries)', () => {})
it('should observe iterated values (for...of)', () => {})
it('should observe nested values in iterations (for...of)', () => {
const key = {}
const map = observable(new Map([[key, { foo: 1 }]]))
let dummy: any
autorun(() => {
dummy = 0
for (const [key, value] of map) {
key
expect(isObservable(key)).toBe(true)
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
;(map.get(key) as any).foo++
expect(dummy).toBe(2)
})
})
})

View File

@@ -286,5 +286,74 @@ describe('observer/collections', () => {
expect(observed.has(value)).toBe(true)
expect(set.has(value)).toBe(false)
})
it('should observe nested values in iterations (forEach)', () => {
const set = observable(new Set([{ foo: 1 }]))
let dummy: any
autorun(() => {
dummy = 0
set.forEach(value => {
expect(isObservable(value)).toBe(true)
dummy += value.foo
})
})
expect(dummy).toBe(1)
set.forEach(value => {
value.foo++
})
expect(dummy).toBe(2)
})
it('should observe nested values in iterations (values)', () => {
const set = observable(new Set([{ foo: 1 }]))
let dummy: any
autorun(() => {
dummy = 0
for (const value of set.values()) {
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
set.forEach(value => {
value.foo++
})
expect(dummy).toBe(2)
})
it('should observe nested values in iterations (entries)', () => {
const set = observable(new Set([{ foo: 1 }]))
let dummy: any
autorun(() => {
dummy = 0
for (const [key, value] of set.entries()) {
expect(isObservable(key)).toBe(true)
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
set.forEach(value => {
value.foo++
})
expect(dummy).toBe(2)
})
it('should observe nested values in iterations (for...of)', () => {
const set = observable(new Set([{ foo: 1 }]))
let dummy: any
autorun(() => {
dummy = 0
for (const value of set) {
expect(isObservable(value)).toBe(true)
dummy += value.foo
}
})
expect(dummy).toBe(1)
set.forEach(value => {
value.foo++
})
expect(dummy).toBe(2)
})
})
})