@camperaid/watest 2.5.1 → 2.5.3
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} +8 -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
|
@@ -1,22 +1,22 @@
|
|
|
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-multiple');
|
|
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/base',
|
|
10
|
-
'!Running: sample/base/
|
|
10
|
+
'!Running: sample/base/t-btest.js, path: tests/base/t-btest.js',
|
|
11
11
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
12
|
-
'>sample/base/
|
|
12
|
+
'>sample/base/t-btest.js completed in',
|
|
13
13
|
'\x1B[38;5;243mCompleted\x1B[0m sample/base',
|
|
14
14
|
'Elapsed:',
|
|
15
15
|
'Testsuite: shutdown',
|
|
16
16
|
'\x1B[38;5;99mStarted\x1B[0m sample/core',
|
|
17
|
-
'!Running: sample/core/
|
|
17
|
+
'!Running: sample/core/t-ctest.js, path: tests/core/t-ctest.js',
|
|
18
18
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
19
|
-
'>sample/core/
|
|
19
|
+
'>sample/core/t-ctest.js completed in',
|
|
20
20
|
'\x1B[38;5;243mCompleted\x1B[0m sample/core',
|
|
21
21
|
'Elapsed:',
|
|
22
22
|
'Testsuite: shutdown',
|
|
@@ -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/',
|
|
10
|
-
'!Running: sample/
|
|
10
|
+
'!Running: sample/t-test.js, path: tests/t-test.js',
|
|
11
11
|
'\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
|
|
12
|
-
'>sample/
|
|
12
|
+
'>sample/t-test.js completed in',
|
|
13
13
|
'\x1B[38;5;243mCompleted\x1B[0m sample/',
|
|
14
14
|
'Elapsed:',
|
|
15
15
|
'Testsuite: shutdown',
|
|
@@ -6,9 +6,9 @@ export async function test() {
|
|
|
6
6
|
output.stdout,
|
|
7
7
|
[
|
|
8
8
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
9
|
-
'!Running: sample/
|
|
9
|
+
'!Running: sample/t-test.js, path: tests/t-test.js',
|
|
10
10
|
'\x1B[32mOk:\x1B[0m works!',
|
|
11
|
-
'>sample/
|
|
11
|
+
'>sample/t-test.js completed in',
|
|
12
12
|
'\x1B[102mSuccess!\x1B[0m Total: 1',
|
|
13
13
|
'\x1B[38;5;243mCompleted\x1B[0m sample/',
|
|
14
14
|
'Elapsed:',
|
|
@@ -1,25 +1,25 @@
|
|
|
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('wd-single', {
|
|
5
5
|
webdrivers: ['firefox', 'chrome'],
|
|
6
|
-
patterns: ['tests/
|
|
6
|
+
patterns: ['tests/t-test.js'],
|
|
7
7
|
});
|
|
8
8
|
is(
|
|
9
9
|
output.stdout,
|
|
10
10
|
[
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
12
12
|
'\x1B[38;5;99mStarted\x1B[0m sample/firefox',
|
|
13
|
-
'!Running: sample/firefox/
|
|
13
|
+
'!Running: sample/firefox/t-test.js, path: tests/t-test.js',
|
|
14
14
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
15
|
-
'>sample/firefox/
|
|
15
|
+
'>sample/firefox/t-test.js completed in',
|
|
16
16
|
'\x1B[38;5;243mCompleted\x1B[0m sample/firefox',
|
|
17
17
|
'Elapsed:',
|
|
18
18
|
'Testsuite: shutdown',
|
|
19
19
|
'\x1B[38;5;99mStarted\x1B[0m sample/chrome',
|
|
20
|
-
'!Running: sample/chrome/
|
|
20
|
+
'!Running: sample/chrome/t-test.js, path: tests/t-test.js',
|
|
21
21
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
22
|
-
'>sample/chrome/
|
|
22
|
+
'>sample/chrome/t-test.js completed in',
|
|
23
23
|
'\x1B[38;5;243mCompleted\x1B[0m sample/chrome',
|
|
24
24
|
'\x1B[102mSuccess!\x1B[0m Total: 2',
|
|
25
25
|
'\x1B[38;5;243mCompleted\x1B[0m sample/',
|
|
@@ -1,7 +1,7 @@
|
|
|
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('wd-single', {
|
|
5
5
|
webdrivers: ['firefox', 'chrome'],
|
|
6
6
|
});
|
|
7
7
|
is(
|
|
@@ -9,16 +9,16 @@ export async function test() {
|
|
|
9
9
|
[
|
|
10
10
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/firefox',
|
|
12
|
-
'!Running: sample/firefox/
|
|
12
|
+
'!Running: sample/firefox/t-test.js, path: tests/t-test.js',
|
|
13
13
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
14
|
-
'>sample/firefox/
|
|
14
|
+
'>sample/firefox/t-test.js completed in',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/firefox',
|
|
16
16
|
'Elapsed:',
|
|
17
17
|
'Testsuite: shutdown',
|
|
18
18
|
'\x1B[38;5;99mStarted\x1B[0m sample/chrome',
|
|
19
|
-
'!Running: sample/chrome/
|
|
19
|
+
'!Running: sample/chrome/t-test.js, path: tests/t-test.js',
|
|
20
20
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
21
|
-
'>sample/chrome/
|
|
21
|
+
'>sample/chrome/t-test.js completed in',
|
|
22
22
|
'\x1B[38;5;243mCompleted\x1B[0m sample/chrome',
|
|
23
23
|
'\x1B[102mSuccess!\x1B[0m Total: 2',
|
|
24
24
|
'\x1B[38;5;243mCompleted\x1B[0m sample/',
|
|
@@ -1,7 +1,7 @@
|
|
|
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('wd-single', {
|
|
5
5
|
webdrivers: ['firefox'],
|
|
6
6
|
});
|
|
7
7
|
is(
|
|
@@ -9,9 +9,9 @@ export async function test() {
|
|
|
9
9
|
[
|
|
10
10
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/firefox',
|
|
12
|
-
'!Running: sample/firefox/
|
|
12
|
+
'!Running: sample/firefox/t-test.js, path: tests/t-test.js',
|
|
13
13
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
14
|
-
'>sample/firefox/
|
|
14
|
+
'>sample/firefox/t-test.js completed in',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/firefox',
|
|
16
16
|
'Elapsed:',
|
|
17
17
|
'Testsuite: shutdown',
|
|
@@ -1,7 +1,7 @@
|
|
|
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('wd-mixed', {
|
|
5
5
|
webdrivers: ['firefox', 'chrome'],
|
|
6
6
|
});
|
|
7
7
|
is(
|
|
@@ -9,22 +9,22 @@ export async function test() {
|
|
|
9
9
|
[
|
|
10
10
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/unit',
|
|
12
|
-
'!Running: sample/unit/
|
|
12
|
+
'!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
|
|
13
13
|
'\x1B[32mOk:\x1B[0m Unit works!',
|
|
14
|
-
'>sample/unit/
|
|
14
|
+
'>sample/unit/t-test.js completed in',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/unit',
|
|
16
16
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui',
|
|
17
17
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui/firefox',
|
|
18
|
-
'!Running: sample/ui/firefox/
|
|
18
|
+
'!Running: sample/ui/firefox/t-test.js, path: tests/ui/t-test.js',
|
|
19
19
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
20
|
-
'>sample/ui/firefox/
|
|
20
|
+
'>sample/ui/firefox/t-test.js completed in',
|
|
21
21
|
'\x1B[38;5;243mCompleted\x1B[0m sample/ui/firefox',
|
|
22
22
|
'Elapsed:',
|
|
23
23
|
'Testsuite: shutdown',
|
|
24
24
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui/chrome',
|
|
25
|
-
'!Running: sample/ui/chrome/
|
|
25
|
+
'!Running: sample/ui/chrome/t-test.js, path: tests/ui/t-test.js',
|
|
26
26
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
27
|
-
'>sample/ui/chrome/
|
|
27
|
+
'>sample/ui/chrome/t-test.js completed in',
|
|
28
28
|
'\x1B[38;5;243mCompleted\x1B[0m sample/ui/chrome',
|
|
29
29
|
'\x1B[38;5;243mCompleted\x1B[0m sample/ui',
|
|
30
30
|
'\x1B[102mSuccess!\x1B[0m Total: 3',
|
|
@@ -1,7 +1,7 @@
|
|
|
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('wd-mixed', {
|
|
5
5
|
webdrivers: ['firefox'],
|
|
6
6
|
});
|
|
7
7
|
is(
|
|
@@ -9,15 +9,15 @@ export async function test() {
|
|
|
9
9
|
[
|
|
10
10
|
'\x1B[38;5;99mStarted\x1B[0m sample/',
|
|
11
11
|
'\x1B[38;5;99mStarted\x1B[0m sample/unit',
|
|
12
|
-
'!Running: sample/unit/
|
|
12
|
+
'!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
|
|
13
13
|
'\x1B[32mOk:\x1B[0m Unit works!',
|
|
14
|
-
'>sample/unit/
|
|
14
|
+
'>sample/unit/t-test.js completed in',
|
|
15
15
|
'\x1B[38;5;243mCompleted\x1B[0m sample/unit',
|
|
16
16
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui',
|
|
17
17
|
'\x1B[38;5;99mStarted\x1B[0m sample/ui/firefox',
|
|
18
|
-
'!Running: sample/ui/firefox/
|
|
18
|
+
'!Running: sample/ui/firefox/t-test.js, path: tests/ui/t-test.js',
|
|
19
19
|
'\x1B[32mOk:\x1B[0m Webdriver Works!',
|
|
20
|
-
'>sample/ui/firefox/
|
|
20
|
+
'>sample/ui/firefox/t-test.js completed in',
|
|
21
21
|
'\x1B[38;5;243mCompleted\x1B[0m sample/ui/firefox',
|
|
22
22
|
'Elapsed:',
|
|
23
23
|
'Testsuite: shutdown',
|
package/tests/meta.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export var folders = ['base', 'series', 'webdriver', 'e2e'];
|
|
1
|
+
export var folders = ['base', 'series', 'webdriver', 'e2e', 'deps'];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { log } from '../../../logging/logging.js';
|
|
2
|
+
import { MockSeries } from '../mock-series.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Mock servicer for testing servicer lifecycle.
|
|
6
|
+
* Logs all operations for test validation.
|
|
7
|
+
*/
|
|
8
|
+
class MockServicer {
|
|
9
|
+
constructor(type) {
|
|
10
|
+
this.type = type;
|
|
11
|
+
this.services = new Set();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async init(services) {
|
|
15
|
+
log(`MockServicer:${this.type} init`);
|
|
16
|
+
if (services) {
|
|
17
|
+
for (const service of services) {
|
|
18
|
+
await this.start(service);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async deinit(services) {
|
|
24
|
+
log(`MockServicer:${this.type} deinit`);
|
|
25
|
+
if (services) {
|
|
26
|
+
for (const service of [...services].reverse()) {
|
|
27
|
+
await this.stop(service);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async start(service) {
|
|
33
|
+
log(`MockServicer:${this.type} starting ${service}`);
|
|
34
|
+
this.services.add(service);
|
|
35
|
+
return { started: service, type: this.type };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async stop(service) {
|
|
39
|
+
log(`MockServicer:${this.type} stopping ${service}`);
|
|
40
|
+
this.services.delete(service);
|
|
41
|
+
return { stopped: service, type: this.type };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async shutdown() {
|
|
45
|
+
const servicesStr =
|
|
46
|
+
this.services.size > 0
|
|
47
|
+
? ` (services still running: ${Array.from(this.services).join(', ')})`
|
|
48
|
+
: '';
|
|
49
|
+
log(`MockServicer:${this.type} shutdown${servicesStr}`);
|
|
50
|
+
return { shutdown: true, type: this.type };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async ontest() {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* MockSeries with servicer support.
|
|
60
|
+
* Creates MockServicer instances for testing.
|
|
61
|
+
*/
|
|
62
|
+
class MockSeriesWithServicer extends MockSeries {
|
|
63
|
+
createServicer(type) {
|
|
64
|
+
return new MockServicer(type || 'docker');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { MockServicer, MockSeriesWithServicer };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { is_test_output, success } from '../../base/test.js';
|
|
2
|
+
import { MockSeriesWithServicer } from './mock-servicer.js';
|
|
3
|
+
|
|
4
|
+
export async function test() {
|
|
5
|
+
const ts = {
|
|
6
|
+
'tests': {
|
|
7
|
+
meta: {
|
|
8
|
+
servicer: 'docker',
|
|
9
|
+
services: ['db', 'cache'],
|
|
10
|
+
folders: ['nested'],
|
|
11
|
+
},
|
|
12
|
+
files: ['t_parent.js'],
|
|
13
|
+
},
|
|
14
|
+
'tests/t_parent.js': {
|
|
15
|
+
test() {
|
|
16
|
+
success('Parent test works');
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
'tests/nested': {
|
|
20
|
+
meta: {
|
|
21
|
+
servicer: 'docker',
|
|
22
|
+
services: ['worker', 'queue'],
|
|
23
|
+
},
|
|
24
|
+
files: ['t_child.js'],
|
|
25
|
+
},
|
|
26
|
+
'tests/nested/t_child.js': {
|
|
27
|
+
test() {
|
|
28
|
+
success('Child test works');
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
await is_test_output(
|
|
34
|
+
() => MockSeriesWithServicer.run([], { ts }),
|
|
35
|
+
[
|
|
36
|
+
'Settings: no temporary storage dir',
|
|
37
|
+
'Settings: logging into /tmp',
|
|
38
|
+
'Settings: chrome webdrivers',
|
|
39
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/',
|
|
40
|
+
|
|
41
|
+
// Parent folder init - starts parent services
|
|
42
|
+
'!Running: mac/init, path: tests/meta.js',
|
|
43
|
+
'MockServicer:docker init',
|
|
44
|
+
'MockServicer:docker starting db',
|
|
45
|
+
'MockServicer:docker starting cache',
|
|
46
|
+
'>mac/init completed in',
|
|
47
|
+
|
|
48
|
+
// Parent test
|
|
49
|
+
'!Running: mac/t_parent.js, path: tests/t_parent.js',
|
|
50
|
+
'\x1B[32mOk:\x1B[0m Parent test works',
|
|
51
|
+
'>mac/t_parent.js completed in',
|
|
52
|
+
|
|
53
|
+
// Nested folder starts
|
|
54
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/nested',
|
|
55
|
+
|
|
56
|
+
// Nested folder init - starts child services (parent services still running)
|
|
57
|
+
'!Running: mac/nested/init, path: tests/nested/meta.js',
|
|
58
|
+
'MockServicer:docker init',
|
|
59
|
+
'MockServicer:docker starting worker',
|
|
60
|
+
'MockServicer:docker starting queue',
|
|
61
|
+
'>mac/nested/init completed in',
|
|
62
|
+
|
|
63
|
+
// Child test
|
|
64
|
+
'!Running: mac/nested/t_child.js, path: tests/nested/t_child.js',
|
|
65
|
+
'\x1B[32mOk:\x1B[0m Child test works',
|
|
66
|
+
'>mac/nested/t_child.js completed in',
|
|
67
|
+
|
|
68
|
+
// Critical: nested uninit should only stop child services, NOT shutdown servicer
|
|
69
|
+
'!Running: mac/nested/uninit, path: tests/nested/meta.js',
|
|
70
|
+
'MockServicer:docker deinit',
|
|
71
|
+
'MockServicer:docker stopping queue',
|
|
72
|
+
'MockServicer:docker stopping worker',
|
|
73
|
+
// Should NOT see "MockServicer:docker shutdown" here!
|
|
74
|
+
'>mac/nested/uninit completed in',
|
|
75
|
+
|
|
76
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/nested',
|
|
77
|
+
'Logs are written to',
|
|
78
|
+
|
|
79
|
+
// Parent uninit - stops parent services
|
|
80
|
+
'!Running: mac/uninit, path: tests/meta.js',
|
|
81
|
+
'MockServicer:docker deinit',
|
|
82
|
+
'MockServicer:docker stopping cache',
|
|
83
|
+
'MockServicer:docker stopping db',
|
|
84
|
+
'>mac/uninit completed in',
|
|
85
|
+
|
|
86
|
+
'\x1B[102mSuccess!\x1B[0m Total: 2',
|
|
87
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/',
|
|
88
|
+
'Logs are written to',
|
|
89
|
+
'Elapsed:',
|
|
90
|
+
'Logs are written to',
|
|
91
|
+
|
|
92
|
+
// Final shutdown should happen here with no remaining services
|
|
93
|
+
'MockServicer:docker shutdown',
|
|
94
|
+
'Testsuite: shutdown',
|
|
95
|
+
],
|
|
96
|
+
[],
|
|
97
|
+
'nested servicer lifecycle - no premature shutdown',
|
|
98
|
+
);
|
|
99
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { is_test_output, success } from '../../base/test.js';
|
|
2
|
+
import { MockSeriesWithServicer } from './mock-servicer.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Test that a folder can specify servicer type without services.
|
|
6
|
+
* This is useful when you want to select an environment (e.g., kubernetes)
|
|
7
|
+
* without starting any services.
|
|
8
|
+
*/
|
|
9
|
+
export async function test() {
|
|
10
|
+
const ts = {
|
|
11
|
+
'tests': {
|
|
12
|
+
meta: {
|
|
13
|
+
servicer: 'kubernetes', // Just select the servicer type, no services
|
|
14
|
+
},
|
|
15
|
+
files: ['t_example.js'],
|
|
16
|
+
},
|
|
17
|
+
'tests/t_example.js': {
|
|
18
|
+
test() {
|
|
19
|
+
success('Test in kubernetes environment works');
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
await is_test_output(
|
|
25
|
+
() => MockSeriesWithServicer.run([], { ts }),
|
|
26
|
+
[
|
|
27
|
+
'Settings: no temporary storage dir',
|
|
28
|
+
'Settings: logging into /tmp',
|
|
29
|
+
'Settings: chrome webdrivers',
|
|
30
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/',
|
|
31
|
+
'!Running: mac/init, path: tests/meta.js',
|
|
32
|
+
'MockServicer:kubernetes init',
|
|
33
|
+
// No services started - init is called with undefined/empty
|
|
34
|
+
'>mac/init completed in',
|
|
35
|
+
'!Running: mac/t_example.js, path: tests/t_example.js',
|
|
36
|
+
'\x1B[32mOk:\x1B[0m Test in kubernetes environment works',
|
|
37
|
+
'>mac/t_example.js completed in',
|
|
38
|
+
'!Running: mac/uninit, path: tests/meta.js',
|
|
39
|
+
'MockServicer:kubernetes deinit',
|
|
40
|
+
// No services stopped
|
|
41
|
+
'>mac/uninit completed in',
|
|
42
|
+
'\x1B[102mSuccess!\x1B[0m Total: 1',
|
|
43
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/',
|
|
44
|
+
'Logs are written to',
|
|
45
|
+
'Elapsed:',
|
|
46
|
+
'Logs are written to',
|
|
47
|
+
'MockServicer:kubernetes shutdown',
|
|
48
|
+
'Testsuite: shutdown',
|
|
49
|
+
],
|
|
50
|
+
[],
|
|
51
|
+
'servicer without services',
|
|
52
|
+
);
|
|
53
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test for Servicer Type Switching
|
|
3
|
+
*
|
|
4
|
+
* Verifies that when switching between test folders with different servicer types,
|
|
5
|
+
* the old servicer is properly shut down before creating the new one.
|
|
6
|
+
*
|
|
7
|
+
* This prevents port conflicts when transitioning between Kubernetes and Docker servicers.
|
|
8
|
+
*
|
|
9
|
+
* Test scenario:
|
|
10
|
+
* 1. Folder 1: docker servicer with services
|
|
11
|
+
* 2. Folder 2: kubernetes servicer with services
|
|
12
|
+
* 3. Folder 3: back to docker servicer with services
|
|
13
|
+
* Expected: docker → kubernetes (shutdown docker, create k8s) → docker (shutdown k8s, create docker)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { is_test_output, success } from '../../base/test.js';
|
|
17
|
+
import { MockSeriesWithServicer } from './mock-servicer.js';
|
|
18
|
+
|
|
19
|
+
export async function test() {
|
|
20
|
+
const ts = {
|
|
21
|
+
'tests': {
|
|
22
|
+
meta: {
|
|
23
|
+
folders: ['folder1', 'folder2', 'folder3'],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
'tests/folder1': {
|
|
27
|
+
meta: {
|
|
28
|
+
servicer: 'docker',
|
|
29
|
+
services: ['db'],
|
|
30
|
+
},
|
|
31
|
+
files: ['t_test1.js'],
|
|
32
|
+
},
|
|
33
|
+
'tests/folder2': {
|
|
34
|
+
meta: {
|
|
35
|
+
servicer: 'kubernetes',
|
|
36
|
+
services: ['ws'],
|
|
37
|
+
},
|
|
38
|
+
files: ['t_test2.js'],
|
|
39
|
+
},
|
|
40
|
+
'tests/folder3': {
|
|
41
|
+
meta: {
|
|
42
|
+
servicer: 'docker',
|
|
43
|
+
services: ['cache'],
|
|
44
|
+
},
|
|
45
|
+
files: ['t_test3.js'],
|
|
46
|
+
},
|
|
47
|
+
'tests/folder1/t_test1.js': {
|
|
48
|
+
test() {
|
|
49
|
+
success('Test 1 in docker folder');
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
'tests/folder2/t_test2.js': {
|
|
53
|
+
test() {
|
|
54
|
+
success('Test 2 in kubernetes folder');
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
'tests/folder3/t_test3.js': {
|
|
58
|
+
test() {
|
|
59
|
+
success('Test 3 back to docker');
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
await is_test_output(
|
|
65
|
+
() => MockSeriesWithServicer.run([], { ts }),
|
|
66
|
+
[
|
|
67
|
+
'Settings: no temporary storage dir',
|
|
68
|
+
'Settings: logging into /tmp',
|
|
69
|
+
'Settings: chrome webdrivers',
|
|
70
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/',
|
|
71
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/folder1',
|
|
72
|
+
|
|
73
|
+
// Folder 1: docker servicer
|
|
74
|
+
'!Running: mac/folder1/init, path: tests/folder1/meta.js',
|
|
75
|
+
'MockServicer:docker init',
|
|
76
|
+
'MockServicer:docker starting db',
|
|
77
|
+
'>mac/folder1/init completed in',
|
|
78
|
+
|
|
79
|
+
'!Running: mac/folder1/t_test1.js, path: tests/folder1/t_test1.js',
|
|
80
|
+
'\x1B[32mOk:\x1B[0m Test 1 in docker folder',
|
|
81
|
+
'>mac/folder1/t_test1.js completed in',
|
|
82
|
+
|
|
83
|
+
'!Running: mac/folder1/uninit, path: tests/folder1/meta.js',
|
|
84
|
+
'MockServicer:docker deinit',
|
|
85
|
+
'MockServicer:docker stopping db',
|
|
86
|
+
'>mac/folder1/uninit completed in',
|
|
87
|
+
|
|
88
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/folder1',
|
|
89
|
+
'Logs are written to',
|
|
90
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/folder2',
|
|
91
|
+
|
|
92
|
+
// Folder 2: switch to kubernetes servicer (no shutdown - servicer handles conflicts)
|
|
93
|
+
'!Running: mac/folder2/init, path: tests/folder2/meta.js',
|
|
94
|
+
'MockServicer:kubernetes init',
|
|
95
|
+
'MockServicer:kubernetes starting ws',
|
|
96
|
+
'>mac/folder2/init completed in',
|
|
97
|
+
|
|
98
|
+
'!Running: mac/folder2/t_test2.js, path: tests/folder2/t_test2.js',
|
|
99
|
+
'\x1B[32mOk:\x1B[0m Test 2 in kubernetes folder',
|
|
100
|
+
'>mac/folder2/t_test2.js completed in',
|
|
101
|
+
|
|
102
|
+
'!Running: mac/folder2/uninit, path: tests/folder2/meta.js',
|
|
103
|
+
'MockServicer:kubernetes deinit',
|
|
104
|
+
'MockServicer:kubernetes stopping ws',
|
|
105
|
+
'>mac/folder2/uninit completed in',
|
|
106
|
+
|
|
107
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/folder2',
|
|
108
|
+
'Logs are written to',
|
|
109
|
+
'\x1B[38;5;99mStarted\x1B[0m mac/folder3',
|
|
110
|
+
|
|
111
|
+
// Folder 3: switch back to docker servicer (no shutdown - servicer handles conflicts)
|
|
112
|
+
'!Running: mac/folder3/init, path: tests/folder3/meta.js',
|
|
113
|
+
'MockServicer:docker init',
|
|
114
|
+
'MockServicer:docker starting cache',
|
|
115
|
+
'>mac/folder3/init completed in',
|
|
116
|
+
|
|
117
|
+
'!Running: mac/folder3/t_test3.js, path: tests/folder3/t_test3.js',
|
|
118
|
+
'\x1B[32mOk:\x1B[0m Test 3 back to docker',
|
|
119
|
+
'>mac/folder3/t_test3.js completed in',
|
|
120
|
+
|
|
121
|
+
'!Running: mac/folder3/uninit, path: tests/folder3/meta.js',
|
|
122
|
+
'MockServicer:docker deinit',
|
|
123
|
+
'MockServicer:docker stopping cache',
|
|
124
|
+
'>mac/folder3/uninit completed in',
|
|
125
|
+
|
|
126
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/folder3',
|
|
127
|
+
'Logs are written to',
|
|
128
|
+
'\x1B[102mSuccess!\x1B[0m Total: 3',
|
|
129
|
+
'\x1B[38;5;243mCompleted\x1B[0m mac/',
|
|
130
|
+
'Logs are written to',
|
|
131
|
+
'Elapsed:',
|
|
132
|
+
'Logs are written to',
|
|
133
|
+
'MockServicer:docker shutdown',
|
|
134
|
+
'Testsuite: shutdown',
|
|
135
|
+
],
|
|
136
|
+
[],
|
|
137
|
+
'servicer type switching',
|
|
138
|
+
);
|
|
139
|
+
}
|