62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
const {
|
|
TOUCH_SHIFT_MODE_LOCK,
|
|
TOUCH_SHIFT_MODE_OFF,
|
|
TOUCH_SHIFT_MODE_ONCE,
|
|
applyTouchShiftToValue,
|
|
isTouchShiftActive,
|
|
normalizeTouchShiftMode,
|
|
resolveTouchShiftModeOnTap
|
|
} = require("./touchShiftState.js");
|
|
|
|
describe("touchShiftState", () => {
|
|
it("shift 单击进入单次大写,双击进入锁定,再点一次退出", () => {
|
|
expect(resolveTouchShiftModeOnTap(TOUCH_SHIFT_MODE_OFF, 0, 1000, 320)).toBe(TOUCH_SHIFT_MODE_ONCE);
|
|
expect(resolveTouchShiftModeOnTap(TOUCH_SHIFT_MODE_ONCE, 1000, 1200, 320)).toBe(TOUCH_SHIFT_MODE_LOCK);
|
|
expect(resolveTouchShiftModeOnTap(TOUCH_SHIFT_MODE_LOCK, 0, 1500, 320)).toBe(TOUCH_SHIFT_MODE_OFF);
|
|
});
|
|
|
|
it("状态归一化和激活判断正确", () => {
|
|
expect(normalizeTouchShiftMode("once")).toBe(TOUCH_SHIFT_MODE_ONCE);
|
|
expect(normalizeTouchShiftMode("lock")).toBe(TOUCH_SHIFT_MODE_LOCK);
|
|
expect(normalizeTouchShiftMode("unknown")).toBe(TOUCH_SHIFT_MODE_OFF);
|
|
expect(isTouchShiftActive(TOUCH_SHIFT_MODE_OFF)).toBe(false);
|
|
expect(isTouchShiftActive(TOUCH_SHIFT_MODE_ONCE)).toBe(true);
|
|
expect(isTouchShiftActive(TOUCH_SHIFT_MODE_LOCK)).toBe(true);
|
|
});
|
|
|
|
it("单次大写只把下一次英文输入转成大写,并在命中字母后消费", () => {
|
|
expect(applyTouchShiftToValue("", "a", TOUCH_SHIFT_MODE_ONCE)).toEqual({
|
|
value: "A",
|
|
consumedOnce: true,
|
|
touchedLetter: true,
|
|
transformed: true
|
|
});
|
|
expect(applyTouchShiftToValue("A", "A1", TOUCH_SHIFT_MODE_ONCE)).toEqual({
|
|
value: "A1",
|
|
consumedOnce: false,
|
|
touchedLetter: false,
|
|
transformed: false
|
|
});
|
|
});
|
|
|
|
it("锁定大写会持续转换后续英文输入", () => {
|
|
expect(applyTouchShiftToValue("A", "Ab", TOUCH_SHIFT_MODE_LOCK)).toEqual({
|
|
value: "AB",
|
|
consumedOnce: false,
|
|
touchedLetter: true,
|
|
transformed: true
|
|
});
|
|
});
|
|
|
|
it("替换中间文本时只转换新增的英文片段", () => {
|
|
expect(applyTouchShiftToValue("abZ", "acZ", TOUCH_SHIFT_MODE_ONCE)).toEqual({
|
|
value: "aCZ",
|
|
consumedOnce: true,
|
|
touchedLetter: true,
|
|
transformed: true
|
|
});
|
|
});
|
|
});
|