// src/plugin/__tests__/tasks.test.ts /** * Tests for the Tasks class (Obsidian API compatibility). */ import { describe, it, expect } from 'vitest' import { Tasks } from '../obsidian-stubs' describe('Tasks', () => { it('isEmpty returns true initially', () => { const tasks = new Tasks() expect(tasks.isEmpty()).toBe(true) }) it('isEmpty returns false after adding a promise', () => { const tasks = new Tasks() tasks.addPromise(Promise.resolve()) expect(tasks.isEmpty()).toBe(false) }) it('isEmpty returns false after adding a callback', () => { const tasks = new Tasks() tasks.add(() => Promise.resolve()) expect(tasks.isEmpty()).toBe(false) }) it('add() invokes callback immediately', () => { const tasks = new Tasks() let called = false tasks.add(() => { called = true return Promise.resolve() }) expect(called).toBe(true) }) it('promise() resolves when all tasks complete', async () => { const tasks = new Tasks() let resolved1 = false let resolved2 = false tasks.addPromise( new Promise((resolve) => { setTimeout(() => { resolved1 = true resolve() }, 5) }), ) tasks.addPromise( new Promise((resolve) => { setTimeout(() => { resolved2 = true resolve() }, 10) }), ) expect(resolved1).toBe(false) expect(resolved2).toBe(false) await tasks.promise() expect(resolved1).toBe(true) expect(resolved2).toBe(true) }) it('promise() resolves immediately when no tasks', async () => { const tasks = new Tasks() // Should not hang or throw await tasks.promise() expect(tasks.isEmpty()).toBe(true) }) it('multiple Tasks instances are independent', () => { const tasks1 = new Tasks() const tasks2 = new Tasks() tasks1.addPromise(Promise.resolve()) expect(tasks1.isEmpty()).toBe(false) expect(tasks2.isEmpty()).toBe(true) }) })