From a1482072f98beae05bb18236a832ce80d31509f9 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Tue, 17 May 2022 14:14:58 +0200 Subject: [PATCH] (#403) Both `pressButton` and `releaseButton` now respect configured autoDelay (#404) --- lib/mouse.class.spec.ts | 44 +++++++++++++++++++++++++++++++++++++++++ lib/mouse.class.ts | 4 ++++ 2 files changed, 48 insertions(+) diff --git a/lib/mouse.class.spec.ts b/lib/mouse.class.spec.ts index f758e3a6..35ff0f35 100644 --- a/lib/mouse.class.spec.ts +++ b/lib/mouse.class.spec.ts @@ -177,6 +177,50 @@ describe("Mouse class", () => { expect(pressed).toBe(SUT); expect(released).toBe(SUT); }); + + describe("autoDelayMs", () => { + it("pressButton should respect configured delay", async () => { + // GIVEN + const SUT = new MouseClass(providerRegistryMock); + const delay = 100; + SUT.config.autoDelayMs = delay; + + const mouseMock = jest.fn(); + providerRegistryMock.getMouse = jest.fn(() => mockPartial({ + setMouseDelay: jest.fn(), + pressButton: mouseMock + })); + + // WHEN + const start = Date.now(); + await SUT.pressButton(Button.LEFT); + const duration = Date.now() - start; + + // THEN + expect(duration).toBeGreaterThanOrEqual(delay); + }); + + it("releaseButton should respect configured delay", async () => { + // GIVEN + const SUT = new MouseClass(providerRegistryMock); + const delay = 100; + SUT.config.autoDelayMs = delay; + + const mouseMock = jest.fn(); + providerRegistryMock.getMouse = jest.fn(() => mockPartial({ + setMouseDelay: jest.fn(), + releaseButton: mouseMock + })); + + // WHEN + const start = Date.now(); + await SUT.releaseButton(Button.LEFT); + const duration = Date.now() - start; + + // THEN + expect(duration).toBeGreaterThanOrEqual(delay); + }); + }); }); describe("click and doubleClick", () => { diff --git a/lib/mouse.class.ts b/lib/mouse.class.ts index ecd77d4f..98a4cbde 100644 --- a/lib/mouse.class.ts +++ b/lib/mouse.class.ts @@ -187,6 +187,7 @@ export class MouseClass { public async pressButton(btn: Button): Promise { return new Promise(async (resolve, reject) => { try { + await sleep(this.config.autoDelayMs); await this.providerRegistry.getMouse().pressButton(btn); resolve(this); } catch (e) { @@ -202,6 +203,7 @@ export class MouseClass { public async releaseButton(btn: Button): Promise { return new Promise(async (resolve, reject) => { try { + await sleep(this.config.autoDelayMs); await this.providerRegistry.getMouse().releaseButton(btn); resolve(this); } catch (e) { @@ -217,6 +219,7 @@ export class MouseClass { public async click(btn: Button): Promise { return new Promise(async (resolve, reject) => { try { + await sleep(this.config.autoDelayMs); await this.providerRegistry.getMouse().click(btn); resolve(this); } catch (e) { @@ -232,6 +235,7 @@ export class MouseClass { public async doubleClick(btn: Button): Promise { return new Promise(async (resolve, reject) => { try { + await sleep(this.config.autoDelayMs); await this.providerRegistry.getMouse().doubleClick(btn); resolve(this); } catch (e) {