react-native-ai-devtools 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +32 -0
- package/README.md +1250 -0
- package/build/__tests__/helpers/fake-cdp-server.d.ts +56 -0
- package/build/__tests__/helpers/fake-cdp-server.d.ts.map +1 -0
- package/build/__tests__/helpers/fake-cdp-server.js +108 -0
- package/build/__tests__/helpers/fake-cdp-server.js.map +1 -0
- package/build/__tests__/integration/connection-health.test.d.ts +2 -0
- package/build/__tests__/integration/connection-health.test.d.ts.map +1 -0
- package/build/__tests__/integration/connection-health.test.js +151 -0
- package/build/__tests__/integration/connection-health.test.js.map +1 -0
- package/build/__tests__/integration/execute-in-app.test.d.ts +2 -0
- package/build/__tests__/integration/execute-in-app.test.d.ts.map +1 -0
- package/build/__tests__/integration/execute-in-app.test.js +115 -0
- package/build/__tests__/integration/execute-in-app.test.js.map +1 -0
- package/build/__tests__/integration/tools.test.d.ts +2 -0
- package/build/__tests__/integration/tools.test.d.ts.map +1 -0
- package/build/__tests__/integration/tools.test.js +228 -0
- package/build/__tests__/integration/tools.test.js.map +1 -0
- package/build/__tests__/setup.d.ts +2 -0
- package/build/__tests__/setup.d.ts.map +1 -0
- package/build/__tests__/setup.js +11 -0
- package/build/__tests__/setup.js.map +1 -0
- package/build/__tests__/unit/bundle.test.d.ts +2 -0
- package/build/__tests__/unit/bundle.test.d.ts.map +1 -0
- package/build/__tests__/unit/bundle.test.js +53 -0
- package/build/__tests__/unit/bundle.test.js.map +1 -0
- package/build/__tests__/unit/connection-health.test.d.ts +2 -0
- package/build/__tests__/unit/connection-health.test.d.ts.map +1 -0
- package/build/__tests__/unit/connection-health.test.js +28 -0
- package/build/__tests__/unit/connection-health.test.js.map +1 -0
- package/build/__tests__/unit/executor.test.d.ts +2 -0
- package/build/__tests__/unit/executor.test.d.ts.map +1 -0
- package/build/__tests__/unit/executor.test.js +79 -0
- package/build/__tests__/unit/executor.test.js.map +1 -0
- package/build/__tests__/unit/logs.test.d.ts +2 -0
- package/build/__tests__/unit/logs.test.d.ts.map +1 -0
- package/build/__tests__/unit/logs.test.js +81 -0
- package/build/__tests__/unit/logs.test.js.map +1 -0
- package/build/__tests__/unit/metro.test.d.ts +2 -0
- package/build/__tests__/unit/metro.test.d.ts.map +1 -0
- package/build/__tests__/unit/metro.test.js +61 -0
- package/build/__tests__/unit/metro.test.js.map +1 -0
- package/build/__tests__/unit/network.test.d.ts +2 -0
- package/build/__tests__/unit/network.test.d.ts.map +1 -0
- package/build/__tests__/unit/network.test.js +102 -0
- package/build/__tests__/unit/network.test.js.map +1 -0
- package/build/__tests__/unit/tap.test.d.ts +2 -0
- package/build/__tests__/unit/tap.test.d.ts.map +1 -0
- package/build/__tests__/unit/tap.test.js +157 -0
- package/build/__tests__/unit/tap.test.js.map +1 -0
- package/build/core/android.d.ts +265 -0
- package/build/core/android.d.ts.map +1 -0
- package/build/core/android.js +1413 -0
- package/build/core/android.js.map +1 -0
- package/build/core/bundle.d.ts +49 -0
- package/build/core/bundle.d.ts.map +1 -0
- package/build/core/bundle.js +368 -0
- package/build/core/bundle.js.map +1 -0
- package/build/core/connection.d.ts +43 -0
- package/build/core/connection.d.ts.map +1 -0
- package/build/core/connection.js +963 -0
- package/build/core/connection.js.map +1 -0
- package/build/core/connectionState.d.ts +108 -0
- package/build/core/connectionState.d.ts.map +1 -0
- package/build/core/connectionState.js +284 -0
- package/build/core/connectionState.js.map +1 -0
- package/build/core/errorScreenParser.d.ts +30 -0
- package/build/core/errorScreenParser.d.ts.map +1 -0
- package/build/core/errorScreenParser.js +198 -0
- package/build/core/errorScreenParser.js.map +1 -0
- package/build/core/executor.d.ts +113 -0
- package/build/core/executor.d.ts.map +1 -0
- package/build/core/executor.js +1877 -0
- package/build/core/executor.js.map +1 -0
- package/build/core/format.d.ts +8 -0
- package/build/core/format.d.ts.map +1 -0
- package/build/core/format.js +34 -0
- package/build/core/format.js.map +1 -0
- package/build/core/guides.d.ts +14 -0
- package/build/core/guides.d.ts.map +1 -0
- package/build/core/guides.js +261 -0
- package/build/core/guides.js.map +1 -0
- package/build/core/httpServer.d.ts +14 -0
- package/build/core/httpServer.d.ts.map +1 -0
- package/build/core/httpServer.js +2459 -0
- package/build/core/httpServer.js.map +1 -0
- package/build/core/httpServerProcess.d.ts +25 -0
- package/build/core/httpServerProcess.d.ts.map +1 -0
- package/build/core/httpServerProcess.js +153 -0
- package/build/core/httpServerProcess.js.map +1 -0
- package/build/core/index.d.ts +25 -0
- package/build/core/index.d.ts.map +1 -0
- package/build/core/index.js +53 -0
- package/build/core/index.js.map +1 -0
- package/build/core/ios.d.ts +214 -0
- package/build/core/ios.d.ts.map +1 -0
- package/build/core/ios.js +1232 -0
- package/build/core/ios.js.map +1 -0
- package/build/core/logs.d.ts +43 -0
- package/build/core/logs.d.ts.map +1 -0
- package/build/core/logs.js +144 -0
- package/build/core/logs.js.map +1 -0
- package/build/core/metro.d.ts +23 -0
- package/build/core/metro.d.ts.map +1 -0
- package/build/core/metro.js +96 -0
- package/build/core/metro.js.map +1 -0
- package/build/core/network.d.ts +43 -0
- package/build/core/network.d.ts.map +1 -0
- package/build/core/network.js +217 -0
- package/build/core/network.js.map +1 -0
- package/build/core/networkInterceptor.d.ts +3 -0
- package/build/core/networkInterceptor.d.ts.map +1 -0
- package/build/core/networkInterceptor.js +203 -0
- package/build/core/networkInterceptor.js.map +1 -0
- package/build/core/ocr.d.ts +69 -0
- package/build/core/ocr.d.ts.map +1 -0
- package/build/core/ocr.js +212 -0
- package/build/core/ocr.js.map +1 -0
- package/build/core/state.d.ts +17 -0
- package/build/core/state.d.ts.map +1 -0
- package/build/core/state.js +50 -0
- package/build/core/state.js.map +1 -0
- package/build/core/tap.d.ts +91 -0
- package/build/core/tap.d.ts.map +1 -0
- package/build/core/tap.js +542 -0
- package/build/core/tap.js.map +1 -0
- package/build/core/telemetry.d.ts +4 -0
- package/build/core/telemetry.d.ts.map +1 -0
- package/build/core/telemetry.js +289 -0
- package/build/core/telemetry.js.map +1 -0
- package/build/core/types.d.ts +134 -0
- package/build/core/types.d.ts.map +1 -0
- package/build/core/types.js +2 -0
- package/build/core/types.js.map +1 -0
- package/build/httpServerStandalone.d.ts +7 -0
- package/build/httpServerStandalone.d.ts.map +1 -0
- package/build/httpServerStandalone.js +31 -0
- package/build/httpServerStandalone.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +3012 -0
- package/build/index.js.map +1 -0
- package/build/pro/tap.d.ts +91 -0
- package/build/pro/tap.d.ts.map +1 -0
- package/build/pro/tap.js +542 -0
- package/build/pro/tap.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { describe, it, expect } from "@jest/globals";
|
|
2
|
+
import { selectMainDevice } from "../../core/metro.js";
|
|
3
|
+
function makeDevice(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
id: "test-id",
|
|
6
|
+
title: "Test Device",
|
|
7
|
+
description: "Test Description",
|
|
8
|
+
appId: "com.test.app",
|
|
9
|
+
type: "node",
|
|
10
|
+
webSocketDebuggerUrl: "ws://localhost:8081/inspector/device?page=1",
|
|
11
|
+
deviceName: "Test",
|
|
12
|
+
...overrides,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
describe("selectMainDevice", () => {
|
|
16
|
+
it("returns null for empty list", () => {
|
|
17
|
+
expect(selectMainDevice([])).toBeNull();
|
|
18
|
+
});
|
|
19
|
+
it("prefers Bridgeless device (Expo SDK 54+)", () => {
|
|
20
|
+
const devices = [
|
|
21
|
+
makeDevice({ id: "hermes", title: "Hermes React Native" }),
|
|
22
|
+
makeDevice({ id: "bridgeless", description: "React Native Bridgeless [C++ (Hermes)]" }),
|
|
23
|
+
];
|
|
24
|
+
expect(selectMainDevice(devices)?.id).toBe("bridgeless");
|
|
25
|
+
});
|
|
26
|
+
it("prefers Hermes when no Bridgeless available", () => {
|
|
27
|
+
const devices = [
|
|
28
|
+
makeDevice({ id: "generic", title: "React Native" }),
|
|
29
|
+
makeDevice({ id: "hermes", title: "Hermes React Native" }),
|
|
30
|
+
];
|
|
31
|
+
expect(selectMainDevice(devices)?.id).toBe("hermes");
|
|
32
|
+
});
|
|
33
|
+
it("selects Hermes by title containing 'Hermes'", () => {
|
|
34
|
+
const devices = [
|
|
35
|
+
makeDevice({ id: "hermes", title: "Some Hermes Runtime" }),
|
|
36
|
+
];
|
|
37
|
+
expect(selectMainDevice(devices)?.id).toBe("hermes");
|
|
38
|
+
});
|
|
39
|
+
it("falls back to React Native excluding Reanimated", () => {
|
|
40
|
+
const devices = [
|
|
41
|
+
makeDevice({ id: "reanimated", title: "Reanimated React Native" }),
|
|
42
|
+
makeDevice({ id: "rn", title: "React Native" }),
|
|
43
|
+
];
|
|
44
|
+
expect(selectMainDevice(devices)?.id).toBe("rn");
|
|
45
|
+
});
|
|
46
|
+
it("excludes Experimental devices from React Native fallback", () => {
|
|
47
|
+
const devices = [
|
|
48
|
+
makeDevice({ id: "exp", title: "Experimental React Native" }),
|
|
49
|
+
makeDevice({ id: "rn", title: "React Native" }),
|
|
50
|
+
];
|
|
51
|
+
expect(selectMainDevice(devices)?.id).toBe("rn");
|
|
52
|
+
});
|
|
53
|
+
it("falls back to first device when no RN match", () => {
|
|
54
|
+
const devices = [
|
|
55
|
+
makeDevice({ id: "first", title: "Unknown Device" }),
|
|
56
|
+
makeDevice({ id: "second", title: "Other Device" }),
|
|
57
|
+
];
|
|
58
|
+
expect(selectMainDevice(devices)?.id).toBe("first");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=metro.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metro.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/metro.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/network.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, it, expect } from "@jest/globals";
|
|
2
|
+
import { NetworkBuffer } from "../../core/network.js";
|
|
3
|
+
function makeRequest(id, overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
requestId: id,
|
|
6
|
+
timestamp: new Date(),
|
|
7
|
+
method: "GET",
|
|
8
|
+
url: `https://api.example.com/${id}`,
|
|
9
|
+
headers: {},
|
|
10
|
+
completed: false,
|
|
11
|
+
...overrides,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
describe("NetworkBuffer", () => {
|
|
15
|
+
let buffer;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
buffer = new NetworkBuffer(5);
|
|
18
|
+
});
|
|
19
|
+
it("starts empty", () => {
|
|
20
|
+
expect(buffer.size).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
it("set and get a request", () => {
|
|
23
|
+
const req = makeRequest("1");
|
|
24
|
+
buffer.set("1", req);
|
|
25
|
+
expect(buffer.get("1")).toBe(req);
|
|
26
|
+
expect(buffer.size).toBe(1);
|
|
27
|
+
});
|
|
28
|
+
it("updates existing request without increasing size", () => {
|
|
29
|
+
buffer.set("1", makeRequest("1"));
|
|
30
|
+
buffer.set("1", makeRequest("1", { status: 200, completed: true }));
|
|
31
|
+
expect(buffer.size).toBe(1);
|
|
32
|
+
expect(buffer.get("1")?.status).toBe(200);
|
|
33
|
+
});
|
|
34
|
+
it("evicts oldest when exceeding maxSize", () => {
|
|
35
|
+
for (let i = 0; i < 7; i++) {
|
|
36
|
+
buffer.set(`${i}`, makeRequest(`${i}`));
|
|
37
|
+
}
|
|
38
|
+
expect(buffer.size).toBe(5);
|
|
39
|
+
expect(buffer.get("0")).toBeUndefined();
|
|
40
|
+
expect(buffer.get("1")).toBeUndefined();
|
|
41
|
+
expect(buffer.get("2")).toBeDefined();
|
|
42
|
+
});
|
|
43
|
+
it("getAll() filters by method", () => {
|
|
44
|
+
buffer.set("1", makeRequest("1", { method: "GET" }));
|
|
45
|
+
buffer.set("2", makeRequest("2", { method: "POST" }));
|
|
46
|
+
const posts = buffer.getAll({ method: "POST" });
|
|
47
|
+
expect(posts).toHaveLength(1);
|
|
48
|
+
expect(posts[0].method).toBe("POST");
|
|
49
|
+
});
|
|
50
|
+
it("getAll() filters by method case-insensitively", () => {
|
|
51
|
+
buffer.set("1", makeRequest("1", { method: "GET" }));
|
|
52
|
+
const results = buffer.getAll({ method: "get" });
|
|
53
|
+
expect(results).toHaveLength(1);
|
|
54
|
+
});
|
|
55
|
+
it("getAll() filters by urlPattern (case-insensitive substring)", () => {
|
|
56
|
+
buffer.set("1", makeRequest("1", { url: "https://api.example.com/users" }));
|
|
57
|
+
buffer.set("2", makeRequest("2", { url: "https://api.example.com/posts" }));
|
|
58
|
+
const results = buffer.getAll({ urlPattern: "users" });
|
|
59
|
+
expect(results).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
it("getAll() filters by status", () => {
|
|
62
|
+
buffer.set("1", makeRequest("1", { status: 200 }));
|
|
63
|
+
buffer.set("2", makeRequest("2", { status: 404 }));
|
|
64
|
+
const results = buffer.getAll({ status: 200 });
|
|
65
|
+
expect(results).toHaveLength(1);
|
|
66
|
+
});
|
|
67
|
+
it("getAll() filters completedOnly", () => {
|
|
68
|
+
buffer.set("1", makeRequest("1", { completed: true }));
|
|
69
|
+
buffer.set("2", makeRequest("2", { completed: false }));
|
|
70
|
+
const results = buffer.getAll({ completedOnly: true });
|
|
71
|
+
expect(results).toHaveLength(1);
|
|
72
|
+
});
|
|
73
|
+
it("getAll() limits count (takes last N)", () => {
|
|
74
|
+
for (let i = 0; i < 5; i++) {
|
|
75
|
+
buffer.set(`${i}`, makeRequest(`${i}`));
|
|
76
|
+
}
|
|
77
|
+
const results = buffer.getAll({ count: 2 });
|
|
78
|
+
expect(results).toHaveLength(2);
|
|
79
|
+
});
|
|
80
|
+
it("getAll() sorts by timestamp", () => {
|
|
81
|
+
const earlier = new Date("2024-01-01T00:00:00Z");
|
|
82
|
+
const later = new Date("2024-01-01T01:00:00Z");
|
|
83
|
+
buffer.set("late", makeRequest("late", { timestamp: later }));
|
|
84
|
+
buffer.set("early", makeRequest("early", { timestamp: earlier }));
|
|
85
|
+
const results = buffer.getAll({});
|
|
86
|
+
expect(results[0].requestId).toBe("early");
|
|
87
|
+
expect(results[1].requestId).toBe("late");
|
|
88
|
+
});
|
|
89
|
+
it("search() finds by URL pattern", () => {
|
|
90
|
+
buffer.set("1", makeRequest("1", { url: "https://api.example.com/users" }));
|
|
91
|
+
buffer.set("2", makeRequest("2", { url: "https://api.example.com/posts" }));
|
|
92
|
+
const results = buffer.search("users");
|
|
93
|
+
expect(results).toHaveLength(1);
|
|
94
|
+
});
|
|
95
|
+
it("clear() empties buffer and returns count", () => {
|
|
96
|
+
buffer.set("1", makeRequest("1"));
|
|
97
|
+
buffer.set("2", makeRequest("2"));
|
|
98
|
+
expect(buffer.clear()).toBe(2);
|
|
99
|
+
expect(buffer.size).toBe(0);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=network.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/network.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/tap.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// src/__tests__/unit/tap.test.ts
|
|
2
|
+
import { describe, it, expect } from "@jest/globals";
|
|
3
|
+
import { buildQuery, getAvailableStrategies, isNonAscii, convertPixelsToPoints, formatTapSuccess, formatTapFailure, } from "../../pro/tap.js";
|
|
4
|
+
describe("ConnectedApp type", () => {
|
|
5
|
+
it("accepts platform and lastScreenshot fields", () => {
|
|
6
|
+
const app = {
|
|
7
|
+
ws: {},
|
|
8
|
+
deviceInfo: {
|
|
9
|
+
id: "test",
|
|
10
|
+
title: "Hermes React Native",
|
|
11
|
+
description: "",
|
|
12
|
+
appId: "com.test",
|
|
13
|
+
type: "node",
|
|
14
|
+
webSocketDebuggerUrl: "ws://localhost:8081",
|
|
15
|
+
deviceName: "iPhone 16",
|
|
16
|
+
},
|
|
17
|
+
port: 8081,
|
|
18
|
+
platform: "ios",
|
|
19
|
+
lastScreenshot: {
|
|
20
|
+
originalWidth: 1179,
|
|
21
|
+
originalHeight: 2556,
|
|
22
|
+
scaleFactor: 1,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
expect(app.platform).toBe("ios");
|
|
26
|
+
expect(app.lastScreenshot?.originalWidth).toBe(1179);
|
|
27
|
+
});
|
|
28
|
+
it("allows lastScreenshot to be undefined", () => {
|
|
29
|
+
const app = {
|
|
30
|
+
ws: {},
|
|
31
|
+
deviceInfo: {
|
|
32
|
+
id: "test",
|
|
33
|
+
title: "Hermes React Native",
|
|
34
|
+
description: "",
|
|
35
|
+
appId: "com.test",
|
|
36
|
+
type: "node",
|
|
37
|
+
webSocketDebuggerUrl: "ws://localhost:8081",
|
|
38
|
+
deviceName: "iPhone 16",
|
|
39
|
+
},
|
|
40
|
+
port: 8081,
|
|
41
|
+
platform: "ios",
|
|
42
|
+
};
|
|
43
|
+
expect(app.lastScreenshot).toBeUndefined();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("buildQuery", () => {
|
|
47
|
+
it("builds query from text param", () => {
|
|
48
|
+
const q = buildQuery({ text: "Submit" });
|
|
49
|
+
expect(q).toEqual({ text: "Submit" });
|
|
50
|
+
});
|
|
51
|
+
it("builds query from coordinates", () => {
|
|
52
|
+
const q = buildQuery({ x: 300, y: 600 });
|
|
53
|
+
expect(q).toEqual({ x: 300, y: 600 });
|
|
54
|
+
});
|
|
55
|
+
it("builds query from multiple params", () => {
|
|
56
|
+
const q = buildQuery({ text: "Submit", testID: "btn" });
|
|
57
|
+
expect(q).toEqual({ text: "Submit", testID: "btn" });
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("isNonAscii", () => {
|
|
61
|
+
it("returns false for ASCII text", () => {
|
|
62
|
+
expect(isNonAscii("Submit")).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it("returns true for Cyrillic", () => {
|
|
65
|
+
expect(isNonAscii("Отправить")).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it("returns true for emoji", () => {
|
|
68
|
+
expect(isNonAscii("🔥")).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("getAvailableStrategies", () => {
|
|
72
|
+
it("returns all strategies for text query", () => {
|
|
73
|
+
expect(getAvailableStrategies({ text: "Submit" }, "auto")).toEqual(["fiber", "accessibility", "ocr"]);
|
|
74
|
+
});
|
|
75
|
+
it("skips fiber for non-ASCII text", () => {
|
|
76
|
+
expect(getAvailableStrategies({ text: "Отправить" }, "auto")).toEqual(["accessibility", "ocr"]);
|
|
77
|
+
});
|
|
78
|
+
it("returns fiber+accessibility for testID", () => {
|
|
79
|
+
expect(getAvailableStrategies({ testID: "btn" }, "auto")).toEqual(["fiber", "accessibility"]);
|
|
80
|
+
});
|
|
81
|
+
it("returns only fiber for component", () => {
|
|
82
|
+
expect(getAvailableStrategies({ component: "Button" }, "auto")).toEqual(["fiber"]);
|
|
83
|
+
});
|
|
84
|
+
it("returns coordinate for x,y", () => {
|
|
85
|
+
expect(getAvailableStrategies({ x: 100, y: 200 }, "auto")).toEqual(["coordinate"]);
|
|
86
|
+
});
|
|
87
|
+
it("returns single strategy when explicitly set", () => {
|
|
88
|
+
expect(getAvailableStrategies({ text: "Submit" }, "ocr")).toEqual(["ocr"]);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("convertPixelsToPoints", () => {
|
|
92
|
+
it("divides by pixel ratio for iOS", () => {
|
|
93
|
+
expect(convertPixelsToPoints(300, 600, "ios", 3)).toEqual({ x: 100, y: 200 });
|
|
94
|
+
});
|
|
95
|
+
it("passes through for Android", () => {
|
|
96
|
+
expect(convertPixelsToPoints(300, 600, "android", 3)).toEqual({ x: 300, y: 600 });
|
|
97
|
+
});
|
|
98
|
+
it("applies scaleFactor before conversion", () => {
|
|
99
|
+
expect(convertPixelsToPoints(150, 300, "ios", 3, 2)).toEqual({ x: 100, y: 200 });
|
|
100
|
+
});
|
|
101
|
+
it("rounds to integers", () => {
|
|
102
|
+
expect(convertPixelsToPoints(301, 599, "ios", 3)).toEqual({ x: 100, y: 200 });
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("formatTapSuccess", () => {
|
|
106
|
+
it("returns minimal success response", () => {
|
|
107
|
+
const result = formatTapSuccess({
|
|
108
|
+
method: "fiber",
|
|
109
|
+
query: { text: "Submit" },
|
|
110
|
+
pressed: "PrimaryButton",
|
|
111
|
+
text: "Submit",
|
|
112
|
+
screen: "LoginScreen",
|
|
113
|
+
path: "LoginScreen > Form > PrimaryButton",
|
|
114
|
+
});
|
|
115
|
+
expect(result.success).toBe(true);
|
|
116
|
+
expect(result.method).toBe("fiber");
|
|
117
|
+
expect(result.query).toEqual({ text: "Submit" });
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe("formatTapFailure", () => {
|
|
121
|
+
it("includes attempted strategies and suggestion", () => {
|
|
122
|
+
const result = formatTapFailure({
|
|
123
|
+
query: { text: "hamburger" },
|
|
124
|
+
screen: "HomeScreen",
|
|
125
|
+
attempted: [{ strategy: "fiber", reason: "No match" }],
|
|
126
|
+
suggestion: "Use screenshot",
|
|
127
|
+
});
|
|
128
|
+
expect(result.success).toBe(false);
|
|
129
|
+
expect(result.attempted).toHaveLength(1);
|
|
130
|
+
expect(result.suggestion).toBe("Use screenshot");
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe("tap orchestrator", () => {
|
|
134
|
+
it("returns error when no app is connected and auto-connect fails", async () => {
|
|
135
|
+
const { tap } = await import("../../pro/tap.js");
|
|
136
|
+
const { connectedApps } = await import("../../core/state.js");
|
|
137
|
+
connectedApps.clear();
|
|
138
|
+
const result = await tap({ text: "Submit" });
|
|
139
|
+
expect(result.success).toBe(false);
|
|
140
|
+
// Auto-connect will be attempted (scans ports) but may fail or succeed
|
|
141
|
+
// depending on whether Metro is running in the test environment
|
|
142
|
+
expect(result.error || result.method).toBeTruthy();
|
|
143
|
+
}, 15000);
|
|
144
|
+
it("validates that at least one search param is provided", async () => {
|
|
145
|
+
const { tap } = await import("../../pro/tap.js");
|
|
146
|
+
const result = await tap({});
|
|
147
|
+
expect(result.success).toBe(false);
|
|
148
|
+
expect(result.error).toContain("Must provide");
|
|
149
|
+
});
|
|
150
|
+
it("validates x and y are both provided for coordinate tap", async () => {
|
|
151
|
+
const { tap } = await import("../../pro/tap.js");
|
|
152
|
+
const result = await tap({ x: 100 });
|
|
153
|
+
expect(result.success).toBe(false);
|
|
154
|
+
expect(result.error).toContain("Both x and y");
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=tap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/tap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
export interface AndroidDevice {
|
|
2
|
+
id: string;
|
|
3
|
+
status: "device" | "offline" | "unauthorized" | "no permissions" | string;
|
|
4
|
+
product?: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
device?: string;
|
|
7
|
+
transportId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AdbResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
result?: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
data?: Buffer;
|
|
14
|
+
scaleFactor?: number;
|
|
15
|
+
originalWidth?: number;
|
|
16
|
+
originalHeight?: number;
|
|
17
|
+
devices?: AndroidDevice[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if ADB is available in PATH
|
|
21
|
+
*/
|
|
22
|
+
export declare function isAdbAvailable(): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* List connected Android devices
|
|
25
|
+
*/
|
|
26
|
+
export declare function listAndroidDevices(): Promise<AdbResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Get the first connected Android device ID
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDefaultAndroidDevice(): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Take a screenshot from an Android device
|
|
33
|
+
*/
|
|
34
|
+
export declare function androidScreenshot(outputPath?: string, deviceId?: string): Promise<AdbResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Install an APK on an Android device
|
|
37
|
+
*/
|
|
38
|
+
export declare function androidInstallApp(apkPath: string, deviceId?: string, options?: {
|
|
39
|
+
replace?: boolean;
|
|
40
|
+
grantPermissions?: boolean;
|
|
41
|
+
}): Promise<AdbResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Launch an app on an Android device
|
|
44
|
+
*/
|
|
45
|
+
export declare function androidLaunchApp(packageName: string, activityName?: string, deviceId?: string): Promise<AdbResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Get list of installed packages on the device
|
|
48
|
+
*/
|
|
49
|
+
export declare function androidListPackages(deviceId?: string, filter?: string): Promise<AdbResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Common key event codes for Android
|
|
52
|
+
*/
|
|
53
|
+
export declare const ANDROID_KEY_EVENTS: {
|
|
54
|
+
readonly HOME: 3;
|
|
55
|
+
readonly BACK: 4;
|
|
56
|
+
readonly CALL: 5;
|
|
57
|
+
readonly END_CALL: 6;
|
|
58
|
+
readonly VOLUME_UP: 24;
|
|
59
|
+
readonly VOLUME_DOWN: 25;
|
|
60
|
+
readonly POWER: 26;
|
|
61
|
+
readonly CAMERA: 27;
|
|
62
|
+
readonly CLEAR: 28;
|
|
63
|
+
readonly TAB: 61;
|
|
64
|
+
readonly ENTER: 66;
|
|
65
|
+
readonly DEL: 67;
|
|
66
|
+
readonly MENU: 82;
|
|
67
|
+
readonly SEARCH: 84;
|
|
68
|
+
readonly MEDIA_PLAY_PAUSE: 85;
|
|
69
|
+
readonly MEDIA_STOP: 86;
|
|
70
|
+
readonly MEDIA_NEXT: 87;
|
|
71
|
+
readonly MEDIA_PREVIOUS: 88;
|
|
72
|
+
readonly MOVE_HOME: 122;
|
|
73
|
+
readonly MOVE_END: 123;
|
|
74
|
+
readonly APP_SWITCH: 187;
|
|
75
|
+
readonly ESCAPE: 111;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Tap at coordinates on an Android device
|
|
79
|
+
*/
|
|
80
|
+
export declare function androidTap(x: number, y: number, deviceId?: string): Promise<AdbResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Long press at coordinates on an Android device
|
|
83
|
+
*/
|
|
84
|
+
export declare function androidLongPress(x: number, y: number, durationMs?: number, deviceId?: string): Promise<AdbResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Swipe on an Android device
|
|
87
|
+
*/
|
|
88
|
+
export declare function androidSwipe(startX: number, startY: number, endX: number, endY: number, durationMs?: number, deviceId?: string): Promise<AdbResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Input text on an Android device
|
|
91
|
+
*
|
|
92
|
+
* ADB input text has limitations with special characters.
|
|
93
|
+
* This function handles escaping properly for URLs, emails, and special strings.
|
|
94
|
+
*/
|
|
95
|
+
export declare function androidInputText(text: string, deviceId?: string): Promise<AdbResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Send a key event to an Android device
|
|
98
|
+
*/
|
|
99
|
+
export declare function androidKeyEvent(keyCode: number | keyof typeof ANDROID_KEY_EVENTS, deviceId?: string): Promise<AdbResult>;
|
|
100
|
+
/**
|
|
101
|
+
* UI Element from accessibility tree
|
|
102
|
+
*/
|
|
103
|
+
export interface AndroidUIElement {
|
|
104
|
+
text: string;
|
|
105
|
+
contentDesc: string;
|
|
106
|
+
resourceId: string;
|
|
107
|
+
className: string;
|
|
108
|
+
bounds: {
|
|
109
|
+
left: number;
|
|
110
|
+
top: number;
|
|
111
|
+
right: number;
|
|
112
|
+
bottom: number;
|
|
113
|
+
width: number;
|
|
114
|
+
height: number;
|
|
115
|
+
};
|
|
116
|
+
center: {
|
|
117
|
+
x: number;
|
|
118
|
+
y: number;
|
|
119
|
+
};
|
|
120
|
+
clickable: boolean;
|
|
121
|
+
enabled: boolean;
|
|
122
|
+
focused: boolean;
|
|
123
|
+
scrollable: boolean;
|
|
124
|
+
selected: boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Result of element find operations
|
|
128
|
+
*/
|
|
129
|
+
export interface FindElementResult {
|
|
130
|
+
success: boolean;
|
|
131
|
+
found: boolean;
|
|
132
|
+
element?: AndroidUIElement;
|
|
133
|
+
allMatches?: AndroidUIElement[];
|
|
134
|
+
matchCount?: number;
|
|
135
|
+
error?: string;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Result of wait for element operations
|
|
139
|
+
*/
|
|
140
|
+
export interface WaitForElementResult extends FindElementResult {
|
|
141
|
+
elapsedMs?: number;
|
|
142
|
+
timedOut?: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Options for finding elements
|
|
146
|
+
*/
|
|
147
|
+
export interface FindElementOptions {
|
|
148
|
+
text?: string;
|
|
149
|
+
textContains?: string;
|
|
150
|
+
contentDesc?: string;
|
|
151
|
+
contentDescContains?: string;
|
|
152
|
+
resourceId?: string;
|
|
153
|
+
index?: number;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get UI accessibility tree from Android device using uiautomator
|
|
157
|
+
*/
|
|
158
|
+
export declare function androidGetUITree(deviceId?: string): Promise<{
|
|
159
|
+
success: boolean;
|
|
160
|
+
elements?: AndroidUIElement[];
|
|
161
|
+
rawXml?: string;
|
|
162
|
+
error?: string;
|
|
163
|
+
}>;
|
|
164
|
+
/**
|
|
165
|
+
* Find element(s) in the UI tree matching the given criteria
|
|
166
|
+
*/
|
|
167
|
+
export declare function androidFindElement(options: FindElementOptions, deviceId?: string): Promise<FindElementResult>;
|
|
168
|
+
/**
|
|
169
|
+
* Wait for element to appear on screen with polling
|
|
170
|
+
*/
|
|
171
|
+
export declare function androidWaitForElement(options: FindElementOptions & {
|
|
172
|
+
timeoutMs?: number;
|
|
173
|
+
pollIntervalMs?: number;
|
|
174
|
+
}, deviceId?: string): Promise<WaitForElementResult>;
|
|
175
|
+
/**
|
|
176
|
+
* Get device screen size
|
|
177
|
+
*/
|
|
178
|
+
export declare function androidGetScreenSize(deviceId?: string): Promise<{
|
|
179
|
+
success: boolean;
|
|
180
|
+
width?: number;
|
|
181
|
+
height?: number;
|
|
182
|
+
error?: string;
|
|
183
|
+
}>;
|
|
184
|
+
/**
|
|
185
|
+
* Get device display density (dpi)
|
|
186
|
+
*/
|
|
187
|
+
export declare function androidGetDensity(deviceId?: string): Promise<{
|
|
188
|
+
success: boolean;
|
|
189
|
+
density?: number;
|
|
190
|
+
error?: string;
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Get status bar height in pixels
|
|
194
|
+
* Android status bar is typically 24dp, but can vary by device/OS version
|
|
195
|
+
*/
|
|
196
|
+
export declare function androidGetStatusBarHeight(deviceId?: string): Promise<{
|
|
197
|
+
success: boolean;
|
|
198
|
+
heightPixels?: number;
|
|
199
|
+
heightDp?: number;
|
|
200
|
+
error?: string;
|
|
201
|
+
}>;
|
|
202
|
+
/**
|
|
203
|
+
* Android UI element from uiautomator dump
|
|
204
|
+
*/
|
|
205
|
+
export interface AndroidAccessibilityElement {
|
|
206
|
+
class: string;
|
|
207
|
+
text?: string;
|
|
208
|
+
contentDesc?: string;
|
|
209
|
+
resourceId?: string;
|
|
210
|
+
bounds: {
|
|
211
|
+
left: number;
|
|
212
|
+
top: number;
|
|
213
|
+
right: number;
|
|
214
|
+
bottom: number;
|
|
215
|
+
};
|
|
216
|
+
frame: {
|
|
217
|
+
x: number;
|
|
218
|
+
y: number;
|
|
219
|
+
width: number;
|
|
220
|
+
height: number;
|
|
221
|
+
};
|
|
222
|
+
tap: {
|
|
223
|
+
x: number;
|
|
224
|
+
y: number;
|
|
225
|
+
};
|
|
226
|
+
children: AndroidAccessibilityElement[];
|
|
227
|
+
checkable?: boolean;
|
|
228
|
+
checked?: boolean;
|
|
229
|
+
clickable?: boolean;
|
|
230
|
+
enabled?: boolean;
|
|
231
|
+
focusable?: boolean;
|
|
232
|
+
focused?: boolean;
|
|
233
|
+
scrollable?: boolean;
|
|
234
|
+
selected?: boolean;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Result type for accessibility operations
|
|
238
|
+
*/
|
|
239
|
+
export interface AndroidDescribeResult {
|
|
240
|
+
success: boolean;
|
|
241
|
+
elements?: AndroidAccessibilityElement[];
|
|
242
|
+
formatted?: string;
|
|
243
|
+
error?: string;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the UI hierarchy from the connected Android device using uiautomator dump
|
|
247
|
+
*/
|
|
248
|
+
export declare function androidDescribeAll(deviceId?: string): Promise<AndroidDescribeResult>;
|
|
249
|
+
/**
|
|
250
|
+
* Get accessibility info for the UI element at specific coordinates
|
|
251
|
+
*/
|
|
252
|
+
export declare function androidDescribePoint(x: number, y: number, deviceId?: string): Promise<AndroidDescribeResult>;
|
|
253
|
+
/**
|
|
254
|
+
* Tap an element by its text, content-description, or resource-id
|
|
255
|
+
*/
|
|
256
|
+
export declare function androidTapElement(options: {
|
|
257
|
+
text?: string;
|
|
258
|
+
textContains?: string;
|
|
259
|
+
contentDesc?: string;
|
|
260
|
+
contentDescContains?: string;
|
|
261
|
+
resourceId?: string;
|
|
262
|
+
index?: number;
|
|
263
|
+
deviceId?: string;
|
|
264
|
+
}): Promise<AdbResult>;
|
|
265
|
+
//# sourceMappingURL=android.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/core/android.ts"],"names":[],"mappings":"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"}
|