@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,450 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.test = exports.it = exports.describe = exports.TestRunner = void 0;
4
+ exports.beforeAll = beforeAll;
5
+ exports.afterAll = afterAll;
6
+ exports.beforeEach = beforeEach;
7
+ exports.afterEach = afterEach;
8
+ exports.installJestGlobals = installJestGlobals;
9
+ const expect_matcher_1 = require("../matchers/expect-matcher");
10
+ const jest_mock_factory_1 = require("../mock/jest-mock-factory");
11
+ class TestRunner {
12
+ static instance = null;
13
+ suites = [];
14
+ suiteStack = [];
15
+ currentSuiteName = 'DefaultSuite';
16
+ get suiteCount() {
17
+ return this.suites.length;
18
+ }
19
+ get totalCasesCount() {
20
+ return this.suites.reduce((sum, s) => sum + s.cases.length, 0);
21
+ }
22
+ getSuites() {
23
+ return this.suites;
24
+ }
25
+ static getInstance() {
26
+ if (!TestRunner.instance) {
27
+ TestRunner.instance = new TestRunner();
28
+ }
29
+ return TestRunner.instance;
30
+ }
31
+ reset() {
32
+ this.suites = [];
33
+ this.suiteStack = [];
34
+ this.currentSuiteName = 'DefaultSuite';
35
+ }
36
+ getOrCreateSuite(name, options) {
37
+ let suite = this.suites.find((s) => s.name === name);
38
+ if (!suite) {
39
+ suite = {
40
+ name,
41
+ cases: [],
42
+ beforeAllHooks: [],
43
+ afterAllHooks: [],
44
+ beforeEachHooks: [],
45
+ afterEachHooks: [],
46
+ skip: options?.skip,
47
+ only: options?.only
48
+ };
49
+ this.suites.push(suite);
50
+ }
51
+ else {
52
+ if (options?.skip)
53
+ suite.skip = true;
54
+ if (options?.only)
55
+ suite.only = true;
56
+ }
57
+ return suite;
58
+ }
59
+ registerSuite(name, defineFn, options) {
60
+ const fullName = this.suiteStack.length > 0 ? `${this.suiteStack.join(' > ')} > ${name}` : name;
61
+ const previousSuiteName = this.currentSuiteName;
62
+ this.suiteStack.push(name);
63
+ this.currentSuiteName = fullName;
64
+ const currentSuite = this.getOrCreateSuite(fullName, options);
65
+ const testScope = {
66
+ it: (testName, fn, timeoutMs) => {
67
+ currentSuite.cases.push({ name: testName, fn, timeoutMs });
68
+ },
69
+ test: (testName, fn, timeoutMs) => {
70
+ currentSuite.cases.push({ name: testName, fn, timeoutMs });
71
+ },
72
+ beforeAll: (fn) => {
73
+ currentSuite.beforeAllHooks.push(fn);
74
+ },
75
+ afterAll: (fn) => {
76
+ currentSuite.afterAllHooks.push(fn);
77
+ },
78
+ beforeEach: (fn) => {
79
+ currentSuite.beforeEachHooks.push(fn);
80
+ },
81
+ afterEach: (fn) => {
82
+ currentSuite.afterEachHooks.push(fn);
83
+ }
84
+ };
85
+ try {
86
+ defineFn(testScope);
87
+ }
88
+ finally {
89
+ this.suiteStack.pop();
90
+ this.currentSuiteName =
91
+ this.suiteStack.length > 0 ? this.suiteStack.join(' > ') : previousSuiteName;
92
+ }
93
+ }
94
+ addCase(suiteName, testName, fn, options) {
95
+ const suite = this.getOrCreateSuite(suiteName);
96
+ suite.cases.push({
97
+ name: testName,
98
+ fn,
99
+ timeoutMs: options?.timeoutMs,
100
+ skip: options?.skip,
101
+ only: options?.only
102
+ });
103
+ }
104
+ addBeforeAll(fn, suiteName = this.currentSuiteName) {
105
+ this.getOrCreateSuite(suiteName).beforeAllHooks.push(fn);
106
+ }
107
+ addAfterAll(fn, suiteName = this.currentSuiteName) {
108
+ this.getOrCreateSuite(suiteName).afterAllHooks.push(fn);
109
+ }
110
+ addBeforeEach(fn, suiteName = this.currentSuiteName) {
111
+ this.getOrCreateSuite(suiteName).beforeEachHooks.push(fn);
112
+ }
113
+ addAfterEach(fn, suiteName = this.currentSuiteName) {
114
+ this.getOrCreateSuite(suiteName).afterEachHooks.push(fn);
115
+ }
116
+ getCurrentSuiteName() {
117
+ return this.currentSuiteName;
118
+ }
119
+ async executeWithTimeout(fn, timeoutMs, label) {
120
+ let timer;
121
+ try {
122
+ const runPromise = Promise.resolve().then(() => fn());
123
+ const timeoutPromise = new Promise((_, reject) => {
124
+ timer = setTimeout(() => reject(new Error(`${label} timed out after ${timeoutMs}ms`)), timeoutMs);
125
+ });
126
+ await Promise.race([runPromise, timeoutPromise]);
127
+ }
128
+ finally {
129
+ if (timer !== undefined) {
130
+ clearTimeout(timer);
131
+ }
132
+ }
133
+ }
134
+ async runAll(optionsOrMaxDurationMs = 5000) {
135
+ const options = typeof optionsOrMaxDurationMs === 'number'
136
+ ? { maxDurationMs: optionsOrMaxDurationMs }
137
+ : optionsOrMaxDurationMs;
138
+ const maxDurationMs = options.maxDurationMs ?? 15000;
139
+ const defaultTestTimeoutMs = options.defaultTestTimeoutMs ?? 2000;
140
+ const filter = options.filter;
141
+ const onProgress = options.onProgress;
142
+ const startTime = Date.now();
143
+ let total = 0;
144
+ let passed = 0;
145
+ let failed = 0;
146
+ let skipped = 0;
147
+ const failures = [];
148
+ const suiteResults = [];
149
+ const logs = [];
150
+ const hasOnlySuite = this.suites.some((s) => s.only);
151
+ const hasOnlyCase = this.suites.some((s) => s.cases.some((c) => c.only));
152
+ const totalExpected = this.totalCasesCount;
153
+ logs.push('=== LIVE JEST CLIENT TEST SUITE RESULTS ===');
154
+ logs.push(`Timestamp: ${new Date().toISOString()}`);
155
+ logs.push('');
156
+ const matchesFilter = (fullName) => {
157
+ if (!filter)
158
+ return true;
159
+ if (typeof filter === 'string') {
160
+ return fullName.toLowerCase().includes(filter.toLowerCase());
161
+ }
162
+ return filter.test(fullName);
163
+ };
164
+ const emitProgress = (partial) => {
165
+ if (!onProgress)
166
+ return;
167
+ try {
168
+ onProgress({
169
+ ...partial,
170
+ completedCount: passed + failed + skipped,
171
+ totalCount: totalExpected,
172
+ passedCount: passed,
173
+ failedCount: failed,
174
+ skippedCount: skipped
175
+ });
176
+ }
177
+ catch (_e) { }
178
+ };
179
+ for (const suite of this.suites) {
180
+ if (Date.now() - startTime > maxDurationMs) {
181
+ logs.push(`[TIMEOUT] Hard deadline limit (${maxDurationMs}ms) reached. Aborting remaining test suites.`);
182
+ break;
183
+ }
184
+ const suiteStart = Date.now();
185
+ const suiteCasesResults = [];
186
+ let suitePassed = 0;
187
+ let suiteFailed = 0;
188
+ let suiteSkipped = 0;
189
+ logs.push(`--- SUITE: ${suite.name} ---`);
190
+ emitProgress({ type: 'suite_start', suiteName: suite.name });
191
+ const shouldSkipWholeSuite = Boolean(suite.skip || (hasOnlySuite && !suite.only));
192
+ let beforeAllError = null;
193
+ if (!shouldSkipWholeSuite && suite.beforeAllHooks.length > 0) {
194
+ for (const hook of suite.beforeAllHooks) {
195
+ try {
196
+ await this.executeWithTimeout(hook, defaultTestTimeoutMs, 'beforeAll hook');
197
+ }
198
+ catch (err) {
199
+ beforeAllError = err instanceof Error ? err : new Error(String(err));
200
+ break;
201
+ }
202
+ }
203
+ }
204
+ for (const testCase of suite.cases) {
205
+ if (Date.now() - startTime > maxDurationMs) {
206
+ logs.push(`[TIMEOUT] Hard deadline limit (${maxDurationMs}ms) reached. Aborting remaining tests.`);
207
+ break;
208
+ }
209
+ const fullName = `${suite.name} > ${testCase.name}`;
210
+ const shouldSkipCase = shouldSkipWholeSuite ||
211
+ Boolean(testCase.skip) ||
212
+ (hasOnlyCase && !suite.only && !testCase.only) ||
213
+ !matchesFilter(fullName);
214
+ if (shouldSkipCase) {
215
+ skipped++;
216
+ suiteSkipped++;
217
+ suiteCasesResults.push({
218
+ suiteName: suite.name,
219
+ testName: testCase.name,
220
+ status: 'skipped',
221
+ durationMs: 0
222
+ });
223
+ logs.push(`[SKIPPED] ${fullName}`);
224
+ emitProgress({
225
+ type: 'test_complete',
226
+ suiteName: suite.name,
227
+ testName: testCase.name,
228
+ status: 'skipped'
229
+ });
230
+ continue;
231
+ }
232
+ total++;
233
+ const caseStart = Date.now();
234
+ const caseTimeout = testCase.timeoutMs ?? defaultTestTimeoutMs;
235
+ emitProgress({
236
+ type: 'test_start',
237
+ suiteName: suite.name,
238
+ testName: testCase.name
239
+ });
240
+ try {
241
+ if (beforeAllError) {
242
+ throw beforeAllError;
243
+ }
244
+ for (const beforeHook of suite.beforeEachHooks) {
245
+ await this.executeWithTimeout(beforeHook, caseTimeout, 'beforeEach hook');
246
+ }
247
+ let testExecError = null;
248
+ try {
249
+ await this.executeWithTimeout(testCase.fn, caseTimeout, 'Test');
250
+ }
251
+ catch (err) {
252
+ testExecError = err;
253
+ }
254
+ let afterEachError = null;
255
+ for (const afterHook of suite.afterEachHooks) {
256
+ try {
257
+ await this.executeWithTimeout(afterHook, caseTimeout, 'afterEach hook');
258
+ }
259
+ catch (err) {
260
+ if (!afterEachError)
261
+ afterEachError = err;
262
+ }
263
+ }
264
+ if (testExecError) {
265
+ throw testExecError;
266
+ }
267
+ if (afterEachError) {
268
+ throw afterEachError;
269
+ }
270
+ const caseDuration = Date.now() - caseStart;
271
+ passed++;
272
+ suitePassed++;
273
+ suiteCasesResults.push({
274
+ suiteName: suite.name,
275
+ testName: testCase.name,
276
+ status: 'passed',
277
+ durationMs: caseDuration
278
+ });
279
+ logs.push(`[PASSED] ${fullName}`);
280
+ emitProgress({
281
+ type: 'test_complete',
282
+ suiteName: suite.name,
283
+ testName: testCase.name,
284
+ status: 'passed'
285
+ });
286
+ }
287
+ catch (err) {
288
+ const caseDuration = Date.now() - caseStart;
289
+ failed++;
290
+ suiteFailed++;
291
+ const errorObj = err instanceof Error ? err : new Error(String(err));
292
+ failures.push({ suiteName: suite.name, testName: testCase.name, error: errorObj });
293
+ suiteCasesResults.push({
294
+ suiteName: suite.name,
295
+ testName: testCase.name,
296
+ status: 'failed',
297
+ durationMs: caseDuration,
298
+ error: errorObj
299
+ });
300
+ logs.push(`[FAILED] ${fullName}`);
301
+ logs.push(` Error: ${errorObj.message}`);
302
+ if (errorObj.stack) {
303
+ logs.push(` Stack Trace:\n${errorObj.stack
304
+ .split('\n')
305
+ .map((l) => ' ' + l)
306
+ .join('\n')}`);
307
+ }
308
+ logs.push('');
309
+ emitProgress({
310
+ type: 'test_complete',
311
+ suiteName: suite.name,
312
+ testName: testCase.name,
313
+ status: 'failed',
314
+ error: errorObj
315
+ });
316
+ }
317
+ }
318
+ if (!shouldSkipWholeSuite && suite.afterAllHooks.length > 0) {
319
+ for (const hook of suite.afterAllHooks) {
320
+ try {
321
+ await this.executeWithTimeout(hook, defaultTestTimeoutMs, 'afterAll hook');
322
+ }
323
+ catch (err) {
324
+ failed++;
325
+ suiteFailed++;
326
+ const errorObj = err instanceof Error ? err : new Error(String(err));
327
+ failures.push({
328
+ suiteName: suite.name,
329
+ testName: 'afterAll',
330
+ error: errorObj
331
+ });
332
+ logs.push(`[FAILED] ${suite.name} > afterAll`);
333
+ logs.push(` Error: ${errorObj.message}`);
334
+ }
335
+ }
336
+ }
337
+ suiteResults.push({
338
+ suiteName: suite.name,
339
+ passed: suitePassed,
340
+ failed: suiteFailed,
341
+ skipped: suiteSkipped,
342
+ durationMs: Date.now() - suiteStart,
343
+ cases: suiteCasesResults
344
+ });
345
+ logs.push('');
346
+ emitProgress({ type: 'suite_complete', suiteName: suite.name });
347
+ }
348
+ const durationMs = Date.now() - startTime;
349
+ logs.unshift(`SUMMARY: Total: ${total} | Passed: ${passed} | Failed: ${failed}${skipped > 0 ? ` | Skipped: ${skipped}` : ''}\n`);
350
+ return {
351
+ total,
352
+ passed,
353
+ failed,
354
+ skipped,
355
+ durationMs,
356
+ failures,
357
+ suiteResults,
358
+ logOutput: logs.join('\n')
359
+ };
360
+ }
361
+ static assertEquals(actual, expected, message) {
362
+ if (actual !== expected) {
363
+ throw new Error(message || `Assertion failed: expected '${expected}', got '${actual}'`);
364
+ }
365
+ }
366
+ static assertTrue(value, message) {
367
+ if (value !== true) {
368
+ throw new Error(message || `Assertion failed: expected true, got ${value}`);
369
+ }
370
+ }
371
+ static assertFalse(value, message) {
372
+ if (value !== false) {
373
+ throw new Error(message || `Assertion failed: expected false, got ${value}`);
374
+ }
375
+ }
376
+ static assertNotNull(value, message) {
377
+ if (value === null || value === undefined) {
378
+ throw new Error(message || 'Assertion failed: value is null or undefined');
379
+ }
380
+ return value;
381
+ }
382
+ }
383
+ exports.TestRunner = TestRunner;
384
+ const describeBase = function (suiteName, fn) {
385
+ const runner = TestRunner.getInstance();
386
+ runner.registerSuite(suiteName, () => {
387
+ fn();
388
+ });
389
+ };
390
+ describeBase.skip = (suiteName, fn) => {
391
+ const runner = TestRunner.getInstance();
392
+ runner.registerSuite(suiteName, () => {
393
+ fn();
394
+ }, { skip: true });
395
+ };
396
+ describeBase.only = (suiteName, fn) => {
397
+ const runner = TestRunner.getInstance();
398
+ runner.registerSuite(suiteName, () => {
399
+ fn();
400
+ }, { only: true });
401
+ };
402
+ exports.describe = describeBase;
403
+ const itBase = function (testName, fn, timeoutMs) {
404
+ const runner = TestRunner.getInstance();
405
+ const suiteName = runner.getCurrentSuiteName();
406
+ runner.addCase(suiteName, testName, fn, { timeoutMs });
407
+ };
408
+ itBase.skip = (testName, fn, timeoutMs) => {
409
+ const runner = TestRunner.getInstance();
410
+ const suiteName = runner.getCurrentSuiteName();
411
+ runner.addCase(suiteName, testName, fn || (() => { }), { timeoutMs, skip: true });
412
+ };
413
+ itBase.only = (testName, fn, timeoutMs) => {
414
+ const runner = TestRunner.getInstance();
415
+ const suiteName = runner.getCurrentSuiteName();
416
+ runner.addCase(suiteName, testName, fn, { timeoutMs, only: true });
417
+ };
418
+ itBase.todo = (testName) => {
419
+ const runner = TestRunner.getInstance();
420
+ const suiteName = runner.getCurrentSuiteName();
421
+ runner.addCase(suiteName, testName, () => { }, { skip: true });
422
+ };
423
+ exports.it = itBase;
424
+ exports.test = itBase;
425
+ function beforeAll(fn) {
426
+ TestRunner.getInstance().addBeforeAll(fn);
427
+ }
428
+ function afterAll(fn) {
429
+ TestRunner.getInstance().addAfterAll(fn);
430
+ }
431
+ function beforeEach(fn) {
432
+ TestRunner.getInstance().addBeforeEach(fn);
433
+ }
434
+ function afterEach(fn) {
435
+ TestRunner.getInstance().addAfterEach(fn);
436
+ }
437
+ function installJestGlobals(target = globalThis) {
438
+ if (!target)
439
+ return;
440
+ target.describe = exports.describe;
441
+ target.it = exports.it;
442
+ target.test = exports.test;
443
+ target.expect = expect_matcher_1.expect;
444
+ target.beforeAll = beforeAll;
445
+ target.afterAll = afterAll;
446
+ target.beforeEach = beforeEach;
447
+ target.afterEach = afterEach;
448
+ target.jest = jest_mock_factory_1.jest;
449
+ }
450
+ //# sourceMappingURL=test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/core/test-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from '../index.js';
2
+ export { default } from '../index.js';
@@ -0,0 +1,26 @@
1
+ import cjsModule from '../index.js';
2
+
3
+ export const DeepEqualityHelper = cjsModule.DeepEqualityHelper;
4
+ export const ExpectMatcherBuilder = cjsModule.ExpectMatcherBuilder;
5
+ export const expect = cjsModule.expect;
6
+ export const JestMockFactory = cjsModule.JestMockFactory;
7
+ export const jest = cjsModule.jest;
8
+ export const TestRunner = cjsModule.TestRunner;
9
+ export const describe = cjsModule.describe;
10
+ export const it = cjsModule.it;
11
+ export const test = cjsModule.test;
12
+ export const beforeAll = cjsModule.beforeAll;
13
+ export const afterAll = cjsModule.afterAll;
14
+ export const beforeEach = cjsModule.beforeEach;
15
+ export const afterEach = cjsModule.afterEach;
16
+ export const installJestGlobals = cjsModule.installJestGlobals;
17
+ export const TestLogWriter = cjsModule.TestLogWriter;
18
+ export const TestHttpServer = cjsModule.TestHttpServer;
19
+ export const GraphicalOverlayView = cjsModule.GraphicalOverlayView;
20
+ export const WebviewTestController = cjsModule.WebviewTestController;
21
+ export const NwjsGraphicalTestHarness = cjsModule.NwjsGraphicalTestHarness;
22
+ export const runNwjsTestHarness = cjsModule.runNwjsTestHarness;
23
+ export const HarnessConfigLoader = cjsModule.HarnessConfigLoader;
24
+ export const NwjsCliLauncher = cjsModule.NwjsCliLauncher;
25
+
26
+ export default cjsModule;
@@ -0,0 +1,18 @@
1
+ import { GraphicalOverlayOptions } from '../types/test-runner-types';
2
+ export declare class GraphicalOverlayView {
3
+ private readonly options;
4
+ private webviewEl;
5
+ private titleEl;
6
+ private statusEl;
7
+ private metricCurrentEl;
8
+ private metricPassedEl;
9
+ private metricFailedEl;
10
+ private progressFillEl;
11
+ constructor(options?: GraphicalOverlayOptions);
12
+ mount(doc?: Document): void;
13
+ getWebviewElement(): any;
14
+ setTitle(title: string): void;
15
+ setStatus(statusText: string): void;
16
+ updateMetrics(completed: number, total: number, passed: number, failed: number): void;
17
+ }
18
+ //# sourceMappingURL=graphical-overlay-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphical-overlay-view.d.ts","sourceRoot":"","sources":["../../src/harness/graphical-overlay-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,cAAc,CAA4B;gBAEtC,OAAO,GAAE,uBAA4B;IAI1C,KAAK,CAAC,GAAG,GAAE,QAAmB,GAAG,IAAI;IAsKrC,iBAAiB,IAAI,GAAG;IAIxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMnC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAoB7F"}