@ggboi360/mobile-dev-mcp 0.1.0 → 0.3.0
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 +33 -37
- package/LICENSE-ELASTIC +71 -0
- package/LICENSE-MIT +43 -0
- package/README.md +75 -127
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +711 -2036
- package/dist/index.js.map +1 -1
- package/dist/license.d.ts +11 -96
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +243 -552
- package/dist/license.js.map +1 -1
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +50 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +72 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +307 -0
- package/dist/utils.js.map +1 -0
- package/package.json +15 -5
- package/dist/license.test.d.ts +0 -2
- package/dist/license.test.d.ts.map +0 -1
- package/dist/license.test.js +0 -198
- package/dist/license.test.js.map +0 -1
- package/dist/tools.test.d.ts +0 -2
- package/dist/tools.test.d.ts.map +0 -1
- package/dist/tools.test.js +0 -337
- package/dist/tools.test.js.map +0 -1
package/dist/license.test.js
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
// Mock fs module before importing license
|
|
3
|
-
vi.mock("fs");
|
|
4
|
-
vi.mock("os", async () => {
|
|
5
|
-
const actual = await vi.importActual("os");
|
|
6
|
-
return {
|
|
7
|
-
...actual,
|
|
8
|
-
hostname: vi.fn(() => "test-host"),
|
|
9
|
-
platform: vi.fn(() => "test-platform"),
|
|
10
|
-
arch: vi.fn(() => "x64"),
|
|
11
|
-
cpus: vi.fn(() => [{ model: "Test CPU" }]),
|
|
12
|
-
homedir: vi.fn(() => "/mock/home"),
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
// Import after mocks
|
|
16
|
-
import { BASIC_TOOLS, ADVANCED_TOOLS, TIER_LIMITS, isAdvancedTool, isBasicTool, getTierLimits, } from "./license.js";
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// TOOL CLASSIFICATION TESTS
|
|
19
|
-
// ============================================================================
|
|
20
|
-
describe("Tool Classification", () => {
|
|
21
|
-
describe("BASIC_TOOLS constant", () => {
|
|
22
|
-
it("should have 17 basic tools (13 Android + 4 iOS)", () => {
|
|
23
|
-
expect(BASIC_TOOLS).toHaveLength(17);
|
|
24
|
-
});
|
|
25
|
-
it("should include core logging tools", () => {
|
|
26
|
-
expect(BASIC_TOOLS).toContain("get_metro_logs");
|
|
27
|
-
expect(BASIC_TOOLS).toContain("get_adb_logs");
|
|
28
|
-
});
|
|
29
|
-
it("should include device management tools", () => {
|
|
30
|
-
expect(BASIC_TOOLS).toContain("list_devices");
|
|
31
|
-
expect(BASIC_TOOLS).toContain("get_device_info");
|
|
32
|
-
expect(BASIC_TOOLS).toContain("restart_adb");
|
|
33
|
-
});
|
|
34
|
-
it("should include license tools", () => {
|
|
35
|
-
expect(BASIC_TOOLS).toContain("get_license_status");
|
|
36
|
-
expect(BASIC_TOOLS).toContain("set_license_key");
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
describe("ADVANCED_TOOLS constant", () => {
|
|
40
|
-
it("should have 19 advanced tools (11 Android + 8 iOS)", () => {
|
|
41
|
-
expect(ADVANCED_TOOLS).toHaveLength(19);
|
|
42
|
-
});
|
|
43
|
-
it("should include streaming tools", () => {
|
|
44
|
-
expect(ADVANCED_TOOLS).toContain("stream_adb_realtime");
|
|
45
|
-
expect(ADVANCED_TOOLS).toContain("stop_adb_streaming");
|
|
46
|
-
});
|
|
47
|
-
it("should include monitoring tools", () => {
|
|
48
|
-
expect(ADVANCED_TOOLS).toContain("screenshot_history");
|
|
49
|
-
expect(ADVANCED_TOOLS).toContain("watch_for_errors");
|
|
50
|
-
expect(ADVANCED_TOOLS).toContain("multi_device_logs");
|
|
51
|
-
});
|
|
52
|
-
it("should include interaction tools", () => {
|
|
53
|
-
expect(ADVANCED_TOOLS).toContain("tap_screen");
|
|
54
|
-
expect(ADVANCED_TOOLS).toContain("input_text");
|
|
55
|
-
expect(ADVANCED_TOOLS).toContain("press_button");
|
|
56
|
-
expect(ADVANCED_TOOLS).toContain("swipe_screen");
|
|
57
|
-
expect(ADVANCED_TOOLS).toContain("launch_app");
|
|
58
|
-
expect(ADVANCED_TOOLS).toContain("install_apk");
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe("isAdvancedTool()", () => {
|
|
62
|
-
it("should return true for advanced tools", () => {
|
|
63
|
-
expect(isAdvancedTool("stream_adb_realtime")).toBe(true);
|
|
64
|
-
expect(isAdvancedTool("tap_screen")).toBe(true);
|
|
65
|
-
expect(isAdvancedTool("swipe_screen")).toBe(true);
|
|
66
|
-
expect(isAdvancedTool("multi_device_logs")).toBe(true);
|
|
67
|
-
});
|
|
68
|
-
it("should return false for basic tools", () => {
|
|
69
|
-
expect(isAdvancedTool("get_metro_logs")).toBe(false);
|
|
70
|
-
expect(isAdvancedTool("screenshot_emulator")).toBe(false);
|
|
71
|
-
expect(isAdvancedTool("list_devices")).toBe(false);
|
|
72
|
-
});
|
|
73
|
-
it("should return false for unknown tools", () => {
|
|
74
|
-
expect(isAdvancedTool("unknown_tool")).toBe(false);
|
|
75
|
-
expect(isAdvancedTool("")).toBe(false);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe("isBasicTool()", () => {
|
|
79
|
-
it("should return true for basic tools", () => {
|
|
80
|
-
expect(isBasicTool("get_metro_logs")).toBe(true);
|
|
81
|
-
expect(isBasicTool("screenshot_emulator")).toBe(true);
|
|
82
|
-
expect(isBasicTool("list_devices")).toBe(true);
|
|
83
|
-
expect(isBasicTool("get_license_status")).toBe(true);
|
|
84
|
-
});
|
|
85
|
-
it("should return false for advanced tools", () => {
|
|
86
|
-
expect(isBasicTool("stream_adb_realtime")).toBe(false);
|
|
87
|
-
expect(isBasicTool("tap_screen")).toBe(false);
|
|
88
|
-
expect(isBasicTool("multi_device_logs")).toBe(false);
|
|
89
|
-
});
|
|
90
|
-
it("should return false for unknown tools", () => {
|
|
91
|
-
expect(isBasicTool("unknown_tool")).toBe(false);
|
|
92
|
-
expect(isBasicTool("")).toBe(false);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
// ============================================================================
|
|
97
|
-
// TIER LIMITS TESTS
|
|
98
|
-
// ============================================================================
|
|
99
|
-
describe("Tier Limits", () => {
|
|
100
|
-
describe("TIER_LIMITS constant", () => {
|
|
101
|
-
it("should have trial, basic, and advanced tiers", () => {
|
|
102
|
-
expect(TIER_LIMITS).toHaveProperty("trial");
|
|
103
|
-
expect(TIER_LIMITS).toHaveProperty("basic");
|
|
104
|
-
expect(TIER_LIMITS).toHaveProperty("advanced");
|
|
105
|
-
});
|
|
106
|
-
it("should have correct trial limits", () => {
|
|
107
|
-
expect(TIER_LIMITS.trial.maxLogLines).toBe(50);
|
|
108
|
-
expect(TIER_LIMITS.trial.maxDevices).toBe(1);
|
|
109
|
-
expect(TIER_LIMITS.trial.screenshotHistory).toBe(0);
|
|
110
|
-
});
|
|
111
|
-
it("should have correct basic limits", () => {
|
|
112
|
-
expect(TIER_LIMITS.basic.maxLogLines).toBe(50);
|
|
113
|
-
expect(TIER_LIMITS.basic.maxDevices).toBe(1);
|
|
114
|
-
expect(TIER_LIMITS.basic.screenshotHistory).toBe(0);
|
|
115
|
-
});
|
|
116
|
-
it("should have correct advanced limits", () => {
|
|
117
|
-
expect(TIER_LIMITS.advanced.maxLogLines).toBe(Infinity);
|
|
118
|
-
expect(TIER_LIMITS.advanced.maxDevices).toBe(3);
|
|
119
|
-
expect(TIER_LIMITS.advanced.screenshotHistory).toBe(20);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe("getTierLimits()", () => {
|
|
123
|
-
it("should return correct limits for each tier", () => {
|
|
124
|
-
expect(getTierLimits("trial")).toEqual(TIER_LIMITS.trial);
|
|
125
|
-
expect(getTierLimits("basic")).toEqual(TIER_LIMITS.basic);
|
|
126
|
-
expect(getTierLimits("advanced")).toEqual(TIER_LIMITS.advanced);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
// ============================================================================
|
|
131
|
-
// TOOL COUNTS VALIDATION
|
|
132
|
-
// ============================================================================
|
|
133
|
-
describe("Tool Counts (Documentation Alignment)", () => {
|
|
134
|
-
it("should have 36 total tools (17 basic + 19 advanced)", () => {
|
|
135
|
-
const totalTools = BASIC_TOOLS.length + ADVANCED_TOOLS.length;
|
|
136
|
-
expect(totalTools).toBe(36);
|
|
137
|
-
});
|
|
138
|
-
it("should not have overlapping tools between basic and advanced", () => {
|
|
139
|
-
const basicSet = new Set(BASIC_TOOLS);
|
|
140
|
-
const advancedSet = new Set(ADVANCED_TOOLS);
|
|
141
|
-
ADVANCED_TOOLS.forEach((tool) => {
|
|
142
|
-
expect(basicSet.has(tool)).toBe(false);
|
|
143
|
-
});
|
|
144
|
-
BASIC_TOOLS.forEach((tool) => {
|
|
145
|
-
expect(advancedSet.has(tool)).toBe(false);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
// ============================================================================
|
|
150
|
-
// TIER HIERARCHY TESTS
|
|
151
|
-
// ============================================================================
|
|
152
|
-
describe("Tier Hierarchy", () => {
|
|
153
|
-
const tiers = ["trial", "basic", "advanced"];
|
|
154
|
-
it("should have trial with most restrictions", () => {
|
|
155
|
-
// Trial and Basic have same log limits
|
|
156
|
-
expect(TIER_LIMITS.trial.maxLogLines).toBe(TIER_LIMITS.basic.maxLogLines);
|
|
157
|
-
expect(TIER_LIMITS.trial.maxDevices).toBe(1);
|
|
158
|
-
});
|
|
159
|
-
it("should have advanced with least restrictions", () => {
|
|
160
|
-
expect(TIER_LIMITS.advanced.maxLogLines).toBe(Infinity);
|
|
161
|
-
expect(TIER_LIMITS.advanced.maxDevices).toBeGreaterThan(TIER_LIMITS.basic.maxDevices);
|
|
162
|
-
expect(TIER_LIMITS.advanced.screenshotHistory).toBeGreaterThan(0);
|
|
163
|
-
});
|
|
164
|
-
it("advanced should have better or equal limits than basic", () => {
|
|
165
|
-
expect(TIER_LIMITS.advanced.maxLogLines).toBeGreaterThanOrEqual(TIER_LIMITS.basic.maxLogLines);
|
|
166
|
-
expect(TIER_LIMITS.advanced.maxDevices).toBeGreaterThanOrEqual(TIER_LIMITS.basic.maxDevices);
|
|
167
|
-
expect(TIER_LIMITS.advanced.screenshotHistory).toBeGreaterThanOrEqual(TIER_LIMITS.basic.screenshotHistory);
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
// ============================================================================
|
|
171
|
-
// INTERACTION TOOLS TESTS
|
|
172
|
-
// ============================================================================
|
|
173
|
-
describe("Interaction Tools (New Features)", () => {
|
|
174
|
-
const interactionTools = [
|
|
175
|
-
"tap_screen",
|
|
176
|
-
"input_text",
|
|
177
|
-
"press_button",
|
|
178
|
-
"swipe_screen",
|
|
179
|
-
"launch_app",
|
|
180
|
-
"install_apk",
|
|
181
|
-
];
|
|
182
|
-
it("should have all 6 interaction tools", () => {
|
|
183
|
-
expect(interactionTools.length).toBe(6);
|
|
184
|
-
});
|
|
185
|
-
it("all interaction tools should be Advanced tier", () => {
|
|
186
|
-
interactionTools.forEach((tool) => {
|
|
187
|
-
expect(isAdvancedTool(tool)).toBe(true);
|
|
188
|
-
expect(ADVANCED_TOOLS).toContain(tool);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
it("interaction tools should not be in basic tier", () => {
|
|
192
|
-
interactionTools.forEach((tool) => {
|
|
193
|
-
expect(isBasicTool(tool)).toBe(false);
|
|
194
|
-
expect(BASIC_TOOLS).not.toContain(tool);
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
//# sourceMappingURL=license.test.js.map
|
package/dist/license.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"license.test.js","sourceRoot":"","sources":["../src/license.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.test.d.ts
DELETED
package/dist/tools.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":""}
|
package/dist/tools.test.js
DELETED
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
/**
|
|
3
|
-
* Tool Implementation Tests
|
|
4
|
-
*
|
|
5
|
-
* These tests verify the tool definitions and input schemas
|
|
6
|
-
* without executing actual ADB commands.
|
|
7
|
-
*/
|
|
8
|
-
// ============================================================================
|
|
9
|
-
// TOOL SCHEMA VALIDATION TESTS
|
|
10
|
-
// ============================================================================
|
|
11
|
-
describe("Tool Input Schemas", () => {
|
|
12
|
-
// We'll test the tool definitions directly
|
|
13
|
-
const coreToolSchemas = {
|
|
14
|
-
get_metro_logs: {
|
|
15
|
-
requiredParams: [],
|
|
16
|
-
optionalParams: ["lines", "filter"],
|
|
17
|
-
},
|
|
18
|
-
get_adb_logs: {
|
|
19
|
-
requiredParams: [],
|
|
20
|
-
optionalParams: ["lines", "filter", "level"],
|
|
21
|
-
},
|
|
22
|
-
screenshot_emulator: {
|
|
23
|
-
requiredParams: [],
|
|
24
|
-
optionalParams: ["device"],
|
|
25
|
-
},
|
|
26
|
-
list_devices: {
|
|
27
|
-
requiredParams: [],
|
|
28
|
-
optionalParams: [],
|
|
29
|
-
},
|
|
30
|
-
check_metro_status: {
|
|
31
|
-
requiredParams: [],
|
|
32
|
-
optionalParams: ["port"],
|
|
33
|
-
},
|
|
34
|
-
get_app_info: {
|
|
35
|
-
requiredParams: ["packageName"],
|
|
36
|
-
optionalParams: [],
|
|
37
|
-
},
|
|
38
|
-
clear_app_data: {
|
|
39
|
-
requiredParams: ["packageName"],
|
|
40
|
-
optionalParams: [],
|
|
41
|
-
},
|
|
42
|
-
restart_adb: {
|
|
43
|
-
requiredParams: [],
|
|
44
|
-
optionalParams: [],
|
|
45
|
-
},
|
|
46
|
-
get_device_info: {
|
|
47
|
-
requiredParams: [],
|
|
48
|
-
optionalParams: ["device"],
|
|
49
|
-
},
|
|
50
|
-
start_metro_logging: {
|
|
51
|
-
requiredParams: [],
|
|
52
|
-
optionalParams: ["logFile"],
|
|
53
|
-
},
|
|
54
|
-
stop_metro_logging: {
|
|
55
|
-
requiredParams: [],
|
|
56
|
-
optionalParams: [],
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
const advancedToolSchemas = {
|
|
60
|
-
stream_adb_realtime: {
|
|
61
|
-
requiredParams: [],
|
|
62
|
-
optionalParams: ["filter"],
|
|
63
|
-
},
|
|
64
|
-
stop_adb_streaming: {
|
|
65
|
-
requiredParams: [],
|
|
66
|
-
optionalParams: [],
|
|
67
|
-
},
|
|
68
|
-
screenshot_history: {
|
|
69
|
-
requiredParams: [],
|
|
70
|
-
optionalParams: ["limit"],
|
|
71
|
-
},
|
|
72
|
-
watch_for_errors: {
|
|
73
|
-
requiredParams: ["patterns"],
|
|
74
|
-
optionalParams: ["duration"],
|
|
75
|
-
},
|
|
76
|
-
multi_device_logs: {
|
|
77
|
-
requiredParams: [],
|
|
78
|
-
optionalParams: ["devices", "lines"],
|
|
79
|
-
},
|
|
80
|
-
tap_screen: {
|
|
81
|
-
requiredParams: ["x", "y"],
|
|
82
|
-
optionalParams: ["device"],
|
|
83
|
-
},
|
|
84
|
-
input_text: {
|
|
85
|
-
requiredParams: ["text"],
|
|
86
|
-
optionalParams: ["device"],
|
|
87
|
-
},
|
|
88
|
-
press_button: {
|
|
89
|
-
requiredParams: ["button"],
|
|
90
|
-
optionalParams: ["device"],
|
|
91
|
-
enumValues: ["back", "home", "recent", "volume_up", "volume_down", "power", "enter"],
|
|
92
|
-
},
|
|
93
|
-
swipe_screen: {
|
|
94
|
-
requiredParams: ["startX", "startY", "endX", "endY"],
|
|
95
|
-
optionalParams: ["duration", "device"],
|
|
96
|
-
},
|
|
97
|
-
launch_app: {
|
|
98
|
-
requiredParams: ["packageName"],
|
|
99
|
-
optionalParams: ["device"],
|
|
100
|
-
},
|
|
101
|
-
install_apk: {
|
|
102
|
-
requiredParams: ["apkPath"],
|
|
103
|
-
optionalParams: ["device"],
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
describe("Core Tool Schemas", () => {
|
|
107
|
-
Object.entries(coreToolSchemas).forEach(([toolName, schema]) => {
|
|
108
|
-
describe(`${toolName}`, () => {
|
|
109
|
-
it(`should have ${schema.requiredParams.length} required params`, () => {
|
|
110
|
-
expect(schema.requiredParams.length).toBeGreaterThanOrEqual(0);
|
|
111
|
-
});
|
|
112
|
-
it("should define optional params correctly", () => {
|
|
113
|
-
expect(Array.isArray(schema.optionalParams)).toBe(true);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
it("should have 11 core tools (excluding license tools)", () => {
|
|
118
|
-
expect(Object.keys(coreToolSchemas)).toHaveLength(11);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
describe("Advanced Tool Schemas", () => {
|
|
122
|
-
Object.entries(advancedToolSchemas).forEach(([toolName, schema]) => {
|
|
123
|
-
describe(`${toolName}`, () => {
|
|
124
|
-
it(`should have ${schema.requiredParams.length} required params`, () => {
|
|
125
|
-
expect(schema.requiredParams.length).toBeGreaterThanOrEqual(0);
|
|
126
|
-
});
|
|
127
|
-
it("should define optional params correctly", () => {
|
|
128
|
-
expect(Array.isArray(schema.optionalParams)).toBe(true);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
it("should have 11 advanced tools", () => {
|
|
133
|
-
expect(Object.keys(advancedToolSchemas)).toHaveLength(11);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
describe("Interaction Tools Schema Details", () => {
|
|
137
|
-
it("tap_screen should require x and y coordinates", () => {
|
|
138
|
-
expect(advancedToolSchemas.tap_screen.requiredParams).toContain("x");
|
|
139
|
-
expect(advancedToolSchemas.tap_screen.requiredParams).toContain("y");
|
|
140
|
-
});
|
|
141
|
-
it("input_text should require text parameter", () => {
|
|
142
|
-
expect(advancedToolSchemas.input_text.requiredParams).toContain("text");
|
|
143
|
-
});
|
|
144
|
-
it("press_button should have valid button enum values", () => {
|
|
145
|
-
const validButtons = ["back", "home", "recent", "volume_up", "volume_down", "power", "enter"];
|
|
146
|
-
expect(advancedToolSchemas.press_button.enumValues).toEqual(validButtons);
|
|
147
|
-
});
|
|
148
|
-
it("swipe_screen should require start and end coordinates", () => {
|
|
149
|
-
const required = advancedToolSchemas.swipe_screen.requiredParams;
|
|
150
|
-
expect(required).toContain("startX");
|
|
151
|
-
expect(required).toContain("startY");
|
|
152
|
-
expect(required).toContain("endX");
|
|
153
|
-
expect(required).toContain("endY");
|
|
154
|
-
});
|
|
155
|
-
it("launch_app should require packageName", () => {
|
|
156
|
-
expect(advancedToolSchemas.launch_app.requiredParams).toContain("packageName");
|
|
157
|
-
});
|
|
158
|
-
it("install_apk should require apkPath", () => {
|
|
159
|
-
expect(advancedToolSchemas.install_apk.requiredParams).toContain("apkPath");
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
// ============================================================================
|
|
164
|
-
// BUTTON KEY MAPPING TESTS
|
|
165
|
-
// ============================================================================
|
|
166
|
-
describe("Button Key Mappings", () => {
|
|
167
|
-
// ADB keyevent codes for reference
|
|
168
|
-
const keyMap = {
|
|
169
|
-
back: 4,
|
|
170
|
-
home: 3,
|
|
171
|
-
recent: 187,
|
|
172
|
-
volume_up: 24,
|
|
173
|
-
volume_down: 25,
|
|
174
|
-
power: 26,
|
|
175
|
-
enter: 66,
|
|
176
|
-
};
|
|
177
|
-
it("should have correct Android keycode for back button", () => {
|
|
178
|
-
expect(keyMap.back).toBe(4);
|
|
179
|
-
});
|
|
180
|
-
it("should have correct Android keycode for home button", () => {
|
|
181
|
-
expect(keyMap.home).toBe(3);
|
|
182
|
-
});
|
|
183
|
-
it("should have correct Android keycode for recent apps", () => {
|
|
184
|
-
expect(keyMap.recent).toBe(187);
|
|
185
|
-
});
|
|
186
|
-
it("should have correct Android keycodes for volume buttons", () => {
|
|
187
|
-
expect(keyMap.volume_up).toBe(24);
|
|
188
|
-
expect(keyMap.volume_down).toBe(25);
|
|
189
|
-
});
|
|
190
|
-
it("should have correct Android keycode for power button", () => {
|
|
191
|
-
expect(keyMap.power).toBe(26);
|
|
192
|
-
});
|
|
193
|
-
it("should have correct Android keycode for enter", () => {
|
|
194
|
-
expect(keyMap.enter).toBe(66);
|
|
195
|
-
});
|
|
196
|
-
it("should have 7 supported buttons", () => {
|
|
197
|
-
expect(Object.keys(keyMap)).toHaveLength(7);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
// ============================================================================
|
|
201
|
-
// ADB COMMAND FORMAT TESTS
|
|
202
|
-
// ============================================================================
|
|
203
|
-
describe("ADB Command Formats", () => {
|
|
204
|
-
describe("Tap command format", () => {
|
|
205
|
-
it("should build correct tap command", () => {
|
|
206
|
-
const x = 100;
|
|
207
|
-
const y = 200;
|
|
208
|
-
const expected = `adb shell input tap ${x} ${y}`;
|
|
209
|
-
expect(`adb shell input tap ${x} ${y}`).toBe(expected);
|
|
210
|
-
});
|
|
211
|
-
it("should include device flag when specified", () => {
|
|
212
|
-
const device = "emulator-5554";
|
|
213
|
-
const x = 100;
|
|
214
|
-
const y = 200;
|
|
215
|
-
const expected = `adb -s ${device} shell input tap ${x} ${y}`;
|
|
216
|
-
expect(`adb -s ${device} shell input tap ${x} ${y}`).toBe(expected);
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
describe("Swipe command format", () => {
|
|
220
|
-
it("should build correct swipe command with duration", () => {
|
|
221
|
-
const startX = 100;
|
|
222
|
-
const startY = 200;
|
|
223
|
-
const endX = 100;
|
|
224
|
-
const endY = 800;
|
|
225
|
-
const duration = 300;
|
|
226
|
-
const expected = `adb shell input swipe ${startX} ${startY} ${endX} ${endY} ${duration}`;
|
|
227
|
-
expect(`adb shell input swipe ${startX} ${startY} ${endX} ${endY} ${duration}`).toBe(expected);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe("Input text command format", () => {
|
|
231
|
-
it("should use input text command", () => {
|
|
232
|
-
const text = "hello";
|
|
233
|
-
const expected = `adb shell input text "${text}"`;
|
|
234
|
-
expect(`adb shell input text "${text}"`).toContain("input text");
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
describe("Launch app command format", () => {
|
|
238
|
-
it("should use monkey command for launching apps", () => {
|
|
239
|
-
const packageName = "com.example.app";
|
|
240
|
-
const expected = `adb shell monkey -p ${packageName} -c android.intent.category.LAUNCHER 1`;
|
|
241
|
-
expect(`adb shell monkey -p ${packageName} -c android.intent.category.LAUNCHER 1`).toBe(expected);
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
describe("Install APK command format", () => {
|
|
245
|
-
it("should use install command with replace flag", () => {
|
|
246
|
-
const apkPath = "/path/to/app.apk";
|
|
247
|
-
const expected = `adb install -r "${apkPath}"`;
|
|
248
|
-
expect(`adb install -r "${apkPath}"`).toBe(expected);
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
// ============================================================================
|
|
253
|
-
// INPUT VALIDATION TESTS
|
|
254
|
-
// ============================================================================
|
|
255
|
-
describe("Input Validation", () => {
|
|
256
|
-
describe("Coordinate validation", () => {
|
|
257
|
-
it("should accept positive integers for coordinates", () => {
|
|
258
|
-
const validCoords = [0, 100, 500, 1920, 2560];
|
|
259
|
-
validCoords.forEach((coord) => {
|
|
260
|
-
expect(typeof coord).toBe("number");
|
|
261
|
-
expect(coord).toBeGreaterThanOrEqual(0);
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
it("should handle edge case coordinates", () => {
|
|
265
|
-
// Common screen boundaries
|
|
266
|
-
const edgeCases = [
|
|
267
|
-
{ x: 0, y: 0 }, // Top-left corner
|
|
268
|
-
{ x: 1080, y: 1920 }, // Bottom-right (common resolution)
|
|
269
|
-
{ x: 540, y: 960 }, // Center
|
|
270
|
-
];
|
|
271
|
-
edgeCases.forEach((coord) => {
|
|
272
|
-
expect(Number.isInteger(coord.x)).toBe(true);
|
|
273
|
-
expect(Number.isInteger(coord.y)).toBe(true);
|
|
274
|
-
});
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
describe("Package name validation", () => {
|
|
278
|
-
it("should recognize valid Android package names", () => {
|
|
279
|
-
const validPackages = [
|
|
280
|
-
"com.example.app",
|
|
281
|
-
"com.android.settings",
|
|
282
|
-
"org.example.myapp",
|
|
283
|
-
"com.company.app_name",
|
|
284
|
-
];
|
|
285
|
-
validPackages.forEach((pkg) => {
|
|
286
|
-
// Package names should contain dots
|
|
287
|
-
expect(pkg.includes(".")).toBe(true);
|
|
288
|
-
// Package names should not start or end with dots
|
|
289
|
-
expect(pkg.startsWith(".")).toBe(false);
|
|
290
|
-
expect(pkg.endsWith(".")).toBe(false);
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
describe("APK path validation", () => {
|
|
295
|
-
it("should recognize valid APK file extensions", () => {
|
|
296
|
-
const validPaths = [
|
|
297
|
-
"/path/to/app.apk",
|
|
298
|
-
"C:\\Users\\app.apk",
|
|
299
|
-
"./build/app-release.apk",
|
|
300
|
-
];
|
|
301
|
-
validPaths.forEach((path) => {
|
|
302
|
-
expect(path.toLowerCase().endsWith(".apk")).toBe(true);
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe("Duration validation", () => {
|
|
307
|
-
it("should use reasonable default duration for swipes", () => {
|
|
308
|
-
const defaultDuration = 300;
|
|
309
|
-
expect(defaultDuration).toBeGreaterThan(0);
|
|
310
|
-
expect(defaultDuration).toBeLessThanOrEqual(5000);
|
|
311
|
-
});
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
// ============================================================================
|
|
315
|
-
// TOOL OUTPUT FORMAT TESTS
|
|
316
|
-
// ============================================================================
|
|
317
|
-
describe("Tool Output Formats", () => {
|
|
318
|
-
describe("Success messages", () => {
|
|
319
|
-
it("should use checkmark emoji for success", () => {
|
|
320
|
-
const successMsg = "✅ Tapped at (100, 200)";
|
|
321
|
-
expect(successMsg.startsWith("✅")).toBe(true);
|
|
322
|
-
});
|
|
323
|
-
it("should include coordinates in tap success message", () => {
|
|
324
|
-
const x = 100;
|
|
325
|
-
const y = 200;
|
|
326
|
-
const msg = `✅ Tapped at (${x}, ${y})`;
|
|
327
|
-
expect(msg).toContain(`(${x}, ${y})`);
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
describe("Error messages", () => {
|
|
331
|
-
it("should prefix errors with 'Error'", () => {
|
|
332
|
-
const errorMsg = "Error tapping screen: device not found";
|
|
333
|
-
expect(errorMsg.startsWith("Error")).toBe(true);
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
//# sourceMappingURL=tools.test.js.map
|
package/dist/tools.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":"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"}
|