import { describe, it, expect } from 'vitest' import { rgbToHex, rgbToHsl, hexToRgb, hslToRgb } from '../../src/utils/color.js' describe('color conversion', () => { it('converts RGB to hex', () => { expect(rgbToHex(255, 0, 0)).toBe('FF0000') expect(rgbToHex(0, 255, 0)).toBe('00FF00') expect(rgbToHex(0, 0, 255)).toBe('0000FF') }) it('pads single-digit hex values', () => { expect(rgbToHex(1, 2, 3)).toBe('010203') }) it('clamps RGB values to 0-255', () => { expect(rgbToHex(300, -10, 128)).toBe('FF0080') }) it('converts hex to RGB', () => { expect(hexToRgb('FF0000')).toEqual({ r: 255, g: 0, b: 0 }) expect(hexToRgb('invalid')).toBeNull() }) it('converts RGB to HSL and back (gray)', () => { const hsl = rgbToHsl(128, 128, 128) expect(hsl.s).toBe(0) const rgb = hslToRgb(hsl.h, hsl.s, hsl.l) expect(rgb.r).toBeCloseTo(128, 0) expect(rgb.g).toBeCloseTo(128, 0) expect(rgb.b).toBeCloseTo(128, 0) }) it('converts pure red RGB <-> HSL', () => { const hsl = rgbToHsl(255, 0, 0) expect(hsl.h).toBe(0) expect(hsl.s).toBe(100) const rgb = hslToRgb(0, 100, 50) expect(rgb.r).toBe(255) expect(rgb.g).toBe(0) expect(rgb.b).toBe(0) }) })