keyboardist
Version:
simple global keyboard manager
77 lines (66 loc) • 2.65 kB
JavaScript
import createListener from "./index";
import { fireEvent } from "dom-testing-library";
describe("Creates Listener", () => {
const listener = createListener();
test("Listener has subscribe method", () => {
expect(listener.subscribe).toBeDefined();
});
test("Listener has setMonitor method", () => {
expect(listener.setMonitor).toBeDefined();
});
test("Subscribe returns subscription object with unsubscribe method", () => {
const subscription = listener.subscribe("Space", () => {});
expect(subscription).toBeDefined();
expect(subscription.unsubscribe).toBeDefined();
});
test("Subscriptions are fired and receive KeyboardEvent object", () => {
const mockCallback = jest.fn();
listener.subscribe("Space", mockCallback);
fireEvent.keyDown(document, { code: "Space" });
expect(mockCallback).toBeCalled();
// First argument [0] of first function call [0]
expect(mockCallback.mock.calls[0][0] instanceof KeyboardEvent).toBe(true);
});
test("Unsubscribe works", () => {
const mockCallback = jest.fn();
const subscription = listener.subscribe("KeyA", mockCallback);
subscription.unsubscribe();
fireEvent.keyDown(document, { code: "KeyA" });
expect(mockCallback).not.toBeCalled();
});
test("Propagation works", () => {
const mockCallback1 = jest.fn();
const mockCallback2 = jest.fn();
listener.subscribe("KeyA", mockCallback1);
listener.subscribe("KeyA", mockCallback2);
fireEvent.keyDown(document, { code: "KeyA" });
expect(mockCallback2).toBeCalled();
expect(mockCallback1).toBeCalled();
});
test("Stop propagation works", () => {
const mockCallback1 = jest.fn();
const mockCallback2 = jest.fn().mockReturnValue(false);
listener.subscribe("KeyA", mockCallback1);
listener.subscribe("KeyA", mockCallback2);
fireEvent.keyDown(document, { code: "KeyA" });
expect(mockCallback2).toBeCalled();
expect(mockCallback1).not.toBeCalled();
});
test("Stop the global listener", () => {
const listener = createListener();
const mockCallback = jest.fn().mockReturnValue(false);
listener.subscribe("KeyA", mockCallback);
listener.stopListening();
fireEvent.keyDown(document, { code: "KeyA" });
expect(mockCallback).not.toBeCalled();
});
test("Restart the global listener", () => {
const listener = createListener();
const mockCallback = jest.fn().mockReturnValue(false);
listener.subscribe("KeyA", mockCallback);
listener.stopListening();
listener.startListening();
fireEvent.keyDown(document, { code: "KeyA" });
expect(mockCallback).toBeCalled();
});
});