Files
lupin-demo/tests/colorResolver.test.ts
2026-01-22 21:05:31 +08:00

56 lines
2.0 KiB
TypeScript

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 时覆盖全部扇区', () => {
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(4);
expect(map.get(0)).toBe('#E53935');
expect(map.get(3)).toBe('#E53935');
});
it('resolveSectorColor 应遵循 sector > layer > background 优先级', () => {
const resolver = new ColorResolver(theme, '#000000');
const layerMap = new Map<number, string>([[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');
});
});