import { describe, it, expect } from 'vitest' import { computeDocStats } from '../useDocStats' describe('computeDocStats', () => { it('should return zeros for undefined content', () => { expect(computeDocStats(undefined)).toEqual({ words: 0, chars: 0, charsNoSpace: 0, lines: 0 }) }) it('should return zeros for null content', () => { expect(computeDocStats(null)).toEqual({ words: 0, chars: 0, charsNoSpace: 0, lines: 0 }) }) it('should return zeros for empty string', () => { expect(computeDocStats('')).toEqual({ words: 0, chars: 0, charsNoSpace: 0, lines: 0 }) }) it('should count single word', () => { const result = computeDocStats('hello') expect(result.words).toBe(1) expect(result.chars).toBe(5) expect(result.charsNoSpace).toBe(5) expect(result.lines).toBe(1) }) it('should count multiple words', () => { const result = computeDocStats('hello world') expect(result.words).toBe(2) expect(result.chars).toBe(11) // 'hello world' = 11 chars expect(result.charsNoSpace).toBe(10) // without the space }) it('should count characters without spaces', () => { const result = computeDocStats('a b c') expect(result.chars).toBe(5) expect(result.charsNoSpace).toBe(3) }) it('should count lines', () => { const result = computeDocStats('line1\nline2\nline3') expect(result.lines).toBe(3) expect(result.words).toBe(3) }) it('should handle Windows line endings', () => { const result = computeDocStats('line1\r\nline2\r\nline3') expect(result.lines).toBe(3) }) it('should handle trailing newline', () => { const result = computeDocStats('hello\n') expect(result.lines).toBe(2) expect(result.words).toBe(1) }) it('should count markdown content correctly', () => { const md = '# Title\n\nThis is a **paragraph** with some *text*.\n\n- List item 1\n- List item 2\n' const result = computeDocStats(md) expect(result.words).toBe(17) expect(result.lines).toBe(7) expect(result.chars).toBe(md.length) }) it('should handle whitespace-only content', () => { const result = computeDocStats(' \n \n ') expect(result.words).toBe(0) expect(result.chars).toBe(9) expect(result.charsNoSpace).toBe(0) expect(result.lines).toBe(3) }) it('should handle content with non-ASCII characters', () => { const result = computeDocStats('中文测试 日本語 한국어') expect(result.words).toBe(3) expect(result.chars).toBe(12) }) })