@ggboi360/mobile-dev-mcp 0.2.0 → 0.3.1

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.
@@ -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 39 advanced tools (11 Android + 8 iOS + 5 DevTools + 5 Network + 5 Expo + 5 Perf)", () => {
41
- expect(ADVANCED_TOOLS).toHaveLength(39);
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 56 total tools (17 basic + 39 advanced)", () => {
135
- const totalTools = BASIC_TOOLS.length + ADVANCED_TOOLS.length;
136
- expect(totalTools).toBe(56);
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.test.js","sourceRoot":"","sources":["../src/license.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":""}
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":"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"}