diff options
Diffstat (limited to 'tests/debounce.test.ts')
| -rw-r--r-- | tests/debounce.test.ts | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/debounce.test.ts b/tests/debounce.test.ts new file mode 100644 index 0000000..da029a1 --- /dev/null +++ b/tests/debounce.test.ts @@ -0,0 +1,60 @@ +import { expect, test } from 'bun:test'; +import { debounce } from '../src/lib/search/debounce'; + +test('debounce delays function execution', async () => { + const results: number[] = []; + const debouncedFn = debounce((value: number) => results.push(value), 100); + + debouncedFn(1); + debouncedFn(2); + debouncedFn(3); + + expect(results.length).toBe(0); + + await Bun.sleep(150); + expect(results.length).toBe(1); + expect(results[0]).toBe(3); +}); + +test('debounce resets timer on repeated calls', async () => { + const results: number[] = []; + const debouncedFn = debounce((value: number) => results.push(value), 100); + + debouncedFn(1); + await Bun.sleep(50); + debouncedFn(2); + await Bun.sleep(50); + debouncedFn(3); + await Bun.sleep(50); + + expect(results.length).toBe(0); + + await Bun.sleep(150); + expect(results.length).toBe(1); + expect(results[0]).toBe(3); +}); + +test('debounce allows multiple executions over time', async () => { + const results: number[] = []; + const debouncedFn = debounce((value: number) => results.push(value), 50); + + debouncedFn(1); + await Bun.sleep(100); + + debouncedFn(2); + await Bun.sleep(100); + + expect(results.length).toBe(2); + expect(results).toEqual([1, 2]); +}); + +test('debounce passes arguments correctly', async () => { + const results: [string, number][] = []; + const debouncedFn = debounce((text: string, num: number) => results.push([text, num]), 50); + + debouncedFn('hello', 42); + await Bun.sleep(100); + + expect(results.length).toBe(1); + expect(results[0]).toEqual(['hello', 42]); +}); |
