Skip to content

Commit a9c9575

Browse files
authored
Maintenance/340/refine types (#343)
* (#340) Refactor the `data` property of `ImageWriterParameters` to `image` * (#340) Refactor `Image#data` to a `Buffer` instead of `any` * (#340) Fixed screen tests
1 parent d76a1b3 commit a9c9575

9 files changed

+22
-20
lines changed

lib/image.class.spec.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,29 @@ afterEach(() => {
1414

1515
describe("Image class", () => {
1616
it("should return alphachannel = true for > 3 channels", () => {
17-
const SUT = new Image(200, 200, 123, 4, "id");
17+
const SUT = new Image(200, 200, Buffer.from([123]), 4, "id");
1818
expect(SUT.hasAlphaChannel).toBeTruthy();
1919
});
2020

2121
it("should return alphachannel = false for <= 3 channels", () => {
22-
const SUT = new Image(200, 200, 123, 3, "id");
22+
const SUT = new Image(200, 200, Buffer.from([123]), 3, "id");
2323
expect(SUT.hasAlphaChannel).toBeFalsy();
2424
});
2525
it("should return alphachannel = false for <= 3 channels", () => {
26-
const SUT = new Image(200, 200, 123, 2, "id");
26+
const SUT = new Image(200, 200, Buffer.from([123]), 2, "id");
2727
expect(SUT.hasAlphaChannel).toBeFalsy();
2828
});
2929
it("should return alphachannel = false for <= 3 channels", () => {
30-
const SUT = new Image(200, 200, 123, 1, "id");
30+
const SUT = new Image(200, 200, Buffer.from([123]), 1, "id");
3131
expect(SUT.hasAlphaChannel).toBeFalsy();
3232
});
3333

3434
it("should throw for <= 0 channels", () => {
35-
expect(() => new Image(200, 200, 123, 0, "id")).toThrowError("Channel <= 0");
35+
expect(() => new Image(200, 200, Buffer.from([123]), 0, "id")).toThrowError("Channel <= 0");
3636
});
3737

3838
it("should have a default pixel density of 1.0", () => {
39-
const SUT = new Image(200, 200, 123, 1, "id");
39+
const SUT = new Image(200, 200, Buffer.from([123]), 1, "id");
4040
expect(SUT.pixelDensity).toEqual({scaleX: 1.0, scaleY: 1.0});
4141
});
4242

lib/image.class.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class Image {
1818
constructor(
1919
public readonly width: number,
2020
public readonly height: number,
21-
public readonly data: any,
21+
public readonly data: Buffer,
2222
public readonly channels: number,
2323
public readonly id: string,
2424
public readonly colorMode: ColorMode = ColorMode.BGR,

lib/match-request.class.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ describe("MatchRequest", () => {
99
new Image(
1010
100,
1111
100,
12-
new ArrayBuffer(0),
12+
Buffer.from([]),
1313
3,
1414
"haystack_image"
1515
),
1616
new Image(
1717
100,
1818
100,
19-
new ArrayBuffer(0),
19+
Buffer.from([]),
2020
3,
2121
"needle_image"
2222
),

lib/provider/image-writer.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {Image} from "../image.class";
22
import {DataSinkInterface} from "./data-sink.interface";
33

44
export interface ImageWriterParameters {
5-
data: Image,
5+
image: Image,
66
path: string
77
}
88

lib/provider/io/jimp-image-writer.class.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('Jimp image writer', () => {
3333
const SUT = new ImageWriter();
3434

3535
// WHEN
36-
await SUT.store({data: outputFile, path: outputFileName});
36+
await SUT.store({image: outputFile, path: outputFileName});
3737

3838
// THEN
3939
expect(scanMock).toHaveBeenCalledTimes(1)

lib/provider/io/jimp-image-writer.class.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {imageToJimp} from "./imageToJimp.function";
44
export default class implements ImageWriter {
55
store(parameters: ImageWriterParameters): Promise<void> {
66
return new Promise((resolve, reject) => {
7-
const jimpImage = imageToJimp(parameters.data);
7+
const jimpImage = imageToJimp(parameters.image);
88
jimpImage
99
.writeAsync(parameters.path)
1010
.then(_ => resolve())

lib/screen.class.spec.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {Region} from "./region.class";
77
import {ScreenClass} from "./screen.class";
88
import {mockPartial} from "sneer";
99
import {ProviderRegistry} from "./provider/provider-registry.class";
10-
import {ImageFinderInterface, ImageWriter, ScreenProviderInterface} from "./provider";
10+
import {ImageFinderInterface, ImageWriter, ImageWriterParameters, ScreenProviderInterface} from "./provider";
1111
import {OptionalSearchParameters} from "./optionalsearchparameters.class";
1212

1313
jest.mock('jimp', () => {
@@ -19,7 +19,7 @@ const providerRegistryMock = mockPartial<ProviderRegistry>({
1919
getScreen(): ScreenProviderInterface {
2020
return mockPartial<ScreenProviderInterface>({
2121
grabScreenRegion(): Promise<Image> {
22-
return Promise.resolve(new Image(searchRegion.width, searchRegion.height, new ArrayBuffer(0), 3, "needle_image"));
22+
return Promise.resolve(new Image(searchRegion.width, searchRegion.height, Buffer.from([]), 3, "needle_image"));
2323
},
2424
screenSize(): Promise<Region> {
2525
return Promise.resolve(searchRegion);
@@ -614,7 +614,7 @@ describe("Screen.", () => {
614614
describe("capture", () => {
615615
it("should capture the whole screen and save image", async () => {
616616
// GIVEN
617-
const screenshot = mockPartial<Image>({data: "pretty pretty image"});
617+
const screenshot = mockPartial<Image>({data: Buffer.from([])});
618618
const grabScreenMock = jest.fn(() => Promise.resolve(screenshot));
619619
const saveImageMock = jest.fn();
620620
providerRegistryMock.getScreen = jest.fn(() => mockPartial<ScreenProviderInterface>({
@@ -627,21 +627,22 @@ describe("Screen.", () => {
627627
const SUT = new ScreenClass(providerRegistryMock);
628628
const imageName = "foobar.png"
629629
const expectedImagePath = join(cwd(), imageName)
630+
const expectedData: ImageWriterParameters = {image: screenshot, path: expectedImagePath}
630631

631632
// WHEN
632633
const imagePath = await SUT.capture(imageName)
633634

634635
// THEN
635636
expect(imagePath).toBe(expectedImagePath)
636637
expect(grabScreenMock).toHaveBeenCalled()
637-
expect(saveImageMock).toHaveBeenCalledWith({data: screenshot, path: expectedImagePath})
638+
expect(saveImageMock).toHaveBeenCalledWith(expectedData);
638639
});
639640
})
640641

641642
describe("captureRegion", () => {
642643
it("should capture the specified region of the screen and save image", async () => {
643644
// GIVEN
644-
const screenshot = mockPartial<Image>({data: "pretty partial image"});
645+
const screenshot = mockPartial<Image>({data: Buffer.from([])});
645646
const regionToCapture = mockPartial<Region>({top: 42, left: 9, height: 10, width: 3.14159265359})
646647
const grabScreenMock = jest.fn(() => Promise.resolve(screenshot));
647648
const saveImageMock = jest.fn();
@@ -655,14 +656,15 @@ describe("Screen.", () => {
655656
const SUT = new ScreenClass(providerRegistryMock);
656657
const imageName = "foobar.png"
657658
const expectedImagePath = join(cwd(), imageName)
659+
const expectedData: ImageWriterParameters = {image: screenshot, path: expectedImagePath}
658660

659661
// WHEN
660662
const imagePath = await SUT.captureRegion(imageName, regionToCapture)
661663

662664
// THEN
663665
expect(imagePath).toBe(expectedImagePath)
664666
expect(grabScreenMock).toHaveBeenCalledWith(regionToCapture)
665-
expect(saveImageMock).toHaveBeenCalledWith({data: screenshot, path: expectedImagePath})
667+
expect(saveImageMock).toHaveBeenCalledWith(expectedData);
666668
});
667669
});
668670
});

lib/screen.class.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export class ScreenClass {
324324
prefix: fileNamePrefix,
325325
type: fileFormat,
326326
});
327-
await this.providerRegistry.getImageWriter().store({data: image, path: outputPath})
327+
await this.providerRegistry.getImageWriter().store({image, path: outputPath})
328328
return outputPath;
329329
}
330330
}

lib/screen.colorAt.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const providerRegistryMock = mockPartial<ProviderRegistry>({
88
getScreen(): ScreenProviderInterface {
99
return mockPartial<ScreenProviderInterface>({
1010
grabScreenRegion(): Promise<Image> {
11-
return Promise.resolve(new Image(searchRegion.width, searchRegion.height, new ArrayBuffer(0), 3, "needle_image"));
11+
return Promise.resolve(new Image(searchRegion.width, searchRegion.height, Buffer.from([]), 3, "needle_image"));
1212
},
1313
screenSize(): Promise<Region> {
1414
return Promise.resolve(searchRegion);

0 commit comments

Comments
 (0)