Skip to content

Commit 02dcc68

Browse files
author
Pick
authored
test(reactivity): improve built-in Collection subclass test cases (#1885)
1 parent eb2ae44 commit 02dcc68

File tree

1 file changed

+52
-14
lines changed

1 file changed

+52
-14
lines changed

packages/reactivity/__tests__/reactive.spec.ts

+52-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ref, isRef } from '../src/ref'
22
import { reactive, isReactive, toRaw, markRaw } from '../src/reactive'
33
import { computed } from '../src/computed'
4+
import { effect } from '../src/effect'
45

56
describe('reactivity/reactive', () => {
67
test('Object', () => {
@@ -44,22 +45,59 @@ describe('reactivity/reactive', () => {
4445
expect(isReactive(observed.array[0])).toBe(true)
4546
})
4647

47-
test('process subtypes of collections properly', () => {
48-
class CustomMap extends Map {
49-
count = 0
48+
test('observing subtypes of IterableCollections(Map, Set)', () => {
49+
// subtypes of Map
50+
class CustomMap extends Map {}
51+
const cmap = reactive(new CustomMap())
5052

51-
set(key: any, value: any): this {
52-
super.set(key, value)
53-
this.count++
54-
return this
55-
}
56-
}
53+
expect(cmap instanceof Map).toBe(true)
54+
expect(isReactive(cmap)).toBe(true)
55+
56+
cmap.set('key', {})
57+
expect(isReactive(cmap.get('key'))).toBe(true)
58+
59+
// subtypes of Set
60+
class CustomSet extends Set {}
61+
const cset = reactive(new CustomSet())
62+
63+
expect(cset instanceof Set).toBe(true)
64+
expect(isReactive(cset)).toBe(true)
65+
66+
let dummy
67+
effect(() => (dummy = cset.has('value')))
68+
expect(dummy).toBe(false)
69+
cset.add('value')
70+
expect(dummy).toBe(true)
71+
cset.delete('value')
72+
expect(dummy).toBe(false)
73+
})
74+
75+
test('observing subtypes of WeakCollections(WeakMap, WeakSet)', () => {
76+
// subtypes of WeakMap
77+
class CustomMap extends WeakMap {}
78+
const cmap = reactive(new CustomMap())
79+
80+
expect(cmap instanceof WeakMap).toBe(true)
81+
expect(isReactive(cmap)).toBe(true)
82+
83+
const key = {}
84+
cmap.set(key, {})
85+
expect(isReactive(cmap.get(key))).toBe(true)
86+
87+
// subtypes of WeakSet
88+
class CustomSet extends WeakSet {}
89+
const cset = reactive(new CustomSet())
90+
91+
expect(cset instanceof WeakSet).toBe(true)
92+
expect(isReactive(cset)).toBe(true)
5793

58-
const testMap = new CustomMap()
59-
const observed = reactive(testMap)
60-
expect(observed.count).toBe(0)
61-
observed.set('test', 'value')
62-
expect(observed.count).toBe(1)
94+
let dummy
95+
effect(() => (dummy = cset.has(key)))
96+
expect(dummy).toBe(false)
97+
cset.add(key)
98+
expect(dummy).toBe(true)
99+
cset.delete(key)
100+
expect(dummy).toBe(false)
63101
})
64102

65103
test('observed value should proxy mutations to original (Object)', () => {

0 commit comments

Comments
 (0)