@camperaid/watest 2.5.1 → 2.5.2
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 +274 -129
- package/bin/watest.js +36 -2
- package/core/core.js +43 -15
- package/core/deps.js +211 -0
- package/core/{process_args.js → process-args.js} +8 -0
- package/core/series.js +41 -40
- package/core/settings.js +27 -9
- package/core/util.js +1 -1
- package/index.js +5 -3
- package/interfaces/servicer.js +13 -2
- package/logging/logging.js +1 -1
- package/logging/logpipe.js +38 -21
- package/package.json +1 -1
- package/tests/base/{t_core.js → t-core.js} +10 -3
- package/tests/base/test.js +1 -2
- package/tests/deps/samples/nested/.watestrc.js +3 -0
- package/tests/deps/samples/nested/tests/meta.js +1 -0
- package/tests/deps/samples/nested/tests/services/meta.js +1 -0
- package/tests/deps/samples/nested/tests/services/ws/meta.js +1 -0
- package/tests/deps/samples/nested/tests/services/ws/webservice/meta.js +2 -0
- package/tests/deps/samples/nested/tests/services/ws/webservice/t-ws.js +3 -0
- package/tests/deps/samples/unified/.watestrc.js +3 -0
- package/tests/deps/samples/unified/tests/e2e/meta.js +4 -0
- package/tests/deps/samples/unified/tests/e2e/pages/meta.js +1 -0
- package/tests/deps/samples/unified/tests/e2e/pages/t-example.js +3 -0
- package/tests/deps/samples/unified/tests/e2e/t-example.js +3 -0
- package/tests/deps/samples/unified/tests/integration/meta.js +3 -0
- package/tests/deps/samples/unified/tests/lib/meta.js +0 -0
- package/tests/deps/samples/unified/tests/lib/t-example.js +3 -0
- package/tests/deps/samples/unified/tests/meta.js +8 -0
- package/tests/deps/samples/unified/tests/services/meta.js +3 -0
- package/tests/deps/samples/unified/tests/services/request/meta.js +1 -0
- package/tests/deps/samples/unified/tests/services/t-example.js +3 -0
- package/tests/deps/t-parse-cell-syntax.js +6 -0
- package/tests/deps/t-parse-grid-args.js +11 -0
- package/tests/deps/t-watest-deps.js +37 -0
- package/tests/deps/t-watest-grid.js +122 -0
- package/tests/deps/test.js +63 -0
- package/tests/e2e/samples/folder/package-lock.json +3 -1
- package/tests/e2e/samples/loader/package-lock.json +3 -1
- package/tests/e2e/samples/loader/tests/meta.js +1 -1
- package/tests/e2e/samples/{loader_mixed → loader-mixed}/package-lock.json +3 -1
- package/tests/e2e/samples/{loader_multiple/tests/core → loader-mixed/tests/ui}/meta.js +1 -1
- package/tests/e2e/samples/{loader_multiple → loader-multiple}/package-lock.json +3 -1
- package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/base/meta.js +1 -1
- package/tests/e2e/samples/{loader_mixed/tests/ui → loader-multiple/tests/core}/meta.js +1 -1
- package/tests/e2e/samples/single/package-lock.json +3 -1
- package/tests/e2e/samples/{wd_mixed → wd-mixed}/package-lock.json +3 -1
- package/tests/e2e/samples/{wd_single → wd-single}/package-lock.json +3 -1
- package/tests/e2e/{t_folder.js → t-folder.js} +2 -2
- package/tests/e2e/{t_loader_mixed.js → t-loader-mixed.js} +5 -5
- package/tests/e2e/{t_loader_multiple_patterns.js → t-loader-multiple-patterns.js} +6 -6
- package/tests/e2e/{t_loader_multiple.js → t-loader-multiple.js} +5 -5
- package/tests/e2e/{t_loader.js → t-loader.js} +2 -2
- package/tests/e2e/{t_single.js → t-single.js} +2 -2
- package/tests/e2e/{t_wd_firefox_chrome_pattern.js → t-wd-firefox-chrome-pattern.js} +6 -6
- package/tests/e2e/{t_wd_firefox_chrome.js → t-wd-firefox-chrome.js} +5 -5
- package/tests/e2e/{t_wd_firefox.js → t-wd-firefox.js} +3 -3
- package/tests/e2e/{t_wd_mixed_firefox_chrome.js → t-wd-mixed-firefox-chrome.js} +7 -7
- package/tests/e2e/{t_wd_mixed_firefox.js → t-wd-mixed-firefox.js} +5 -5
- package/tests/meta.js +1 -1
- package/tests/series/build/{t_webdriver_services.js → t-webdriver-services.js} +1 -0
- package/tests/series/logging/{t_failures.js → t-failures.js} +1 -1
- package/tests/series/logging/{t_success.js → t-success.js} +1 -1
- package/tests/series/logging/{t_verify.js → t-verify.js} +1 -1
- package/tests/series/servicer/mock-servicer.js +68 -0
- package/tests/series/servicer/t-nested-servicer-lifecycle.js +99 -0
- package/tests/series/servicer/t-servicer-no-services.js +53 -0
- package/tests/series/servicer/t-servicer-type-switching.js +139 -0
- package/tests/series/servicer/{t_servicer.js → t-servicer.js} +5 -38
- package/tests/series/test.js +1 -1
- package/tests/test.js +2 -0
- package/tests/webdriver/test.js +3 -3
- package/webdriver/{control_driver.js → control-driver.js} +1 -1
- package/webdriver/{driver_base.js → driver-base.js} +3 -1
- package/webdriver/driver.js +1 -1
- package/webdriver/session.js +57 -30
- /package/tests/base/{t_api.js → t-api.js} +0 -0
- /package/tests/base/{t_contains.js → t-contains.js} +0 -0
- /package/tests/base/{t_format.js → t-format.js} +0 -0
- /package/tests/base/{t_is_object.js → t-is-object.js} +0 -0
- /package/tests/base/{t_is_primitive.js → t-is-primitive.js} +0 -0
- /package/tests/base/{t_is_string.js → t-is-string.js} +0 -0
- /package/tests/base/{t_is.js → t-is.js} +0 -0
- /package/tests/base/{t_ok.js → t-ok.js} +0 -0
- /package/tests/base/{t_stringify.js → t-stringify.js} +0 -0
- /package/tests/base/{t_system.js → t-system.js} +0 -0
- /package/tests/base/{t_test_.js → t-test-.js} +0 -0
- /package/tests/base/{t_throws.js → t-throws.js} +0 -0
- /package/tests/e2e/samples/folder/tests/unit/{t_test.js → t-test.js} +0 -0
- /package/tests/e2e/samples/{loader_multiple/tests/module_mock.js → loader/tests/module-mock.js} +0 -0
- /package/tests/e2e/samples/loader/tests/{t_test.js → t-test.js} +0 -0
- /package/tests/e2e/samples/{loader_mixed → loader-mixed}/.watestrc.js +0 -0
- /package/tests/e2e/samples/{loader_mixed → loader-mixed}/package.json +0 -0
- /package/tests/e2e/samples/{loader_mixed → loader-mixed}/tests/meta.js +0 -0
- /package/tests/e2e/samples/{loader/tests/module_mock.js → loader-mixed/tests/module-mock.js} +0 -0
- /package/tests/e2e/samples/{loader_mixed → loader-mixed}/tests/module.js +0 -0
- /package/tests/e2e/samples/{loader_mixed/tests/ui/t_test.js → loader-mixed/tests/ui/t-test.js} +0 -0
- /package/tests/e2e/samples/{loader_mixed/tests/unit/t_test.js → loader-mixed/tests/unit/t-test.js} +0 -0
- /package/tests/e2e/samples/{loader_multiple → loader-multiple}/.watestrc.js +0 -0
- /package/tests/e2e/samples/{loader_multiple → loader-multiple}/package.json +0 -0
- /package/tests/e2e/samples/{loader_multiple/tests/base/t_btest.js → loader-multiple/tests/base/t-btest.js} +0 -0
- /package/tests/e2e/samples/{loader_multiple/tests/core/t_ctest.js → loader-multiple/tests/core/t-ctest.js} +0 -0
- /package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/meta.js +0 -0
- /package/tests/e2e/samples/{loader_mixed/tests/module_mock.js → loader-multiple/tests/module-mock.js} +0 -0
- /package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/module.js +0 -0
- /package/tests/e2e/samples/single/tests/{t_test.js → t-test.js} +0 -0
- /package/tests/e2e/samples/{wd_mixed → wd-mixed}/.watestrc.js +0 -0
- /package/tests/e2e/samples/{wd_mixed → wd-mixed}/package.json +0 -0
- /package/tests/e2e/samples/{wd_mixed → wd-mixed}/tests/meta.js +0 -0
- /package/tests/e2e/samples/{wd_mixed → wd-mixed}/tests/ui/meta.js +0 -0
- /package/tests/e2e/samples/{wd_mixed/tests/ui/t_test.js → wd-mixed/tests/ui/t-test.js} +0 -0
- /package/tests/e2e/samples/{wd_mixed/tests/unit/t_test.js → wd-mixed/tests/unit/t-test.js} +0 -0
- /package/tests/e2e/samples/{wd_single → wd-single}/.watestrc.js +0 -0
- /package/tests/e2e/samples/{wd_single → wd-single}/package.json +0 -0
- /package/tests/e2e/samples/{wd_single → wd-single}/tests/meta.js +0 -0
- /package/tests/e2e/samples/{wd_single/tests/t_test.js → wd-single/tests/t-test.js} +0 -0
- /package/tests/series/build/{t_adjust_names_webdriver.js → t-adjust-names-webdriver.js} +0 -0
- /package/tests/series/build/{t_adjust_names.js → t-adjust-names.js} +0 -0
- /package/tests/series/build/{t_expected_failures.js → t-expected-failures.js} +0 -0
- /package/tests/series/build/{t_loader_mixed.js → t-loader-mixed.js} +0 -0
- /package/tests/series/build/{t_loader.js → t-loader.js} +0 -0
- /package/tests/series/build/{t_mixed.js → t-mixed.js} +0 -0
- /package/tests/series/build/{t_nested.js → t-nested.js} +0 -0
- /package/tests/series/build/{t_pattern_filtering.js → t-pattern-filtering.js} +0 -0
- /package/tests/series/build/{t_patterns_loader.js → t-patterns-loader.js} +0 -0
- /package/tests/series/build/{t_patterns_webdriver.js → t-patterns-webdriver.js} +0 -0
- /package/tests/series/build/{t_webdriver_firefox_mixed.js → t-webdriver-firefox-mixed.js} +0 -0
- /package/tests/series/build/{t_webdriver_nested.js → t-webdriver-nested.js} +0 -0
- /package/tests/series/build/{t_webdriver.js → t-webdriver.js} +0 -0
- /package/tests/series/generic/{t_failures_info.js → t-failures-info.js} +0 -0
- /package/tests/series/{mock_series.js → mock-series.js} +0 -0
- /package/tests/series/perform/{t_failure_notest.js → t-failure-notest.js} +0 -0
- /package/tests/series/perform/{t_failure.js → t-failure.js} +0 -0
- /package/tests/series/perform/{t_intermittent_global.js → t-intermittent-global.js} +0 -0
- /package/tests/series/perform/{t_intermittent.js → t-intermittent.js} +0 -0
- /package/tests/series/perform/{t_missing_perma.js → t-missing-perma.js} +0 -0
- /package/tests/series/perform/{t_nested.js → t-nested.js} +0 -0
- /package/tests/series/perform/{t_perma.js → t-perma.js} +0 -0
- /package/tests/series/perform/{t_success.js → t-success.js} +0 -0
- /package/tests/series/run/{t_debunk_failure.js → t-debunk-failure.js} +0 -0
- /package/tests/series/run/{t_debunk_success.js → t-debunk-success.js} +0 -0
- /package/tests/series/run/{t_nested.js → t-nested.js} +0 -0
- /package/tests/series/run/{t_verify_webdriver.js → t-verify-webdriver.js} +0 -0
- /package/tests/series/run/{t_verify.js → t-verify.js} +0 -0
- /package/tests/webdriver/{t_app_driver_selectors.js → t-app-driver-selectors.js} +0 -0
- /package/tests/webdriver/{t_app_driver.js → t-app-driver.js} +0 -0
- /package/tests/webdriver/{t_attribute_all.js → t-attribute-all.js} +0 -0
- /package/tests/webdriver/{t_attribute.js → t-attribute.js} +0 -0
- /package/tests/webdriver/{t_doubleclick.js → t-doubleclick.js} +0 -0
- /package/tests/webdriver/{t_doubleclickat.js → t-doubleclickat.js} +0 -0
- /package/tests/webdriver/{t_execute.js → t-execute.js} +0 -0
- /package/tests/webdriver/{t_if_has_elements.js → t-if-has-elements.js} +0 -0
- /package/tests/webdriver/{t_if_no_elements.js → t-if-no-elements.js} +0 -0
- /package/tests/webdriver/{t_no_elements_or_not_visible.js → t-no-elements-or-not-visible.js} +0 -0
- /package/tests/webdriver/{t_properties.js → t-properties.js} +0 -0
- /package/tests/webdriver/{t_script.js → t-script.js} +0 -0
- /package/tests/webdriver/{t_select_all.js → t-select-all.js} +0 -0
- /package/tests/webdriver/{t_selection.js → t-selection.js} +0 -0
- /package/tests/webdriver/{t_text_all.js → t-text-all.js} +0 -0
- /package/tests/webdriver/{t_text.js → t-text.js} +0 -0
- /package/webdriver/{app_driver.js → app-driver.js} +0 -0
package/tests/base/test.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { testflow } from '../../core/core.js';
|
|
2
2
|
import { is_output as is_output_base } from '../../core/base.js';
|
|
3
3
|
|
|
4
|
-
export * from '
|
|
5
|
-
export * from '../../core/core.js';
|
|
4
|
+
export * from '../test.js';
|
|
6
5
|
export * from '../../core/format.js';
|
|
7
6
|
|
|
8
7
|
function is_output(func, out, err, msg) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const folders = ['services'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const folders = ['ws'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const folders = ['webservice'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const services = ['request'];
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const services = ['request'];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { is, parseGridArgs } from './test.js';
|
|
2
|
+
|
|
3
|
+
export async function test() {
|
|
4
|
+
const args1 = parseGridArgs(['tests/e2e', 'tests/www', 'chrome', 'firefox']);
|
|
5
|
+
is(args1.paths, ['tests/e2e', 'tests/www'], 'paths');
|
|
6
|
+
is(args1.webdrivers, ['chrome', 'firefox'], 'webdrivers');
|
|
7
|
+
|
|
8
|
+
const args2 = parseGridArgs([]);
|
|
9
|
+
is(args2.paths, [], 'empty paths');
|
|
10
|
+
is(args2.webdrivers, [], 'empty webdrivers');
|
|
11
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { testDeps } from './test.js';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const unifiedSamplePath = path.join(__dirname, 'samples/unified');
|
|
7
|
+
const nestedSamplePath = path.join(__dirname, 'samples/nested');
|
|
8
|
+
|
|
9
|
+
export async function test() {
|
|
10
|
+
// Test specific path: tests/e2e
|
|
11
|
+
await testDeps(['tests/e2e'], unifiedSamplePath, {
|
|
12
|
+
servicers: ['kubernetes'],
|
|
13
|
+
webdriver: true,
|
|
14
|
+
services: ['db', 'nginx', 'request'],
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Test no arguments (should default to tests/)
|
|
18
|
+
await testDeps([], unifiedSamplePath, {
|
|
19
|
+
servicers: ['kubernetes', 'docker'],
|
|
20
|
+
webdriver: true,
|
|
21
|
+
services: ['db', 'nginx', 'request', 'inbucket'],
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Test with deeply nested test file path
|
|
25
|
+
await testDeps(['tests/services/ws/webservice/t-ws.js'], nestedSamplePath, {
|
|
26
|
+
servicers: ['docker'],
|
|
27
|
+
webdriver: false,
|
|
28
|
+
services: ['ws'],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Test with nested directory path
|
|
32
|
+
await testDeps(['tests/services/ws/webservice'], nestedSamplePath, {
|
|
33
|
+
servicers: ['docker'],
|
|
34
|
+
webdriver: false,
|
|
35
|
+
services: ['ws'],
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { is, testGrid } from './test.js';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const samplesPath = path.join(__dirname, 'samples/unified');
|
|
7
|
+
|
|
8
|
+
export async function test() {
|
|
9
|
+
// Default browsers from .watestrc.js (chrome, firefox) - splits + cells
|
|
10
|
+
const result1 = await testGrid([], samplesPath);
|
|
11
|
+
is(
|
|
12
|
+
result1,
|
|
13
|
+
{
|
|
14
|
+
'e2e-chrome': {
|
|
15
|
+
paths: ['tests/e2e'],
|
|
16
|
+
webdrivers: 'chrome',
|
|
17
|
+
servicers: ['kubernetes'],
|
|
18
|
+
services: ['db', 'nginx', 'request'],
|
|
19
|
+
},
|
|
20
|
+
'e2e-firefox': {
|
|
21
|
+
paths: ['tests/e2e'],
|
|
22
|
+
webdrivers: 'firefox',
|
|
23
|
+
servicers: ['kubernetes'],
|
|
24
|
+
services: ['db', 'nginx', 'request'],
|
|
25
|
+
},
|
|
26
|
+
'integration': {
|
|
27
|
+
paths: ['tests/integration'],
|
|
28
|
+
webdrivers: 'chrome firefox',
|
|
29
|
+
servicers: ['docker'],
|
|
30
|
+
services: ['db'],
|
|
31
|
+
},
|
|
32
|
+
'lib': {
|
|
33
|
+
paths: ['tests/lib'],
|
|
34
|
+
webdrivers: '',
|
|
35
|
+
servicers: [],
|
|
36
|
+
services: [],
|
|
37
|
+
},
|
|
38
|
+
'services': {
|
|
39
|
+
paths: ['tests/services'],
|
|
40
|
+
webdrivers: '',
|
|
41
|
+
servicers: ['docker'],
|
|
42
|
+
services: ['inbucket', 'request'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
'default browsers split + cells',
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// Single browser - no split even for + cells
|
|
49
|
+
const result2 = await testGrid(['chrome'], samplesPath);
|
|
50
|
+
is(
|
|
51
|
+
result2,
|
|
52
|
+
{
|
|
53
|
+
e2e: {
|
|
54
|
+
paths: ['tests/e2e'],
|
|
55
|
+
webdrivers: 'chrome',
|
|
56
|
+
servicers: ['kubernetes'],
|
|
57
|
+
services: ['db', 'nginx', 'request'],
|
|
58
|
+
},
|
|
59
|
+
integration: {
|
|
60
|
+
paths: ['tests/integration'],
|
|
61
|
+
webdrivers: 'chrome',
|
|
62
|
+
servicers: ['docker'],
|
|
63
|
+
services: ['db'],
|
|
64
|
+
},
|
|
65
|
+
lib: {
|
|
66
|
+
paths: ['tests/lib'],
|
|
67
|
+
webdrivers: '',
|
|
68
|
+
servicers: [],
|
|
69
|
+
services: [],
|
|
70
|
+
},
|
|
71
|
+
services: {
|
|
72
|
+
paths: ['tests/services'],
|
|
73
|
+
webdrivers: '',
|
|
74
|
+
servicers: ['docker'],
|
|
75
|
+
services: ['inbucket', 'request'],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
'single browser no split',
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
// Multiple browsers without split (no + cells, explicit browsers)
|
|
82
|
+
const result3 = await testGrid(
|
|
83
|
+
['tests/lib', 'chrome', 'firefox'],
|
|
84
|
+
samplesPath,
|
|
85
|
+
);
|
|
86
|
+
is(
|
|
87
|
+
result3,
|
|
88
|
+
{
|
|
89
|
+
lib: {
|
|
90
|
+
paths: ['tests/lib'],
|
|
91
|
+
webdrivers: '',
|
|
92
|
+
servicers: [],
|
|
93
|
+
services: [],
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
'no webdriver cell with multiple browsers',
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// Filter by paths with multiple browsers (+ cell splits)
|
|
100
|
+
const result4 = await testGrid(
|
|
101
|
+
['tests/e2e', 'chrome', 'firefox'],
|
|
102
|
+
samplesPath,
|
|
103
|
+
);
|
|
104
|
+
is(
|
|
105
|
+
result4,
|
|
106
|
+
{
|
|
107
|
+
'e2e-chrome': {
|
|
108
|
+
paths: ['tests/e2e'],
|
|
109
|
+
webdrivers: 'chrome',
|
|
110
|
+
servicers: ['kubernetes'],
|
|
111
|
+
services: ['db', 'nginx', 'request'],
|
|
112
|
+
},
|
|
113
|
+
'e2e-firefox': {
|
|
114
|
+
paths: ['tests/e2e'],
|
|
115
|
+
webdrivers: 'firefox',
|
|
116
|
+
servicers: ['kubernetes'],
|
|
117
|
+
services: ['db', 'nginx', 'request'],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
'filtered paths with split',
|
|
121
|
+
);
|
|
122
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export * from '../test.js';
|
|
2
|
+
export * from '../../core/deps.js';
|
|
3
|
+
|
|
4
|
+
import { is } from '../test.js';
|
|
5
|
+
import { spawn } from '../../core/spawn.js';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Helper to test watest --deps command
|
|
13
|
+
* @param {string[]} paths - Paths to pass to --deps (empty array for no args)
|
|
14
|
+
* @param {string} samplesPath - Path to samples directory
|
|
15
|
+
* @param {Object} expected - Expected metadata result
|
|
16
|
+
*/
|
|
17
|
+
export async function testDeps(paths, samplesPath, expected) {
|
|
18
|
+
let stdout = '';
|
|
19
|
+
let stderr = '';
|
|
20
|
+
|
|
21
|
+
const args = ['../../../../bin/watest.js', '--deps', ...paths];
|
|
22
|
+
|
|
23
|
+
await spawn('node', args, { cwd: samplesPath }, buffer => {
|
|
24
|
+
for (let { str_data, is_stdout } of buffer) {
|
|
25
|
+
if (is_stdout) stdout += str_data;
|
|
26
|
+
else stderr += str_data;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
is(stderr, '', 'no errors');
|
|
31
|
+
|
|
32
|
+
// Filter out Settings lines before JSON
|
|
33
|
+
const jsonStart = stdout.indexOf('{');
|
|
34
|
+
const jsonStr = jsonStart >= 0 ? stdout.slice(jsonStart) : stdout;
|
|
35
|
+
|
|
36
|
+
const meta = JSON.parse(jsonStr);
|
|
37
|
+
const pathsDesc =
|
|
38
|
+
paths.length === 0 ? 'no args (defaults to tests/)' : paths.join(', ');
|
|
39
|
+
is(meta, expected, `deps for ${pathsDesc}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Helper to test watest --grid command
|
|
44
|
+
* @param {string[]} args - Arguments to pass to --grid
|
|
45
|
+
* @param {string} cwd - Working directory for the command
|
|
46
|
+
* @returns {Promise<Object>} Parsed grid JSON output
|
|
47
|
+
*/
|
|
48
|
+
export async function testGrid(args, cwd) {
|
|
49
|
+
let stdout = '';
|
|
50
|
+
const watestBin = path.join(__dirname, '../../bin/watest.js');
|
|
51
|
+
|
|
52
|
+
await spawn('node', [watestBin, '--grid', ...args], { cwd }, buffer => {
|
|
53
|
+
for (let { str_data, is_stdout } of buffer) {
|
|
54
|
+
if (is_stdout) stdout += str_data;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const jsonStart = stdout.indexOf('{');
|
|
59
|
+
if (jsonStart < 0) {
|
|
60
|
+
throw new Error(`No JSON in output: ${stdout}`);
|
|
61
|
+
}
|
|
62
|
+
return JSON.parse(stdout.slice(jsonStart));
|
|
63
|
+
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"../../../..": {
|
|
18
18
|
"name": "@camperaid/watest",
|
|
19
|
-
"version": "2.
|
|
19
|
+
"version": "2.5.1",
|
|
20
20
|
"dev": true,
|
|
21
21
|
"license": "MPL",
|
|
22
22
|
"dependencies": {
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
"version": "8.12.1",
|
|
188
188
|
"dev": true,
|
|
189
189
|
"license": "MIT",
|
|
190
|
+
"peer": true,
|
|
190
191
|
"bin": {
|
|
191
192
|
"acorn": "bin/acorn"
|
|
192
193
|
},
|
|
@@ -450,6 +451,7 @@
|
|
|
450
451
|
"version": "9.8.0",
|
|
451
452
|
"dev": true,
|
|
452
453
|
"license": "MIT",
|
|
454
|
+
"peer": true,
|
|
453
455
|
"dependencies": {
|
|
454
456
|
"@eslint-community/eslint-utils": "^4.2.0",
|
|
455
457
|
"@eslint-community/regexpp": "^4.11.0",
|
|
@@ -7,9 +7,9 @@ export async function test() {
|
|
|
7
7
|
[
|
|
8
8
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
9
9
|
'\x1B[38;5;99mStarted\x1B[0m sample/unit',
|
|
10
|
-
'!Running: sample/unit/
|
|
10
|
+
'!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
|
|
11
11
|
'\x1B[32mOk:\x1B[0m works!',
|
|
12
|
-
'>sample/unit/
|
|
12
|
+
'>sample/unit/t-test.js completed in',
|
|
13
13
|
'\x1B[38;5;243mCompleted\x1B[0m sample/unit',
|
|
14
14
|
'\x1B[102mSuccess!\x1B[0m Total: 1',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/',
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { is, run_e2e_tests } from './test.js';
|
|
2
2
|
|
|
3
3
|
export async function test() {
|
|
4
|
-
let output = await run_e2e_tests('
|
|
4
|
+
let output = await run_e2e_tests('loader-mixed');
|
|
5
5
|
is(
|
|
6
6
|
output.stdout,
|
|
7
7
|
[
|
|
8
8
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
9
9
|
'\x1B[38;5;99mStarted\x1B[0m sample/unit',
|
|
10
|
-
'!Running: sample/unit/
|
|
10
|
+
'!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
|
|
11
11
|
'\x1B[32mOk:\x1B[0m Real!, got: real',
|
|
12
|
-
'>sample/unit/
|
|
12
|
+
'>sample/unit/t-test.js completed in',
|
|
13
13
|
'\x1B[38;5;243mCompleted\x1B[0m sample/unit',
|
|
14
14
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui',
|
|
15
|
-
'!Running: sample/ui/
|
|
15
|
+
'!Running: sample/ui/t-test.js, path: tests/ui/t-test.js',
|
|
16
16
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
17
|
-
'>sample/ui/
|
|
17
|
+
'>sample/ui/t-test.js completed in',
|
|
18
18
|
'\x1B[38;5;243mCompleted\x1B[0m sample/ui',
|
|
19
19
|
'Elapsed:',
|
|
20
20
|
'Testsuite: shutdown',
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { is, run_e2e_tests } from './test.js';
|
|
2
2
|
|
|
3
3
|
export async function test() {
|
|
4
|
-
let output = await run_e2e_tests('
|
|
5
|
-
patterns: ['tests/base/
|
|
4
|
+
let output = await run_e2e_tests('loader-multiple', {
|
|
5
|
+
patterns: ['tests/base/t-btest.js', 'tests/core/t-ctest.js'],
|
|
6
6
|
});
|
|
7
7
|
is(
|
|
8
8
|
output.stdout,
|
|
9
9
|
[
|
|
10
10
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/base',
|
|
12
|
-
'!Running: sample/base/
|
|
12
|
+
'!Running: sample/base/t-btest.js, path: tests/base/t-btest.js',
|
|
13
13
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
14
|
-
'>sample/base/
|
|
14
|
+
'>sample/base/t-btest.js completed in',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/base',
|
|
16
16
|
'Elapsed:',
|
|
17
17
|
'Testsuite: shutdown',
|
|
18
18
|
'\x1B[38;5;99mStarted\x1B[0m sample/core',
|
|
19
|
-
'!Running: sample/core/
|
|
19
|
+
'!Running: sample/core/t-ctest.js, path: tests/core/t-ctest.js',
|
|
20
20
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
21
|
-
'>sample/core/
|
|
21
|
+
'>sample/core/t-ctest.js completed in',
|
|
22
22
|
'\x1B[38;5;243mCompleted\x1B[0m sample/core',
|
|
23
23
|
'Elapsed:',
|
|
24
24
|
'Testsuite: shutdown',
|