@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.
Files changed (162) hide show
  1. package/README.md +274 -129
  2. package/bin/watest.js +36 -2
  3. package/core/core.js +43 -15
  4. package/core/deps.js +211 -0
  5. package/core/{process_args.js → process-args.js} +8 -0
  6. package/core/series.js +41 -40
  7. package/core/settings.js +27 -9
  8. package/core/util.js +1 -1
  9. package/index.js +5 -3
  10. package/interfaces/servicer.js +13 -2
  11. package/logging/logging.js +1 -1
  12. package/logging/logpipe.js +38 -21
  13. package/package.json +1 -1
  14. package/tests/base/{t_core.js → t-core.js} +10 -3
  15. package/tests/base/test.js +1 -2
  16. package/tests/deps/samples/nested/.watestrc.js +3 -0
  17. package/tests/deps/samples/nested/tests/meta.js +1 -0
  18. package/tests/deps/samples/nested/tests/services/meta.js +1 -0
  19. package/tests/deps/samples/nested/tests/services/ws/meta.js +1 -0
  20. package/tests/deps/samples/nested/tests/services/ws/webservice/meta.js +2 -0
  21. package/tests/deps/samples/nested/tests/services/ws/webservice/t-ws.js +3 -0
  22. package/tests/deps/samples/unified/.watestrc.js +3 -0
  23. package/tests/deps/samples/unified/tests/e2e/meta.js +4 -0
  24. package/tests/deps/samples/unified/tests/e2e/pages/meta.js +1 -0
  25. package/tests/deps/samples/unified/tests/e2e/pages/t-example.js +3 -0
  26. package/tests/deps/samples/unified/tests/e2e/t-example.js +3 -0
  27. package/tests/deps/samples/unified/tests/integration/meta.js +3 -0
  28. package/tests/deps/samples/unified/tests/lib/meta.js +0 -0
  29. package/tests/deps/samples/unified/tests/lib/t-example.js +3 -0
  30. package/tests/deps/samples/unified/tests/meta.js +8 -0
  31. package/tests/deps/samples/unified/tests/services/meta.js +3 -0
  32. package/tests/deps/samples/unified/tests/services/request/meta.js +1 -0
  33. package/tests/deps/samples/unified/tests/services/t-example.js +3 -0
  34. package/tests/deps/t-parse-cell-syntax.js +6 -0
  35. package/tests/deps/t-parse-grid-args.js +11 -0
  36. package/tests/deps/t-watest-deps.js +37 -0
  37. package/tests/deps/t-watest-grid.js +122 -0
  38. package/tests/deps/test.js +63 -0
  39. package/tests/e2e/samples/folder/package-lock.json +3 -1
  40. package/tests/e2e/samples/loader/package-lock.json +3 -1
  41. package/tests/e2e/samples/loader/tests/meta.js +1 -1
  42. package/tests/e2e/samples/{loader_mixed → loader-mixed}/package-lock.json +3 -1
  43. package/tests/e2e/samples/{loader_multiple/tests/core → loader-mixed/tests/ui}/meta.js +1 -1
  44. package/tests/e2e/samples/{loader_multiple → loader-multiple}/package-lock.json +3 -1
  45. package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/base/meta.js +1 -1
  46. package/tests/e2e/samples/{loader_mixed/tests/ui → loader-multiple/tests/core}/meta.js +1 -1
  47. package/tests/e2e/samples/single/package-lock.json +3 -1
  48. package/tests/e2e/samples/{wd_mixed → wd-mixed}/package-lock.json +3 -1
  49. package/tests/e2e/samples/{wd_single → wd-single}/package-lock.json +3 -1
  50. package/tests/e2e/{t_folder.js → t-folder.js} +2 -2
  51. package/tests/e2e/{t_loader_mixed.js → t-loader-mixed.js} +5 -5
  52. package/tests/e2e/{t_loader_multiple_patterns.js → t-loader-multiple-patterns.js} +6 -6
  53. package/tests/e2e/{t_loader_multiple.js → t-loader-multiple.js} +5 -5
  54. package/tests/e2e/{t_loader.js → t-loader.js} +2 -2
  55. package/tests/e2e/{t_single.js → t-single.js} +2 -2
  56. package/tests/e2e/{t_wd_firefox_chrome_pattern.js → t-wd-firefox-chrome-pattern.js} +6 -6
  57. package/tests/e2e/{t_wd_firefox_chrome.js → t-wd-firefox-chrome.js} +5 -5
  58. package/tests/e2e/{t_wd_firefox.js → t-wd-firefox.js} +3 -3
  59. package/tests/e2e/{t_wd_mixed_firefox_chrome.js → t-wd-mixed-firefox-chrome.js} +7 -7
  60. package/tests/e2e/{t_wd_mixed_firefox.js → t-wd-mixed-firefox.js} +5 -5
  61. package/tests/meta.js +1 -1
  62. package/tests/series/build/{t_webdriver_services.js → t-webdriver-services.js} +1 -0
  63. package/tests/series/logging/{t_failures.js → t-failures.js} +1 -1
  64. package/tests/series/logging/{t_success.js → t-success.js} +1 -1
  65. package/tests/series/logging/{t_verify.js → t-verify.js} +1 -1
  66. package/tests/series/servicer/mock-servicer.js +68 -0
  67. package/tests/series/servicer/t-nested-servicer-lifecycle.js +99 -0
  68. package/tests/series/servicer/t-servicer-no-services.js +53 -0
  69. package/tests/series/servicer/t-servicer-type-switching.js +139 -0
  70. package/tests/series/servicer/{t_servicer.js → t-servicer.js} +5 -38
  71. package/tests/series/test.js +1 -1
  72. package/tests/test.js +2 -0
  73. package/tests/webdriver/test.js +3 -3
  74. package/webdriver/{control_driver.js → control-driver.js} +1 -1
  75. package/webdriver/{driver_base.js → driver-base.js} +8 -1
  76. package/webdriver/driver.js +1 -1
  77. package/webdriver/session.js +57 -30
  78. /package/tests/base/{t_api.js → t-api.js} +0 -0
  79. /package/tests/base/{t_contains.js → t-contains.js} +0 -0
  80. /package/tests/base/{t_format.js → t-format.js} +0 -0
  81. /package/tests/base/{t_is_object.js → t-is-object.js} +0 -0
  82. /package/tests/base/{t_is_primitive.js → t-is-primitive.js} +0 -0
  83. /package/tests/base/{t_is_string.js → t-is-string.js} +0 -0
  84. /package/tests/base/{t_is.js → t-is.js} +0 -0
  85. /package/tests/base/{t_ok.js → t-ok.js} +0 -0
  86. /package/tests/base/{t_stringify.js → t-stringify.js} +0 -0
  87. /package/tests/base/{t_system.js → t-system.js} +0 -0
  88. /package/tests/base/{t_test_.js → t-test-.js} +0 -0
  89. /package/tests/base/{t_throws.js → t-throws.js} +0 -0
  90. /package/tests/e2e/samples/folder/tests/unit/{t_test.js → t-test.js} +0 -0
  91. /package/tests/e2e/samples/{loader_multiple/tests/module_mock.js → loader/tests/module-mock.js} +0 -0
  92. /package/tests/e2e/samples/loader/tests/{t_test.js → t-test.js} +0 -0
  93. /package/tests/e2e/samples/{loader_mixed → loader-mixed}/.watestrc.js +0 -0
  94. /package/tests/e2e/samples/{loader_mixed → loader-mixed}/package.json +0 -0
  95. /package/tests/e2e/samples/{loader_mixed → loader-mixed}/tests/meta.js +0 -0
  96. /package/tests/e2e/samples/{loader/tests/module_mock.js → loader-mixed/tests/module-mock.js} +0 -0
  97. /package/tests/e2e/samples/{loader_mixed → loader-mixed}/tests/module.js +0 -0
  98. /package/tests/e2e/samples/{loader_mixed/tests/ui/t_test.js → loader-mixed/tests/ui/t-test.js} +0 -0
  99. /package/tests/e2e/samples/{loader_mixed/tests/unit/t_test.js → loader-mixed/tests/unit/t-test.js} +0 -0
  100. /package/tests/e2e/samples/{loader_multiple → loader-multiple}/.watestrc.js +0 -0
  101. /package/tests/e2e/samples/{loader_multiple → loader-multiple}/package.json +0 -0
  102. /package/tests/e2e/samples/{loader_multiple/tests/base/t_btest.js → loader-multiple/tests/base/t-btest.js} +0 -0
  103. /package/tests/e2e/samples/{loader_multiple/tests/core/t_ctest.js → loader-multiple/tests/core/t-ctest.js} +0 -0
  104. /package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/meta.js +0 -0
  105. /package/tests/e2e/samples/{loader_mixed/tests/module_mock.js → loader-multiple/tests/module-mock.js} +0 -0
  106. /package/tests/e2e/samples/{loader_multiple → loader-multiple}/tests/module.js +0 -0
  107. /package/tests/e2e/samples/single/tests/{t_test.js → t-test.js} +0 -0
  108. /package/tests/e2e/samples/{wd_mixed → wd-mixed}/.watestrc.js +0 -0
  109. /package/tests/e2e/samples/{wd_mixed → wd-mixed}/package.json +0 -0
  110. /package/tests/e2e/samples/{wd_mixed → wd-mixed}/tests/meta.js +0 -0
  111. /package/tests/e2e/samples/{wd_mixed → wd-mixed}/tests/ui/meta.js +0 -0
  112. /package/tests/e2e/samples/{wd_mixed/tests/ui/t_test.js → wd-mixed/tests/ui/t-test.js} +0 -0
  113. /package/tests/e2e/samples/{wd_mixed/tests/unit/t_test.js → wd-mixed/tests/unit/t-test.js} +0 -0
  114. /package/tests/e2e/samples/{wd_single → wd-single}/.watestrc.js +0 -0
  115. /package/tests/e2e/samples/{wd_single → wd-single}/package.json +0 -0
  116. /package/tests/e2e/samples/{wd_single → wd-single}/tests/meta.js +0 -0
  117. /package/tests/e2e/samples/{wd_single/tests/t_test.js → wd-single/tests/t-test.js} +0 -0
  118. /package/tests/series/build/{t_adjust_names_webdriver.js → t-adjust-names-webdriver.js} +0 -0
  119. /package/tests/series/build/{t_adjust_names.js → t-adjust-names.js} +0 -0
  120. /package/tests/series/build/{t_expected_failures.js → t-expected-failures.js} +0 -0
  121. /package/tests/series/build/{t_loader_mixed.js → t-loader-mixed.js} +0 -0
  122. /package/tests/series/build/{t_loader.js → t-loader.js} +0 -0
  123. /package/tests/series/build/{t_mixed.js → t-mixed.js} +0 -0
  124. /package/tests/series/build/{t_nested.js → t-nested.js} +0 -0
  125. /package/tests/series/build/{t_pattern_filtering.js → t-pattern-filtering.js} +0 -0
  126. /package/tests/series/build/{t_patterns_loader.js → t-patterns-loader.js} +0 -0
  127. /package/tests/series/build/{t_patterns_webdriver.js → t-patterns-webdriver.js} +0 -0
  128. /package/tests/series/build/{t_webdriver_firefox_mixed.js → t-webdriver-firefox-mixed.js} +0 -0
  129. /package/tests/series/build/{t_webdriver_nested.js → t-webdriver-nested.js} +0 -0
  130. /package/tests/series/build/{t_webdriver.js → t-webdriver.js} +0 -0
  131. /package/tests/series/generic/{t_failures_info.js → t-failures-info.js} +0 -0
  132. /package/tests/series/{mock_series.js → mock-series.js} +0 -0
  133. /package/tests/series/perform/{t_failure_notest.js → t-failure-notest.js} +0 -0
  134. /package/tests/series/perform/{t_failure.js → t-failure.js} +0 -0
  135. /package/tests/series/perform/{t_intermittent_global.js → t-intermittent-global.js} +0 -0
  136. /package/tests/series/perform/{t_intermittent.js → t-intermittent.js} +0 -0
  137. /package/tests/series/perform/{t_missing_perma.js → t-missing-perma.js} +0 -0
  138. /package/tests/series/perform/{t_nested.js → t-nested.js} +0 -0
  139. /package/tests/series/perform/{t_perma.js → t-perma.js} +0 -0
  140. /package/tests/series/perform/{t_success.js → t-success.js} +0 -0
  141. /package/tests/series/run/{t_debunk_failure.js → t-debunk-failure.js} +0 -0
  142. /package/tests/series/run/{t_debunk_success.js → t-debunk-success.js} +0 -0
  143. /package/tests/series/run/{t_nested.js → t-nested.js} +0 -0
  144. /package/tests/series/run/{t_verify_webdriver.js → t-verify-webdriver.js} +0 -0
  145. /package/tests/series/run/{t_verify.js → t-verify.js} +0 -0
  146. /package/tests/webdriver/{t_app_driver_selectors.js → t-app-driver-selectors.js} +0 -0
  147. /package/tests/webdriver/{t_app_driver.js → t-app-driver.js} +0 -0
  148. /package/tests/webdriver/{t_attribute_all.js → t-attribute-all.js} +0 -0
  149. /package/tests/webdriver/{t_attribute.js → t-attribute.js} +0 -0
  150. /package/tests/webdriver/{t_doubleclick.js → t-doubleclick.js} +0 -0
  151. /package/tests/webdriver/{t_doubleclickat.js → t-doubleclickat.js} +0 -0
  152. /package/tests/webdriver/{t_execute.js → t-execute.js} +0 -0
  153. /package/tests/webdriver/{t_if_has_elements.js → t-if-has-elements.js} +0 -0
  154. /package/tests/webdriver/{t_if_no_elements.js → t-if-no-elements.js} +0 -0
  155. /package/tests/webdriver/{t_no_elements_or_not_visible.js → t-no-elements-or-not-visible.js} +0 -0
  156. /package/tests/webdriver/{t_properties.js → t-properties.js} +0 -0
  157. /package/tests/webdriver/{t_script.js → t-script.js} +0 -0
  158. /package/tests/webdriver/{t_select_all.js → t-select-all.js} +0 -0
  159. /package/tests/webdriver/{t_selection.js → t-selection.js} +0 -0
  160. /package/tests/webdriver/{t_text_all.js → t-text-all.js} +0 -0
  161. /package/tests/webdriver/{t_text.js → t-text.js} +0 -0
  162. /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('loader_multiple');
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/t_btest.js, path: tests/base/t_btest.js',
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/t_btest.js completed in',
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/t_ctest.js, path: tests/core/t_ctest.js',
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/t_ctest.js completed in',
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/t_test.js, path: tests/t_test.js',
10
+ '!Running: sample/t-test.js, path: tests/t-test.js',
11
11
  '\x1B[32mOk:\x1B[0m Mocked!, got: mocked',
12
- '>sample/t_test.js completed in',
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/t_test.js, path: tests/t_test.js',
9
+ '!Running: sample/t-test.js, path: tests/t-test.js',
10
10
  '\x1B[32mOk:\x1B[0m works!',
11
- '>sample/t_test.js completed in',
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('wd_single', {
4
+ let output = await run_e2e_tests('wd-single', {
5
5
  webdrivers: ['firefox', 'chrome'],
6
- patterns: ['tests/t_test.js'],
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/t_test.js, path: tests/t_test.js',
13
+ '!Running: sample/firefox/t-test.js, path: tests/t-test.js',
14
14
  '\x1B[32mOk:\x1B[0m Webdriver Works!',
15
- '>sample/firefox/t_test.js completed in',
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/t_test.js, path: tests/t_test.js',
20
+ '!Running: sample/chrome/t-test.js, path: tests/t-test.js',
21
21
  '\x1B[32mOk:\x1B[0m Webdriver Works!',
22
- '>sample/chrome/t_test.js completed in',
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('wd_single', {
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/t_test.js, path: tests/t_test.js',
12
+ '!Running: sample/firefox/t-test.js, path: tests/t-test.js',
13
13
  '\x1B[32mOk:\x1B[0m Webdriver Works!',
14
- '>sample/firefox/t_test.js completed in',
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/t_test.js, path: tests/t_test.js',
19
+ '!Running: sample/chrome/t-test.js, path: tests/t-test.js',
20
20
  '\x1B[32mOk:\x1B[0m Webdriver Works!',
21
- '>sample/chrome/t_test.js completed in',
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('wd_single', {
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/t_test.js, path: tests/t_test.js',
12
+ '!Running: sample/firefox/t-test.js, path: tests/t-test.js',
13
13
  '\x1B[32mOk:\x1B[0m Webdriver Works!',
14
- '>sample/firefox/t_test.js completed in',
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('wd_mixed', {
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/t_test.js, path: tests/unit/t_test.js',
12
+ '!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
13
13
  '\x1B[32mOk:\x1B[0m Unit works!',
14
- '>sample/unit/t_test.js completed in',
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/t_test.js, path: tests/ui/t_test.js',
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/t_test.js completed in',
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/t_test.js, path: tests/ui/t_test.js',
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/t_test.js completed in',
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('wd_mixed', {
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/t_test.js, path: tests/unit/t_test.js',
12
+ '!Running: sample/unit/t-test.js, path: tests/unit/t-test.js',
13
13
  '\x1B[32mOk:\x1B[0m Unit works!',
14
- '>sample/unit/t_test.js completed in',
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/t_test.js, path: tests/ui/t_test.js',
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/t_test.js completed in',
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'];
@@ -8,6 +8,7 @@ export async function test() {
8
8
  'e2e': {
9
9
  meta: {
10
10
  webdriver: true,
11
+ servicer: 'docker',
11
12
  services: ['db'],
12
13
  },
13
14
  files: ['t_testo.js', 't_presto.js'],
@@ -14,7 +14,7 @@ import {
14
14
  running_checker,
15
15
  } from '../test.js';
16
16
 
17
- import settings from '../../../core/settings.js';
17
+ import { settings } from '../../../core/settings.js';
18
18
 
19
19
  export async function test() {
20
20
  const ts = {
@@ -11,7 +11,7 @@ import {
11
11
  running_checker,
12
12
  } from '../test.js';
13
13
 
14
- import settings from '../../../core/settings.js';
14
+ import { settings } from '../../../core/settings.js';
15
15
 
16
16
  export async function test() {
17
17
  const ts = {
@@ -6,7 +6,7 @@ import {
6
6
  stderr_format_failure,
7
7
  success,
8
8
  } from '../test.js';
9
- import settings from '../../../core/settings.js';
9
+ import { settings } from '../../../core/settings.js';
10
10
 
11
11
  const completed_in = name => got => got.startsWith(`>${name} completed in`);
12
12
 
@@ -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
+ }