Skip to content

Commit aa74c5e

Browse files
authored
test: updateAltGrState (@Marcosatc147) (#5656)
1 parent e8ddd77 commit aa74c5e

2 files changed

Lines changed: 94 additions & 1 deletion

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { describe, it, expect, afterEach } from "vitest";
2+
import {
3+
updateAltGrState,
4+
getIsAltGrPressed,
5+
} from "../../src/ts/test/layout-emulator";
6+
7+
describe("LayoutEmulator", () => {
8+
describe("updateAltGrState", () => {
9+
afterEach(() => {
10+
// Reset isAltGrPressed state after each test
11+
// Simulate keyup event to reset state
12+
const event = createEvent("AltRight", "keyup");
13+
updateAltGrState(event);
14+
});
15+
16+
const createEvent = (
17+
code: string,
18+
type: string
19+
): JQuery.KeyboardEventBase =>
20+
({
21+
code,
22+
type,
23+
} as JQuery.KeyboardEventBase);
24+
25+
it("should set isAltGrPressed to true on AltRight keydown", () => {
26+
const event = createEvent("AltRight", "keydown");
27+
updateAltGrState(event);
28+
expect(getIsAltGrPressed()).toBe(true);
29+
});
30+
31+
it("should set isAltGrPressed to false on AltRight keyup", () => {
32+
const event = createEvent("AltRight", "keyup");
33+
updateAltGrState(event);
34+
expect(getIsAltGrPressed()).toBe(false);
35+
});
36+
37+
it("should set isAltGrPressed to true on AltLeft keydown on Mac", () => {
38+
Object.defineProperty(window.navigator, "userAgent", {
39+
value: "Mac",
40+
configurable: true,
41+
});
42+
const event = createEvent("AltLeft", "keydown");
43+
updateAltGrState(event);
44+
expect(getIsAltGrPressed()).toBe(true);
45+
});
46+
47+
it("should set isAltGrPressed to false on AltLeft keyup on Mac", () => {
48+
Object.defineProperty(window.navigator, "userAgent", {
49+
value: "Mac",
50+
configurable: true,
51+
});
52+
const event = createEvent("AltLeft", "keyup");
53+
updateAltGrState(event);
54+
expect(getIsAltGrPressed()).toBe(false);
55+
});
56+
57+
it("should not change isAltGrPressed on AltLeft keydown on non-Mac", () => {
58+
Object.defineProperty(window.navigator, "userAgent", {
59+
value: "Windows",
60+
configurable: true,
61+
});
62+
const event = createEvent("AltLeft", "keydown");
63+
updateAltGrState(event);
64+
expect(getIsAltGrPressed()).toBe(false);
65+
});
66+
67+
it("should not change isAltGrPressed on AltLeft keyup on non-Mac", () => {
68+
Object.defineProperty(window.navigator, "userAgent", {
69+
value: "Windows",
70+
configurable: true,
71+
});
72+
const event = createEvent("AltLeft", "keyup");
73+
updateAltGrState(event);
74+
expect(getIsAltGrPressed()).toBe(false);
75+
});
76+
77+
it("should not change isAltGrPressed on keydown of other keys", () => {
78+
const event = createEvent("KeyA", "keydown");
79+
updateAltGrState(event);
80+
expect(getIsAltGrPressed()).toBe(false);
81+
});
82+
83+
it("should not change isAltGrPressed on keyup of other keys", () => {
84+
const event = createEvent("KeyA", "keyup");
85+
updateAltGrState(event);
86+
expect(getIsAltGrPressed()).toBe(false);
87+
});
88+
});
89+
});

frontend/src/ts/test/layout-emulator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,17 @@ export async function getCharFromEvent(
230230
}
231231
}
232232

233-
function updateAltGrState(event: JQuery.KeyboardEventBase): void {
233+
export function updateAltGrState(event: JQuery.KeyboardEventBase): void {
234234
const shouldHandleLeftAlt =
235235
event.code === "AltLeft" && navigator.userAgent.includes("Mac");
236236
if (event.code !== "AltRight" && !shouldHandleLeftAlt) return;
237237
if (event.type === "keydown") isAltGrPressed = true;
238238
if (event.type === "keyup") isAltGrPressed = false;
239239
}
240240

241+
export function getIsAltGrPressed(): boolean {
242+
return isAltGrPressed;
243+
}
244+
241245
$(document).on("keydown", updateAltGrState);
242246
$(document).on("keyup", updateAltGrState);

0 commit comments

Comments
 (0)