@nexustools/nwjstestrunner 0.0.0-stage → 1.0.0-beta.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 (79) hide show
  1. package/AGENTS.md +21 -0
  2. package/README.md +142 -2
  3. package/bin/nwjstestrunner.js +13 -0
  4. package/dist/cli/nwjs-cli-launcher.d.ts +10 -0
  5. package/dist/cli/nwjs-cli-launcher.d.ts.map +1 -0
  6. package/dist/cli/nwjs-cli-launcher.js +281 -0
  7. package/dist/cli/nwjs-cli-launcher.js.map +1 -0
  8. package/dist/config/harness-config-loader.d.ts +10 -0
  9. package/dist/config/harness-config-loader.d.ts.map +1 -0
  10. package/dist/config/harness-config-loader.js +242 -0
  11. package/dist/config/harness-config-loader.js.map +1 -0
  12. package/dist/core/test-runner.d.ts +61 -0
  13. package/dist/core/test-runner.d.ts.map +1 -0
  14. package/dist/core/test-runner.js +450 -0
  15. package/dist/core/test-runner.js.map +1 -0
  16. package/dist/esm/index.d.mts +2 -0
  17. package/dist/esm/index.mjs +26 -0
  18. package/dist/harness/graphical-overlay-view.d.ts +18 -0
  19. package/dist/harness/graphical-overlay-view.d.ts.map +1 -0
  20. package/dist/harness/graphical-overlay-view.js +213 -0
  21. package/dist/harness/graphical-overlay-view.js.map +1 -0
  22. package/dist/harness/nwjs-graphical-test-harness.d.ts +40 -0
  23. package/dist/harness/nwjs-graphical-test-harness.d.ts.map +1 -0
  24. package/dist/harness/nwjs-graphical-test-harness.js +398 -0
  25. package/dist/harness/nwjs-graphical-test-harness.js.map +1 -0
  26. package/dist/harness/test-http-server.d.ts +12 -0
  27. package/dist/harness/test-http-server.d.ts.map +1 -0
  28. package/dist/harness/test-http-server.js +183 -0
  29. package/dist/harness/test-http-server.js.map +1 -0
  30. package/dist/harness/test-log-writer.d.ts +29 -0
  31. package/dist/harness/test-log-writer.d.ts.map +1 -0
  32. package/dist/harness/test-log-writer.js +173 -0
  33. package/dist/harness/test-log-writer.js.map +1 -0
  34. package/dist/harness/webview-test-controller.d.ts +18 -0
  35. package/dist/harness/webview-test-controller.d.ts.map +1 -0
  36. package/dist/harness/webview-test-controller.js +163 -0
  37. package/dist/harness/webview-test-controller.js.map +1 -0
  38. package/dist/index.d.ts +13 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +52 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/matchers/deep-equality-helper.d.ts +10 -0
  43. package/dist/matchers/deep-equality-helper.d.ts.map +1 -0
  44. package/dist/matchers/deep-equality-helper.js +188 -0
  45. package/dist/matchers/deep-equality-helper.js.map +1 -0
  46. package/dist/matchers/expect-matcher.d.ts +7 -0
  47. package/dist/matchers/expect-matcher.d.ts.map +1 -0
  48. package/dist/matchers/expect-matcher.js +261 -0
  49. package/dist/matchers/expect-matcher.js.map +1 -0
  50. package/dist/mock/jest-mock-factory.d.ts +20 -0
  51. package/dist/mock/jest-mock-factory.d.ts.map +1 -0
  52. package/dist/mock/jest-mock-factory.js +141 -0
  53. package/dist/mock/jest-mock-factory.js.map +1 -0
  54. package/dist/tests/NwjsTestRunnerSuites.d.ts +3 -0
  55. package/dist/tests/NwjsTestRunnerSuites.d.ts.map +1 -0
  56. package/dist/tests/NwjsTestRunnerSuites.js +266 -0
  57. package/dist/tests/NwjsTestRunnerSuites.js.map +1 -0
  58. package/dist/types/test-runner-types.d.ts +321 -0
  59. package/dist/types/test-runner-types.d.ts.map +1 -0
  60. package/dist/types/test-runner-types.js +3 -0
  61. package/dist/types/test-runner-types.js.map +1 -0
  62. package/package.json +56 -4
  63. package/runner/demo-client.html +70 -0
  64. package/runner/index.html +223 -0
  65. package/runner/package.json +27 -0
  66. package/src/cli/nwjs-cli-launcher.ts +243 -0
  67. package/src/config/harness-config-loader.ts +214 -0
  68. package/src/core/test-runner.ts +553 -0
  69. package/src/harness/graphical-overlay-view.ts +219 -0
  70. package/src/harness/nwjs-graphical-test-harness.ts +468 -0
  71. package/src/harness/test-http-server.ts +162 -0
  72. package/src/harness/test-log-writer.ts +154 -0
  73. package/src/harness/webview-test-controller.ts +192 -0
  74. package/src/index.ts +28 -0
  75. package/src/matchers/deep-equality-helper.ts +193 -0
  76. package/src/matchers/expect-matcher.ts +361 -0
  77. package/src/mock/jest-mock-factory.ts +170 -0
  78. package/src/tests/NwjsTestRunnerSuites.ts +267 -0
  79. package/src/types/test-runner-types.ts +335 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nwjs-graphical-test-harness.js","sourceRoot":"","sources":["../../src/harness/nwjs-graphical-test-harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TestHttpServerOptions } from '../types/test-runner-types';
2
+ export declare class TestHttpServer {
3
+ private readonly options;
4
+ private server;
5
+ private boundPort;
6
+ constructor(options: TestHttpServerOptions);
7
+ getPort(): number;
8
+ getBaseUrl(): string;
9
+ start(): Promise<number>;
10
+ stop(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=test-http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-http-server.d.ts","sourceRoot":"","sources":["../../src/harness/test-http-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AA4BnE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAK;gBAEV,OAAO,EAAE,qBAAqB;IAInC,OAAO,IAAI,MAAM;IAIjB,UAAU,IAAI,MAAM;IAKd,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAmGxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAanC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TestHttpServer = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const http = __importStar(require("http"));
39
+ const path = __importStar(require("path"));
40
+ const DEFAULT_MIME_TYPES = {
41
+ '.html': 'text/html; charset=utf-8',
42
+ '.htm': 'text/html; charset=utf-8',
43
+ '.js': 'application/javascript; charset=utf-8',
44
+ '.mjs': 'application/javascript; charset=utf-8',
45
+ '.cjs': 'application/javascript; charset=utf-8',
46
+ '.css': 'text/css; charset=utf-8',
47
+ '.json': 'application/json; charset=utf-8',
48
+ '.map': 'application/json; charset=utf-8',
49
+ '.svg': 'image/svg+xml',
50
+ '.png': 'image/png',
51
+ '.jpg': 'image/jpeg',
52
+ '.jpeg': 'image/jpeg',
53
+ '.gif': 'image/gif',
54
+ '.webp': 'image/webp',
55
+ '.bmp': 'image/bmp',
56
+ '.ico': 'image/x-icon',
57
+ '.woff': 'font/woff',
58
+ '.woff2': 'font/woff2',
59
+ '.ttf': 'font/ttf',
60
+ '.otf': 'font/otf',
61
+ '.wasm': 'application/wasm',
62
+ '.txt': 'text/plain; charset=utf-8',
63
+ '.xml': 'application/xml; charset=utf-8'
64
+ };
65
+ class TestHttpServer {
66
+ options;
67
+ server = null;
68
+ boundPort = 0;
69
+ constructor(options) {
70
+ this.options = options;
71
+ }
72
+ getPort() {
73
+ return this.boundPort;
74
+ }
75
+ getBaseUrl() {
76
+ const host = this.options.host || '127.0.0.1';
77
+ return `http://${host}:${this.boundPort}`;
78
+ }
79
+ async start() {
80
+ if (this.server && this.boundPort > 0) {
81
+ return this.boundPort;
82
+ }
83
+ const projectRootDir = path.resolve(this.options.projectRootDir);
84
+ const defaultEntry = this.options.defaultEntryFile || 'index.html';
85
+ const host = this.options.host || '127.0.0.1';
86
+ const port = this.options.port ?? 0;
87
+ const ignore404 = new Set(this.options.ignore404Paths ?? ['/favicon.ico']);
88
+ const mimeTypes = {
89
+ ...DEFAULT_MIME_TYPES,
90
+ ...(this.options.customMimeTypes || {})
91
+ };
92
+ this.server = http.createServer(async (req, res) => {
93
+ try {
94
+ const reqUrl = req.url || '/';
95
+ const rawPath = reqUrl.split('?')[0] || '/';
96
+ const reqPath = decodeURIComponent(rawPath);
97
+ if (this.options.routeHandler) {
98
+ const handled = await this.options.routeHandler(req, res, {
99
+ projectRootDir,
100
+ reqPath,
101
+ reqUrl
102
+ });
103
+ if (handled === true || res.writableEnded || res.headersSent) {
104
+ return;
105
+ }
106
+ }
107
+ const relPath = reqPath === '/'
108
+ ? defaultEntry
109
+ : reqPath.startsWith('/')
110
+ ? reqPath.slice(1)
111
+ : reqPath;
112
+ const filePath = path.resolve(projectRootDir, relPath);
113
+ // Guard against directory traversal outside projectRootDir
114
+ const normalizedRoot = projectRootDir.endsWith(path.sep)
115
+ ? projectRootDir
116
+ : projectRootDir + path.sep;
117
+ const isInsideProject = filePath === projectRootDir || filePath.startsWith(normalizedRoot);
118
+ if (isInsideProject &&
119
+ relPath &&
120
+ fs.existsSync(filePath) &&
121
+ fs.statSync(filePath).isFile()) {
122
+ const ext = path.extname(filePath).toLowerCase();
123
+ const contentType = mimeTypes[ext] || 'application/octet-stream';
124
+ res.writeHead(200, {
125
+ 'Content-Type': contentType,
126
+ 'Access-Control-Allow-Origin': '*',
127
+ 'Cache-Control': 'no-store'
128
+ });
129
+ fs.createReadStream(filePath).pipe(res);
130
+ return;
131
+ }
132
+ if (!ignore404.has(reqPath) && this.options.onHttp404) {
133
+ this.options.onHttp404(reqPath, filePath);
134
+ }
135
+ res.writeHead(404, {
136
+ 'Content-Type': 'text/plain; charset=utf-8',
137
+ 'Access-Control-Allow-Origin': '*'
138
+ });
139
+ res.end(`404 Not Found: ${reqPath}`);
140
+ }
141
+ catch (err) {
142
+ if (!res.headersSent) {
143
+ res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
144
+ }
145
+ res.end(`500 Internal Server Error: ${err?.message || String(err)}`);
146
+ }
147
+ });
148
+ return new Promise((resolve, reject) => {
149
+ if (!this.server) {
150
+ reject(new Error('HTTP server not created'));
151
+ return;
152
+ }
153
+ this.server.once('error', (err) => reject(err));
154
+ this.server.listen(port, host, () => {
155
+ const addr = this.server?.address();
156
+ if (addr && typeof addr === 'object') {
157
+ this.boundPort = addr.port;
158
+ resolve(this.boundPort);
159
+ }
160
+ else {
161
+ reject(new Error('Failed to resolve bound port for TestHttpServer'));
162
+ }
163
+ });
164
+ });
165
+ }
166
+ async stop() {
167
+ if (!this.server)
168
+ return;
169
+ const srv = this.server;
170
+ this.server = null;
171
+ this.boundPort = 0;
172
+ return new Promise((resolve) => {
173
+ try {
174
+ srv.close(() => resolve());
175
+ }
176
+ catch (_e) {
177
+ resolve();
178
+ }
179
+ });
180
+ }
181
+ }
182
+ exports.TestHttpServer = TestHttpServer;
183
+ //# sourceMappingURL=test-http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-http-server.js","sourceRoot":"","sources":["../../src/harness/test-http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export declare class TestLogWriter {
2
+ private readonly logFilePath;
3
+ private readonly headerTitle;
4
+ private readonly errorLogs;
5
+ private totalTests;
6
+ private passedCount;
7
+ private failedCount;
8
+ constructor(logFilePath: string, headerTitle?: string);
9
+ private ensureDirectory;
10
+ getLogFilePath(): string;
11
+ getErrorLogs(): ReadonlyArray<string>;
12
+ getMetrics(): {
13
+ totalTests: number;
14
+ passedCount: number;
15
+ failedCount: number;
16
+ };
17
+ setTotalTests(total: number): void;
18
+ setCounts(passed: number, failed: number): void;
19
+ incrementPassed(delta?: number): void;
20
+ incrementFailed(delta?: number): void;
21
+ writeInitialInterruptedBanner(): void;
22
+ writeProgressSnapshot(statusLabel?: string): void;
23
+ recordError(source: string, err: any): string;
24
+ writeFinalSummary(): {
25
+ exitCode: number;
26
+ logText: string;
27
+ };
28
+ }
29
+ //# sourceMappingURL=test-log-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-log-writer.d.ts","sourceRoot":"","sources":["../../src/harness/test-log-writer.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;gBAEZ,WAAW,EAAE,MAAM,EAAE,WAAW,SAA0C;IAMtF,OAAO,CAAC,eAAe;IAMhB,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,aAAa,CAAC,MAAM,CAAC;IAIrC,UAAU,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAQ9E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,KAAK,SAAI,GAAG,IAAI;IAIhC,eAAe,CAAC,KAAK,SAAI,GAAG,IAAI;IAIhC,6BAA6B,IAAI,IAAI;IAcrC,qBAAqB,CAAC,WAAW,SAAqB,GAAG,IAAI;IAwB7D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM;IAY7C,iBAAiB,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CA+ClE"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TestLogWriter = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class TestLogWriter {
40
+ logFilePath;
41
+ headerTitle;
42
+ errorLogs = [];
43
+ totalTests = 0;
44
+ passedCount = 0;
45
+ failedCount = 0;
46
+ constructor(logFilePath, headerTitle = 'NW.js Desktop Client Test Harness Log') {
47
+ this.logFilePath = path.resolve(logFilePath);
48
+ this.headerTitle = headerTitle;
49
+ this.ensureDirectory();
50
+ }
51
+ ensureDirectory() {
52
+ try {
53
+ fs.mkdirSync(path.dirname(this.logFilePath), { recursive: true });
54
+ }
55
+ catch (_e) { }
56
+ }
57
+ getLogFilePath() {
58
+ return this.logFilePath;
59
+ }
60
+ getErrorLogs() {
61
+ return this.errorLogs;
62
+ }
63
+ getMetrics() {
64
+ return {
65
+ totalTests: this.totalTests,
66
+ passedCount: this.passedCount,
67
+ failedCount: this.failedCount
68
+ };
69
+ }
70
+ setTotalTests(total) {
71
+ this.totalTests = Math.max(0, total);
72
+ }
73
+ setCounts(passed, failed) {
74
+ this.passedCount = Math.max(0, passed);
75
+ this.failedCount = Math.max(0, failed);
76
+ }
77
+ incrementPassed(delta = 1) {
78
+ this.passedCount += delta;
79
+ }
80
+ incrementFailed(delta = 1) {
81
+ this.failedCount += delta;
82
+ }
83
+ writeInitialInterruptedBanner() {
84
+ try {
85
+ this.ensureDirectory();
86
+ const lines = [
87
+ '==================================================',
88
+ this.headerTitle,
89
+ '==================================================',
90
+ `Started at: ${new Date().toISOString()}`,
91
+ 'Status: Tests interupted'
92
+ ];
93
+ fs.writeFileSync(this.logFilePath, lines.join('\n'), 'utf-8');
94
+ }
95
+ catch (_e) { }
96
+ }
97
+ writeProgressSnapshot(statusLabel = 'Tests interupted') {
98
+ try {
99
+ this.ensureDirectory();
100
+ const lines = [
101
+ '==================================================',
102
+ this.headerTitle,
103
+ '==================================================',
104
+ `Updated at: ${new Date().toISOString()}`,
105
+ `Status: ${statusLabel || 'Tests interupted'}`,
106
+ `Total Tests: ${this.totalTests}`,
107
+ `Passed: ${this.passedCount}`,
108
+ `Failed: ${this.failedCount}`,
109
+ '=================================================='
110
+ ];
111
+ if (this.errorLogs.length > 0) {
112
+ lines.push('FAILURES & ERRORS:');
113
+ for (const err of this.errorLogs) {
114
+ lines.push(err);
115
+ }
116
+ }
117
+ fs.writeFileSync(this.logFilePath, lines.join('\n'), 'utf-8');
118
+ }
119
+ catch (_e) { }
120
+ }
121
+ recordError(source, err) {
122
+ const detail = err && typeof err === 'object' && (err.stack || err.message)
123
+ ? err.stack || err.message
124
+ : String(err);
125
+ const errMsg = `[ERROR][${source}] ${detail}`;
126
+ this.errorLogs.push(errMsg);
127
+ console.error(errMsg);
128
+ this.writeProgressSnapshot('Tests interupted (Running with errors)');
129
+ return errMsg;
130
+ }
131
+ writeFinalSummary() {
132
+ const totalPassed = this.passedCount;
133
+ let totalFailed = this.failedCount;
134
+ if (this.totalTests > 0 && totalPassed + totalFailed !== this.totalTests) {
135
+ this.recordError('TestCountMismatchError', `Test count mismatch: total expected ${this.totalTests}, but executed passed (${totalPassed}) + failed (${totalFailed}) = ${totalPassed + totalFailed}`);
136
+ }
137
+ if (this.errorLogs.length > 0 && totalFailed === 0) {
138
+ totalFailed = 1;
139
+ }
140
+ const totalAll = this.totalTests || totalPassed + totalFailed;
141
+ const testLogLines = [
142
+ '==================================================',
143
+ this.headerTitle,
144
+ '==================================================',
145
+ `Completed at: ${new Date().toISOString()}`,
146
+ `Total Tests: ${totalAll}`,
147
+ `Passed: ${totalPassed}`,
148
+ `Failed: ${totalFailed}`,
149
+ '=================================================='
150
+ ];
151
+ if (this.errorLogs.length > 0) {
152
+ testLogLines.push('FAILURES & ERRORS:');
153
+ for (const err of this.errorLogs) {
154
+ testLogLines.push(err);
155
+ }
156
+ }
157
+ else {
158
+ testLogLines.push('SUCCESS: All tests completed cleanly.');
159
+ }
160
+ const logText = testLogLines.join('\n');
161
+ try {
162
+ this.ensureDirectory();
163
+ fs.writeFileSync(this.logFilePath, logText, 'utf-8');
164
+ }
165
+ catch (e) {
166
+ console.error('Failed to write test log:', e);
167
+ }
168
+ const exitCode = this.errorLogs.length > 0 || totalFailed > 0 ? 1 : 0;
169
+ return { exitCode, logText };
170
+ }
171
+ }
172
+ exports.TestLogWriter = TestLogWriter;
173
+ //# sourceMappingURL=test-log-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-log-writer.js","sourceRoot":"","sources":["../../src/harness/test-log-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { WaitForScreenLoadOptions, WebviewExecutionResult } from '../types/test-runner-types';
2
+ export declare class WebviewTestController {
3
+ private readonly webview;
4
+ private readonly onError?;
5
+ private readonly onLoadAbort?;
6
+ private readonly consoleErrorLevel;
7
+ constructor(webview: any, options?: {
8
+ consoleErrorLevel?: number;
9
+ onError?: (source: string, err: any) => void;
10
+ onLoadAbort?: (reason: string) => void;
11
+ });
12
+ attachEventListeners(onContentLoad: () => void): void;
13
+ navigate(url: string): void;
14
+ execScriptWithTimeout(code: string, timeoutMs?: number): Promise<any>;
15
+ waitForScreenLoad(options?: WaitForScreenLoadOptions): Promise<boolean>;
16
+ executeWebviewTest(codeOrFn: string | (() => Promise<void> | void), timeoutMs?: number): Promise<WebviewExecutionResult>;
17
+ }
18
+ //# sourceMappingURL=webview-test-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview-test-controller.d.ts","sourceRoot":"","sources":["../../src/harness/webview-test-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAGzC,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACxC;IAQI,oBAAoB,CAAC,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI;IAsBrD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM3B,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAiC7D,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC3E,kBAAkB,CAC7B,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAC/C,SAAS,SAAO,GACf,OAAO,CAAC,sBAAsB,CAAC;CAmEnC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebviewTestController = void 0;
4
+ class WebviewTestController {
5
+ webview;
6
+ onError;
7
+ onLoadAbort;
8
+ consoleErrorLevel;
9
+ constructor(webview, options) {
10
+ this.webview = webview;
11
+ this.consoleErrorLevel = options?.consoleErrorLevel ?? 2;
12
+ this.onError = options?.onError;
13
+ this.onLoadAbort = options?.onLoadAbort;
14
+ }
15
+ attachEventListeners(onContentLoad) {
16
+ if (!this.webview || typeof this.webview.addEventListener !== 'function') {
17
+ return;
18
+ }
19
+ this.webview.addEventListener('console-message', (e) => {
20
+ if (e && typeof e.level === 'number' && e.level >= this.consoleErrorLevel) {
21
+ this.onError?.(`WebviewConsole[L${e.level}]`, e.message);
22
+ }
23
+ });
24
+ this.webview.addEventListener('loadabort', (e) => {
25
+ const reason = e?.reason || 'Unknown reason';
26
+ this.onError?.('WebviewLoadAbort', `Failed to load client in webview: ${reason}`);
27
+ this.onLoadAbort?.(reason);
28
+ });
29
+ this.webview.addEventListener('contentload', () => {
30
+ onContentLoad();
31
+ });
32
+ }
33
+ navigate(url) {
34
+ if (this.webview) {
35
+ this.webview.src = url;
36
+ }
37
+ }
38
+ execScriptWithTimeout(code, timeoutMs = 1500) {
39
+ return new Promise((resolve) => {
40
+ if (!this.webview || typeof this.webview.executeScript !== 'function') {
41
+ resolve(null);
42
+ return;
43
+ }
44
+ let done = false;
45
+ const timer = setTimeout(() => {
46
+ if (!done) {
47
+ done = true;
48
+ resolve(null);
49
+ }
50
+ }, timeoutMs);
51
+ try {
52
+ this.webview.executeScript({ code }, (results) => {
53
+ if (!done) {
54
+ done = true;
55
+ clearTimeout(timer);
56
+ resolve(results && results[0] !== undefined ? results[0] : null);
57
+ }
58
+ });
59
+ }
60
+ catch (_e) {
61
+ if (!done) {
62
+ done = true;
63
+ clearTimeout(timer);
64
+ resolve(null);
65
+ }
66
+ }
67
+ });
68
+ }
69
+ async waitForScreenLoad(options = {}) {
70
+ const timeoutMs = options.timeoutMs ?? 4000;
71
+ const pollIntervalMs = options.pollIntervalMs ?? 100;
72
+ const requiredIds = options.requiredElementIds ?? [];
73
+ const requiredSelectors = options.requiredSelectors ?? [];
74
+ const customPredicate = options.customPredicateCode;
75
+ const maxAttempts = Math.max(1, Math.ceil(timeoutMs / pollIntervalMs));
76
+ const checkScript = `
77
+ (function() {
78
+ if (document.readyState !== 'complete' && document.readyState !== 'interactive') {
79
+ return false;
80
+ }
81
+ const reqIds = ${JSON.stringify(requiredIds)};
82
+ for (let i = 0; i < reqIds.length; i++) {
83
+ if (!document.getElementById(reqIds[i])) return false;
84
+ }
85
+ const reqSels = ${JSON.stringify(requiredSelectors)};
86
+ for (let i = 0; i < reqSels.length; i++) {
87
+ if (!document.querySelector(reqSels[i])) return false;
88
+ }
89
+ ${customPredicate ? `return Boolean(${customPredicate});` : 'return true;'}
90
+ })();
91
+ `;
92
+ for (let i = 0; i < maxAttempts; i++) {
93
+ const res = await this.execScriptWithTimeout(checkScript, Math.min(500, timeoutMs));
94
+ if (res === true || res === 'true') {
95
+ return true;
96
+ }
97
+ await new Promise((r) => setTimeout(r, pollIntervalMs));
98
+ }
99
+ return false;
100
+ }
101
+ async executeWebviewTest(codeOrFn, timeoutMs = 4000) {
102
+ const bodyExpr = typeof codeOrFn === 'function' ? `await (${codeOrFn.toString()})();` : codeOrFn;
103
+ return new Promise((resolve) => {
104
+ let finished = false;
105
+ const timer = setTimeout(() => {
106
+ if (!finished) {
107
+ finished = true;
108
+ resolve({
109
+ ok: false,
110
+ errors: [`Test timed out after ${timeoutMs}ms`],
111
+ error: `Test timed out after ${timeoutMs}ms`
112
+ });
113
+ }
114
+ }, timeoutMs);
115
+ const wrappedCode = `
116
+ (function() {
117
+ window.__testDone = false;
118
+ window.__testErrors = [];
119
+ function runInMainWorld(jsBody) {
120
+ const s = document.createElement('script');
121
+ s.textContent = '(function(){ ' + jsBody + ' })();';
122
+ document.body.appendChild(s);
123
+ s.remove();
124
+ }
125
+ (async function() {
126
+ try {
127
+ ${bodyExpr}
128
+ } catch (e) {
129
+ window.__testErrors.push(e && (e.stack || e.message) ? (e.stack || e.message) : String(e));
130
+ } finally {
131
+ window.__testDone = true;
132
+ }
133
+ })();
134
+ return 'started';
135
+ })();
136
+ `;
137
+ this.execScriptWithTimeout(wrappedCode, 1000).then(() => {
138
+ const pollInterval = setInterval(async () => {
139
+ if (finished) {
140
+ clearInterval(pollInterval);
141
+ return;
142
+ }
143
+ const rawData = await this.execScriptWithTimeout(`(function() { return JSON.stringify({ done: !!window.__testDone, errors: window.__testErrors || [] }); })();`, 500);
144
+ try {
145
+ const data = rawData ? JSON.parse(rawData) : null;
146
+ if (data && data.done) {
147
+ finished = true;
148
+ clearTimeout(timer);
149
+ clearInterval(pollInterval);
150
+ resolve({
151
+ ok: Array.isArray(data.errors) && data.errors.length === 0,
152
+ errors: Array.isArray(data.errors) ? data.errors : []
153
+ });
154
+ }
155
+ }
156
+ catch (_e) { }
157
+ }, 75);
158
+ });
159
+ });
160
+ }
161
+ }
162
+ exports.WebviewTestController = WebviewTestController;
163
+ //# sourceMappingURL=webview-test-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webview-test-controller.js","sourceRoot":"","sources":["../../src/harness/webview-test-controller.ts"],"names":[],"mappings":"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"}