@wdio/browserstack-service 9.29.0 → 9.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cleanup.js +2 -1
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts.map +1 -1
- package/build/cli/index.d.ts.map +1 -1
- package/build/cli/modules/customTagsModule.d.ts +31 -0
- package/build/cli/modules/customTagsModule.d.ts.map +1 -0
- package/build/custom-tags-handler.d.ts +29 -0
- package/build/custom-tags-handler.d.ts.map +1 -0
- package/build/customTags.d.ts +59 -0
- package/build/customTags.d.ts.map +1 -0
- package/build/index.js +426 -7
- package/build/insights-handler.d.ts +21 -0
- package/build/insights-handler.d.ts.map +1 -1
- package/build/service.d.ts +16 -1
- package/build/service.d.ts.map +1 -1
- package/build/types.d.ts +6 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +7 -7
package/build/cleanup.js
CHANGED
|
@@ -70,7 +70,7 @@ import logger from "@wdio/logger";
|
|
|
70
70
|
// package.json
|
|
71
71
|
var package_default = {
|
|
72
72
|
name: "@wdio/browserstack-service",
|
|
73
|
-
version: "9.
|
|
73
|
+
version: "9.29.0",
|
|
74
74
|
description: "WebdriverIO service for better Browserstack integration",
|
|
75
75
|
author: "Adam Bjerstedt <abjerstedt@gmail.com>",
|
|
76
76
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
|
|
@@ -591,6 +591,7 @@ var TestFrameworkConstants = {
|
|
|
591
591
|
KEY_TEST_FAILURE_REASON: "test_failure_reason",
|
|
592
592
|
KEY_TEST_LOGS: "test_logs",
|
|
593
593
|
KEY_TEST_META: "test_meta",
|
|
594
|
+
KEY_CUSTOM_TAGS: "custom_metadata",
|
|
594
595
|
KEY_TEST_DEFERRED: "test_deferred",
|
|
595
596
|
KEY_SESSION_NAME: "test_session_name",
|
|
596
597
|
KEY_AUTOMATE_SESSION_NAME: "automate_session_name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testFrameworkConstants.d.ts","sourceRoot":"","sources":["../../../../src/cli/frameworks/constants/testFrameworkConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"testFrameworkConstants.d.ts","sourceRoot":"","sources":["../../../../src/cli/frameworks/constants/testFrameworkConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ClC,CAAA"}
|
package/build/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,sBAAsB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,uBAAuB,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,sBAAsB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,uBAAuB,MAAM,yCAAyC,CAAA;AAM7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAkB,MAAM,aAAa,CAAA;AAK1F;;;;;GAKG;AACH,qBAAa,eAAe;;IAExB,MAAM,CAAC,OAAO,UAAQ;IACtB,WAAW,EAAC,OAAO,CAAA;IACnB,MAAM,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAC,MAAM,CAAA;IACd,kBAAkB,EAAE,OAAO,CAAC,UAAU,GAAC,EAAE,CAAA;IACzC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAO;IACnC,eAAe,UAAQ;IACvB,gBAAgB,UAAQ;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IACxC,aAAa,EAAE,sBAAsB,GAAC,IAAI,CAAO;IACjD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAO;IAC/C,mBAAmB,EAAE,uBAAuB,GAAC,IAAI,CAAO;IACxD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAO;IACtC,MAAM,sBAAe;IACrB,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,CAAA;;IAWtD;;;OAGG;IACH,MAAM,CAAC,WAAW;IAOlB;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,SAAG;IA2B7G;;;OAGG;IACG,SAAS;IAYf;;;OAGG;IACH,WAAW,CAAC,gBAAgB,EAAE,uBAAuB;IA4DrD;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACG,gBAAgB;IAUtB;;;;OAIG;IACG,KAAK;IA6DX;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;;OAGG;IACG,IAAI;IAiDV;;;;OAIG;IACG,kBAAkB;IASxB;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM5C;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM;IAkBrC;;;OAGG;IACH,SAAS;IAWT;;;OAGG;IACH,qBAAqB;IAIrB;;;;OAIG;IACH,qBAAqB,CAAC,kBAAkB,EAAC,OAAO,CAAC,UAAU;IAI3D;;;OAGG;IACG,aAAa;IAOnB;;;OAGG;IACH,YAAY;IAIZ;;;OAGG;IACH,SAAS;IAIT;;;;MAIE;IACF,SAAS,CAAC,QAAQ,EAAE,uBAAuB;IAW3C;;;OAGG;IACH,kBAAkB;IAOlB;;;OAGG;IACH,wBAAwB;IAOxB;;;OAGG;IACH,gBAAgB;IAIhB;;;OAGG;IACH,sBAAsB;CAGzB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
/**
|
|
4
|
+
* CustomTagsModule — CLI/gRPC path registration for `browser.setCustomTags`.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors AccessibilityModule: registers the browser method in onBeforeExecute()
|
|
7
|
+
* (observer-bound to AutomationFrameworkState.CREATE / HookState.POST), instantiated
|
|
8
|
+
* from BrowserstackCLI.loadModules() whenever the binary is up.
|
|
9
|
+
*
|
|
10
|
+
* The per-test custom_metadata is merged directly into the tracked
|
|
11
|
+
* TestFrameworkInstance map under KEY_CUSTOM_TAGS ('custom_metadata'). That whole
|
|
12
|
+
* map is serialized verbatim into event_json (testHubModule.sendTestFrameworkEvent),
|
|
13
|
+
* so the binary reads it as event.custom_metadata. The instance is created fresh
|
|
14
|
+
* per test, so per-instance merge gives test-scoped union/dedupe; the binary is a
|
|
15
|
+
* strict pass-through and does NOT consolidate across events.
|
|
16
|
+
*/
|
|
17
|
+
export default class CustomTagsModule extends BaseModule {
|
|
18
|
+
logger: typeof BStackLogger;
|
|
19
|
+
name: string;
|
|
20
|
+
static MODULE_NAME: string;
|
|
21
|
+
constructor();
|
|
22
|
+
getModuleName(): string;
|
|
23
|
+
onBeforeExecute(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* If the test framework is currently inside a hook, merge custom_metadata onto
|
|
26
|
+
* the last-started hook record so the binary receives hook.custom_metadata.
|
|
27
|
+
* Best-effort: silently no-ops when no active hook is resolvable.
|
|
28
|
+
*/
|
|
29
|
+
private applyToActiveHook;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=customTagsModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customTagsModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/customTagsModule.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAa9C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU;IAEpD,MAAM,sBAAe;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,WAAW,SAAqB;;IAQvC,aAAa;IAIP,eAAe;IAsDrB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAiB5B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CustomTagAccumulator } from './customTags.js';
|
|
2
|
+
import type { CustomMetadata } from './customTags.js';
|
|
3
|
+
/**
|
|
4
|
+
* Legacy/Listener-path handler for `browser.setCustomTags`.
|
|
5
|
+
*
|
|
6
|
+
* Registered from service.ts in the `!BrowserstackCLI.getInstance().isRunning()`
|
|
7
|
+
* branch (alongside AccessibilityHandler.before() / InsightsHandler.before()).
|
|
8
|
+
* Deliberately NOT folded into InsightsHandler.before() — that method registers
|
|
9
|
+
* no browser methods and is SKIPPED when the CLI is running.
|
|
10
|
+
*
|
|
11
|
+
* Accumulates (key, value) pairs per active test, keyed on
|
|
12
|
+
* InsightsHandler.currentTest.uuid (set in beforeTest / setTestData). The
|
|
13
|
+
* accumulator is static so InsightsHandler.getRunData can drain it into the
|
|
14
|
+
* TestData.custom_metadata field at TestRunFinished (flushed in afterTest).
|
|
15
|
+
*/
|
|
16
|
+
declare class _CustomTagsHandler {
|
|
17
|
+
private _browser;
|
|
18
|
+
private _caps;
|
|
19
|
+
private _framework?;
|
|
20
|
+
static accumulator: CustomTagAccumulator;
|
|
21
|
+
constructor(_browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, _caps: WebdriverIO.Capabilities | Record<string, unknown>, _framework?: string | undefined);
|
|
22
|
+
before(): void;
|
|
23
|
+
/** Drain the accumulated custom_metadata for a test uuid; clears after read. */
|
|
24
|
+
static drain(testUuid: string | undefined): CustomMetadata | undefined;
|
|
25
|
+
}
|
|
26
|
+
declare const CustomTagsHandler: typeof _CustomTagsHandler;
|
|
27
|
+
type CustomTagsHandler = _CustomTagsHandler;
|
|
28
|
+
export default CustomTagsHandler;
|
|
29
|
+
//# sourceMappingURL=custom-tags-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-tags-handler.d.ts","sourceRoot":"","sources":["../src/custom-tags-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD;;;;;;;;;;;;GAYG;AACH,cAAM,kBAAkB;IAMhB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU,CAAC;IALvB,OAAc,WAAW,EAAE,oBAAoB,CAA6B;gBAGhE,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAC9D,KAAK,EAAE,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,UAAU,CAAC,EAAE,MAAM,YAAA;IAG/B,MAAM;IA+CN,gFAAgF;IAChF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS;CAKzE;AAGD,QAAA,MAAM,iBAAiB,EAAE,OAAO,kBAA8D,CAAA;AAC9F,KAAK,iBAAiB,GAAG,kBAAkB,CAAA;AAE3C,eAAe,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for one-to-many custom-tag (Test-Case-ID) tagging.
|
|
3
|
+
*
|
|
4
|
+
* Both runtime paths (CLI/gRPC module + legacy listener handler) funnel through
|
|
5
|
+
* the same tokenizer + merge engine so they produce an identical `custom_metadata`
|
|
6
|
+
* payload shape:
|
|
7
|
+
* { [key]: { field_type: 'multi_dropdown', values: [...] } }
|
|
8
|
+
*
|
|
9
|
+
* The binary is a strict pass-through for per-test/per-hook `custom_metadata` — it
|
|
10
|
+
* does NOT merge or dedupe across events — so the union+dedupe (set semantics)
|
|
11
|
+
* MUST be completed SDK-side before serialization. Value parsing mirrors the
|
|
12
|
+
* node-agent quote-aware tokenizer (helper.js `parseCommaSeparatedValues`).
|
|
13
|
+
*/
|
|
14
|
+
export interface CustomMetadataEntry {
|
|
15
|
+
field_type: 'multi_dropdown';
|
|
16
|
+
values: string[];
|
|
17
|
+
}
|
|
18
|
+
export type CustomMetadata = Record<string, CustomMetadataEntry>;
|
|
19
|
+
/**
|
|
20
|
+
* Quote-aware comma split. Mirrors node-agent `helper.js` tokenizer
|
|
21
|
+
* `/\s*"([^"]*)"\s*|[^,]+/g` — a quoted body is preserved verbatim (so an
|
|
22
|
+
* embedded comma is kept), otherwise the raw token is trimmed; empties dropped.
|
|
23
|
+
* '"checkout,cart", header' -> ['checkout,cart', 'header']
|
|
24
|
+
* 'TC-1, TC-2' -> ['TC-1', 'TC-2']
|
|
25
|
+
* Backward compatible: unquoted input tokenizes identically to a naive
|
|
26
|
+
* split(',').map(trim).filter(Boolean).
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseCommaSeparatedValues(value: string | string[] | undefined | null): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Union + dedupe, existing-first ordering. Mirrors node-agent
|
|
31
|
+
* `CustomTagManager.mergeValues` — repeated calls accumulate, they do not override.
|
|
32
|
+
*/
|
|
33
|
+
export declare function mergeValues(existingValues: string[] | undefined | null, incomingValues: string[] | undefined | null): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Create-or-merge a single tag key inside a `custom_metadata` container.
|
|
36
|
+
* Always produces `{ field_type: 'multi_dropdown', values: [...] }`; merges values
|
|
37
|
+
* via mergeValues. The container is mutated in place and returned for chaining.
|
|
38
|
+
* Mirrors node-agent `CustomTagManager.mergeIntoTags`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function mergeIntoTags(tagsContainer: CustomMetadata, key: string, incomingValues: string[]): CustomMetadata;
|
|
41
|
+
/**
|
|
42
|
+
* Per-test-uuid accumulator. Both paths key on `InsightsHandler.currentTest.uuid`
|
|
43
|
+
* so repeated `setCustomTags` calls within a single test union into one entry, and
|
|
44
|
+
* the flush sink reads the final consolidated map for that test.
|
|
45
|
+
*/
|
|
46
|
+
export declare class CustomTagAccumulator {
|
|
47
|
+
private store;
|
|
48
|
+
/**
|
|
49
|
+
* Add (key, value) for a test uuid. value is quote-aware comma-split; the
|
|
50
|
+
* resulting values union+dedupe into the test's custom_metadata for that key.
|
|
51
|
+
* Returns false (no-op) when uuid/key/value resolve to nothing.
|
|
52
|
+
*/
|
|
53
|
+
add(testUuid: string | undefined, key: string, value: string): boolean;
|
|
54
|
+
/** Final consolidated custom_metadata for a test uuid, or undefined if none. */
|
|
55
|
+
get(testUuid: string | undefined): CustomMetadata | undefined;
|
|
56
|
+
/** Drop the accumulated entry once flushed (avoid unbounded growth). */
|
|
57
|
+
clear(testUuid: string | undefined): void;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=customTags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customTags.d.ts","sourceRoot":"","sources":["../src/customTags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAyB/F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAE9H;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,cAAc,CAkBlH;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,KAAK,CAAyC;IAEtD;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IActE,gFAAgF;IAChF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS;IAO7D,wEAAwE;IACxE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAK5C"}
|
package/build/index.js
CHANGED
|
@@ -28,7 +28,7 @@ var init_package = __esm({
|
|
|
28
28
|
"package.json"() {
|
|
29
29
|
package_default = {
|
|
30
30
|
name: "@wdio/browserstack-service",
|
|
31
|
-
version: "9.
|
|
31
|
+
version: "9.29.0",
|
|
32
32
|
description: "WebdriverIO service for better Browserstack integration",
|
|
33
33
|
author: "Adam Bjerstedt <abjerstedt@gmail.com>",
|
|
34
34
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
|
|
@@ -702,6 +702,7 @@ var init_testFrameworkConstants = __esm({
|
|
|
702
702
|
KEY_TEST_FAILURE_REASON: "test_failure_reason",
|
|
703
703
|
KEY_TEST_LOGS: "test_logs",
|
|
704
704
|
KEY_TEST_META: "test_meta",
|
|
705
|
+
KEY_CUSTOM_TAGS: "custom_metadata",
|
|
705
706
|
KEY_TEST_DEFERRED: "test_deferred",
|
|
706
707
|
KEY_SESSION_NAME: "test_session_name",
|
|
707
708
|
KEY_AUTOMATE_SESSION_NAME: "automate_session_name",
|
|
@@ -7554,6 +7555,186 @@ var init_accessibilityModule = __esm({
|
|
|
7554
7555
|
}
|
|
7555
7556
|
});
|
|
7556
7557
|
|
|
7558
|
+
// src/customTags.ts
|
|
7559
|
+
function parseCommaSeparatedValues(value) {
|
|
7560
|
+
if (!value) {
|
|
7561
|
+
return [];
|
|
7562
|
+
}
|
|
7563
|
+
if (Array.isArray(value)) {
|
|
7564
|
+
return value;
|
|
7565
|
+
}
|
|
7566
|
+
const str = value.toString();
|
|
7567
|
+
if (str.trim() === "") {
|
|
7568
|
+
return [];
|
|
7569
|
+
}
|
|
7570
|
+
const tokenizer = /\s*"([^"]*)"\s*|[^,]+/g;
|
|
7571
|
+
const out = [];
|
|
7572
|
+
let match;
|
|
7573
|
+
while ((match = tokenizer.exec(str)) !== null) {
|
|
7574
|
+
const token = match[1] !== void 0 ? match[1] : match[0].trim();
|
|
7575
|
+
if (token !== "") {
|
|
7576
|
+
out.push(token);
|
|
7577
|
+
}
|
|
7578
|
+
}
|
|
7579
|
+
return out;
|
|
7580
|
+
}
|
|
7581
|
+
function mergeValues(existingValues, incomingValues) {
|
|
7582
|
+
return Array.from(/* @__PURE__ */ new Set([...existingValues || [], ...incomingValues || []]));
|
|
7583
|
+
}
|
|
7584
|
+
function mergeIntoTags(tagsContainer, key, incomingValues) {
|
|
7585
|
+
if (!tagsContainer[key]) {
|
|
7586
|
+
tagsContainer[key] = {
|
|
7587
|
+
field_type: "multi_dropdown",
|
|
7588
|
+
values: [...incomingValues || []]
|
|
7589
|
+
};
|
|
7590
|
+
} else {
|
|
7591
|
+
if (!tagsContainer[key].field_type) {
|
|
7592
|
+
tagsContainer[key].field_type = "multi_dropdown";
|
|
7593
|
+
}
|
|
7594
|
+
if (!Array.isArray(tagsContainer[key].values)) {
|
|
7595
|
+
tagsContainer[key].values = [];
|
|
7596
|
+
}
|
|
7597
|
+
tagsContainer[key].values = mergeValues(tagsContainer[key].values, incomingValues);
|
|
7598
|
+
}
|
|
7599
|
+
return tagsContainer;
|
|
7600
|
+
}
|
|
7601
|
+
var CustomTagAccumulator;
|
|
7602
|
+
var init_customTags = __esm({
|
|
7603
|
+
"src/customTags.ts"() {
|
|
7604
|
+
"use strict";
|
|
7605
|
+
CustomTagAccumulator = class {
|
|
7606
|
+
store = /* @__PURE__ */ new Map();
|
|
7607
|
+
/**
|
|
7608
|
+
* Add (key, value) for a test uuid. value is quote-aware comma-split; the
|
|
7609
|
+
* resulting values union+dedupe into the test's custom_metadata for that key.
|
|
7610
|
+
* Returns false (no-op) when uuid/key/value resolve to nothing.
|
|
7611
|
+
*/
|
|
7612
|
+
add(testUuid, key, value) {
|
|
7613
|
+
if (!testUuid || !key) {
|
|
7614
|
+
return false;
|
|
7615
|
+
}
|
|
7616
|
+
const values = parseCommaSeparatedValues(value);
|
|
7617
|
+
if (values.length === 0) {
|
|
7618
|
+
return false;
|
|
7619
|
+
}
|
|
7620
|
+
const container = this.store.get(testUuid) || {};
|
|
7621
|
+
mergeIntoTags(container, key, values);
|
|
7622
|
+
this.store.set(testUuid, container);
|
|
7623
|
+
return true;
|
|
7624
|
+
}
|
|
7625
|
+
/** Final consolidated custom_metadata for a test uuid, or undefined if none. */
|
|
7626
|
+
get(testUuid) {
|
|
7627
|
+
if (!testUuid) {
|
|
7628
|
+
return void 0;
|
|
7629
|
+
}
|
|
7630
|
+
return this.store.get(testUuid);
|
|
7631
|
+
}
|
|
7632
|
+
/** Drop the accumulated entry once flushed (avoid unbounded growth). */
|
|
7633
|
+
clear(testUuid) {
|
|
7634
|
+
if (testUuid) {
|
|
7635
|
+
this.store.delete(testUuid);
|
|
7636
|
+
}
|
|
7637
|
+
}
|
|
7638
|
+
};
|
|
7639
|
+
}
|
|
7640
|
+
});
|
|
7641
|
+
|
|
7642
|
+
// src/cli/modules/customTagsModule.ts
|
|
7643
|
+
var CustomTagsModule;
|
|
7644
|
+
var init_customTagsModule = __esm({
|
|
7645
|
+
"src/cli/modules/customTagsModule.ts"() {
|
|
7646
|
+
"use strict";
|
|
7647
|
+
init_baseModule();
|
|
7648
|
+
init_cliLogger();
|
|
7649
|
+
init_testFramework();
|
|
7650
|
+
init_automationFramework();
|
|
7651
|
+
init_automationFrameworkState();
|
|
7652
|
+
init_hookState();
|
|
7653
|
+
init_testFrameworkConstants();
|
|
7654
|
+
init_cliUtils();
|
|
7655
|
+
init_wdioMochaTestFramework();
|
|
7656
|
+
init_customTags();
|
|
7657
|
+
CustomTagsModule = class _CustomTagsModule extends BaseModule {
|
|
7658
|
+
logger = BStackLogger2;
|
|
7659
|
+
name;
|
|
7660
|
+
static MODULE_NAME = "CustomTagsModule";
|
|
7661
|
+
constructor() {
|
|
7662
|
+
super();
|
|
7663
|
+
this.name = "CustomTagsModule";
|
|
7664
|
+
AutomationFramework.registerObserver(AutomationFrameworkState.CREATE, HookState.POST, this.onBeforeExecute.bind(this));
|
|
7665
|
+
}
|
|
7666
|
+
getModuleName() {
|
|
7667
|
+
return _CustomTagsModule.MODULE_NAME;
|
|
7668
|
+
}
|
|
7669
|
+
async onBeforeExecute() {
|
|
7670
|
+
try {
|
|
7671
|
+
const autoInstance = AutomationFramework.getTrackedInstance();
|
|
7672
|
+
if (!autoInstance) {
|
|
7673
|
+
this.logger.debug("CustomTagsModule: No tracked automation instance found!");
|
|
7674
|
+
return;
|
|
7675
|
+
}
|
|
7676
|
+
const browser = AutomationFramework.getDriver(autoInstance);
|
|
7677
|
+
if (!browser) {
|
|
7678
|
+
this.logger.debug("CustomTagsModule: No browser instance found for setCustomTags registration");
|
|
7679
|
+
return;
|
|
7680
|
+
}
|
|
7681
|
+
browser.setCustomTags = async (key, value) => {
|
|
7682
|
+
try {
|
|
7683
|
+
if (!key || !value) {
|
|
7684
|
+
this.logger.warn("setCustomTags: key and value are required; ignoring call");
|
|
7685
|
+
return;
|
|
7686
|
+
}
|
|
7687
|
+
const testInstance = TestFramework.getTrackedInstance();
|
|
7688
|
+
if (!testInstance) {
|
|
7689
|
+
this.logger.warn("setCustomTags called outside of a resolvable test context; ignoring");
|
|
7690
|
+
return;
|
|
7691
|
+
}
|
|
7692
|
+
const values = parseCommaSeparatedValues(value);
|
|
7693
|
+
if (values.length === 0) {
|
|
7694
|
+
this.logger.warn(`setCustomTags: no usable values parsed from "${value}"; ignoring call`);
|
|
7695
|
+
return;
|
|
7696
|
+
}
|
|
7697
|
+
const existing = TestFramework.getState(testInstance, TestFrameworkConstants.KEY_CUSTOM_TAGS) || {};
|
|
7698
|
+
mergeIntoTags(existing, key, values);
|
|
7699
|
+
testInstance.updateMultipleEntries({
|
|
7700
|
+
[TestFrameworkConstants.KEY_CUSTOM_TAGS]: existing
|
|
7701
|
+
});
|
|
7702
|
+
this.applyToActiveHook(testInstance, key, values);
|
|
7703
|
+
this.logger.debug(`setCustomTags: merged key=${key} values=${JSON.stringify(values)}`);
|
|
7704
|
+
} catch (error) {
|
|
7705
|
+
this.logger.warn(`setCustomTags: error while recording custom tags: ${error}`);
|
|
7706
|
+
}
|
|
7707
|
+
};
|
|
7708
|
+
} catch (error) {
|
|
7709
|
+
this.logger.error(`Error in CustomTagsModule.onBeforeExecute: ${error}`);
|
|
7710
|
+
}
|
|
7711
|
+
}
|
|
7712
|
+
/**
|
|
7713
|
+
* If the test framework is currently inside a hook, merge custom_metadata onto
|
|
7714
|
+
* the last-started hook record so the binary receives hook.custom_metadata.
|
|
7715
|
+
* Best-effort: silently no-ops when no active hook is resolvable.
|
|
7716
|
+
*/
|
|
7717
|
+
applyToActiveHook(testInstance, key, values) {
|
|
7718
|
+
try {
|
|
7719
|
+
const currentState = testInstance.getCurrentTestState().toString();
|
|
7720
|
+
if (!CLIUtils.matchHookRegex(currentState)) {
|
|
7721
|
+
return;
|
|
7722
|
+
}
|
|
7723
|
+
const hook = WdioMochaTestFramework.lastActiveHook(testInstance, WdioMochaTestFramework.KEY_HOOK_LAST_STARTED);
|
|
7724
|
+
if (!hook) {
|
|
7725
|
+
return;
|
|
7726
|
+
}
|
|
7727
|
+
const hookTags = hook[TestFrameworkConstants.KEY_CUSTOM_TAGS] || {};
|
|
7728
|
+
mergeIntoTags(hookTags, key, values);
|
|
7729
|
+
hook[TestFrameworkConstants.KEY_CUSTOM_TAGS] = hookTags;
|
|
7730
|
+
} catch (error) {
|
|
7731
|
+
this.logger.debug(`setCustomTags: could not apply to active hook: ${error}`);
|
|
7732
|
+
}
|
|
7733
|
+
}
|
|
7734
|
+
};
|
|
7735
|
+
}
|
|
7736
|
+
});
|
|
7737
|
+
|
|
7557
7738
|
// src/cli/modules/observabilityModule.ts
|
|
7558
7739
|
var ObservabilityModule;
|
|
7559
7740
|
var init_observabilityModule = __esm({
|
|
@@ -8304,6 +8485,82 @@ var init_reporter = __esm({
|
|
|
8304
8485
|
}
|
|
8305
8486
|
});
|
|
8306
8487
|
|
|
8488
|
+
// src/custom-tags-handler.ts
|
|
8489
|
+
var _CustomTagsHandler, CustomTagsHandler, custom_tags_handler_default;
|
|
8490
|
+
var init_custom_tags_handler = __esm({
|
|
8491
|
+
"src/custom-tags-handler.ts"() {
|
|
8492
|
+
"use strict";
|
|
8493
|
+
init_insights_handler();
|
|
8494
|
+
init_customTags();
|
|
8495
|
+
init_util();
|
|
8496
|
+
init_bstackLogger();
|
|
8497
|
+
_CustomTagsHandler = class __CustomTagsHandler {
|
|
8498
|
+
constructor(_browser, _caps, _framework) {
|
|
8499
|
+
this._browser = _browser;
|
|
8500
|
+
this._caps = _caps;
|
|
8501
|
+
this._framework = _framework;
|
|
8502
|
+
}
|
|
8503
|
+
_browser;
|
|
8504
|
+
_caps;
|
|
8505
|
+
_framework;
|
|
8506
|
+
// Static so the flush sink (InsightsHandler.getRunData) can read it without a
|
|
8507
|
+
// handler reference. Keyed on the per-test uuid.
|
|
8508
|
+
static accumulator = new CustomTagAccumulator();
|
|
8509
|
+
before() {
|
|
8510
|
+
const register = (browser) => {
|
|
8511
|
+
browser.setCustomTags = async (key, value) => {
|
|
8512
|
+
try {
|
|
8513
|
+
if (this._framework !== "mocha") {
|
|
8514
|
+
BStackLogger.warn("setCustomTags is only supported for the mocha framework; ignoring call");
|
|
8515
|
+
return;
|
|
8516
|
+
}
|
|
8517
|
+
if (!key || !value) {
|
|
8518
|
+
BStackLogger.warn("setCustomTags: key and value are required; ignoring call");
|
|
8519
|
+
return;
|
|
8520
|
+
}
|
|
8521
|
+
const testUuid = insights_handler_default.currentTest.uuid;
|
|
8522
|
+
if (!testUuid) {
|
|
8523
|
+
BStackLogger.warn("setCustomTags called outside of a resolvable test context; ignoring");
|
|
8524
|
+
return;
|
|
8525
|
+
}
|
|
8526
|
+
const added = __CustomTagsHandler.accumulator.add(testUuid, key, value);
|
|
8527
|
+
if (!added) {
|
|
8528
|
+
BStackLogger.warn(`setCustomTags: no usable values parsed from "${value}"; ignoring call`);
|
|
8529
|
+
return;
|
|
8530
|
+
}
|
|
8531
|
+
BStackLogger.debug(`setCustomTags: recorded key=${key} value="${value}" for test=${testUuid}`);
|
|
8532
|
+
} catch (error) {
|
|
8533
|
+
BStackLogger.warn(`setCustomTags: error while recording custom tags: ${error}`);
|
|
8534
|
+
}
|
|
8535
|
+
};
|
|
8536
|
+
};
|
|
8537
|
+
register(this._browser);
|
|
8538
|
+
if (this._browser.isMultiremote) {
|
|
8539
|
+
const multiRemoteBrowser = this._browser;
|
|
8540
|
+
Object.keys(this._caps).forEach((browserName) => {
|
|
8541
|
+
try {
|
|
8542
|
+
const instance = multiRemoteBrowser.getInstance(browserName);
|
|
8543
|
+
if (instance) {
|
|
8544
|
+
register(instance);
|
|
8545
|
+
}
|
|
8546
|
+
} catch (error) {
|
|
8547
|
+
BStackLogger.debug(`setCustomTags: could not register on multiremote instance ${browserName}: ${error}`);
|
|
8548
|
+
}
|
|
8549
|
+
});
|
|
8550
|
+
}
|
|
8551
|
+
}
|
|
8552
|
+
/** Drain the accumulated custom_metadata for a test uuid; clears after read. */
|
|
8553
|
+
static drain(testUuid) {
|
|
8554
|
+
const data = __CustomTagsHandler.accumulator.get(testUuid);
|
|
8555
|
+
__CustomTagsHandler.accumulator.clear(testUuid);
|
|
8556
|
+
return data;
|
|
8557
|
+
}
|
|
8558
|
+
};
|
|
8559
|
+
CustomTagsHandler = o11yClassErrorHandler(_CustomTagsHandler);
|
|
8560
|
+
custom_tags_handler_default = CustomTagsHandler;
|
|
8561
|
+
}
|
|
8562
|
+
});
|
|
8563
|
+
|
|
8307
8564
|
// src/insights-handler.ts
|
|
8308
8565
|
import path16 from "node:path";
|
|
8309
8566
|
import { v4 as uuidv44 } from "uuid";
|
|
@@ -8321,6 +8578,7 @@ var init_insights_handler = __esm({
|
|
|
8321
8578
|
init_hookState();
|
|
8322
8579
|
init_performance_tester();
|
|
8323
8580
|
init_constants2();
|
|
8581
|
+
init_custom_tags_handler();
|
|
8324
8582
|
_InsightsHandler = class {
|
|
8325
8583
|
constructor(_browser, _framework, _userCaps, _options) {
|
|
8326
8584
|
this._browser = _browser;
|
|
@@ -8522,7 +8780,13 @@ var init_insights_handler = __esm({
|
|
|
8522
8780
|
const fullTitle = getUniqueIdentifier(test, this._framework);
|
|
8523
8781
|
this._tests[fullTitle] = {
|
|
8524
8782
|
uuid: hookUUID,
|
|
8525
|
-
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
8783
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
8784
|
+
// Tag as a hook and stash identity so a teardown sweep can synthesise a terminal
|
|
8785
|
+
// HookRunFinished if this hook never returns (e.g. a hang with timeouts disabled).
|
|
8786
|
+
kind: "hook",
|
|
8787
|
+
name: test.title || test.description,
|
|
8788
|
+
scopes: this.getHierarchy(test),
|
|
8789
|
+
fileName: test.file || this._suiteFile
|
|
8526
8790
|
};
|
|
8527
8791
|
this.setCurrentHook({ uuid: hookUUID });
|
|
8528
8792
|
this.attachHookData(context, hookUUID);
|
|
@@ -8546,7 +8810,12 @@ var init_insights_handler = __esm({
|
|
|
8546
8810
|
};
|
|
8547
8811
|
}
|
|
8548
8812
|
this.setCurrentHook({ uuid: this._tests[fullTitle].uuid, finished: true });
|
|
8549
|
-
this.
|
|
8813
|
+
const hookData = this.getRunData(test, "HookRunFinished", result);
|
|
8814
|
+
if (hookData.uuid) {
|
|
8815
|
+
this.listener.hookFinished(hookData);
|
|
8816
|
+
} else {
|
|
8817
|
+
BStackLogger.warn(`Skipping HookRunFinished for '${fullTitle}' \u2014 resolved uuid is missing; not emitting an unmatched finish.`);
|
|
8818
|
+
}
|
|
8550
8819
|
const hookType = getHookType(test.title);
|
|
8551
8820
|
if (!result.passed && (hookType === "BEFORE_EACH" || hookType === "BEFORE_ALL" || hookType === "AFTER_EACH")) {
|
|
8552
8821
|
const sendTestSkip = async (skippedTest) => {
|
|
@@ -8622,7 +8891,13 @@ var init_insights_handler = __esm({
|
|
|
8622
8891
|
const fullTitle = getUniqueIdentifier(test, this._framework);
|
|
8623
8892
|
this._tests[fullTitle] = {
|
|
8624
8893
|
uuid,
|
|
8625
|
-
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
8894
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
8895
|
+
// Tag as a test and stash identity so a teardown sweep can synthesise a terminal
|
|
8896
|
+
// TestRunFinished if this test never reaches afterTest (e.g. mocha advanced past a hang).
|
|
8897
|
+
kind: "test",
|
|
8898
|
+
name: test.title || test.description,
|
|
8899
|
+
scopes: this.getHierarchy(test),
|
|
8900
|
+
fileName: test.file || this._suiteFile
|
|
8626
8901
|
};
|
|
8627
8902
|
this.listener.testStarted(this.getRunData(test, "TestRunStarted"));
|
|
8628
8903
|
}
|
|
@@ -8637,6 +8912,10 @@ var init_insights_handler = __esm({
|
|
|
8637
8912
|
};
|
|
8638
8913
|
this.flushCBTDataQueue();
|
|
8639
8914
|
const testData = this.getRunData(test, "TestRunFinished", result);
|
|
8915
|
+
if (!testData.uuid) {
|
|
8916
|
+
BStackLogger.warn(`Skipping TestRunFinished for '${getUniqueIdentifier(test, this._framework)}' \u2014 resolved uuid is missing; not emitting an unmatched finish.`);
|
|
8917
|
+
return;
|
|
8918
|
+
}
|
|
8640
8919
|
this.listener.testFinished(testData);
|
|
8641
8920
|
const testFinishHashCode = generateHashCodeFromFields(
|
|
8642
8921
|
[
|
|
@@ -8652,6 +8931,91 @@ var init_insights_handler = __esm({
|
|
|
8652
8931
|
);
|
|
8653
8932
|
reporter_default.hashCodeToHandleTestSkip[testFinishHashCode] = testData.uuid ?? "";
|
|
8654
8933
|
}
|
|
8934
|
+
/**
|
|
8935
|
+
* Teardown safety net: synthesise a terminal finish for any started-but-unfinished
|
|
8936
|
+
* test/hook so the backend closes the entity instead of leaving it in_progress and
|
|
8937
|
+
* letting the build watchdog inflate the duration.
|
|
8938
|
+
*
|
|
8939
|
+
* Scoped to mocha. Cucumber hooks are keyed differently (getCucumberHookUniqueId) and
|
|
8940
|
+
* their lifecycle differs, so they are intentionally left out here — closing them safely
|
|
8941
|
+
* would need cucumber-specific keying and is a known gap for a follow-up.
|
|
8942
|
+
*
|
|
8943
|
+
* Each entry was tagged with kind at start time so we emit HookRunFinished for hooks and
|
|
8944
|
+
* TestRunFinished for tests without re-deriving the kind from the title. Entries without a
|
|
8945
|
+
* uuid are skipped (same null-uuid guard as afterTest): a finish the backend can't match to a
|
|
8946
|
+
* start is worse than none. The result is marked failed/incomplete via getFailureObject so the
|
|
8947
|
+
* entity lands in a terminal state rather than pending.
|
|
8948
|
+
*/
|
|
8949
|
+
async sweepUnfinished() {
|
|
8950
|
+
if (this._framework !== "mocha") {
|
|
8951
|
+
return;
|
|
8952
|
+
}
|
|
8953
|
+
for (const fullTitle of Object.keys(this._tests)) {
|
|
8954
|
+
const meta = this._tests[fullTitle];
|
|
8955
|
+
if (!meta || meta.finishedAt || meta.kind !== "hook" && meta.kind !== "test") {
|
|
8956
|
+
continue;
|
|
8957
|
+
}
|
|
8958
|
+
if (!meta.startedAt) {
|
|
8959
|
+
continue;
|
|
8960
|
+
}
|
|
8961
|
+
if (!meta.uuid) {
|
|
8962
|
+
BStackLogger.warn("Skipping synthetic finish for " + fullTitle + " \u2014 stashed uuid is missing.");
|
|
8963
|
+
continue;
|
|
8964
|
+
}
|
|
8965
|
+
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
8966
|
+
try {
|
|
8967
|
+
const testData = this.buildSweepFinishData(fullTitle, meta, finishedAt);
|
|
8968
|
+
if (meta.kind === "hook") {
|
|
8969
|
+
this.listener.hookFinished(testData);
|
|
8970
|
+
} else {
|
|
8971
|
+
this.listener.testFinished(testData);
|
|
8972
|
+
}
|
|
8973
|
+
meta.finishedAt = finishedAt;
|
|
8974
|
+
BStackLogger.debug("Emitted synthetic " + (meta.kind === "hook" ? "HookRunFinished" : "TestRunFinished") + " for unfinished " + fullTitle + ".");
|
|
8975
|
+
} catch (err) {
|
|
8976
|
+
BStackLogger.warn("Failed to emit synthetic finish while sweeping unfinished " + fullTitle + ": " + err);
|
|
8977
|
+
}
|
|
8978
|
+
}
|
|
8979
|
+
}
|
|
8980
|
+
/**
|
|
8981
|
+
* Build a terminal (failed/incomplete) finish payload for a swept entry directly from the
|
|
8982
|
+
* stashed TestMeta, since the live framework test object is no longer available at teardown.
|
|
8983
|
+
*/
|
|
8984
|
+
buildSweepFinishData(fullTitle, meta, finishedAt) {
|
|
8985
|
+
const filename = meta.fileName;
|
|
8986
|
+
const testData = {
|
|
8987
|
+
uuid: meta.uuid,
|
|
8988
|
+
type: meta.kind === "hook" ? "hook" : "test",
|
|
8989
|
+
name: meta.name,
|
|
8990
|
+
body: {
|
|
8991
|
+
lang: "webdriverio",
|
|
8992
|
+
code: null
|
|
8993
|
+
},
|
|
8994
|
+
scope: fullTitle,
|
|
8995
|
+
scopes: meta.scopes,
|
|
8996
|
+
identifier: fullTitle,
|
|
8997
|
+
file_name: filename ? path16.relative(process.cwd(), filename) : void 0,
|
|
8998
|
+
location: filename ? path16.relative(process.cwd(), filename) : void 0,
|
|
8999
|
+
vc_filepath: this._gitConfigPath && filename ? path16.relative(this._gitConfigPath, filename) : void 0,
|
|
9000
|
+
started_at: meta.startedAt,
|
|
9001
|
+
finished_at: finishedAt,
|
|
9002
|
+
framework: this._framework,
|
|
9003
|
+
// getFailureObject only returns failure/failure_reason/failure_type — never a result
|
|
9004
|
+
// key — but set result AFTER the spread so the synthetic 'failed' status stays
|
|
9005
|
+
// authoritative even if that ever changes.
|
|
9006
|
+
...getFailureObject(new Error("Test/hook did not finish before the session ended (incomplete).")),
|
|
9007
|
+
result: "failed"
|
|
9008
|
+
};
|
|
9009
|
+
testData.integrations = {};
|
|
9010
|
+
if (this._browser && this._platformMeta) {
|
|
9011
|
+
const provider = getCloudProvider(this._browser);
|
|
9012
|
+
testData.integrations[provider] = this.getIntegrationsObject();
|
|
9013
|
+
}
|
|
9014
|
+
if (meta.kind === "hook") {
|
|
9015
|
+
testData.hook_type = meta.name ? getHookType(meta.name.toLowerCase()) : "undefined";
|
|
9016
|
+
}
|
|
9017
|
+
return testData;
|
|
9018
|
+
}
|
|
8655
9019
|
/**
|
|
8656
9020
|
* Cucumber Only
|
|
8657
9021
|
*/
|
|
@@ -8870,7 +9234,7 @@ var init_insights_handler = __esm({
|
|
|
8870
9234
|
}
|
|
8871
9235
|
getRunData(test, eventType, results) {
|
|
8872
9236
|
const fullTitle = getUniqueIdentifier(test, this._framework);
|
|
8873
|
-
const testMetaData = this._tests[fullTitle];
|
|
9237
|
+
const testMetaData = this._tests[fullTitle] || {};
|
|
8874
9238
|
const filename = test.file || this._suiteFile;
|
|
8875
9239
|
this.currentTestId = testMetaData.uuid;
|
|
8876
9240
|
if (eventType === "TestRunStarted") {
|
|
@@ -8917,6 +9281,10 @@ var init_insights_handler = __esm({
|
|
|
8917
9281
|
if (this._hooks[fullTitle]) {
|
|
8918
9282
|
testData.hooks = this._hooks[fullTitle];
|
|
8919
9283
|
}
|
|
9284
|
+
const customMetadata = custom_tags_handler_default.drain(testMetaData.uuid);
|
|
9285
|
+
if (customMetadata && Object.keys(customMetadata).length > 0) {
|
|
9286
|
+
testData.custom_metadata = customMetadata;
|
|
9287
|
+
}
|
|
8920
9288
|
}
|
|
8921
9289
|
if (eventType === "TestRunStarted" || eventType === "TestRunSkipped" || eventType === "HookRunStarted") {
|
|
8922
9290
|
testData.integrations = {};
|
|
@@ -9492,6 +9860,7 @@ var init_cli = __esm({
|
|
|
9492
9860
|
init_wdioAutomationFramework();
|
|
9493
9861
|
init_webdriverIOModule();
|
|
9494
9862
|
init_accessibilityModule();
|
|
9863
|
+
init_customTagsModule();
|
|
9495
9864
|
init_util();
|
|
9496
9865
|
init_observabilityModule();
|
|
9497
9866
|
init_crash_reporter();
|
|
@@ -9608,6 +9977,7 @@ var init_cli = __esm({
|
|
|
9608
9977
|
this.modules[ObservabilityModule.MODULE_NAME] = new ObservabilityModule(startBinResponse.observability);
|
|
9609
9978
|
}
|
|
9610
9979
|
this.modules[TestHubModule.MODULE_NAME] = new TestHubModule(startBinResponse.testhub);
|
|
9980
|
+
this.modules[CustomTagsModule.MODULE_NAME] = new CustomTagsModule();
|
|
9611
9981
|
if (startBinResponse.accessibility?.success) {
|
|
9612
9982
|
process.env[BROWSERSTACK_ACCESSIBILITY] = "true";
|
|
9613
9983
|
const options = this.options;
|
|
@@ -13056,6 +13426,7 @@ var AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
|
|
|
13056
13426
|
var accessibility_handler_default = AccessibilityHandler;
|
|
13057
13427
|
|
|
13058
13428
|
// src/service.ts
|
|
13429
|
+
init_custom_tags_handler();
|
|
13059
13430
|
init_bstackLogger();
|
|
13060
13431
|
init_Percy_Handler();
|
|
13061
13432
|
init_listener();
|
|
@@ -13127,9 +13498,24 @@ var BrowserstackService = class {
|
|
|
13127
13498
|
_specsRan = false;
|
|
13128
13499
|
_observability;
|
|
13129
13500
|
_currentTest;
|
|
13501
|
+
/**
|
|
13502
|
+
* CLI/gRPC path: map of test identity -> the test_uuid minted for it at
|
|
13503
|
+
* INIT_TEST/PRE. The CLI mints a fresh uuid into a SINGLE mutable per-worker tracked instance
|
|
13504
|
+
* (`trackWdioMochaInstance` overwrites `TestFramework.instances[ctxId]` wholesale on every
|
|
13505
|
+
* INIT_TEST), and the gRPC test-finish reads the uuid from that single slot. When a test hangs
|
|
13506
|
+
* past the mocha timeout, the NEXT test's INIT_TEST overwrites the slot before the hung test's
|
|
13507
|
+
* afterTest POST fires, so the POST would carry the wrong (next) test's uuid and the binary
|
|
13508
|
+
* would close the wrong test_run — orphaning the hung one. We snapshot each test's uuid here,
|
|
13509
|
+
* keyed by the same identity the legacy `_tests` map uses, and at afterTest we restore the
|
|
13510
|
+
* finishing test's minted uuid onto the tracked instance before the POST so it closes the
|
|
13511
|
+
* correct test_run. The finishing identity is `originalTest` (already snapshotted pre-await by
|
|
13512
|
+
* the testFnWrapper, so it is the timed-out runnable's own identity, not the next test's).
|
|
13513
|
+
*/
|
|
13514
|
+
_cliTestUuids = /* @__PURE__ */ new Map();
|
|
13130
13515
|
_insightsHandler;
|
|
13131
13516
|
_accessibility;
|
|
13132
13517
|
_accessibilityHandler;
|
|
13518
|
+
_customTagsHandler;
|
|
13133
13519
|
_percy;
|
|
13134
13520
|
_percyCaptureMode = void 0;
|
|
13135
13521
|
_percyHandler;
|
|
@@ -13254,6 +13640,18 @@ var BrowserstackService = class {
|
|
|
13254
13640
|
}
|
|
13255
13641
|
await this._insightsHandler.before();
|
|
13256
13642
|
}
|
|
13643
|
+
if (!BrowserstackCLI.getInstance().isRunning()) {
|
|
13644
|
+
try {
|
|
13645
|
+
this._customTagsHandler = new custom_tags_handler_default(
|
|
13646
|
+
this._browser,
|
|
13647
|
+
this._caps,
|
|
13648
|
+
this._config.framework
|
|
13649
|
+
);
|
|
13650
|
+
this._customTagsHandler.before();
|
|
13651
|
+
} catch (err) {
|
|
13652
|
+
BStackLogger.error(`[Custom Tags] Error registering setCustomTags: ${err}`);
|
|
13653
|
+
}
|
|
13654
|
+
}
|
|
13257
13655
|
if (!BrowserstackCLI.getInstance().isRunning()) {
|
|
13258
13656
|
this._browser.on("command", async (command) => {
|
|
13259
13657
|
if (shouldProcessEventForTesthub("")) {
|
|
@@ -13343,6 +13741,9 @@ var BrowserstackService = class {
|
|
|
13343
13741
|
if (BrowserstackCLI.getInstance().isRunning()) {
|
|
13344
13742
|
await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.INIT_TEST, HookState.PRE, { test });
|
|
13345
13743
|
const uuid = TestFramework.getState(TestFramework.getTrackedInstance(), TestFrameworkConstants.KEY_TEST_UUID);
|
|
13744
|
+
if (this._config.framework === "mocha" && uuid) {
|
|
13745
|
+
this._cliTestUuids.set(getUniqueIdentifier(test, this._config.framework), uuid);
|
|
13746
|
+
}
|
|
13346
13747
|
this._insightsHandler?.setTestData(test, uuid);
|
|
13347
13748
|
await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.PRE, { test, suiteTitle });
|
|
13348
13749
|
return;
|
|
@@ -13352,7 +13753,8 @@ var BrowserstackService = class {
|
|
|
13352
13753
|
await this._accessibilityHandler?.beforeTest(suiteTitle, test);
|
|
13353
13754
|
await this._insightsHandler?.beforeTest(test);
|
|
13354
13755
|
}
|
|
13355
|
-
async afterTest(
|
|
13756
|
+
async afterTest(originalTest, context, results) {
|
|
13757
|
+
const test = originalTest;
|
|
13356
13758
|
this._specsRan = true;
|
|
13357
13759
|
const { error, passed, skipped } = results;
|
|
13358
13760
|
if (!passed && !skipped) {
|
|
@@ -13361,8 +13763,19 @@ var BrowserstackService = class {
|
|
|
13361
13763
|
this._pureTestFailReasons.push(testError);
|
|
13362
13764
|
}
|
|
13363
13765
|
if (BrowserstackCLI.getInstance().isRunning()) {
|
|
13766
|
+
if (this._config.framework === "mocha") {
|
|
13767
|
+
const identifier = getUniqueIdentifier(test, this._config.framework);
|
|
13768
|
+
const resolvedUuid = this._cliTestUuids.get(identifier);
|
|
13769
|
+
if (resolvedUuid) {
|
|
13770
|
+
const trackedInstance = TestFramework.getTrackedInstance();
|
|
13771
|
+
if (trackedInstance) {
|
|
13772
|
+
TestFramework.setState(trackedInstance, TestFrameworkConstants.KEY_TEST_UUID, resolvedUuid);
|
|
13773
|
+
}
|
|
13774
|
+
this._cliTestUuids.delete(identifier);
|
|
13775
|
+
}
|
|
13776
|
+
}
|
|
13364
13777
|
await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.LOG_REPORT, HookState.POST, { test, result: results });
|
|
13365
|
-
await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.POST, { test, result: results,
|
|
13778
|
+
await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.POST, { test, result: results, suiteTitle: this._suiteTitle });
|
|
13366
13779
|
return;
|
|
13367
13780
|
}
|
|
13368
13781
|
await this._accessibilityHandler?.afterTest(this._suiteTitle, test);
|
|
@@ -13422,6 +13835,12 @@ var BrowserstackService = class {
|
|
|
13422
13835
|
});
|
|
13423
13836
|
}
|
|
13424
13837
|
})();
|
|
13838
|
+
try {
|
|
13839
|
+
await this._insightsHandler?.sweepUnfinished();
|
|
13840
|
+
} catch (sweepErr) {
|
|
13841
|
+
BStackLogger.debug("Exception in sweepUnfinished during after(): " + util12.format(sweepErr));
|
|
13842
|
+
}
|
|
13843
|
+
this._cliTestUuids.clear();
|
|
13425
13844
|
PerformanceTester.start(EVENTS.SDK_LISTENER_WORKER_END);
|
|
13426
13845
|
await listener_default.getInstance().onWorkerEnd();
|
|
13427
13846
|
PerformanceTester.end(EVENTS.SDK_LISTENER_WORKER_END, true);
|
|
@@ -38,6 +38,27 @@ declare class _InsightsHandler {
|
|
|
38
38
|
getHookRunDataForCucumber(hookData: TestMeta, eventType: string, result?: Frameworks.TestResult): TestData;
|
|
39
39
|
beforeTest(test: Frameworks.Test): Promise<void>;
|
|
40
40
|
afterTest(test: Frameworks.Test, result: Frameworks.TestResult): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Teardown safety net: synthesise a terminal finish for any started-but-unfinished
|
|
43
|
+
* test/hook so the backend closes the entity instead of leaving it in_progress and
|
|
44
|
+
* letting the build watchdog inflate the duration.
|
|
45
|
+
*
|
|
46
|
+
* Scoped to mocha. Cucumber hooks are keyed differently (getCucumberHookUniqueId) and
|
|
47
|
+
* their lifecycle differs, so they are intentionally left out here — closing them safely
|
|
48
|
+
* would need cucumber-specific keying and is a known gap for a follow-up.
|
|
49
|
+
*
|
|
50
|
+
* Each entry was tagged with kind at start time so we emit HookRunFinished for hooks and
|
|
51
|
+
* TestRunFinished for tests without re-deriving the kind from the title. Entries without a
|
|
52
|
+
* uuid are skipped (same null-uuid guard as afterTest): a finish the backend can't match to a
|
|
53
|
+
* start is worse than none. The result is marked failed/incomplete via getFailureObject so the
|
|
54
|
+
* entity lands in a terminal state rather than pending.
|
|
55
|
+
*/
|
|
56
|
+
sweepUnfinished(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Build a terminal (failed/incomplete) finish payload for a swept entry directly from the
|
|
59
|
+
* stashed TestMeta, since the live framework test object is no longer available at teardown.
|
|
60
|
+
*/
|
|
61
|
+
private buildSweepFinishData;
|
|
41
62
|
/**
|
|
42
63
|
* Cucumber Only
|
|
43
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,KAAK,EAAiB,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAGjK,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAmBzE,OAAO,KAAK,EACR,QAAQ,EACR,QAAQ,EAER,cAAc,EACd,MAAM,EACN,OAAO,EAEV,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"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"}
|
package/build/service.d.ts
CHANGED
|
@@ -21,9 +21,24 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
21
21
|
private _specsRan;
|
|
22
22
|
private _observability;
|
|
23
23
|
private _currentTest?;
|
|
24
|
+
/**
|
|
25
|
+
* CLI/gRPC path: map of test identity -> the test_uuid minted for it at
|
|
26
|
+
* INIT_TEST/PRE. The CLI mints a fresh uuid into a SINGLE mutable per-worker tracked instance
|
|
27
|
+
* (`trackWdioMochaInstance` overwrites `TestFramework.instances[ctxId]` wholesale on every
|
|
28
|
+
* INIT_TEST), and the gRPC test-finish reads the uuid from that single slot. When a test hangs
|
|
29
|
+
* past the mocha timeout, the NEXT test's INIT_TEST overwrites the slot before the hung test's
|
|
30
|
+
* afterTest POST fires, so the POST would carry the wrong (next) test's uuid and the binary
|
|
31
|
+
* would close the wrong test_run — orphaning the hung one. We snapshot each test's uuid here,
|
|
32
|
+
* keyed by the same identity the legacy `_tests` map uses, and at afterTest we restore the
|
|
33
|
+
* finishing test's minted uuid onto the tracked instance before the POST so it closes the
|
|
34
|
+
* correct test_run. The finishing identity is `originalTest` (already snapshotted pre-await by
|
|
35
|
+
* the testFnWrapper, so it is the timed-out runnable's own identity, not the next test's).
|
|
36
|
+
*/
|
|
37
|
+
private _cliTestUuids;
|
|
24
38
|
private _insightsHandler?;
|
|
25
39
|
private _accessibility;
|
|
26
40
|
private _accessibilityHandler?;
|
|
41
|
+
private _customTagsHandler?;
|
|
27
42
|
private _percy;
|
|
28
43
|
private _percyCaptureMode;
|
|
29
44
|
private _percyHandler?;
|
|
@@ -43,7 +58,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
43
58
|
beforeHook(test: Frameworks.Test | CucumberHook, context: unknown): Promise<void>;
|
|
44
59
|
afterHook(test: Frameworks.Test | CucumberHook, context: unknown, result: Frameworks.TestResult): Promise<void>;
|
|
45
60
|
beforeTest(test: Frameworks.Test): Promise<void>;
|
|
46
|
-
afterTest(
|
|
61
|
+
afterTest(originalTest: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
|
|
47
62
|
after(result: number): Promise<void>;
|
|
48
63
|
/**
|
|
49
64
|
* For CucumberJS
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Capabilities, Options, Frameworks } from '@wdio/types';
|
|
2
2
|
import type { Options as BSOptions } from 'browserstack-local';
|
|
3
|
+
import type { CustomMetadata } from './customTags.js';
|
|
3
4
|
export type MultiRemoteAction = (sessionId: string, browserName?: string) => Promise<unknown>;
|
|
4
5
|
export type AppConfig = {
|
|
5
6
|
id?: string;
|
|
@@ -238,6 +239,10 @@ export interface TestMeta {
|
|
|
238
239
|
examples?: string[];
|
|
239
240
|
hookType?: string;
|
|
240
241
|
testRunId?: string;
|
|
242
|
+
kind?: 'hook' | 'test';
|
|
243
|
+
name?: string;
|
|
244
|
+
scopes?: string[];
|
|
245
|
+
fileName?: string;
|
|
241
246
|
}
|
|
242
247
|
export interface CurrentRunInfo {
|
|
243
248
|
uuid?: string;
|
|
@@ -277,6 +282,7 @@ export interface TestData {
|
|
|
277
282
|
tags?: string[];
|
|
278
283
|
test_run_id?: string;
|
|
279
284
|
product_map?: {};
|
|
285
|
+
custom_metadata?: CustomMetadata;
|
|
280
286
|
}
|
|
281
287
|
export interface UserConfig {
|
|
282
288
|
buildName?: string;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/browserstack-service",
|
|
3
|
-
"version": "9.29.
|
|
3
|
+
"version": "9.29.1",
|
|
4
4
|
"description": "WebdriverIO service for better Browserstack integration",
|
|
5
5
|
"author": "Adam Bjerstedt <abjerstedt@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"@percy/appium-app": "^2.0.9",
|
|
42
42
|
"@percy/selenium-webdriver": "^2.2.2",
|
|
43
43
|
"@types/gitconfiglocal": "^2.0.1",
|
|
44
|
-
"@wdio/logger": "9.
|
|
45
|
-
"@wdio/reporter": "9.29.
|
|
46
|
-
"@wdio/types": "9.29.
|
|
44
|
+
"@wdio/logger": "9.29.1",
|
|
45
|
+
"@wdio/reporter": "9.29.1",
|
|
46
|
+
"@wdio/types": "9.29.1",
|
|
47
47
|
"browserstack-local": "^1.5.1",
|
|
48
48
|
"chalk": "^5.3.0",
|
|
49
49
|
"csv-writer": "^1.6.0",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"tar": "^7.5.11",
|
|
54
54
|
"undici": "^6.24.0",
|
|
55
55
|
"uuid": "^11.1.0",
|
|
56
|
-
"webdriverio": "9.29.
|
|
56
|
+
"webdriverio": "9.29.1",
|
|
57
57
|
"winston-transport": "^4.5.0",
|
|
58
58
|
"yauzl": "^3.0.0"
|
|
59
59
|
},
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
"@types/node": "^20.1.0",
|
|
65
65
|
"@types/tar": "^7.0.87",
|
|
66
66
|
"@types/yauzl": "^2.10.3",
|
|
67
|
-
"@wdio/globals": "9.29.
|
|
67
|
+
"@wdio/globals": "9.29.1"
|
|
68
68
|
},
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "cea4a759f7e78c798e7dd1a0794ae4aeec5acdbf"
|
|
73
73
|
}
|