cbrowser 7.3.0 → 7.4.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.
Files changed (85) hide show
  1. package/dist/analysis/bug-hunter.d.ts +32 -0
  2. package/dist/analysis/bug-hunter.d.ts.map +1 -0
  3. package/dist/analysis/bug-hunter.js +106 -0
  4. package/dist/analysis/bug-hunter.js.map +1 -0
  5. package/dist/analysis/chaos-testing.d.ts +41 -0
  6. package/dist/analysis/chaos-testing.d.ts.map +1 -0
  7. package/dist/analysis/chaos-testing.js +87 -0
  8. package/dist/analysis/chaos-testing.js.map +1 -0
  9. package/dist/analysis/index.d.ts +10 -0
  10. package/dist/analysis/index.d.ts.map +1 -0
  11. package/dist/analysis/index.js +26 -0
  12. package/dist/analysis/index.js.map +1 -0
  13. package/dist/analysis/natural-language.d.ts +43 -0
  14. package/dist/analysis/natural-language.d.ts.map +1 -0
  15. package/dist/analysis/natural-language.js +205 -0
  16. package/dist/analysis/natural-language.js.map +1 -0
  17. package/dist/analysis/persona-comparison.d.ts +31 -0
  18. package/dist/analysis/persona-comparison.d.ts.map +1 -0
  19. package/dist/analysis/persona-comparison.js +217 -0
  20. package/dist/analysis/persona-comparison.js.map +1 -0
  21. package/dist/browser.d.ts +1 -411
  22. package/dist/browser.d.ts.map +1 -1
  23. package/dist/browser.js +0 -4745
  24. package/dist/browser.js.map +1 -1
  25. package/dist/cli.js +64 -56
  26. package/dist/cli.js.map +1 -1
  27. package/dist/daemon.d.ts.map +1 -1
  28. package/dist/daemon.js +2 -1
  29. package/dist/daemon.js.map +1 -1
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/mcp-server.d.ts.map +1 -1
  35. package/dist/mcp-server.js +406 -1
  36. package/dist/mcp-server.js.map +1 -1
  37. package/dist/performance/index.d.ts +7 -0
  38. package/dist/performance/index.d.ts.map +1 -0
  39. package/dist/performance/index.js +23 -0
  40. package/dist/performance/index.js.map +1 -0
  41. package/dist/performance/metrics.d.ts +49 -0
  42. package/dist/performance/metrics.d.ts.map +1 -0
  43. package/dist/performance/metrics.js +386 -0
  44. package/dist/performance/metrics.js.map +1 -0
  45. package/dist/testing/coverage.d.ts +39 -0
  46. package/dist/testing/coverage.d.ts.map +1 -0
  47. package/dist/testing/coverage.js +713 -0
  48. package/dist/testing/coverage.js.map +1 -0
  49. package/dist/testing/flaky-detection.d.ts +28 -0
  50. package/dist/testing/flaky-detection.d.ts.map +1 -0
  51. package/dist/testing/flaky-detection.js +332 -0
  52. package/dist/testing/flaky-detection.js.map +1 -0
  53. package/dist/testing/index.d.ts +10 -0
  54. package/dist/testing/index.d.ts.map +1 -0
  55. package/dist/testing/index.js +26 -0
  56. package/dist/testing/index.js.map +1 -0
  57. package/dist/testing/nl-test-suite.d.ts +70 -0
  58. package/dist/testing/nl-test-suite.d.ts.map +1 -0
  59. package/dist/testing/nl-test-suite.js +427 -0
  60. package/dist/testing/nl-test-suite.js.map +1 -0
  61. package/dist/testing/test-repair.d.ts +36 -0
  62. package/dist/testing/test-repair.d.ts.map +1 -0
  63. package/dist/testing/test-repair.js +528 -0
  64. package/dist/testing/test-repair.js.map +1 -0
  65. package/dist/visual/ab-comparison.d.ts +23 -0
  66. package/dist/visual/ab-comparison.d.ts.map +1 -0
  67. package/dist/visual/ab-comparison.js +366 -0
  68. package/dist/visual/ab-comparison.js.map +1 -0
  69. package/dist/visual/cross-browser.d.ts +41 -0
  70. package/dist/visual/cross-browser.d.ts.map +1 -0
  71. package/dist/visual/cross-browser.js +442 -0
  72. package/dist/visual/cross-browser.js.map +1 -0
  73. package/dist/visual/index.d.ts +10 -0
  74. package/dist/visual/index.d.ts.map +1 -0
  75. package/dist/visual/index.js +26 -0
  76. package/dist/visual/index.js.map +1 -0
  77. package/dist/visual/regression.d.ts +55 -0
  78. package/dist/visual/regression.d.ts.map +1 -0
  79. package/dist/visual/regression.js +616 -0
  80. package/dist/visual/regression.js.map +1 -0
  81. package/dist/visual/responsive.d.ts +27 -0
  82. package/dist/visual/responsive.d.ts.map +1 -0
  83. package/dist/visual/responsive.js +450 -0
  84. package/dist/visual/responsive.js.map +1 -0
  85. package/package.json +32 -3
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ /**
3
+ * Natural Language Test Suites
4
+ *
5
+ * Parse and run tests written in natural language.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.parseNLInstruction = parseNLInstruction;
9
+ exports.parseNLTestSuite = parseNLTestSuite;
10
+ exports.runNLTestSuite = runNLTestSuite;
11
+ exports.formatNLTestReport = formatNLTestReport;
12
+ exports.runNLTestFile = runNLTestFile;
13
+ const fs_1 = require("fs");
14
+ const browser_js_1 = require("../browser.js");
15
+ /**
16
+ * Parse a single natural language instruction into an NLTestStep.
17
+ *
18
+ * Supported patterns:
19
+ * - "go to https://..." / "navigate to https://..." / "open https://..."
20
+ * - "click [the] <target>" / "press <target>"
21
+ * - "type '<value>' in[to] <target>" / "fill <target> with '<value>'"
22
+ * - "select '<option>' from <dropdown>"
23
+ * - "scroll down/up"
24
+ * - "wait [for] <seconds> seconds"
25
+ * - "verify <assertion>" / "assert <assertion>" / "check <assertion>"
26
+ * - "take screenshot"
27
+ */
28
+ function parseNLInstruction(instruction) {
29
+ const lower = instruction.toLowerCase().trim();
30
+ // Navigate patterns
31
+ const navigateMatch = lower.match(/^(?:go to|navigate to|open|visit)\s+(.+)$/i);
32
+ if (navigateMatch) {
33
+ return {
34
+ instruction,
35
+ action: "navigate",
36
+ target: navigateMatch[1].trim(),
37
+ };
38
+ }
39
+ // Click patterns
40
+ const clickMatch = lower.match(/^(?:click|tap|press)\s+(?:on\s+)?(?:the\s+)?(.+)$/i);
41
+ if (clickMatch) {
42
+ return {
43
+ instruction,
44
+ action: "click",
45
+ target: clickMatch[1].trim(),
46
+ };
47
+ }
48
+ // Fill patterns: "type 'value' in target" or "fill target with 'value'"
49
+ const typeMatch = lower.match(/^(?:type|enter)\s+['"](.+?)['"]\s+(?:in|into)\s+(?:the\s+)?(.+)$/i);
50
+ if (typeMatch) {
51
+ return {
52
+ instruction,
53
+ action: "fill",
54
+ value: typeMatch[1],
55
+ target: typeMatch[2].trim(),
56
+ };
57
+ }
58
+ const fillMatch = lower.match(/^fill\s+(?:the\s+)?(.+?)\s+with\s+['"](.+?)['"]$/i);
59
+ if (fillMatch) {
60
+ return {
61
+ instruction,
62
+ action: "fill",
63
+ target: fillMatch[1].trim(),
64
+ value: fillMatch[2],
65
+ };
66
+ }
67
+ // Select patterns
68
+ const selectMatch = lower.match(/^select\s+['"](.+?)['"]\s+(?:from|in)\s+(?:the\s+)?(.+)$/i);
69
+ if (selectMatch) {
70
+ return {
71
+ instruction,
72
+ action: "select",
73
+ value: selectMatch[1],
74
+ target: selectMatch[2].trim(),
75
+ };
76
+ }
77
+ // Scroll patterns
78
+ const scrollMatch = lower.match(/^scroll\s+(up|down|left|right)(?:\s+(\d+)\s+(?:times|pixels))?$/i);
79
+ if (scrollMatch) {
80
+ return {
81
+ instruction,
82
+ action: "scroll",
83
+ target: scrollMatch[1],
84
+ value: scrollMatch[2] || "3",
85
+ };
86
+ }
87
+ // Wait patterns
88
+ const waitMatch = lower.match(/^wait\s+(?:for\s+)?(\d+(?:\.\d+)?)\s*(?:seconds?|s)$/i);
89
+ if (waitMatch) {
90
+ return {
91
+ instruction,
92
+ action: "wait",
93
+ value: waitMatch[1],
94
+ };
95
+ }
96
+ // Wait for text pattern
97
+ const waitForMatch = lower.match(/^wait\s+(?:for|until)\s+['"](.+?)['"]\s+(?:appears?|is visible|shows?)$/i);
98
+ if (waitForMatch) {
99
+ return {
100
+ instruction,
101
+ action: "wait",
102
+ target: waitForMatch[1],
103
+ };
104
+ }
105
+ // Assert/verify patterns
106
+ const assertPatterns = [
107
+ // Title assertions
108
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?(?:page\s+)?title\s+(?:contains?|has)\s+['"](.+?)['"]$/i, type: "title", assertType: "contains" },
109
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?(?:page\s+)?title\s+(?:is|equals?)\s+['"](.+?)['"]$/i, type: "title", assertType: "equals" },
110
+ // URL assertions
111
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?url\s+(?:contains?|has)\s+['"](.+?)['"]$/i, type: "url", assertType: "contains" },
112
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?url\s+(?:is|equals?)\s+['"](.+?)['"]$/i, type: "url", assertType: "equals" },
113
+ // Content assertions
114
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?(?:page\s+)?(?:contains?|has|shows?)\s+['"](.+?)['"]$/i, type: "content", assertType: "contains" },
115
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?['"](.+?)['"]\s+(?:is\s+)?(?:visible|displayed|shown)$/i, type: "content", assertType: "contains" },
116
+ // Element exists
117
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?['"](.+?)['"]\s+exists?$/i, type: "element", assertType: "exists" },
118
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?(?:there\s+is\s+)?(?:a|an)\s+['"](.+?)['"]$/i, type: "element", assertType: "exists" },
119
+ // Count assertions
120
+ { pattern: /^(?:verify|assert|check)\s+(?:that\s+)?(?:there\s+are\s+)?(\d+)\s+(.+?)$/i, type: "count", assertType: "count" },
121
+ ];
122
+ for (const { pattern, type, assertType } of assertPatterns) {
123
+ const match = lower.match(pattern);
124
+ if (match) {
125
+ return {
126
+ instruction,
127
+ action: "assert",
128
+ target: type === "count" ? match[2] : match[1],
129
+ value: type === "count" ? match[1] : undefined,
130
+ assertionType: assertType,
131
+ };
132
+ }
133
+ }
134
+ // Screenshot pattern
135
+ if (/^(?:take\s+(?:a\s+)?screenshot|screenshot|capture\s+(?:the\s+)?(?:page|screen))$/i.test(lower)) {
136
+ return {
137
+ instruction,
138
+ action: "screenshot",
139
+ };
140
+ }
141
+ // Unknown - return as-is for AI-powered interpretation later
142
+ return {
143
+ instruction,
144
+ action: "unknown",
145
+ target: instruction,
146
+ };
147
+ }
148
+ /**
149
+ * Parse a natural language test suite from text.
150
+ *
151
+ * Format:
152
+ * ```
153
+ * # Test: Login Flow
154
+ * go to https://example.com
155
+ * click the login button
156
+ * type "user@example.com" in email field
157
+ * type "password123" in password field
158
+ * click submit
159
+ * verify url contains "/dashboard"
160
+ *
161
+ * # Test: Search Functionality
162
+ * go to https://example.com
163
+ * type "test query" in search box
164
+ * click search button
165
+ * verify page contains "results"
166
+ * ```
167
+ */
168
+ function parseNLTestSuite(text, suiteName = "Unnamed Suite") {
169
+ const lines = text.split("\n").map(l => l.trim()).filter(l => l && !l.startsWith("//"));
170
+ const tests = [];
171
+ let currentTest = null;
172
+ for (const line of lines) {
173
+ // Check for test header: "# Test: Name" or "## Name" or "Test: Name"
174
+ const testHeaderMatch = line.match(/^(?:#\s*)?(?:test:\s*)?(.+)$/i);
175
+ if (line.startsWith("#") || line.toLowerCase().startsWith("test:")) {
176
+ // Save previous test if exists
177
+ if (currentTest && currentTest.steps.length > 0) {
178
+ tests.push(currentTest);
179
+ }
180
+ const name = testHeaderMatch?.[1]?.replace(/^#+\s*/, "").replace(/^test:\s*/i, "").trim() || "Unnamed Test";
181
+ currentTest = {
182
+ name,
183
+ steps: [],
184
+ };
185
+ }
186
+ else if (line.length > 0) {
187
+ // Parse as instruction
188
+ if (!currentTest) {
189
+ // Create default test if no header found
190
+ currentTest = {
191
+ name: "Default Test",
192
+ steps: [],
193
+ };
194
+ }
195
+ const step = parseNLInstruction(line);
196
+ currentTest.steps.push(step);
197
+ }
198
+ }
199
+ // Save final test
200
+ if (currentTest && currentTest.steps.length > 0) {
201
+ tests.push(currentTest);
202
+ }
203
+ return { name: suiteName, tests };
204
+ }
205
+ /**
206
+ * Run a natural language test suite.
207
+ */
208
+ async function runNLTestSuite(suite, options = {}) {
209
+ const { stepTimeout = 30000, continueOnFailure = true, screenshotOnFailure = true, headless = true, } = options;
210
+ const startTime = Date.now();
211
+ const testResults = [];
212
+ console.log(`\n🧪 Running Test Suite: ${suite.name}`);
213
+ console.log(` Tests: ${suite.tests.length}`);
214
+ console.log(` Continue on failure: ${continueOnFailure}`);
215
+ console.log("");
216
+ const browser = new browser_js_1.CBrowser({
217
+ headless,
218
+ });
219
+ try {
220
+ await browser.launch();
221
+ for (const test of suite.tests) {
222
+ console.log(`\n📋 Test: ${test.name}`);
223
+ const testStartTime = Date.now();
224
+ const stepResults = [];
225
+ let testPassed = true;
226
+ let testError;
227
+ for (const step of test.steps) {
228
+ console.log(` → ${step.instruction}`);
229
+ const stepStartTime = Date.now();
230
+ let stepPassed = true;
231
+ let stepError;
232
+ let screenshot;
233
+ let actualValue;
234
+ try {
235
+ // Execute the step based on action type
236
+ switch (step.action) {
237
+ case "navigate": {
238
+ await browser.navigate(step.target || "");
239
+ break;
240
+ }
241
+ case "click": {
242
+ const result = await browser.smartClick(step.target || "");
243
+ if (!result.success) {
244
+ throw new Error(`Failed to click: ${step.target}`);
245
+ }
246
+ break;
247
+ }
248
+ case "fill": {
249
+ await browser.fill(step.target || "", step.value || "");
250
+ break;
251
+ }
252
+ case "select": {
253
+ await browser.fill(step.target || "", step.value || "");
254
+ break;
255
+ }
256
+ case "scroll": {
257
+ const direction = step.target?.toLowerCase() === "up" ? -500 : 500;
258
+ // Use private page access through cast
259
+ const page = browser.page;
260
+ if (page) {
261
+ await page.evaluate((d) => window.scrollBy(0, d), direction);
262
+ }
263
+ break;
264
+ }
265
+ case "wait": {
266
+ if (step.target) {
267
+ // Wait for text to appear - use private page access
268
+ const page = browser.page;
269
+ if (page) {
270
+ await page.waitForSelector(`text=${step.target}`, { timeout: stepTimeout });
271
+ }
272
+ }
273
+ else {
274
+ // Wait for duration
275
+ const ms = parseFloat(step.value || "1") * 1000;
276
+ await new Promise(r => setTimeout(r, ms));
277
+ }
278
+ break;
279
+ }
280
+ case "assert": {
281
+ const assertResult = await browser.assert(step.instruction);
282
+ stepPassed = assertResult.passed;
283
+ actualValue = String(assertResult.actual);
284
+ if (!assertResult.passed) {
285
+ stepError = assertResult.message;
286
+ }
287
+ break;
288
+ }
289
+ case "screenshot": {
290
+ screenshot = await browser.screenshot();
291
+ break;
292
+ }
293
+ case "unknown": {
294
+ // Try to interpret as a click or fill
295
+ console.log(` ⚠️ Unknown instruction, attempting smart interpretation...`);
296
+ const result = await browser.smartClick(step.target || step.instruction);
297
+ if (!result.success) {
298
+ throw new Error(`Could not interpret: ${step.instruction}`);
299
+ }
300
+ break;
301
+ }
302
+ }
303
+ console.log(` ✓ Passed (${Date.now() - stepStartTime}ms)`);
304
+ }
305
+ catch (e) {
306
+ stepPassed = false;
307
+ stepError = e.message;
308
+ testPassed = false;
309
+ testError = testError || e.message;
310
+ console.log(` ✗ Failed: ${e.message}`);
311
+ if (screenshotOnFailure) {
312
+ try {
313
+ screenshot = await browser.screenshot();
314
+ }
315
+ catch { }
316
+ }
317
+ }
318
+ stepResults.push({
319
+ instruction: step.instruction,
320
+ action: step.action,
321
+ passed: stepPassed,
322
+ duration: Date.now() - stepStartTime,
323
+ error: stepError,
324
+ screenshot,
325
+ actualValue,
326
+ });
327
+ // Stop test if step failed and not continuing on failure
328
+ if (!stepPassed && !continueOnFailure) {
329
+ break;
330
+ }
331
+ }
332
+ testResults.push({
333
+ name: test.name,
334
+ passed: testPassed,
335
+ duration: Date.now() - testStartTime,
336
+ stepResults,
337
+ error: testError,
338
+ });
339
+ console.log(` ${testPassed ? "✅" : "❌"} ${test.name}: ${testPassed ? "PASSED" : "FAILED"}`);
340
+ }
341
+ }
342
+ finally {
343
+ await browser.close();
344
+ }
345
+ const passed = testResults.filter(t => t.passed).length;
346
+ const failed = testResults.filter(t => !t.passed).length;
347
+ const result = {
348
+ name: suite.name,
349
+ timestamp: new Date().toISOString(),
350
+ duration: Date.now() - startTime,
351
+ testResults,
352
+ summary: {
353
+ total: suite.tests.length,
354
+ passed,
355
+ failed,
356
+ skipped: 0,
357
+ passRate: suite.tests.length > 0 ? (passed / suite.tests.length) * 100 : 0,
358
+ },
359
+ };
360
+ return result;
361
+ }
362
+ /**
363
+ * Format a test suite result as a report.
364
+ */
365
+ function formatNLTestReport(result) {
366
+ const lines = [];
367
+ lines.push("");
368
+ lines.push("╔══════════════════════════════════════════════════════════════════════════════╗");
369
+ lines.push("║ NATURAL LANGUAGE TEST REPORT ║");
370
+ lines.push("╚══════════════════════════════════════════════════════════════════════════════╝");
371
+ lines.push("");
372
+ lines.push(`📋 Suite: ${result.name}`);
373
+ lines.push(`⏱️ Duration: ${(result.duration / 1000).toFixed(1)}s`);
374
+ lines.push(`📅 Timestamp: ${result.timestamp}`);
375
+ lines.push("");
376
+ // Summary stats
377
+ const passEmoji = result.summary.passRate === 100 ? "🎉" : result.summary.passRate >= 80 ? "✅" : "⚠️";
378
+ lines.push(`${passEmoji} Pass Rate: ${result.summary.passed}/${result.summary.total} (${result.summary.passRate.toFixed(0)}%)`);
379
+ lines.push("");
380
+ // Results table
381
+ lines.push("┌───────────────────────────────────────┬──────────┬──────────┬────────────────────┐");
382
+ lines.push("│ Test │ Status │ Duration │ Error │");
383
+ lines.push("├───────────────────────────────────────┼──────────┼──────────┼────────────────────┤");
384
+ for (const test of result.testResults) {
385
+ const name = test.name.padEnd(37).slice(0, 37);
386
+ const status = test.passed ? "✓ PASS".padEnd(8) : "✗ FAIL".padEnd(8);
387
+ const duration = `${(test.duration / 1000).toFixed(1)}s`.padEnd(8);
388
+ const error = (test.error || "-").slice(0, 18).padEnd(18);
389
+ lines.push(`│ ${name} │ ${status} │ ${duration} │ ${error} │`);
390
+ }
391
+ lines.push("└───────────────────────────────────────┴──────────┴──────────┴────────────────────┘");
392
+ lines.push("");
393
+ // Failed test details
394
+ const failedTests = result.testResults.filter(t => !t.passed);
395
+ if (failedTests.length > 0) {
396
+ lines.push("❌ FAILED TESTS");
397
+ lines.push("─".repeat(60));
398
+ for (const test of failedTests) {
399
+ lines.push(`\n 📋 ${test.name}`);
400
+ const failedSteps = test.stepResults.filter(s => !s.passed);
401
+ for (const step of failedSteps) {
402
+ lines.push(` ✗ ${step.instruction}`);
403
+ if (step.error) {
404
+ lines.push(` Error: ${step.error}`);
405
+ }
406
+ if (step.screenshot) {
407
+ lines.push(` Screenshot: ${step.screenshot}`);
408
+ }
409
+ }
410
+ }
411
+ lines.push("");
412
+ }
413
+ return lines.join("\n");
414
+ }
415
+ /**
416
+ * Run a natural language test suite from a file.
417
+ */
418
+ async function runNLTestFile(filepath, options = {}) {
419
+ if (!(0, fs_1.existsSync)(filepath)) {
420
+ throw new Error(`Test file not found: ${filepath}`);
421
+ }
422
+ const content = (0, fs_1.readFileSync)(filepath, "utf-8");
423
+ const suiteName = filepath.split("/").pop()?.replace(/\.[^.]+$/, "") || "Test Suite";
424
+ const suite = parseNLTestSuite(content, suiteName);
425
+ return runNLTestSuite(suite, options);
426
+ }
427
+ //# sourceMappingURL=nl-test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nl-test-suite.js","sourceRoot":"","sources":["../../src/testing/nl-test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * AI Test Repair (v6.2.0)
3
+ *
4
+ * Analyze test failures and suggest repairs.
5
+ */
6
+ import type { NLTestCase, TestRepairResult, TestRepairSuiteResult } from "../types.js";
7
+ export interface RepairTestOptions {
8
+ /** Run headless */
9
+ headless?: boolean;
10
+ /** Automatically apply the best repair */
11
+ autoApply?: boolean;
12
+ /** Verify repairs by re-running the test */
13
+ verifyRepairs?: boolean;
14
+ /** Maximum retries per step */
15
+ maxRetries?: number;
16
+ }
17
+ /**
18
+ * Run a test, analyze failures, and suggest/apply repairs.
19
+ */
20
+ export declare function repairTest(test: NLTestCase, options?: RepairTestOptions): Promise<TestRepairResult>;
21
+ /**
22
+ * Run test repair on a full suite.
23
+ */
24
+ export declare function repairTestSuite(suite: {
25
+ name: string;
26
+ tests: NLTestCase[];
27
+ }, options?: RepairTestOptions): Promise<TestRepairSuiteResult>;
28
+ /**
29
+ * Format a repair result as a report.
30
+ */
31
+ export declare function formatRepairReport(result: TestRepairSuiteResult): string;
32
+ /**
33
+ * Export repaired test to file.
34
+ */
35
+ export declare function exportRepairedTest(result: TestRepairResult): string;
36
+ //# sourceMappingURL=test-repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-repair.d.ts","sourceRoot":"","sources":["../../src/testing/test-repair.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAEV,UAAU,EAIV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAkSrB,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8L3B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,EAC5C,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAgChC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAqDxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBnE"}