fix(reactivity): readonly+reactive collection should also expose readonly+reactive values

fix #1772
This commit is contained in:
Evan You
2020-08-06 11:18:16 -04:00
parent 48576e582c
commit ed4381020f
2 changed files with 54 additions and 12 deletions

View File

@@ -205,6 +205,22 @@ describe('reactivity/readonly', () => {
).toHaveBeenWarned()
})
// #1772
test('readonly + reactive should make get() value also readonly + reactive', () => {
const map = reactive(new Collection())
const roMap = readonly(map)
const key = {}
map.set(key, {})
const item = map.get(key)
expect(isReactive(item)).toBe(true)
expect(isReadonly(item)).toBe(false)
const roItem = roMap.get(key)
expect(isReactive(roItem)).toBe(true)
expect(isReadonly(roItem)).toBe(true)
})
if (Collection === Map) {
test('should retrieve readonly values on iteration', () => {
const key1 = {}
@@ -223,6 +239,28 @@ describe('reactivity/readonly', () => {
expect(isReadonly(value)).toBe(true)
}
})
test('should retrieve reactive + readonly values on iteration', () => {
const key1 = {}
const key2 = {}
const original = reactive(new Collection([[key1, {}], [key2, {}]]))
const wrapped: any = readonly(original)
expect(wrapped.size).toBe(2)
for (const [key, value] of wrapped) {
expect(isReadonly(key)).toBe(true)
expect(isReadonly(value)).toBe(true)
expect(isReactive(key)).toBe(true)
expect(isReactive(value)).toBe(true)
}
wrapped.forEach((value: any) => {
expect(isReadonly(value)).toBe(true)
expect(isReactive(value)).toBe(true)
})
for (const value of wrapped.values()) {
expect(isReadonly(value)).toBe(true)
expect(isReactive(value)).toBe(true)
}
})
}
})
})