Skip to content

Commit baca0ef

Browse files
authored
Merge pull request #41 from nut-tree/feature/37/screenshot_methods
Feature/37/screenshot methods
2 parents 03672e4 + 7c1faad commit baca0ef

21 files changed

+608
-327
lines changed

.travis.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ node_js:
66
- "lts/dubnium"
77
cache: npm
88

9-
notifications:
10-
webhooks: https://outlook.office.com/webhook/b6e4942d-6066-4001-8ba1-428598f3ae13@eb86a0ab-5bd0-4070-b04f-b7bf90ca02c5/TravisCI/ad6b89add60a4d4c8d1a06aa4ee424e8/d6c06c79-667d-43b9-92b6-0e9687d93d0f
11-
129
addons:
1310
sonarcloud:
1411
organization: "nut-tree"

demo/mouse.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ const square = async () => {
1212
};
1313

1414
(async () => {
15-
mouse
16-
.leftClick()
17-
// await square();
15+
await mouse
16+
.leftClick();
17+
await square();
1818
try {
1919
screen.config.resourceDirectory = "./assets";
2020
const whale = await screen.findOnScreen("docker.png");
21-
mouse.move(await movement.straightTo(Location.centerOf(whale)));
21+
await mouse.move(await movement.straightTo(Location.centerOf(whale)));
2222

2323
const gitlens = await screen.findOnScreen("gitlens.png");
24-
mouse.move(await movement.straightTo(Location.centerOf(gitlens)));
25-
mouse.drag(await movement.right(600));
26-
mouse.move(await movement.straightTo(Location.centerOf(gitlens)));
27-
mouse.drag(await movement.straightTo(Location.centerOf(whale)));
24+
await mouse.move(await movement.straightTo(Location.centerOf(gitlens)));
25+
await mouse.drag(await movement.right(600));
26+
await mouse.move(await movement.straightTo(Location.centerOf(gitlens)));
27+
await mouse.drag(await movement.straightTo(Location.centerOf(whale)));
2828
} catch (error) {
2929
console.log(error);
3030
}

index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const clipboard = new Clipboard(nativeActions);
2525
const keyboard = new Keyboard(nativeActions);
2626
const mouse = new Mouse(nativeActions);
2727
const movement = new Movement(nativeActions, new LineHelper());
28-
const screen = new Screen(screenActions, nativeActions);
28+
const screen = new Screen(screenActions);
2929
const assert = new Assert(screen);
3030

3131
export { clipboard, keyboard, mouse, movement, screen, assert };

lib/adapter/native.adapter.class.spec.ts

Lines changed: 15 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,19 @@ import { Point } from "../point.class";
44
import { ClipboardAction } from "../provider/native/clipboardy-clipboard-action.class";
55
import { KeyboardAction } from "../provider/native/robotjs-keyboard-action.class";
66
import { MouseAction } from "../provider/native/robotjs-mouse-action.class";
7-
import { ScreenAction } from "../provider/native/robotjs-screen-action.class";
8-
import { Region } from "../region.class";
97
import { NativeAdapter } from "./native.adapter.class";
108

119
jest.mock("../provider/native/clipboardy-clipboard-action.class");
1210
jest.mock("../provider/native/robotjs-mouse-action.class");
1311
jest.mock("../provider/native/robotjs-keyboard-action.class");
14-
jest.mock("../provider/native/robotjs-screen-action.class");
15-
16-
describe("Native adapter class", () => {
17-
it("should delegate calls to grabScreen", () => {
18-
// GIVEN
19-
const clipboardMock = new ClipboardAction();
20-
const keyboardMock = new KeyboardAction();
21-
const mouseMock = new MouseAction();
22-
const screenMock = new ScreenAction();
23-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
24-
25-
// WHEN
26-
SUT.grabScreen();
27-
28-
// THEN
29-
expect(screenMock.grabScreen).toBeCalledTimes(1);
30-
});
31-
32-
it("should delegate calls to grabScreenRegion", () => {
33-
// GIVEN
34-
const clipboardMock = new ClipboardAction();
35-
const keyboardMock = new KeyboardAction();
36-
const mouseMock = new MouseAction();
37-
const screenMock = new ScreenAction();
38-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
39-
const screenRegion = new Region(0, 0, 100, 100);
40-
41-
// WHEN
42-
SUT.grabScreenRegion(screenRegion);
43-
44-
// THEN
45-
expect(screenMock.grabScreenRegion).toBeCalledTimes(1);
46-
expect(screenMock.grabScreenRegion).toBeCalledWith(screenRegion);
47-
});
4812

13+
describe("NativeAdapter class", () => {
4914
it("should delegate calls to setMouseDelay", () => {
5015
// GIVEN
5116
const clipboardMock = new ClipboardAction();
5217
const keyboardMock = new KeyboardAction();
5318
const mouseMock = new MouseAction();
54-
const screenMock = new ScreenAction();
55-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
19+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
5620
const delay = 5;
5721

5822
// WHEN
@@ -68,8 +32,7 @@ describe("Native adapter class", () => {
6832
const clipboardMock = new ClipboardAction();
6933
const keyboardMock = new KeyboardAction();
7034
const mouseMock = new MouseAction();
71-
const screenMock = new ScreenAction();
72-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
35+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
7336
const newPosition = new Point(10, 10);
7437

7538
// WHEN
@@ -85,8 +48,7 @@ describe("Native adapter class", () => {
8548
const clipboardMock = new ClipboardAction();
8649
const keyboardMock = new KeyboardAction();
8750
const mouseMock = new MouseAction();
88-
const screenMock = new ScreenAction();
89-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
51+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
9052

9153
// WHEN
9254
SUT.currentMousePosition();
@@ -95,58 +57,12 @@ describe("Native adapter class", () => {
9557
expect(mouseMock.currentMousePosition).toBeCalledTimes(1);
9658
});
9759

98-
it("should delegate calls to screenWidth", () => {
99-
// GIVEN
100-
const clipboardMock = new ClipboardAction();
101-
const keyboardMock = new KeyboardAction();
102-
const mouseMock = new MouseAction();
103-
const screenMock = new ScreenAction();
104-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
105-
106-
// WHEN
107-
SUT.screenWidth();
108-
109-
// THEN
110-
expect(screenMock.screenWidth).toBeCalledTimes(1);
111-
});
112-
113-
it("should delegate calls to screenHeight", () => {
114-
// GIVEN
115-
const clipboardMock = new ClipboardAction();
116-
const keyboardMock = new KeyboardAction();
117-
const mouseMock = new MouseAction();
118-
const screenMock = new ScreenAction();
119-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
120-
121-
// WHEN
122-
SUT.screenHeight();
123-
124-
// THEN
125-
expect(screenMock.screenHeight).toBeCalledTimes(1);
126-
});
127-
128-
it("should delegate calls to screenSize", () => {
129-
// GIVEN
130-
const clipboardMock = new ClipboardAction();
131-
const keyboardMock = new KeyboardAction();
132-
const mouseMock = new MouseAction();
133-
const screenMock = new ScreenAction();
134-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
135-
136-
// WHEN
137-
SUT.screenSize();
138-
139-
// THEN
140-
expect(screenMock.screenSize).toBeCalledTimes(1);
141-
});
142-
14360
it("should delegate calls to leftClick", () => {
14461
// GIVEN
14562
const clipboardMock = new ClipboardAction();
14663
const keyboardMock = new KeyboardAction();
14764
const mouseMock = new MouseAction();
148-
const screenMock = new ScreenAction();
149-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
65+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
15066

15167
// WHEN
15268
SUT.leftClick();
@@ -160,8 +76,7 @@ describe("Native adapter class", () => {
16076
const clipboardMock = new ClipboardAction();
16177
const keyboardMock = new KeyboardAction();
16278
const mouseMock = new MouseAction();
163-
const screenMock = new ScreenAction();
164-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
79+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
16580

16681
// WHEN
16782
SUT.rightClick();
@@ -175,8 +90,7 @@ describe("Native adapter class", () => {
17590
const clipboardMock = new ClipboardAction();
17691
const keyboardMock = new KeyboardAction();
17792
const mouseMock = new MouseAction();
178-
const screenMock = new ScreenAction();
179-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
93+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
18094

18195
// WHEN
18296
SUT.middleClick();
@@ -190,8 +104,7 @@ describe("Native adapter class", () => {
190104
const clipboardMock = new ClipboardAction();
191105
const keyboardMock = new KeyboardAction();
192106
const mouseMock = new MouseAction();
193-
const screenMock = new ScreenAction();
194-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
107+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
195108
const buttonToPress = Button.LEFT;
196109

197110
// WHEN
@@ -207,8 +120,7 @@ describe("Native adapter class", () => {
207120
const clipboardMock = new ClipboardAction();
208121
const keyboardMock = new KeyboardAction();
209122
const mouseMock = new MouseAction();
210-
const screenMock = new ScreenAction();
211-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
123+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
212124
const buttonToRelease = Button.LEFT;
213125

214126
// WHEN
@@ -224,8 +136,7 @@ describe("Native adapter class", () => {
224136
const clipboardMock = new ClipboardAction();
225137
const keyboardMock = new KeyboardAction();
226138
const mouseMock = new MouseAction();
227-
const screenMock = new ScreenAction();
228-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
139+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
229140
const keyToPress = Key.A;
230141

231142
// WHEN
@@ -241,8 +152,7 @@ describe("Native adapter class", () => {
241152
const clipboardMock = new ClipboardAction();
242153
const keyboardMock = new KeyboardAction();
243154
const mouseMock = new MouseAction();
244-
const screenMock = new ScreenAction();
245-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
155+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
246156
const keyToRelease = Key.A;
247157

248158
// WHEN
@@ -258,8 +168,7 @@ describe("Native adapter class", () => {
258168
const clipboardMock = new ClipboardAction();
259169
const keyboardMock = new KeyboardAction();
260170
const mouseMock = new MouseAction();
261-
const screenMock = new ScreenAction();
262-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
171+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
263172
const keyToClick = Key.A;
264173

265174
// WHEN
@@ -275,8 +184,7 @@ describe("Native adapter class", () => {
275184
const clipboardMock = new ClipboardAction();
276185
const keyboardMock = new KeyboardAction();
277186
const mouseMock = new MouseAction();
278-
const screenMock = new ScreenAction();
279-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
187+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
280188
const stringToType = "testString";
281189

282190
// WHEN
@@ -292,8 +200,7 @@ describe("Native adapter class", () => {
292200
const clipboardMock = new ClipboardAction();
293201
const keyboardMock = new KeyboardAction();
294202
const mouseMock = new MouseAction();
295-
const screenMock = new ScreenAction();
296-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
203+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
297204
const stringToCopy = "testString";
298205

299206
// WHEN
@@ -309,8 +216,7 @@ describe("Native adapter class", () => {
309216
const clipboardMock = new ClipboardAction();
310217
const keyboardMock = new KeyboardAction();
311218
const mouseMock = new MouseAction();
312-
const screenMock = new ScreenAction();
313-
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock, screenMock);
219+
const SUT = new NativeAdapter(clipboardMock, keyboardMock, mouseMock);
314220

315221
// WHEN
316222
SUT.paste();

lib/adapter/native.adapter.class.ts

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Button } from "../button.enum";
2-
import { Image } from "../image.class";
32
import { Key } from "../key.enum";
43
import { Point } from "../point.class";
54
import { ClipboardActionProvider } from "../provider/native/clipboard-action-provider.interface";
@@ -8,9 +7,6 @@ import { KeyboardActionProvider } from "../provider/native/keyboard-action-provi
87
import { MouseActionInterface } from "../provider/native/mouse-action-provider.interface";
98
import { KeyboardAction } from "../provider/native/robotjs-keyboard-action.class";
109
import { MouseAction } from "../provider/native/robotjs-mouse-action.class";
11-
import { ScreenAction } from "../provider/native/robotjs-screen-action.class";
12-
import { ScreenActionProvider } from "../provider/native/screen-action-provider.interface";
13-
import { Region } from "../region.class";
1410

1511
/**
1612
* NativeAdapter serves as an abstraction layer for all OS level interactions.
@@ -24,30 +20,8 @@ export class NativeAdapter {
2420
private clipboard: ClipboardActionProvider = new ClipboardAction(),
2521
private keyboard: KeyboardActionProvider = new KeyboardAction(),
2622
private mouse: MouseActionInterface = new MouseAction(),
27-
private screen: ScreenActionProvider = new ScreenAction(),
2823
) {}
2924

30-
/**
31-
* grabScreen will return an Image containing the current screen image
32-
*
33-
* @returns {Promise<Image>} Image will contain screenshot data as well as dimensions
34-
* @memberof NativeAdapter
35-
*/
36-
public grabScreen(): Promise<Image> {
37-
return this.screen.grabScreen();
38-
}
39-
40-
/**
41-
* grabScreenRegion essentially does the same as grabScreen, but only returns a specified Region
42-
*
43-
* @param {Region} region The screen region we want to grab
44-
* @returns {Promise<Image>} Image will contain screenshot data of the specified region as well as dimensions
45-
* @memberof NativeAdapter
46-
*/
47-
public grabScreenRegion(region: Region): Promise<Image> {
48-
return this.screen.grabScreenRegion(region);
49-
}
50-
5125
/**
5226
* setMouseDelay configures mouse speed for movement
5327
*
@@ -88,42 +62,6 @@ export class NativeAdapter {
8862
return this.mouse.currentMousePosition();
8963
}
9064

91-
/**
92-
* screenWidth returns the main screen's width as reported by the OS.
93-
* Please notice that on e.g. Apples Retina display the reported width
94-
* and the actual pixel size may differ
95-
*
96-
* @returns {Promise<number>} The main screen's width as reported by the OS
97-
* @memberof NativeAdapter
98-
*/
99-
public screenWidth(): Promise<number> {
100-
return this.screen.screenWidth();
101-
}
102-
103-
/**
104-
* screenHeight returns the main screen's height as reported by the OS.
105-
* Please notice that on e.g. Apples Retina display the reported width
106-
* and the actual pixel size may differ
107-
*
108-
* @returns {Promise<number>} The main screen's height as reported by the OS
109-
* @memberof NativeAdapter
110-
*/
111-
public screenHeight(): Promise<number> {
112-
return this.screen.screenHeight();
113-
}
114-
115-
/**
116-
* screenSize returns a Region object with the main screen's size.
117-
* Please notice that on e.g. Apples Retina display the reported width
118-
* and the actual pixel size may differ
119-
*
120-
* @returns {Promise<Region>} The Region object the size of your main screen
121-
* @memberof NativeAdapter
122-
*/
123-
public screenSize(): Promise<Region> {
124-
return this.screen.screenSize();
125-
}
126-
12765
/**
12866
* leftClick triggers a native left-click event via OS API
12967
*

0 commit comments

Comments
 (0)