Automerge backed Markdown editor for the Atmosphere
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485// 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<void>((resolve) => { setTimeout(() => { resolved1 = true resolve() }, 5) }), ) tasks.addPromise( new Promise<void>((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) })})