fix: Collection iterations should yield observable values
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -250,6 +250,25 @@ describe('observer/immutable', () => {
|
||||
expect(map.get(key)).toBe(1)
|
||||
expect(warn).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
if (Collection === Map) {
|
||||
test('should retrive immutable values on iteration', () => {
|
||||
const key1 = {}
|
||||
const key2 = {}
|
||||
const original = new Collection([[key1, {}], [key2, {}]])
|
||||
const observed = immutable(original)
|
||||
for (const [key, value] of observed) {
|
||||
expect(isImmutable(key)).toBe(true)
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
}
|
||||
observed.forEach((value: any) => {
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
})
|
||||
for (const value of observed.values()) {
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -299,6 +318,26 @@ describe('observer/immutable', () => {
|
||||
expect(set.has(key)).toBe(true)
|
||||
expect(warn).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
if (Collection === Set) {
|
||||
test('should retrive immutable values on iteration', () => {
|
||||
const original = new Collection([{}, {}])
|
||||
const observed = immutable(original)
|
||||
for (const value of observed) {
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
}
|
||||
observed.forEach((value: any) => {
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
})
|
||||
for (const value of observed.values()) {
|
||||
expect(isImmutable(value)).toBe(true)
|
||||
}
|
||||
for (const [v1, v2] of observed.entries()) {
|
||||
expect(isImmutable(v1)).toBe(true)
|
||||
expect(isImmutable(v2)).toBe(true)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user