| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { effect, isReactive, reactive, toRaw } from '../../src'
- describe('reactivity/collections', () => {
- describe('WeakSet', () => {
- it('instanceof', () => {
- const original = new WeakSet()
- const observed = reactive(original)
- expect(isReactive(observed)).toBe(true)
- expect(original).toBeInstanceOf(WeakSet)
- expect(observed).toBeInstanceOf(WeakSet)
- })
- it('should observe mutations', () => {
- let dummy
- const value = {}
- const set = reactive(new WeakSet())
- effect(() => (dummy = set.has(value)))
- expect(dummy).toBe(false)
- set.add(value)
- expect(dummy).toBe(true)
- set.delete(value)
- expect(dummy).toBe(false)
- })
- it('should observe mutations with observed value', () => {
- let dummy
- const value = reactive({})
- const set = reactive(new WeakSet())
- effect(() => (dummy = set.has(value)))
- expect(dummy).toBe(false)
- set.add(value)
- expect(dummy).toBe(true)
- set.delete(value)
- expect(dummy).toBe(false)
- })
- it('should not observe custom property mutations', () => {
- let dummy
- const set: any = reactive(new WeakSet())
- effect(() => (dummy = set.customProp))
- expect(dummy).toBe(undefined)
- set.customProp = 'Hello World'
- expect(dummy).toBe(undefined)
- })
- it('should not observe non value changing mutations', () => {
- let dummy
- const value = {}
- const set = reactive(new WeakSet())
- const setSpy = vi.fn(() => (dummy = set.has(value)))
- effect(setSpy)
- expect(dummy).toBe(false)
- expect(setSpy).toHaveBeenCalledTimes(1)
- set.add(value)
- expect(dummy).toBe(true)
- expect(setSpy).toHaveBeenCalledTimes(2)
- set.add(value)
- expect(dummy).toBe(true)
- expect(setSpy).toHaveBeenCalledTimes(2)
- set.delete(value)
- expect(dummy).toBe(false)
- expect(setSpy).toHaveBeenCalledTimes(3)
- set.delete(value)
- expect(dummy).toBe(false)
- expect(setSpy).toHaveBeenCalledTimes(3)
- })
- it('should not observe raw data', () => {
- const value = {}
- let dummy
- const set = reactive(new WeakSet())
- effect(() => (dummy = toRaw(set).has(value)))
- expect(dummy).toBe(false)
- set.add(value)
- expect(dummy).toBe(false)
- })
- it('should not be triggered by raw mutations', () => {
- const value = {}
- let dummy
- const set = reactive(new WeakSet())
- effect(() => (dummy = set.has(value)))
- expect(dummy).toBe(false)
- toRaw(set).add(value)
- expect(dummy).toBe(false)
- })
- it('should not pollute original Set with Proxies', () => {
- const set = new WeakSet()
- const observed = reactive(set)
- const value = reactive({})
- observed.add(value)
- expect(observed.has(value)).toBe(true)
- expect(set.has(value)).toBe(false)
- })
- it('should return proxy from WeakSet.add call', () => {
- const set = reactive(new WeakSet())
- const result = set.add({})
- expect(result).toBe(set)
- })
- })
- })
|