test-genie-mcp 2.0.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/README.md +219 -0
- package/dist/analyzers/astAnalyzer.d.ts +108 -0
- package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/astAnalyzer.js +800 -0
- package/dist/analyzers/astAnalyzer.js.map +1 -0
- package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
- package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/performanceAnalyzer.js +647 -0
- package/dist/analyzers/performanceAnalyzer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +683 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/android/index.d.ts +90 -0
- package/dist/platforms/android/index.d.ts.map +1 -0
- package/dist/platforms/android/index.js +519 -0
- package/dist/platforms/android/index.js.map +1 -0
- package/dist/platforms/flutter/index.d.ts +105 -0
- package/dist/platforms/flutter/index.d.ts.map +1 -0
- package/dist/platforms/flutter/index.js +533 -0
- package/dist/platforms/flutter/index.js.map +1 -0
- package/dist/platforms/ios/index.d.ts +79 -0
- package/dist/platforms/ios/index.d.ts.map +1 -0
- package/dist/platforms/ios/index.js +393 -0
- package/dist/platforms/ios/index.js.map +1 -0
- package/dist/platforms/react-native/index.d.ts +160 -0
- package/dist/platforms/react-native/index.d.ts.map +1 -0
- package/dist/platforms/react-native/index.js +602 -0
- package/dist/platforms/react-native/index.js.map +1 -0
- package/dist/platforms/web/index.d.ts +177 -0
- package/dist/platforms/web/index.d.ts.map +1 -0
- package/dist/platforms/web/index.js +637 -0
- package/dist/platforms/web/index.js.map +1 -0
- package/dist/storage/index.d.ts +35 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +351 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.js +289 -0
- package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
- package/dist/tools/analysis/createTestPlan.d.ts +21 -0
- package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
- package/dist/tools/analysis/createTestPlan.js +214 -0
- package/dist/tools/analysis/createTestPlan.js.map +1 -0
- package/dist/tools/analysis/generateScenarios.d.ts +21 -0
- package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
- package/dist/tools/analysis/generateScenarios.js +567 -0
- package/dist/tools/analysis/generateScenarios.js.map +1 -0
- package/dist/tools/automation/cicdIntegration.d.ts +41 -0
- package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
- package/dist/tools/automation/cicdIntegration.js +825 -0
- package/dist/tools/automation/cicdIntegration.js.map +1 -0
- package/dist/tools/automation/generateReport.d.ts +16 -0
- package/dist/tools/automation/generateReport.d.ts.map +1 -0
- package/dist/tools/automation/generateReport.js +406 -0
- package/dist/tools/automation/generateReport.js.map +1 -0
- package/dist/tools/automation/runFullAutomation.d.ts +25 -0
- package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
- package/dist/tools/automation/runFullAutomation.js +296 -0
- package/dist/tools/automation/runFullAutomation.js.map +1 -0
- package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
- package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
- package/dist/tools/detection/detectLogicErrors.js +470 -0
- package/dist/tools/detection/detectLogicErrors.js.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.js +453 -0
- package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
- package/dist/tools/execution/runScenarioTest.d.ts +34 -0
- package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
- package/dist/tools/execution/runScenarioTest.js +334 -0
- package/dist/tools/execution/runScenarioTest.js.map +1 -0
- package/dist/tools/execution/runSimulation.d.ts +17 -0
- package/dist/tools/execution/runSimulation.d.ts.map +1 -0
- package/dist/tools/execution/runSimulation.js +250 -0
- package/dist/tools/execution/runSimulation.js.map +1 -0
- package/dist/tools/execution/runStressTest.d.ts +52 -0
- package/dist/tools/execution/runStressTest.d.ts.map +1 -0
- package/dist/tools/execution/runStressTest.js +176 -0
- package/dist/tools/execution/runStressTest.js.map +1 -0
- package/dist/tools/fixing/applyFix.d.ts +44 -0
- package/dist/tools/fixing/applyFix.d.ts.map +1 -0
- package/dist/tools/fixing/applyFix.js +399 -0
- package/dist/tools/fixing/applyFix.js.map +1 -0
- package/dist/tools/fixing/confirmFix.d.ts +31 -0
- package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
- package/dist/tools/fixing/confirmFix.js +136 -0
- package/dist/tools/fixing/confirmFix.js.map +1 -0
- package/dist/tools/fixing/suggestFixes.d.ts +23 -0
- package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
- package/dist/tools/fixing/suggestFixes.js +349 -0
- package/dist/tools/fixing/suggestFixes.js.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/codeParser.d.ts +12 -0
- package/dist/utils/codeParser.d.ts.map +1 -0
- package/dist/utils/codeParser.js +487 -0
- package/dist/utils/codeParser.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================
|
|
3
|
+
// Run Scenario Test Tool
|
|
4
|
+
// ============================================
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.runScenarioTest = runScenarioTest;
|
|
40
|
+
exports.runScenarios = runScenarios;
|
|
41
|
+
const uuid_1 = require("uuid");
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const child_process_1 = require("child_process");
|
|
45
|
+
const util_1 = require("util");
|
|
46
|
+
const index_js_1 = require("../../storage/index.js");
|
|
47
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
48
|
+
async function runScenarioTest(params) {
|
|
49
|
+
const { scenarioId, projectPath, platform, device, options = {}, } = params;
|
|
50
|
+
const { timeout = 60000, retries = 1, screenshots = true, verbose = false } = options;
|
|
51
|
+
// Get scenario
|
|
52
|
+
let scenario = params.scenario;
|
|
53
|
+
if (!scenario && scenarioId) {
|
|
54
|
+
const stored = (0, index_js_1.getScenarioById)(scenarioId);
|
|
55
|
+
if (!stored) {
|
|
56
|
+
throw new Error(`Scenario not found: ${scenarioId}`);
|
|
57
|
+
}
|
|
58
|
+
scenario = stored.scenario;
|
|
59
|
+
}
|
|
60
|
+
if (!scenario) {
|
|
61
|
+
throw new Error('Scenario is required');
|
|
62
|
+
}
|
|
63
|
+
const startTime = Date.now();
|
|
64
|
+
const stepResults = [];
|
|
65
|
+
const logs = [];
|
|
66
|
+
const screenshotPaths = [];
|
|
67
|
+
let error;
|
|
68
|
+
let overallStatus = 'passed';
|
|
69
|
+
// Execute each step
|
|
70
|
+
for (let attempt = 1; attempt <= retries; attempt++) {
|
|
71
|
+
if (attempt > 1) {
|
|
72
|
+
logs.push(`Retry attempt ${attempt}/${retries}`);
|
|
73
|
+
}
|
|
74
|
+
for (const step of scenario.steps) {
|
|
75
|
+
const stepStartTime = Date.now();
|
|
76
|
+
let stepStatus = 'passed';
|
|
77
|
+
let stepError;
|
|
78
|
+
let actualOutput;
|
|
79
|
+
try {
|
|
80
|
+
if (verbose) {
|
|
81
|
+
logs.push(`Step ${step.order}: ${step.action} - ${step.target || ''}`);
|
|
82
|
+
}
|
|
83
|
+
// Execute step based on action type
|
|
84
|
+
const result = await executeStep(step, platform, projectPath, device, timeout);
|
|
85
|
+
actualOutput = result.output;
|
|
86
|
+
// Verify expected output
|
|
87
|
+
if (step.expectedOutput && result.output) {
|
|
88
|
+
if (!result.output.toLowerCase().includes(step.expectedOutput.toLowerCase())) {
|
|
89
|
+
stepStatus = 'failed';
|
|
90
|
+
stepError = `Expected: ${step.expectedOutput}, Got: ${result.output}`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Take screenshot if enabled
|
|
94
|
+
if (screenshots && platform !== 'web') {
|
|
95
|
+
const screenshotPath = await takeScreenshot(platform, projectPath, step.order);
|
|
96
|
+
if (screenshotPath) {
|
|
97
|
+
screenshotPaths.push(screenshotPath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
stepStatus = 'failed';
|
|
103
|
+
stepError = err instanceof Error ? err.message : String(err);
|
|
104
|
+
if (!error) {
|
|
105
|
+
error = {
|
|
106
|
+
type: 'StepExecutionError',
|
|
107
|
+
message: stepError,
|
|
108
|
+
stackTrace: err instanceof Error ? err.stack : undefined,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const stepDuration = Date.now() - stepStartTime;
|
|
113
|
+
stepResults.push({
|
|
114
|
+
order: step.order,
|
|
115
|
+
action: step.action,
|
|
116
|
+
status: stepStatus,
|
|
117
|
+
duration: stepDuration,
|
|
118
|
+
actualOutput,
|
|
119
|
+
error: stepError,
|
|
120
|
+
});
|
|
121
|
+
if (stepStatus === 'failed') {
|
|
122
|
+
overallStatus = 'failed';
|
|
123
|
+
break; // Stop on first failure
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (overallStatus === 'passed') {
|
|
127
|
+
break; // Success, no need to retry
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const duration = Date.now() - startTime;
|
|
131
|
+
const result = {
|
|
132
|
+
id: (0, uuid_1.v4)(),
|
|
133
|
+
scenarioId: scenario.id,
|
|
134
|
+
scenarioName: scenario.name,
|
|
135
|
+
status: overallStatus,
|
|
136
|
+
duration,
|
|
137
|
+
steps: stepResults,
|
|
138
|
+
logs,
|
|
139
|
+
screenshots: screenshotPaths.length > 0 ? screenshotPaths : undefined,
|
|
140
|
+
error,
|
|
141
|
+
executedAt: new Date().toISOString(),
|
|
142
|
+
};
|
|
143
|
+
// Save result
|
|
144
|
+
(0, index_js_1.saveTestResult)(result, projectPath);
|
|
145
|
+
return {
|
|
146
|
+
result,
|
|
147
|
+
success: overallStatus === 'passed',
|
|
148
|
+
duration,
|
|
149
|
+
summary: generateTestSummary(result, scenario),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async function executeStep(step, platform, projectPath, device, defaultTimeout) {
|
|
153
|
+
const timeout = step.timeout || defaultTimeout || 30000;
|
|
154
|
+
// Simulate step execution based on action type
|
|
155
|
+
// In a real implementation, this would integrate with actual test frameworks
|
|
156
|
+
switch (step.action) {
|
|
157
|
+
case 'navigate':
|
|
158
|
+
return await simulateNavigation(step.target || '', platform, projectPath, device);
|
|
159
|
+
case 'tap':
|
|
160
|
+
case 'click':
|
|
161
|
+
return await simulateTap(step.target || '', platform, projectPath, device);
|
|
162
|
+
case 'type':
|
|
163
|
+
case 'input':
|
|
164
|
+
return await simulateInput(step.target || '', step.input || '', platform, projectPath, device);
|
|
165
|
+
case 'verify':
|
|
166
|
+
return await simulateVerify(step.target || '', step.expectedOutput || '', platform, projectPath, device);
|
|
167
|
+
case 'wait':
|
|
168
|
+
await sleep(parseInt(step.input || '1000'));
|
|
169
|
+
return { output: 'Wait completed', success: true };
|
|
170
|
+
case 'scroll':
|
|
171
|
+
return await simulateScroll(step.target || '', step.input || 'down', platform, projectPath, device);
|
|
172
|
+
case 'mock':
|
|
173
|
+
return { output: `Mocked ${step.target}`, success: true };
|
|
174
|
+
case 'snapshot':
|
|
175
|
+
case 'measure':
|
|
176
|
+
case 'compare':
|
|
177
|
+
return { output: `${step.action} completed for ${step.target}`, success: true };
|
|
178
|
+
case 'render':
|
|
179
|
+
case 'mount':
|
|
180
|
+
case 'unmount':
|
|
181
|
+
return { output: `${step.action} ${step.target} completed`, success: true };
|
|
182
|
+
default:
|
|
183
|
+
return { output: `Unknown action: ${step.action}`, success: false };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async function simulateNavigation(target, platform, projectPath, device) {
|
|
187
|
+
// Simulate navigation delay
|
|
188
|
+
await sleep(500 + Math.random() * 500);
|
|
189
|
+
// In real implementation, this would use platform-specific tools:
|
|
190
|
+
// - iOS: xcrun simctl / XCUITest
|
|
191
|
+
// - Android: adb / Espresso
|
|
192
|
+
// - Flutter: flutter drive
|
|
193
|
+
// - React Native: Detox
|
|
194
|
+
return {
|
|
195
|
+
output: `Navigated to ${target}`,
|
|
196
|
+
success: true,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async function simulateTap(target, platform, projectPath, device) {
|
|
200
|
+
await sleep(200 + Math.random() * 300);
|
|
201
|
+
return {
|
|
202
|
+
output: `Tapped ${target}`,
|
|
203
|
+
success: true,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
async function simulateInput(target, text, platform, projectPath, device) {
|
|
207
|
+
await sleep(100 * text.length);
|
|
208
|
+
return {
|
|
209
|
+
output: `Entered "${text}" into ${target}`,
|
|
210
|
+
success: true,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async function simulateVerify(target, expected, platform, projectPath, device) {
|
|
214
|
+
await sleep(300 + Math.random() * 200);
|
|
215
|
+
// Simulate verification (in real implementation, would check actual UI state)
|
|
216
|
+
const success = Math.random() > 0.1; // 90% success rate for simulation
|
|
217
|
+
return {
|
|
218
|
+
output: success ? expected : 'Element not found or mismatch',
|
|
219
|
+
success,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async function simulateScroll(target, direction, platform, projectPath, device) {
|
|
223
|
+
await sleep(300 + Math.random() * 200);
|
|
224
|
+
return {
|
|
225
|
+
output: `Scrolled ${direction} on ${target}`,
|
|
226
|
+
success: true,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
async function takeScreenshot(platform, projectPath, stepNumber) {
|
|
230
|
+
const screenshotsDir = path.join(projectPath, '.test-genie', 'screenshots');
|
|
231
|
+
try {
|
|
232
|
+
if (!fs.existsSync(screenshotsDir)) {
|
|
233
|
+
fs.mkdirSync(screenshotsDir, { recursive: true });
|
|
234
|
+
}
|
|
235
|
+
const filename = `step_${stepNumber}_${Date.now()}.png`;
|
|
236
|
+
const filepath = path.join(screenshotsDir, filename);
|
|
237
|
+
// In real implementation, would capture actual screenshot
|
|
238
|
+
// For now, just return the path that would be used
|
|
239
|
+
return filepath;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function sleep(ms) {
|
|
246
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
247
|
+
}
|
|
248
|
+
function generateTestSummary(result, scenario) {
|
|
249
|
+
const lines = [];
|
|
250
|
+
const statusEmoji = result.status === 'passed' ? '✅' : result.status === 'failed' ? '❌' : '⏭️';
|
|
251
|
+
lines.push(`${statusEmoji} ${scenario.name}`);
|
|
252
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
253
|
+
lines.push(`Status: ${result.status.toUpperCase()}`);
|
|
254
|
+
lines.push(`Duration: ${result.duration}ms`);
|
|
255
|
+
lines.push(`Steps: ${result.steps.filter(s => s.status === 'passed').length}/${result.steps.length} passed`);
|
|
256
|
+
if (result.error) {
|
|
257
|
+
lines.push(`\nError: ${result.error.message}`);
|
|
258
|
+
}
|
|
259
|
+
const failedSteps = result.steps.filter(s => s.status === 'failed');
|
|
260
|
+
if (failedSteps.length > 0) {
|
|
261
|
+
lines.push(`\nFailed Steps:`);
|
|
262
|
+
for (const step of failedSteps) {
|
|
263
|
+
lines.push(` - Step ${step.order}: ${step.action} - ${step.error}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return lines.join('\n');
|
|
267
|
+
}
|
|
268
|
+
// Run multiple scenarios
|
|
269
|
+
async function runScenarios(scenarios, projectPath, platform, options) {
|
|
270
|
+
const { parallel = false, maxParallel = 3, stopOnFailure = false } = options || {};
|
|
271
|
+
const results = [];
|
|
272
|
+
const startTime = Date.now();
|
|
273
|
+
if (parallel) {
|
|
274
|
+
// Run scenarios in parallel batches
|
|
275
|
+
for (let i = 0; i < scenarios.length; i += maxParallel) {
|
|
276
|
+
const batch = scenarios.slice(i, i + maxParallel);
|
|
277
|
+
const batchResults = await Promise.all(batch.map(scenario => runScenarioTest({ scenario, projectPath, platform })
|
|
278
|
+
.then(r => r.result)
|
|
279
|
+
.catch(err => ({
|
|
280
|
+
id: (0, uuid_1.v4)(),
|
|
281
|
+
scenarioId: scenario.id,
|
|
282
|
+
scenarioName: scenario.name,
|
|
283
|
+
status: 'error',
|
|
284
|
+
duration: 0,
|
|
285
|
+
steps: [],
|
|
286
|
+
logs: [],
|
|
287
|
+
error: { type: 'ExecutionError', message: err.message },
|
|
288
|
+
executedAt: new Date().toISOString(),
|
|
289
|
+
}))));
|
|
290
|
+
results.push(...batchResults);
|
|
291
|
+
if (stopOnFailure && batchResults.some(r => r.status === 'failed' || r.status === 'error')) {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
// Run scenarios sequentially
|
|
298
|
+
for (const scenario of scenarios) {
|
|
299
|
+
try {
|
|
300
|
+
const { result } = await runScenarioTest({ scenario, projectPath, platform });
|
|
301
|
+
results.push(result);
|
|
302
|
+
if (stopOnFailure && (result.status === 'failed' || result.status === 'error')) {
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
results.push({
|
|
308
|
+
id: (0, uuid_1.v4)(),
|
|
309
|
+
scenarioId: scenario.id,
|
|
310
|
+
scenarioName: scenario.name,
|
|
311
|
+
status: 'error',
|
|
312
|
+
duration: 0,
|
|
313
|
+
steps: [],
|
|
314
|
+
logs: [],
|
|
315
|
+
error: { type: 'ExecutionError', message: err instanceof Error ? err.message : String(err) },
|
|
316
|
+
executedAt: new Date().toISOString(),
|
|
317
|
+
});
|
|
318
|
+
if (stopOnFailure) {
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const duration = Date.now() - startTime;
|
|
325
|
+
return {
|
|
326
|
+
results,
|
|
327
|
+
passed: results.filter(r => r.status === 'passed').length,
|
|
328
|
+
failed: results.filter(r => r.status === 'failed').length,
|
|
329
|
+
skipped: results.filter(r => r.status === 'skipped').length,
|
|
330
|
+
duration,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
exports.default = runScenarioTest;
|
|
334
|
+
//# sourceMappingURL=runScenarioTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runScenarioTest.js","sourceRoot":"","sources":["../../../src/tools/execution/runScenarioTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SimulationResult, AppStructure } from '../../types.js';
|
|
2
|
+
interface RunSimulationParams {
|
|
3
|
+
appStructure: AppStructure;
|
|
4
|
+
duration: number;
|
|
5
|
+
userPatterns?: ('random' | 'sequential' | 'stress' | 'idle')[];
|
|
6
|
+
intensity?: 'low' | 'medium' | 'high';
|
|
7
|
+
monitorMetrics?: ('memory' | 'cpu' | 'network' | 'render')[];
|
|
8
|
+
}
|
|
9
|
+
interface RunSimulationResult {
|
|
10
|
+
result: SimulationResult;
|
|
11
|
+
issuesFound: number;
|
|
12
|
+
recommendations: string[];
|
|
13
|
+
summary: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function runSimulation(params: RunSimulationParams): Promise<RunSimulationResult>;
|
|
16
|
+
export default runSimulation;
|
|
17
|
+
//# sourceMappingURL=runSimulation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runSimulation.d.ts","sourceRoot":"","sources":["../../../src/tools/execution/runSimulation.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,UAAU,mBAAmB;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/D,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;CAC9D;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+H7F;AAuKD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================
|
|
3
|
+
// Run Simulation Tool
|
|
4
|
+
// ============================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runSimulation = runSimulation;
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
async function runSimulation(params) {
|
|
9
|
+
const { appStructure, duration, userPatterns = ['random'], intensity = 'medium', monitorMetrics = ['memory', 'cpu', 'render'], } = params;
|
|
10
|
+
const startTime = Date.now();
|
|
11
|
+
const crashes = [];
|
|
12
|
+
const anomalies = [];
|
|
13
|
+
let userActions = 0;
|
|
14
|
+
let memoryPeakMB = 0;
|
|
15
|
+
let cpuPeakPercent = 0;
|
|
16
|
+
// Determine action interval based on intensity
|
|
17
|
+
const actionInterval = intensity === 'high' ? 500 : intensity === 'medium' ? 1000 : 2000;
|
|
18
|
+
const totalActions = Math.floor((duration * 1000) / actionInterval);
|
|
19
|
+
// Simulate user session
|
|
20
|
+
for (let i = 0; i < totalActions; i++) {
|
|
21
|
+
const pattern = userPatterns[i % userPatterns.length] || 'random';
|
|
22
|
+
try {
|
|
23
|
+
// Simulate user action based on pattern
|
|
24
|
+
await simulateUserAction(pattern, appStructure, i);
|
|
25
|
+
userActions++;
|
|
26
|
+
// Monitor metrics
|
|
27
|
+
if (monitorMetrics.includes('memory')) {
|
|
28
|
+
const currentMemory = simulateMemoryUsage(i, totalActions, appStructure);
|
|
29
|
+
memoryPeakMB = Math.max(memoryPeakMB, currentMemory);
|
|
30
|
+
if (currentMemory > 500) {
|
|
31
|
+
anomalies.push({
|
|
32
|
+
type: 'memory_spike',
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
details: `Memory usage spiked to ${currentMemory}MB`,
|
|
35
|
+
severity: currentMemory > 800 ? 'critical' : 'high',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (monitorMetrics.includes('cpu')) {
|
|
40
|
+
const currentCpu = simulateCpuUsage(i, totalActions);
|
|
41
|
+
cpuPeakPercent = Math.max(cpuPeakPercent, currentCpu);
|
|
42
|
+
if (currentCpu > 80) {
|
|
43
|
+
anomalies.push({
|
|
44
|
+
type: 'cpu_spike',
|
|
45
|
+
timestamp: new Date().toISOString(),
|
|
46
|
+
details: `CPU usage spiked to ${currentCpu}%`,
|
|
47
|
+
severity: currentCpu > 95 ? 'critical' : 'high',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (monitorMetrics.includes('render')) {
|
|
52
|
+
const frameTime = simulateFrameTime(intensity);
|
|
53
|
+
if (frameTime > 16.67) { // 60fps threshold
|
|
54
|
+
anomalies.push({
|
|
55
|
+
type: 'slow_render',
|
|
56
|
+
timestamp: new Date().toISOString(),
|
|
57
|
+
details: `Frame time ${frameTime.toFixed(2)}ms (target: 16.67ms)`,
|
|
58
|
+
severity: frameTime > 33.33 ? 'high' : 'medium',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Simulate random crash (rare)
|
|
63
|
+
if (Math.random() < 0.001 && intensity === 'high') {
|
|
64
|
+
crashes.push({
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
type: 'SimulatedCrash',
|
|
67
|
+
message: 'Simulated crash during stress testing',
|
|
68
|
+
stackTrace: generateMockStackTrace(appStructure),
|
|
69
|
+
screen: appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)]?.name,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// State inconsistency check (occasional)
|
|
73
|
+
if (Math.random() < 0.01) {
|
|
74
|
+
const hasInconsistency = checkStateConsistency(appStructure);
|
|
75
|
+
if (!hasInconsistency.consistent) {
|
|
76
|
+
anomalies.push({
|
|
77
|
+
type: 'state_inconsistency',
|
|
78
|
+
timestamp: new Date().toISOString(),
|
|
79
|
+
details: hasInconsistency.reason,
|
|
80
|
+
severity: 'medium',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
crashes.push({
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
type: 'UnhandledException',
|
|
89
|
+
message: error instanceof Error ? error.message : String(error),
|
|
90
|
+
stackTrace: error instanceof Error ? error.stack || '' : '',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// Small delay to simulate real-time execution
|
|
94
|
+
await sleep(10);
|
|
95
|
+
}
|
|
96
|
+
const actualDuration = (Date.now() - startTime) / 1000;
|
|
97
|
+
const result = {
|
|
98
|
+
id: (0, uuid_1.v4)(),
|
|
99
|
+
duration: actualDuration,
|
|
100
|
+
userActions,
|
|
101
|
+
errorsFound: crashes.length + anomalies.filter(a => a.severity === 'critical' || a.severity === 'high').length,
|
|
102
|
+
memoryPeakMB,
|
|
103
|
+
cpuPeakPercent,
|
|
104
|
+
crashes,
|
|
105
|
+
anomalies,
|
|
106
|
+
executedAt: new Date().toISOString(),
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
result,
|
|
110
|
+
issuesFound: crashes.length + anomalies.length,
|
|
111
|
+
recommendations: generateRecommendations(result, appStructure),
|
|
112
|
+
summary: generateSimulationSummary(result),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async function simulateUserAction(pattern, appStructure, actionIndex) {
|
|
116
|
+
// Simulate different user patterns
|
|
117
|
+
switch (pattern) {
|
|
118
|
+
case 'random':
|
|
119
|
+
// Random navigation and interactions
|
|
120
|
+
const randomScreen = appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)];
|
|
121
|
+
// Simulate tap/scroll/type
|
|
122
|
+
break;
|
|
123
|
+
case 'sequential':
|
|
124
|
+
// Navigate through screens in order
|
|
125
|
+
const screenIndex = actionIndex % appStructure.screens.length;
|
|
126
|
+
// Navigate to screen at index
|
|
127
|
+
break;
|
|
128
|
+
case 'stress':
|
|
129
|
+
// Rapid interactions
|
|
130
|
+
// Multiple taps, fast scrolling, quick navigation
|
|
131
|
+
break;
|
|
132
|
+
case 'idle':
|
|
133
|
+
// Minimal interaction, just monitoring
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
await sleep(1);
|
|
137
|
+
}
|
|
138
|
+
function simulateMemoryUsage(actionIndex, totalActions, appStructure) {
|
|
139
|
+
// Simulate memory growth with occasional spikes
|
|
140
|
+
const baseMemory = 50 + appStructure.screens.length * 5;
|
|
141
|
+
const growth = (actionIndex / totalActions) * 100;
|
|
142
|
+
const noise = Math.random() * 50;
|
|
143
|
+
const spike = Math.random() < 0.05 ? Math.random() * 200 : 0;
|
|
144
|
+
return Math.round(baseMemory + growth + noise + spike);
|
|
145
|
+
}
|
|
146
|
+
function simulateCpuUsage(actionIndex, totalActions) {
|
|
147
|
+
// Simulate CPU usage with occasional spikes
|
|
148
|
+
const baseCpu = 20;
|
|
149
|
+
const noise = Math.random() * 30;
|
|
150
|
+
const spike = Math.random() < 0.1 ? Math.random() * 50 : 0;
|
|
151
|
+
return Math.min(100, Math.round(baseCpu + noise + spike));
|
|
152
|
+
}
|
|
153
|
+
function simulateFrameTime(intensity) {
|
|
154
|
+
// Target is 16.67ms for 60fps
|
|
155
|
+
const baseTime = intensity === 'high' ? 15 : intensity === 'medium' ? 12 : 10;
|
|
156
|
+
const variance = Math.random() * 10;
|
|
157
|
+
const spike = Math.random() < 0.05 ? Math.random() * 20 : 0;
|
|
158
|
+
return baseTime + variance + spike;
|
|
159
|
+
}
|
|
160
|
+
function checkStateConsistency(appStructure) {
|
|
161
|
+
// Simulate state consistency check
|
|
162
|
+
if (Math.random() < 0.1) {
|
|
163
|
+
const reasons = [
|
|
164
|
+
'UI state does not match data model',
|
|
165
|
+
'Cached data is stale',
|
|
166
|
+
'Navigation state mismatch',
|
|
167
|
+
'Form state lost after navigation',
|
|
168
|
+
];
|
|
169
|
+
return {
|
|
170
|
+
consistent: false,
|
|
171
|
+
reason: reasons[Math.floor(Math.random() * reasons.length)] || reasons[0],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return { consistent: true, reason: '' };
|
|
175
|
+
}
|
|
176
|
+
function generateMockStackTrace(appStructure) {
|
|
177
|
+
const randomScreen = appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)];
|
|
178
|
+
const randomComponent = appStructure.components[Math.floor(Math.random() * appStructure.components.length)];
|
|
179
|
+
return `
|
|
180
|
+
at ${randomComponent?.name || 'Component'}.render (${randomComponent?.path || 'component.tsx'}:42)
|
|
181
|
+
at ${randomScreen?.name || 'Screen'}.componentDidMount (${randomScreen?.path || 'screen.tsx'}:85)
|
|
182
|
+
at commitLifeCycles (react-native.js:1234)
|
|
183
|
+
at commitRoot (react-native.js:5678)
|
|
184
|
+
`.trim();
|
|
185
|
+
}
|
|
186
|
+
function generateRecommendations(result, appStructure) {
|
|
187
|
+
const recommendations = [];
|
|
188
|
+
// Memory recommendations
|
|
189
|
+
if (result.memoryPeakMB > 300) {
|
|
190
|
+
recommendations.push('Consider implementing lazy loading for heavy components');
|
|
191
|
+
recommendations.push('Review image caching strategy - memory usage is high');
|
|
192
|
+
}
|
|
193
|
+
if (result.anomalies.some(a => a.type === 'memory_spike')) {
|
|
194
|
+
recommendations.push('Investigate memory spikes - possible memory leak');
|
|
195
|
+
recommendations.push('Add cleanup functions to useEffect hooks');
|
|
196
|
+
}
|
|
197
|
+
// CPU recommendations
|
|
198
|
+
if (result.cpuPeakPercent > 70) {
|
|
199
|
+
recommendations.push('Optimize heavy computations - consider Web Workers or background threads');
|
|
200
|
+
}
|
|
201
|
+
// Render recommendations
|
|
202
|
+
const slowRenders = result.anomalies.filter(a => a.type === 'slow_render').length;
|
|
203
|
+
if (slowRenders > 5) {
|
|
204
|
+
recommendations.push('Multiple slow renders detected - review component re-render logic');
|
|
205
|
+
recommendations.push('Consider using React.memo or useMemo for expensive components');
|
|
206
|
+
}
|
|
207
|
+
// State recommendations
|
|
208
|
+
const stateIssues = result.anomalies.filter(a => a.type === 'state_inconsistency').length;
|
|
209
|
+
if (stateIssues > 0) {
|
|
210
|
+
recommendations.push('State inconsistencies found - review state management logic');
|
|
211
|
+
}
|
|
212
|
+
// Crash recommendations
|
|
213
|
+
if (result.crashes.length > 0) {
|
|
214
|
+
recommendations.push(`${result.crashes.length} crash(es) detected - prioritize crash investigation`);
|
|
215
|
+
}
|
|
216
|
+
return recommendations;
|
|
217
|
+
}
|
|
218
|
+
function generateSimulationSummary(result) {
|
|
219
|
+
const lines = [];
|
|
220
|
+
lines.push('Simulation Summary');
|
|
221
|
+
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
222
|
+
lines.push(`Duration: ${result.duration.toFixed(1)}s`);
|
|
223
|
+
lines.push(`User Actions: ${result.userActions}`);
|
|
224
|
+
lines.push(`Errors Found: ${result.errorsFound}`);
|
|
225
|
+
lines.push('');
|
|
226
|
+
lines.push('Metrics:');
|
|
227
|
+
lines.push(` Memory Peak: ${result.memoryPeakMB}MB`);
|
|
228
|
+
lines.push(` CPU Peak: ${result.cpuPeakPercent}%`);
|
|
229
|
+
lines.push('');
|
|
230
|
+
lines.push('Issues:');
|
|
231
|
+
lines.push(` Crashes: ${result.crashes.length}`);
|
|
232
|
+
lines.push(` Anomalies: ${result.anomalies.length}`);
|
|
233
|
+
if (result.anomalies.length > 0) {
|
|
234
|
+
const byType = {};
|
|
235
|
+
for (const a of result.anomalies) {
|
|
236
|
+
byType[a.type] = (byType[a.type] || 0) + 1;
|
|
237
|
+
}
|
|
238
|
+
lines.push('');
|
|
239
|
+
lines.push('Anomaly Breakdown:');
|
|
240
|
+
for (const [type, count] of Object.entries(byType)) {
|
|
241
|
+
lines.push(` - ${type}: ${count}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return lines.join('\n');
|
|
245
|
+
}
|
|
246
|
+
function sleep(ms) {
|
|
247
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
248
|
+
}
|
|
249
|
+
exports.default = runSimulation;
|
|
250
|
+
//# sourceMappingURL=runSimulation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runSimulation.js","sourceRoot":"","sources":["../../../src/tools/execution/runSimulation.ts"],"names":[],"mappings":"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"}
|