- A00_Common/key_shortcut.ts 새로 — 영문이면 글자 · 아니면 자판 자리(code) · CAD 와 페이지가 같이 씀 - CAD input-shortcut.ts 는 공용을 다시 내보냄 · tsconfig.app.json 에 공용 파일 포함 - B05 종단 Ctrl+Z · 노선 편집 Ctrl+Z · Y · M02 흐름도 Ctrl+Z · 카드 Ctrl+S · 나무 Ctrl+C · V · 시트 Ctrl+글자 - 시트 키는 한글 조합 중에도 Ctrl+글자 판정 - 새 시험 ctrl-shortcut-hangul · ctrl-shortcut-sheet Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STqEqztUthVFBmEP18wBSz
61 lines
2.1 KiB
TypeScript
61 lines
2.1 KiB
TypeScript
/**
|
|
* 시트 키 — 한글 자판에서도 Ctrl 단축키(PLAN 214-2).
|
|
* 실행: cd B07_DesignDetail/openwebcad && npx vitest run --config ../../resources/tester/cad/vitest.ui.config.ts
|
|
*/
|
|
import { describe, expect, it } from "vitest";
|
|
import { attachKeys } from "../../../A00_Common/spreadsheet/spreadsheet_keys";
|
|
|
|
describe("시트 키 — 한글 자판 Ctrl 단축키", () => {
|
|
const setup = () => {
|
|
const log: string[] = [];
|
|
const handlers: ((e: KeyboardEvent) => void)[] = [];
|
|
const ed = {
|
|
ta: {
|
|
addEventListener: (_: string, fn: (e: KeyboardEvent) => void) => handlers.push(fn),
|
|
removeEventListener: () => {},
|
|
},
|
|
formula: { addEventListener: () => {}, removeEventListener: () => {} },
|
|
editing: () => false,
|
|
};
|
|
const ctx = {
|
|
undo: () => log.push("undo"),
|
|
redo: () => log.push("redo"),
|
|
readOnly: false,
|
|
sheet: () => ({}),
|
|
selection: {},
|
|
};
|
|
attachKeys(ctx as never, ed as never, {
|
|
find: (replace: boolean) => log.push(replace ? "replace" : "find"),
|
|
});
|
|
const press = (extra: object) =>
|
|
handlers[0]({
|
|
key: "",
|
|
code: "",
|
|
keyCode: 0,
|
|
isComposing: false,
|
|
ctrlKey: true,
|
|
metaKey: false,
|
|
shiftKey: false,
|
|
altKey: false,
|
|
target: null,
|
|
preventDefault: () => {},
|
|
stopPropagation: () => {},
|
|
...extra,
|
|
} as unknown as KeyboardEvent);
|
|
return { log, press };
|
|
};
|
|
it("「ㅋ」 = 되돌리기 · 「ㅛ」 = 다시 하기 · Shift+「ㅋ」 = 다시 하기", () => {
|
|
const { log, press } = setup();
|
|
press({ key: "ㅋ", code: "KeyZ" });
|
|
press({ key: "ㅛ", code: "KeyY" });
|
|
press({ key: "ㅋ", code: "KeyZ", shiftKey: true });
|
|
expect(log).toEqual(["undo", "redo", "redo"]);
|
|
});
|
|
it("「ㄹ」(KeyF) = 찾기 · 「ㅗ」(KeyH) = 바꾸기 · 조합 중에도", () => {
|
|
const { log, press } = setup();
|
|
press({ key: "ㄹ", code: "KeyF" });
|
|
press({ key: "Process", code: "KeyH", keyCode: 229, isComposing: true });
|
|
expect(log).toEqual(["find", "replace"]);
|
|
});
|
|
});
|