import { expect, test } from "vitest" import { colorStringToSrgbColorValue, hexColorStringToSrgbColorValue, hslColorStringToHslColorValue, hslaColorStringToHslColorValue, hsvColorStringToHsvColorValue, hsvaColorStringToHsvColorValue, isHexColorString, rgbColorStringToSrgbColorValue, rgbaColorStringToSrgbColorValue, } from "#Source/color/index.ts" test("isHexColorString validates supported hex formats", () => { expect(isHexColorString("#F0A")).toBe(true) expect(isHexColorString("11223344")).toBe(true) expect(isHexColorString("#12")).toBe(false) }) test("hexColorStringToSrgbColorValue supports short and long hex formats", () => { expect(hexColorStringToSrgbColorValue("#F0A")).toEqual({ red: 255, green: 0, blue: 170, alpha: 1, }) expect(hexColorStringToSrgbColorValue("#112233")).toEqual({ red: 17, green: 34, blue: 51, alpha: 1, }) expect(hexColorStringToSrgbColorValue("#11223344")).toEqual({ red: 17, green: 34, blue: 51, alpha: 0.266_7, }) expect(() => hexColorStringToSrgbColorValue("#12")).toThrow(TypeError) }) test("rgbColorStringToSrgbColorValue returns sRGB values", () => { expect(rgbColorStringToSrgbColorValue("rgb(51, 102, 153)")).toEqual({ red: 51, green: 102, blue: 153, alpha: 1, }) expect(rgbColorStringToSrgbColorValue("rgb(0, 0, 0)")).toEqual({ red: 0, green: 0, blue: 0, alpha: 1, }) }) test("rgbaColorStringToSrgbColorValue returns sRGB values", () => { expect(rgbaColorStringToSrgbColorValue("rgba(51, 102, 153, 0.5)")).toEqual({ red: 51, green: 102, blue: 153, alpha: 0.5, }) expect(() => rgbaColorStringToSrgbColorValue("rgba(51, 102, 153, 1.5)")).toThrow(RangeError) }) test("hslColorStringToHslColorValue returns HSL values", () => { expect(hslColorStringToHslColorValue("hsl(210, 50%, 40%)")).toEqual({ hue: 210, saturation: 0.5, lightness: 0.4, alpha: 1, }) expect(hslColorStringToHslColorValue("hsl(-30, 50%, 40%)")).toEqual({ hue: 330, saturation: 0.5, lightness: 0.4, alpha: 1, }) expect(() => hslColorStringToHslColorValue("hsl(210, 120%, 40%)")).toThrow(RangeError) }) test("hslaColorStringToHslColorValue returns HSL values", () => { expect(hslaColorStringToHslColorValue("hsla(210, 50%, 40%, 0.5)")).toEqual({ hue: 210, saturation: 0.5, lightness: 0.4, alpha: 0.5, }) expect(hslaColorStringToHslColorValue("hsla(0, 0%, 100%, 1)")).toEqual({ hue: 0, saturation: 0, lightness: 1, alpha: 1, }) }) test("hsvColorStringToHsvColorValue returns HSV values", () => { expect(hsvColorStringToHsvColorValue("hsv(210, 66.67%, 60%)")).toEqual({ hue: 210, saturation: 0.666_7, value: 0.6, alpha: 1, }) expect(hsvColorStringToHsvColorValue("hsv(390, 50%, 60%)")).toEqual({ hue: 30, saturation: 0.5, value: 0.6, alpha: 1, }) }) test("hsvaColorStringToHsvColorValue returns HSV values", () => { expect(hsvaColorStringToHsvColorValue("hsva(210, 66.67%, 60%, 0.5)")).toEqual({ hue: 210, saturation: 0.666_7, value: 0.6, alpha: 0.5, }) expect(hsvaColorStringToHsvColorValue("hsva(0, 0%, 100%, 1)")).toEqual({ hue: 0, saturation: 0, value: 1, alpha: 1, }) expect(() => hsvaColorStringToHsvColorValue("hsva(210, 66.67%, 60%, -0.1)")).toThrow(RangeError) }) test("colorStringToSrgbColorValue folds supported string inputs into sRGB", () => { expect(colorStringToSrgbColorValue("#336699")).toEqual({ red: 51, green: 102, blue: 153, alpha: 1, }) expect(colorStringToSrgbColorValue("hsl(210, 50%, 40%)")).toEqual({ red: 51, green: 102, blue: 153, alpha: 1, }) expect(colorStringToSrgbColorValue("hsv(210, 66.67%, 60%)")).toEqual({ red: 51, green: 102, blue: 153, alpha: 1, }) expect(colorStringToSrgbColorValue("rgb(51, 102, 153)")).toEqual({ red: 51, green: 102, blue: 153, alpha: 1, }) expect(() => colorStringToSrgbColorValue("foo(0, 0%, 0%)")).toThrow(TypeError) })