97 lines
2.3 KiB
TypeScript
97 lines
2.3 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
|
|
import {
|
|
appendPointToStroke,
|
|
BABY_LOVE_DRAWING_BUTTON_HOVER_MS,
|
|
BABY_LOVE_DRAWING_COLOR_HOVER_MS,
|
|
createBabyDrawingStroke,
|
|
hasHoverCompleted,
|
|
isPointInsideBounds,
|
|
resolveHoverProgress,
|
|
toCanvasPoint,
|
|
} from './babyLoveDrawingModel';
|
|
|
|
describe('babyLoveDrawingModel', () => {
|
|
test('completes color hover after 1.5 seconds', () => {
|
|
const target = { kind: 'color' as const, id: 'red' };
|
|
|
|
expect(
|
|
hasHoverCompleted(
|
|
target,
|
|
1000,
|
|
1000 + BABY_LOVE_DRAWING_COLOR_HOVER_MS - 1,
|
|
),
|
|
).toBe(false);
|
|
expect(
|
|
hasHoverCompleted(
|
|
target,
|
|
1000,
|
|
1000 + BABY_LOVE_DRAWING_COLOR_HOVER_MS,
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
test('completes button hover after 2 seconds', () => {
|
|
const target = { kind: 'button' as const, id: 'finish' };
|
|
|
|
expect(
|
|
hasHoverCompleted(
|
|
target,
|
|
1000,
|
|
1000 + BABY_LOVE_DRAWING_BUTTON_HOVER_MS - 1,
|
|
),
|
|
).toBe(false);
|
|
expect(
|
|
hasHoverCompleted(
|
|
target,
|
|
1000,
|
|
1000 + BABY_LOVE_DRAWING_BUTTON_HOVER_MS,
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
test('clamps hover progress and canvas point into unit bounds', () => {
|
|
const bounds = {
|
|
left: 0.25,
|
|
top: 0.2,
|
|
width: 0.5,
|
|
height: 0.4,
|
|
};
|
|
|
|
expect(resolveHoverProgress(null, null, 1000)).toBe(0);
|
|
expect(resolveHoverProgress({ kind: 'color', id: 'red' }, 0, 999999)).toBe(
|
|
1,
|
|
);
|
|
expect(isPointInsideBounds({ x: 0.4, y: 0.3 }, bounds)).toBe(true);
|
|
expect(isPointInsideBounds({ x: 0.1, y: 0.3 }, bounds)).toBe(false);
|
|
expect(toCanvasPoint({ x: 0.5, y: 0.4 }, bounds)).toMatchObject({
|
|
x: 0.5,
|
|
y: 0.5,
|
|
});
|
|
expect(toCanvasPoint({ x: 0.9, y: 0.9 }, bounds)).toMatchObject({
|
|
x: 1,
|
|
y: 1,
|
|
});
|
|
});
|
|
|
|
test('creates and extends stroke trace without mutating previous stroke', () => {
|
|
const stroke = createBabyDrawingStroke('brush', '#ef4444', {
|
|
x: 0.1,
|
|
y: 0.2,
|
|
t: 1,
|
|
});
|
|
const nextStroke = appendPointToStroke(stroke, {
|
|
x: 0.3,
|
|
y: 0.4,
|
|
t: 2,
|
|
});
|
|
|
|
expect(stroke.points).toHaveLength(1);
|
|
expect(nextStroke.points).toHaveLength(2);
|
|
expect(nextStroke).toMatchObject({
|
|
tool: 'brush',
|
|
color: '#ef4444',
|
|
});
|
|
});
|
|
});
|