39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
ERASER_SIZE_MAX,
|
|
ERASER_SIZE_MIN,
|
|
getEffectiveEraserSize,
|
|
getEraserSizeFromSliderRatio,
|
|
getEraserSizeMaxForCssSize,
|
|
getEraserSliderRatioFromSize,
|
|
} from '../config/eraser-size';
|
|
|
|
describe('eraser size slider mapping', () => {
|
|
it('maps slider position quadratically to eraser size', () => {
|
|
expect(getEraserSizeFromSliderRatio(0)).toBe(ERASER_SIZE_MIN);
|
|
expect(getEraserSizeFromSliderRatio(0.5)).toBe(
|
|
ERASER_SIZE_MIN + (ERASER_SIZE_MAX - ERASER_SIZE_MIN) * 0.25
|
|
);
|
|
expect(getEraserSizeFromSliderRatio(1)).toBe(ERASER_SIZE_MAX);
|
|
});
|
|
|
|
it('maps eraser size back to the inverse slider position', () => {
|
|
const quarterRangeSize = ERASER_SIZE_MIN + (ERASER_SIZE_MAX - ERASER_SIZE_MIN) * 0.25;
|
|
|
|
expect(getEraserSliderRatioFromSize(ERASER_SIZE_MIN)).toBe(0);
|
|
expect(getEraserSliderRatioFromSize(quarterRangeSize)).toBe(0.5);
|
|
expect(getEraserSliderRatioFromSize(ERASER_SIZE_MAX)).toBe(1);
|
|
});
|
|
|
|
it('uses a responsive max size on small canvases', () => {
|
|
const mobileMax = getEraserSizeMaxForCssSize({ height: 640, width: 390 });
|
|
|
|
expect(mobileMax).toBeLessThan(ERASER_SIZE_MAX);
|
|
expect(getEraserSizeFromSliderRatio(1, mobileMax)).toBe(mobileMax);
|
|
expect(getEraserSliderRatioFromSize(ERASER_SIZE_MAX, mobileMax)).toBe(1);
|
|
expect(getEffectiveEraserSize(ERASER_SIZE_MAX, { height: 640, width: 390 })).toBe(
|
|
mobileMax
|
|
);
|
|
});
|
|
});
|