import { describe, it, expect } from 'vitest'; import { ColorResolver, applyPatternColoring } from '../src/colorResolver'; import type { ThemeConfig, SectorLayerConfig, SectorConfig } from '../src/types'; describe('colorResolver', () => { const theme: ThemeConfig = { colorPalettes: { 木: '#43A047', 火: '#E53935', }, }; it('resolveColor 应解析命名色并支持十六进制', () => { const resolver = new ColorResolver(theme, '#000000'); expect(resolver.resolveColor('木')).toBe('#43A047'); expect(resolver.resolveColor('#ffffff')).toBe('#ffffff'); expect(resolver.resolveColor('不存在')).toBe('#000000'); }); it('applyPatternColoring 应按 num + interval 生成映射', () => { const map = applyPatternColoring(6, '#111111', 2, 1); expect(map.has(0)).toBe(true); expect(map.has(1)).toBe(true); expect(map.has(2)).toBe(false); expect(map.has(3)).toBe(true); expect(map.has(4)).toBe(true); expect(map.has(5)).toBe(false); }); it('resolveLayerColors 仅在提供 colorRef 与 num 时生效', () => { const resolver = new ColorResolver(theme, '#000000'); const layer: SectorLayerConfig = { divisions: 4, rInner: 0, rOuter: 10, colorRef: '火', num: 2, interval: 1, }; const map = resolver.resolveLayerColors(layer); expect(map.size).toBe(3); }); it('resolveSectorColor 应遵循 sector > layer > background 优先级', () => { const resolver = new ColorResolver(theme, '#000000'); const layerMap = new Map([[1, '#E53935']]); const sector: SectorConfig = { content: 'x', colorRef: '木' }; expect(resolver.resolveSectorColor(layerMap, sector, 1)).toBe('#43A047'); expect(resolver.resolveSectorColor(layerMap, undefined, 1)).toBe('#E53935'); expect(resolver.resolveSectorColor(layerMap, undefined, 2)).toBe('#000000'); }); });