- Configure oxfmt custom import groups for workspace, app, package, and test aliases - Keep type imports grouped with their matching source category instead of one global tail group - Expand the format script to cover formatter config, Vite files, and scripts
67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
import type { Color } from '@open-pencil/core'
|
|
import {
|
|
createColorPickerModel,
|
|
fromPercent,
|
|
toPercent,
|
|
updateAlpha,
|
|
updateHSBChannel,
|
|
updateHSLChannel,
|
|
updateHue,
|
|
updateRGBChannel
|
|
} from '@open-pencil/vue'
|
|
|
|
describe('color picker model', () => {
|
|
const base: Color = { r: 0.4, g: 0.2, b: 0.6, a: 0.75 }
|
|
|
|
test('updates hue from the shared slider', () => {
|
|
const model = createColorPickerModel(base)
|
|
const updated = updateHue(model, 180)
|
|
expect(updated).not.toEqual(base)
|
|
expect(updated.a).toBeCloseTo(base.a, 5)
|
|
})
|
|
|
|
test('updates hue from grayscale colors without staying neutral', () => {
|
|
const grayscale: Color = { r: 1, g: 1, b: 1, a: 1 }
|
|
const updated = updateHue(createColorPickerModel(grayscale), 220)
|
|
expect(updated.r === updated.g && updated.g === updated.b).toBe(false)
|
|
})
|
|
|
|
test('updates alpha independently', () => {
|
|
const updated = updateAlpha(base, 0.25)
|
|
expect(updated.a).toBeCloseTo(0.25, 5)
|
|
expect(updated.r).toBeCloseTo(base.r, 5)
|
|
})
|
|
|
|
test('updates rgb channels in 0-255 space', () => {
|
|
const updated = updateRGBChannel(base, 'r', 255)
|
|
expect(updated.r).toBeCloseTo(1, 5)
|
|
expect(updated.g).toBeCloseTo(base.g, 5)
|
|
})
|
|
|
|
test('updates hsl normalized channels smoothly', () => {
|
|
const model = createColorPickerModel(base)
|
|
const updated = updateHSLChannel(model, 's', 12.3)
|
|
expect(updated.a).toBeCloseTo(base.a, 5)
|
|
expect(updated).not.toEqual(base)
|
|
})
|
|
|
|
test('updates hsl saturation from grayscale colors without staying neutral', () => {
|
|
const grayscale: Color = { r: 1, g: 1, b: 1, a: 1 }
|
|
const updated = updateHSLChannel(createColorPickerModel(grayscale), 's', 40)
|
|
expect(updated.r === updated.g && updated.g === updated.b).toBe(false)
|
|
})
|
|
|
|
test('updates hsb normalized channels smoothly', () => {
|
|
const model = createColorPickerModel(base)
|
|
const updated = updateHSBChannel(model, 'b', 45.6)
|
|
expect(updated.a).toBeCloseTo(base.a, 5)
|
|
expect(updated).not.toEqual(base)
|
|
})
|
|
|
|
test('percent helpers roundtrip safely', () => {
|
|
expect(fromPercent(toPercent(0.347))).toBeCloseTo(0.35, 2)
|
|
})
|
|
})
|