import Dep, { cleanupDeps } from 'core/observer/dep'
describe('Dep', () => {
let dep
beforeEach(() => {
dep = new Dep()
})
describe('instance', () => {
it('should be created with correct properties', () => {
expect(dep.subs.length).toBe(0)
expect(new Dep().id).toBe(dep.id + 1)
})
})
describe('addSub()', () => {
it('should add sub', () => {
dep.addSub(null)
expect(dep.subs.length).toBe(1)
expect(dep.subs[0]).toBe(null)
})
})
describe('removeSub()', () => {
it('should remove sub', () => {
const sub = {}
dep.subs.push(sub)
dep.removeSub(sub)
expect(dep.subs.includes(sub)).toBe(false)
cleanupDeps()
expect(dep.subs.length).toBe(0)
})
})
describe('depend()', () => {
let _target
beforeAll(() => {
_target = Dep.target
})
afterAll(() => {
Dep.target = _target
})
it('should do nothing if no target', () => {
Dep.target = null
dep.depend()
})
it('should add itself to target', () => {
Dep.target = { addDep: vi.fn() } as any
dep.depend()
expect(Dep.target!.addDep).toHaveBeenCalledWith(dep)
})
})
describe('notify()', () => {
it('should notify subs', () => {
dep.subs.push({ update: vi.fn() })
dep.notify()
expect(dep.subs[0].update).toHaveBeenCalled()
})
})
})