openpencil/tests/engine/text/fonts/fallbacks.test.ts
2026-07-01 22:19:14 +03:00

47 lines
1.7 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
cjkLocalFallbackFamilies,
fontFallbackEntry,
fontFallbackManifest
} from '@open-pencil/core'
describe('font fallback manifest', () => {
test('selects platform CJK local candidates', () => {
expect(cjkLocalFallbackFamilies('Mozilla/5.0 (Macintosh)')).toContain('PingFang SC')
expect(cjkLocalFallbackFamilies('Mozilla/5.0 (Windows NT 10.0)')).toContain(
'Microsoft YaHei UI'
)
expect(cjkLocalFallbackFamilies('X11; Linux x86_64')).toContain('Noto Sans CJK SC')
})
test('defines remote fallback families for CJK and Arabic', () => {
const manifest = fontFallbackManifest('X11; Linux x86_64')
expect(manifest.cjk.remoteFamilies).toContain('Noto Sans SC')
expect(manifest.cjk.remoteFamilies).toContain('Noto Sans TC')
expect(manifest.arabic.remoteFamilies).toContain('Noto Naskh Arabic')
})
test('orders script-specific CJK local fallback candidates by platform', () => {
expect(fontFallbackEntry('cjk-sc', 'Mozilla/5.0 (Macintosh)').localFamilies[0]).toBe(
'PingFang SC'
)
expect(fontFallbackEntry('cjk-tc', 'Mozilla/5.0 (Macintosh)').localFamilies[0]).toBe(
'PingFang TC'
)
expect(fontFallbackEntry('cjk-jp', 'Mozilla/5.0 (Windows NT 10.0)').localFamilies[0]).toBe(
'Yu Gothic'
)
expect(fontFallbackEntry('cjk-kr', 'Mozilla/5.0 (Windows NT 10.0)').localFamilies[0]).toBe(
'Malgun Gothic'
)
})
test('returns entries by script', () => {
expect(fontFallbackEntry('arabic').localFamilies).toContain('Geeza Pro')
expect(fontFallbackEntry('cjk', 'Mozilla/5.0 (Macintosh)').localFamilies).toContain(
'PingFang SC'
)
})
})