@e2edev/e2e 0.2.0
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/LICENSE +21 -0
- package/README.md +104 -0
- package/dist/agent/act-validation.d.ts +27 -0
- package/dist/agent/act-validation.d.ts.map +1 -0
- package/dist/agent/act-validation.js +121 -0
- package/dist/agent/act-validation.js.map +1 -0
- package/dist/agent/act.d.ts +27 -0
- package/dist/agent/act.d.ts.map +1 -0
- package/dist/agent/act.js +775 -0
- package/dist/agent/act.js.map +1 -0
- package/dist/agent/actions.d.ts +66 -0
- package/dist/agent/actions.d.ts.map +1 -0
- package/dist/agent/actions.js +82 -0
- package/dist/agent/actions.js.map +1 -0
- package/dist/agent/ai-sdk.d.ts +16 -0
- package/dist/agent/ai-sdk.d.ts.map +1 -0
- package/dist/agent/ai-sdk.js +59 -0
- package/dist/agent/ai-sdk.js.map +1 -0
- package/dist/agent/call-options.d.ts +10 -0
- package/dist/agent/call-options.d.ts.map +1 -0
- package/dist/agent/call-options.js +28 -0
- package/dist/agent/call-options.js.map +1 -0
- package/dist/agent/default-agent.d.ts +22 -0
- package/dist/agent/default-agent.d.ts.map +1 -0
- package/dist/agent/default-agent.js +354 -0
- package/dist/agent/default-agent.js.map +1 -0
- package/dist/agent/error.d.ts +53 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +94 -0
- package/dist/agent/error.js.map +1 -0
- package/dist/agent/executor.d.ts +238 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +56 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/index.d.ts +15 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +304 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/invocation.d.ts +194 -0
- package/dist/agent/invocation.d.ts.map +1 -0
- package/dist/agent/invocation.js +389 -0
- package/dist/agent/invocation.js.map +1 -0
- package/dist/agent/ledger.d.ts +24 -0
- package/dist/agent/ledger.d.ts.map +1 -0
- package/dist/agent/ledger.js +48 -0
- package/dist/agent/ledger.js.map +1 -0
- package/dist/agent/loop-guards.d.ts +35 -0
- package/dist/agent/loop-guards.d.ts.map +1 -0
- package/dist/agent/loop-guards.js +110 -0
- package/dist/agent/loop-guards.js.map +1 -0
- package/dist/agent/model/adapter.d.ts +97 -0
- package/dist/agent/model/adapter.d.ts.map +1 -0
- package/dist/agent/model/adapter.js +40 -0
- package/dist/agent/model/adapter.js.map +1 -0
- package/dist/agent/model/router.d.ts +36 -0
- package/dist/agent/model/router.d.ts.map +1 -0
- package/dist/agent/model/router.js +45 -0
- package/dist/agent/model/router.js.map +1 -0
- package/dist/agent/model/schema.d.ts +16 -0
- package/dist/agent/model/schema.d.ts.map +1 -0
- package/dist/agent/model/schema.js +37 -0
- package/dist/agent/model/schema.js.map +1 -0
- package/dist/agent/model/sdk.d.ts +28 -0
- package/dist/agent/model/sdk.d.ts.map +1 -0
- package/dist/agent/model/sdk.js +258 -0
- package/dist/agent/model/sdk.js.map +1 -0
- package/dist/agent/observation.d.ts +70 -0
- package/dist/agent/observation.d.ts.map +1 -0
- package/dist/agent/observation.js +174 -0
- package/dist/agent/observation.js.map +1 -0
- package/dist/agent/phases.d.ts +71 -0
- package/dist/agent/phases.d.ts.map +1 -0
- package/dist/agent/phases.js +124 -0
- package/dist/agent/phases.js.map +1 -0
- package/dist/agent/prompts.d.ts +40 -0
- package/dist/agent/prompts.d.ts.map +1 -0
- package/dist/agent/prompts.js +104 -0
- package/dist/agent/prompts.js.map +1 -0
- package/dist/agent/protocol.d.ts +31 -0
- package/dist/agent/protocol.d.ts.map +1 -0
- package/dist/agent/protocol.js +67 -0
- package/dist/agent/protocol.js.map +1 -0
- package/dist/agent/public.d.ts +12 -0
- package/dist/agent/public.d.ts.map +1 -0
- package/dist/agent/public.js +12 -0
- package/dist/agent/public.js.map +1 -0
- package/dist/agent/replay.d.ts +61 -0
- package/dist/agent/replay.d.ts.map +1 -0
- package/dist/agent/replay.js +185 -0
- package/dist/agent/replay.js.map +1 -0
- package/dist/agent/secrets.d.ts +22 -0
- package/dist/agent/secrets.d.ts.map +1 -0
- package/dist/agent/secrets.js +63 -0
- package/dist/agent/secrets.js.map +1 -0
- package/dist/agent/step-cache.d.ts +156 -0
- package/dist/agent/step-cache.d.ts.map +1 -0
- package/dist/agent/step-cache.js +301 -0
- package/dist/agent/step-cache.js.map +1 -0
- package/dist/agent/tool-loop.d.ts +51 -0
- package/dist/agent/tool-loop.d.ts.map +1 -0
- package/dist/agent/tool-loop.js +331 -0
- package/dist/agent/tool-loop.js.map +1 -0
- package/dist/agent/tool.d.ts +39 -0
- package/dist/agent/tool.d.ts.map +1 -0
- package/dist/agent/tool.js +52 -0
- package/dist/agent/tool.js.map +1 -0
- package/dist/backend/contract.d.ts +186 -0
- package/dist/backend/contract.d.ts.map +1 -0
- package/dist/backend/contract.js +65 -0
- package/dist/backend/contract.js.map +1 -0
- package/dist/backend/index.d.ts +316 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +219 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/session.d.ts +23 -0
- package/dist/backend/session.d.ts.map +1 -0
- package/dist/backend/session.js +213 -0
- package/dist/backend/session.js.map +1 -0
- package/dist/backend/surface.d.ts +83 -0
- package/dist/backend/surface.d.ts.map +1 -0
- package/dist/backend/surface.js +11 -0
- package/dist/backend/surface.js.map +1 -0
- package/dist/cache/anchors.d.ts +37 -0
- package/dist/cache/anchors.d.ts.map +1 -0
- package/dist/cache/anchors.js +89 -0
- package/dist/cache/anchors.js.map +1 -0
- package/dist/cache/context.d.ts +74 -0
- package/dist/cache/context.d.ts.map +1 -0
- package/dist/cache/context.js +82 -0
- package/dist/cache/context.js.map +1 -0
- package/dist/cache/decide.d.ts +42 -0
- package/dist/cache/decide.d.ts.map +1 -0
- package/dist/cache/decide.js +47 -0
- package/dist/cache/decide.js.map +1 -0
- package/dist/cache/identity.d.ts +113 -0
- package/dist/cache/identity.d.ts.map +1 -0
- package/dist/cache/identity.js +109 -0
- package/dist/cache/identity.js.map +1 -0
- package/dist/cache/recorder.d.ts +76 -0
- package/dist/cache/recorder.d.ts.map +1 -0
- package/dist/cache/recorder.js +143 -0
- package/dist/cache/recorder.js.map +1 -0
- package/dist/cache/relocate.d.ts +69 -0
- package/dist/cache/relocate.d.ts.map +1 -0
- package/dist/cache/relocate.js +125 -0
- package/dist/cache/relocate.js.map +1 -0
- package/dist/cache/store.d.ts +68 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +106 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/trace.d.ts +146 -0
- package/dist/cache/trace.d.ts.map +1 -0
- package/dist/cache/trace.js +249 -0
- package/dist/cache/trace.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +4 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +108 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +6 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +101 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/collect/collect.d.ts +44 -0
- package/dist/collect/collect.d.ts.map +1 -0
- package/dist/collect/collect.js +89 -0
- package/dist/collect/collect.js.map +1 -0
- package/dist/collect/registry.d.ts +47 -0
- package/dist/collect/registry.d.ts.map +1 -0
- package/dist/collect/registry.js +262 -0
- package/dist/collect/registry.js.map +1 -0
- package/dist/collect/select.d.ts +54 -0
- package/dist/collect/select.d.ts.map +1 -0
- package/dist/collect/select.js +230 -0
- package/dist/collect/select.js.map +1 -0
- package/dist/config/agent.d.ts +91 -0
- package/dist/config/agent.d.ts.map +1 -0
- package/dist/config/agent.js +232 -0
- package/dist/config/agent.js.map +1 -0
- package/dist/config/load.d.ts +23 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +75 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/resolve.d.ts +94 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +500 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/validate.d.ts +6 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +21 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/credentials.d.ts +7 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +42 -0
- package/dist/credentials.js.map +1 -0
- package/dist/expect/async.d.ts +5 -0
- package/dist/expect/async.d.ts.map +1 -0
- package/dist/expect/async.js +186 -0
- package/dist/expect/async.js.map +1 -0
- package/dist/expect/index.d.ts +7 -0
- package/dist/expect/index.d.ts.map +1 -0
- package/dist/expect/index.js +23 -0
- package/dist/expect/index.js.map +1 -0
- package/dist/expect/values.d.ts +4 -0
- package/dist/expect/values.d.ts.map +1 -0
- package/dist/expect/values.js +108 -0
- package/dist/expect/values.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/ai-trace.d.ts +151 -0
- package/dist/internal/ai-trace.d.ts.map +1 -0
- package/dist/internal/ai-trace.js +360 -0
- package/dist/internal/ai-trace.js.map +1 -0
- package/dist/internal/brands.d.ts +9 -0
- package/dist/internal/brands.d.ts.map +1 -0
- package/dist/internal/brands.js +9 -0
- package/dist/internal/brands.js.map +1 -0
- package/dist/internal/debug.d.ts +43 -0
- package/dist/internal/debug.d.ts.map +1 -0
- package/dist/internal/debug.js +102 -0
- package/dist/internal/debug.js.map +1 -0
- package/dist/internal/errors.d.ts +98 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +212 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/globs.d.ts +29 -0
- package/dist/internal/globs.d.ts.map +1 -0
- package/dist/internal/globs.js +126 -0
- package/dist/internal/globs.js.map +1 -0
- package/dist/internal/ids.d.ts +32 -0
- package/dist/internal/ids.d.ts.map +1 -0
- package/dist/internal/ids.js +124 -0
- package/dist/internal/ids.js.map +1 -0
- package/dist/internal/json-value.d.ts +15 -0
- package/dist/internal/json-value.d.ts.map +1 -0
- package/dist/internal/json-value.js +61 -0
- package/dist/internal/json-value.js.map +1 -0
- package/dist/internal/package-version.d.ts +6 -0
- package/dist/internal/package-version.d.ts.map +1 -0
- package/dist/internal/package-version.js +14 -0
- package/dist/internal/package-version.js.map +1 -0
- package/dist/internal/realm-slot.d.ts +13 -0
- package/dist/internal/realm-slot.d.ts.map +1 -0
- package/dist/internal/realm-slot.js +23 -0
- package/dist/internal/realm-slot.js.map +1 -0
- package/dist/internal/redact.d.ts +33 -0
- package/dist/internal/redact.d.ts.map +1 -0
- package/dist/internal/redact.js +56 -0
- package/dist/internal/redact.js.map +1 -0
- package/dist/internal/regexp.d.ts +10 -0
- package/dist/internal/regexp.d.ts.map +1 -0
- package/dist/internal/regexp.js +27 -0
- package/dist/internal/regexp.js.map +1 -0
- package/dist/internal/text.d.ts +39 -0
- package/dist/internal/text.d.ts.map +1 -0
- package/dist/internal/text.js +66 -0
- package/dist/internal/text.js.map +1 -0
- package/dist/internal/time.d.ts +37 -0
- package/dist/internal/time.d.ts.map +1 -0
- package/dist/internal/time.js +91 -0
- package/dist/internal/time.js.map +1 -0
- package/dist/internal/trace.d.ts +18 -0
- package/dist/internal/trace.d.ts.map +1 -0
- package/dist/internal/trace.js +46 -0
- package/dist/internal/trace.js.map +1 -0
- package/dist/internal/urls.d.ts +31 -0
- package/dist/internal/urls.d.ts.map +1 -0
- package/dist/internal/urls.js +95 -0
- package/dist/internal/urls.js.map +1 -0
- package/dist/locator/engine.d.ts +65 -0
- package/dist/locator/engine.d.ts.map +1 -0
- package/dist/locator/engine.js +164 -0
- package/dist/locator/engine.js.map +1 -0
- package/dist/locator/expression.d.ts +19 -0
- package/dist/locator/expression.d.ts.map +1 -0
- package/dist/locator/expression.js +85 -0
- package/dist/locator/expression.js.map +1 -0
- package/dist/locator/screen.d.ts +36 -0
- package/dist/locator/screen.d.ts.map +1 -0
- package/dist/locator/screen.js +281 -0
- package/dist/locator/screen.js.map +1 -0
- package/dist/report/build.d.ts +214 -0
- package/dist/report/build.d.ts.map +1 -0
- package/dist/report/build.js +346 -0
- package/dist/report/build.js.map +1 -0
- package/dist/report/code-frame.d.ts +20 -0
- package/dist/report/code-frame.d.ts.map +1 -0
- package/dist/report/code-frame.js +73 -0
- package/dist/report/code-frame.js.map +1 -0
- package/dist/report/debug-steps.d.ts +14 -0
- package/dist/report/debug-steps.d.ts.map +1 -0
- package/dist/report/debug-steps.js +85 -0
- package/dist/report/debug-steps.js.map +1 -0
- package/dist/report/list.d.ts +80 -0
- package/dist/report/list.d.ts.map +1 -0
- package/dist/report/list.js +372 -0
- package/dist/report/list.js.map +1 -0
- package/dist/report/live-status.d.ts +51 -0
- package/dist/report/live-status.d.ts.map +1 -0
- package/dist/report/live-status.js +162 -0
- package/dist/report/live-status.js.map +1 -0
- package/dist/report/write.d.ts +4 -0
- package/dist/report/write.d.ts.map +1 -0
- package/dist/report/write.js +13 -0
- package/dist/report/write.js.map +1 -0
- package/dist/run/app-process.d.ts +18 -0
- package/dist/run/app-process.d.ts.map +1 -0
- package/dist/run/app-process.js +112 -0
- package/dist/run/app-process.js.map +1 -0
- package/dist/run/artifacts.d.ts +51 -0
- package/dist/run/artifacts.d.ts.map +1 -0
- package/dist/run/artifacts.js +114 -0
- package/dist/run/artifacts.js.map +1 -0
- package/dist/run/events.d.ts +100 -0
- package/dist/run/events.d.ts.map +1 -0
- package/dist/run/events.js +59 -0
- package/dist/run/events.js.map +1 -0
- package/dist/run/execute.d.ts +119 -0
- package/dist/run/execute.d.ts.map +1 -0
- package/dist/run/execute.js +555 -0
- package/dist/run/execute.js.map +1 -0
- package/dist/run/fixtures.d.ts +40 -0
- package/dist/run/fixtures.d.ts.map +1 -0
- package/dist/run/fixtures.js +408 -0
- package/dist/run/fixtures.js.map +1 -0
- package/dist/run/in-process.d.ts +24 -0
- package/dist/run/in-process.d.ts.map +1 -0
- package/dist/run/in-process.js +120 -0
- package/dist/run/in-process.js.map +1 -0
- package/dist/run/public.d.ts +19 -0
- package/dist/run/public.d.ts.map +1 -0
- package/dist/run/public.js +11 -0
- package/dist/run/public.js.map +1 -0
- package/dist/run/realm.d.ts +52 -0
- package/dist/run/realm.d.ts.map +1 -0
- package/dist/run/realm.js +101 -0
- package/dist/run/realm.js.map +1 -0
- package/dist/run/records.d.ts +87 -0
- package/dist/run/records.d.ts.map +1 -0
- package/dist/run/records.js +3 -0
- package/dist/run/records.js.map +1 -0
- package/dist/run/retry.d.ts +18 -0
- package/dist/run/retry.d.ts.map +1 -0
- package/dist/run/retry.js +33 -0
- package/dist/run/retry.js.map +1 -0
- package/dist/run/runner.d.ts +49 -0
- package/dist/run/runner.d.ts.map +1 -0
- package/dist/run/runner.js +375 -0
- package/dist/run/runner.js.map +1 -0
- package/dist/run/scheduler.d.ts +45 -0
- package/dist/run/scheduler.d.ts.map +1 -0
- package/dist/run/scheduler.js +512 -0
- package/dist/run/scheduler.js.map +1 -0
- package/dist/run/serial.d.ts +52 -0
- package/dist/run/serial.d.ts.map +1 -0
- package/dist/run/serial.js +247 -0
- package/dist/run/serial.js.map +1 -0
- package/dist/run/sessions.d.ts +54 -0
- package/dist/run/sessions.d.ts.map +1 -0
- package/dist/run/sessions.js +221 -0
- package/dist/run/sessions.js.map +1 -0
- package/dist/run/steps.d.ts +196 -0
- package/dist/run/steps.d.ts.map +1 -0
- package/dist/run/steps.js +151 -0
- package/dist/run/steps.js.map +1 -0
- package/dist/run/unit-runner.d.ts +30 -0
- package/dist/run/unit-runner.d.ts.map +1 -0
- package/dist/run/unit-runner.js +11 -0
- package/dist/run/unit-runner.js.map +1 -0
- package/dist/run/units.d.ts +50 -0
- package/dist/run/units.d.ts.map +1 -0
- package/dist/run/units.js +103 -0
- package/dist/run/units.js.map +1 -0
- package/dist/run/worker/entry.d.ts +8 -0
- package/dist/run/worker/entry.d.ts.map +1 -0
- package/dist/run/worker/entry.js +137 -0
- package/dist/run/worker/entry.js.map +1 -0
- package/dist/run/worker/handle.d.ts +10 -0
- package/dist/run/worker/handle.d.ts.map +1 -0
- package/dist/run/worker/handle.js +74 -0
- package/dist/run/worker/handle.js.map +1 -0
- package/dist/run/worker/protocol.d.ts +129 -0
- package/dist/run/worker/protocol.d.ts.map +1 -0
- package/dist/run/worker/protocol.js +18 -0
- package/dist/run/worker/protocol.js.map +1 -0
- package/dist/run/worker/session.d.ts +69 -0
- package/dist/run/worker/session.d.ts.map +1 -0
- package/dist/run/worker/session.js +123 -0
- package/dist/run/worker/session.js.map +1 -0
- package/dist/types.d.ts +630 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Suite realm lifecycle: module re-import, beforeAll/afterAll scope tracking. */
|
|
2
|
+
import { type SerializedError } from '../internal/errors.ts';
|
|
3
|
+
import { DebugTrace } from '../internal/debug.ts';
|
|
4
|
+
import type { CollectedTest } from '../collect/collect.ts';
|
|
5
|
+
import { type ModuleRegistration, type RegisteredHook, type RegisteredTest } from '../collect/registry.ts';
|
|
6
|
+
import type { Platform } from '../types.ts';
|
|
7
|
+
import type { RunError } from './records.ts';
|
|
8
|
+
export interface Realm {
|
|
9
|
+
registration: ModuleRegistration;
|
|
10
|
+
/** Registered tests by title-path key, for per-attempt lookup. */
|
|
11
|
+
testsByKey: ReadonlyMap<string, RegisteredTest>;
|
|
12
|
+
/** Scope keys whose beforeAll already ran in this realm. */
|
|
13
|
+
entered: Map<string, {
|
|
14
|
+
failed: SerializedError | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
/** Scopes pending afterAll, innermost last. */
|
|
17
|
+
pendingAfterAll: string[];
|
|
18
|
+
}
|
|
19
|
+
/** Finds a registered test in a re-imported realm by its exact title path. */
|
|
20
|
+
export declare function findRegistered(realm: Realm, test: CollectedTest): RegisteredTest | undefined;
|
|
21
|
+
export interface RealmManagerOptions {
|
|
22
|
+
readonly targetName: string;
|
|
23
|
+
readonly platform: Platform;
|
|
24
|
+
readonly timeout: number;
|
|
25
|
+
readonly cleanupTimeout: number;
|
|
26
|
+
/** Run-level error sink for hook failures. */
|
|
27
|
+
readonly runErrors: RunError[];
|
|
28
|
+
readonly debug?: DebugTrace;
|
|
29
|
+
}
|
|
30
|
+
/** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
|
|
31
|
+
export declare class RealmManager {
|
|
32
|
+
private readonly options;
|
|
33
|
+
private realmCounter;
|
|
34
|
+
private readonly debug;
|
|
35
|
+
constructor(options: RealmManagerOptions);
|
|
36
|
+
/** Re-imports one test module in a fresh realm. */
|
|
37
|
+
create(absolutePath: string): Promise<Realm>;
|
|
38
|
+
/**
|
|
39
|
+
* Wraps a registration that was just imported and has run nothing yet as a
|
|
40
|
+
* realm. The worker imports every unit's file once to resolve its pairs;
|
|
41
|
+
* adopting that import saves the second, identical one per unit.
|
|
42
|
+
*/
|
|
43
|
+
adopt(registration: ModuleRegistration): Realm;
|
|
44
|
+
/** Returns a test's hooks of one kind across its enclosing scope chain. */
|
|
45
|
+
hooksFor(realm: Realm, test: RegisteredTest, kind: 'beforeEach' | 'afterEach'): RegisteredHook[];
|
|
46
|
+
/** Enters suite scopes for a test, running pending beforeAll hooks. */
|
|
47
|
+
enterScopes(realm: Realm, test: RegisteredTest): Promise<SerializedError | undefined>;
|
|
48
|
+
/** Runs pending afterAll hooks, innermost scope first. */
|
|
49
|
+
leave(realm: Realm): Promise<void>;
|
|
50
|
+
private suiteFixtures;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=realm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realm.d.ts","sourceRoot":"","sources":["../../src/run/realm.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAGlF,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,kBAAkB,CAAC;IACjC,kEAAkE;IAClE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,4DAA4D;IAC5D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,eAAe,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC9D,+CAA+C;IAC/C,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,CAE5F;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED,+EAA+E;AAC/E,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IAEnC,YAA6B,OAAO,EAAE,mBAAmB,EAExD;IAED,mDAAmD;IAC7C,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAQjD;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,EAAE,kBAAkB,GAAG,KAAK,CAI7C;IAED,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,EAAE,CAK/F;IAED,uEAAuE;IACjE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAkC1F;IAED,0DAA0D;IACpD,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBvC;IAED,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/** Suite realm lifecycle: module re-import, beforeAll/afterAll scope tracking. */
|
|
2
|
+
import { importModule } from '../config/load.js';
|
|
3
|
+
import { classifyError, E2EError, serializeError, TestTimeoutError, } from '../internal/errors.js';
|
|
4
|
+
import { DebugTrace } from '../internal/debug.js';
|
|
5
|
+
import { titlePathKey } from '../internal/ids.js';
|
|
6
|
+
import { withTimeout } from '../internal/time.js';
|
|
7
|
+
import { collectModule, groupChain, groupTitles, } from '../collect/registry.js';
|
|
8
|
+
/** Finds a registered test in a re-imported realm by its exact title path. */
|
|
9
|
+
export function findRegistered(realm, test) {
|
|
10
|
+
return realm.testsByKey.get(titlePathKey(test.titlePath));
|
|
11
|
+
}
|
|
12
|
+
/** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
|
|
13
|
+
export class RealmManager {
|
|
14
|
+
options;
|
|
15
|
+
realmCounter = 0;
|
|
16
|
+
debug;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.debug = options.debug ?? new DebugTrace(false);
|
|
20
|
+
}
|
|
21
|
+
/** Re-imports one test module in a fresh realm. */
|
|
22
|
+
async create(absolutePath) {
|
|
23
|
+
this.realmCounter += 1;
|
|
24
|
+
const registration = await this.debug.time('realm.import', () => collectModule(() => importModule(absolutePath, `${this.options.targetName}-${this.realmCounter}`)));
|
|
25
|
+
return this.adopt(registration);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a registration that was just imported and has run nothing yet as a
|
|
29
|
+
* realm. The worker imports every unit's file once to resolve its pairs;
|
|
30
|
+
* adopting that import saves the second, identical one per unit.
|
|
31
|
+
*/
|
|
32
|
+
adopt(registration) {
|
|
33
|
+
const testsByKey = new Map();
|
|
34
|
+
for (const test of registration.tests)
|
|
35
|
+
testsByKey.set(titlePathKey(test.titlePath), test);
|
|
36
|
+
return { registration, testsByKey, entered: new Map(), pendingAfterAll: [] };
|
|
37
|
+
}
|
|
38
|
+
/** Returns a test's hooks of one kind across its enclosing scope chain. */
|
|
39
|
+
hooksFor(realm, test, kind) {
|
|
40
|
+
const chainKeys = new Set(scopeChainFor(test).map(scopeKey));
|
|
41
|
+
return realm.registration.hooks.filter((hook) => hook.kind === kind && chainKeys.has(scopeKey(hook.group)));
|
|
42
|
+
}
|
|
43
|
+
/** Enters suite scopes for a test, running pending beforeAll hooks. */
|
|
44
|
+
async enterScopes(realm, test) {
|
|
45
|
+
for (const scope of scopeChainFor(test)) {
|
|
46
|
+
const key = scopeKey(scope);
|
|
47
|
+
const entered = realm.entered.get(key);
|
|
48
|
+
if (entered !== undefined) {
|
|
49
|
+
if (entered.failed !== undefined)
|
|
50
|
+
return entered.failed;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const hooks = realm.registration.hooks.filter((hook) => hook.kind === 'beforeAll' && scopeKey(hook.group) === key);
|
|
54
|
+
let failed;
|
|
55
|
+
for (const hook of hooks) {
|
|
56
|
+
try {
|
|
57
|
+
await withTimeout(Promise.resolve(hook.fn(this.suiteFixtures())), this.options.timeout, () => new TestTimeoutError('beforeAll hook timed out'));
|
|
58
|
+
}
|
|
59
|
+
catch (cause) {
|
|
60
|
+
const error = classifyError(cause);
|
|
61
|
+
failed = serializeError(new E2EError('test', 'HOOK_FAILED', `beforeAll failed: ${error.message}`, { cause }), { phase: 'beforeAll', scopeId: key === '' ? (test.titlePath[0] ?? 'file') : key });
|
|
62
|
+
this.options.runErrors.push({ error: failed });
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
realm.entered.set(key, { failed });
|
|
67
|
+
realm.pendingAfterAll.push(key);
|
|
68
|
+
if (failed !== undefined)
|
|
69
|
+
return failed;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/** Runs pending afterAll hooks, innermost scope first. */
|
|
74
|
+
async leave(realm) {
|
|
75
|
+
for (const key of [...realm.pendingAfterAll].toReversed()) {
|
|
76
|
+
const hooks = realm.registration.hooks.filter((hook) => hook.kind === 'afterAll' && scopeKey(hook.group) === key);
|
|
77
|
+
for (const hook of [...hooks].toReversed()) {
|
|
78
|
+
try {
|
|
79
|
+
await withTimeout(Promise.resolve(hook.fn(this.suiteFixtures())), this.options.cleanupTimeout, () => new TestTimeoutError('afterAll hook timed out'));
|
|
80
|
+
}
|
|
81
|
+
catch (cause) {
|
|
82
|
+
const error = classifyError(cause);
|
|
83
|
+
this.options.runErrors.push({
|
|
84
|
+
error: serializeError(new E2EError('test', 'HOOK_FAILED', `afterAll failed: ${error.message}`, { cause }), { phase: 'afterAll', scopeId: key }),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
realm.pendingAfterAll = [];
|
|
90
|
+
}
|
|
91
|
+
suiteFixtures() {
|
|
92
|
+
return { platform: this.options.platform };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function scopeKey(group) {
|
|
96
|
+
return titlePathKey(groupTitles(group));
|
|
97
|
+
}
|
|
98
|
+
function scopeChainFor(test) {
|
|
99
|
+
return [undefined, ...groupChain(test.group)];
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=realm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realm.js","sourceRoot":"","sources":["../../src/run/realm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Execution result data model shared by the executor and reporters. */
|
|
2
|
+
import type { SerializedError } from '../internal/errors.ts';
|
|
3
|
+
import type { TestIdentity } from '../collect/collect.ts';
|
|
4
|
+
import type { SkipInfo } from '../collect/select.ts';
|
|
5
|
+
import type { ResolvedTarget } from '../config/resolve.ts';
|
|
6
|
+
import type { StepRecord } from './steps.ts';
|
|
7
|
+
export type ArtifactProducer = {
|
|
8
|
+
kind: 'step';
|
|
9
|
+
stepId: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'attempt';
|
|
12
|
+
};
|
|
13
|
+
export interface ArtifactRecord {
|
|
14
|
+
id: string;
|
|
15
|
+
kind: 'screenshot' | 'trace' | 'video' | 'download' | 'log';
|
|
16
|
+
mediaType: string;
|
|
17
|
+
path?: string;
|
|
18
|
+
size?: number;
|
|
19
|
+
sha256?: string;
|
|
20
|
+
/** The configured `ArtifactStore`'s reference for this artifact, when one accepted it. */
|
|
21
|
+
ref?: string;
|
|
22
|
+
redaction: 'none' | 'complete';
|
|
23
|
+
producer: ArtifactProducer;
|
|
24
|
+
}
|
|
25
|
+
export interface AttemptRecord {
|
|
26
|
+
id: string;
|
|
27
|
+
index: number;
|
|
28
|
+
status: 'passed' | 'failed' | 'timed-out' | 'interrupted';
|
|
29
|
+
startedAt: string;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
steps: StepRecord[];
|
|
32
|
+
artifacts: ArtifactRecord[];
|
|
33
|
+
error?: SerializedError;
|
|
34
|
+
secondaryErrors: SerializedError[];
|
|
35
|
+
cleanup: 'complete' | 'failed' | 'forced';
|
|
36
|
+
}
|
|
37
|
+
export interface SerialMemberRecord {
|
|
38
|
+
id: string;
|
|
39
|
+
index: number;
|
|
40
|
+
testId: string;
|
|
41
|
+
status: 'passed' | 'failed' | 'timed-out' | 'interrupted' | 'skipped';
|
|
42
|
+
startedAt: string;
|
|
43
|
+
durationMs: number;
|
|
44
|
+
steps: StepRecord[];
|
|
45
|
+
error?: SerializedError;
|
|
46
|
+
skip?: SkipInfo;
|
|
47
|
+
secondaryErrors: SerializedError[];
|
|
48
|
+
}
|
|
49
|
+
export interface SerialAttemptRecord {
|
|
50
|
+
id: string;
|
|
51
|
+
index: number;
|
|
52
|
+
status: 'passed' | 'failed' | 'timed-out' | 'interrupted';
|
|
53
|
+
startedAt: string;
|
|
54
|
+
durationMs: number;
|
|
55
|
+
members: SerialMemberRecord[];
|
|
56
|
+
artifacts: ArtifactRecord[];
|
|
57
|
+
error?: SerializedError;
|
|
58
|
+
secondaryErrors: SerializedError[];
|
|
59
|
+
cleanup: 'complete' | 'failed' | 'forced';
|
|
60
|
+
}
|
|
61
|
+
export interface SerialGroupRecord {
|
|
62
|
+
id: string;
|
|
63
|
+
serialId: string;
|
|
64
|
+
declarationIndex: number;
|
|
65
|
+
file: string;
|
|
66
|
+
titlePath: string[];
|
|
67
|
+
targetId: string;
|
|
68
|
+
platform: string;
|
|
69
|
+
memberTestIds: string[];
|
|
70
|
+
status: 'passed' | 'flaky' | 'failed' | 'timed-out' | 'interrupted' | 'skipped';
|
|
71
|
+
skip?: SkipInfo;
|
|
72
|
+
attempts: SerialAttemptRecord[];
|
|
73
|
+
}
|
|
74
|
+
export type ResultStatus = 'passed' | 'flaky' | 'failed' | 'timed-out' | 'interrupted' | 'skipped';
|
|
75
|
+
export interface ResultRecord {
|
|
76
|
+
test: TestIdentity;
|
|
77
|
+
target: ResolvedTarget;
|
|
78
|
+
status: ResultStatus;
|
|
79
|
+
selected: boolean;
|
|
80
|
+
skip?: SkipInfo | undefined;
|
|
81
|
+
attempts: AttemptRecord[];
|
|
82
|
+
serialGroupId?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface RunError {
|
|
85
|
+
error: SerializedError;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/run/records.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,eAAe,EAAE,eAAe,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IAChF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,eAAe,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/run/records.ts"],"names":[],"mappings":"AAAA,wEAAwE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Shared retry policy for ordinary tests, setup tests, and serial groups. */
|
|
2
|
+
import type { SerializedError } from '../internal/errors.ts';
|
|
3
|
+
import type { ResultStatus } from './records.ts';
|
|
4
|
+
/** The status-and-error slice of an attempt the retry policy inspects. */
|
|
5
|
+
export interface RetryAttempt {
|
|
6
|
+
readonly status: 'passed' | 'failed' | 'timed-out' | 'interrupted';
|
|
7
|
+
readonly error?: SerializedError | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** Only test-category failures and timeouts consume retry budget. */
|
|
10
|
+
export declare function isRetryEligible(attempt: RetryAttempt): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
|
|
13
|
+
* failure that does not consume retry budget. `runOnce` returns the
|
|
14
|
+
* finished attempt, or undefined when the attempt could not start (the
|
|
15
|
+
* loop stops and the last observed status stands).
|
|
16
|
+
*/
|
|
17
|
+
export declare function runWithRetries(maxAttempts: number, interruptSignal: AbortSignal, runOnce: (attemptIndex: number) => Promise<RetryAttempt | undefined>): Promise<ResultStatus>;
|
|
18
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/run/retry.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CAC9C;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAK9D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,WAAW,EAC5B,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,GACnE,OAAO,CAAC,YAAY,CAAC,CAcvB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Shared retry policy for ordinary tests, setup tests, and serial groups. */
|
|
2
|
+
/** Only test-category failures and timeouts consume retry budget. */
|
|
3
|
+
export function isRetryEligible(attempt) {
|
|
4
|
+
return (attempt.status === 'timed-out' ||
|
|
5
|
+
(attempt.error !== undefined && attempt.error.category === 'test'));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
|
|
9
|
+
* failure that does not consume retry budget. `runOnce` returns the
|
|
10
|
+
* finished attempt, or undefined when the attempt could not start (the
|
|
11
|
+
* loop stops and the last observed status stands).
|
|
12
|
+
*/
|
|
13
|
+
export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
|
|
14
|
+
let finalStatus = 'failed';
|
|
15
|
+
let attemptCount = 0;
|
|
16
|
+
for (let attemptIndex = 0; attemptIndex < maxAttempts; attemptIndex += 1) {
|
|
17
|
+
if (interruptSignal.aborted)
|
|
18
|
+
break;
|
|
19
|
+
const attempt = await runOnce(attemptIndex);
|
|
20
|
+
if (attempt === undefined)
|
|
21
|
+
break;
|
|
22
|
+
attemptCount += 1;
|
|
23
|
+
if (attempt.status === 'passed')
|
|
24
|
+
return attemptCount > 1 ? 'flaky' : 'passed';
|
|
25
|
+
if (attempt.status === 'interrupted')
|
|
26
|
+
return 'interrupted';
|
|
27
|
+
finalStatus = attempt.status;
|
|
28
|
+
if (!isRetryEligible(attempt))
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return finalStatus;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/run/retry.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAW9E,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,WAAW;QAC9B,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CACnE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,eAA4B,EAC5B,OAAoE;IAEpE,IAAI,WAAW,GAAiB,QAAQ,CAAC;IACzC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,WAAW,EAAE,YAAY,IAAI,CAAC,EAAE,CAAC;QACzE,IAAI,eAAe,CAAC,OAAO;YAAE,MAAM;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,YAAY,IAAI,CAAC,CAAC;QAClB,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa;YAAE,OAAO,aAAa,CAAC;QAC3D,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAAE,MAAM;IACvC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Run orchestration: config, collection, selection, execution, reporting. */
|
|
2
|
+
import { type Report1Document } from '../report/build.ts';
|
|
3
|
+
import { type RunEventSink, type RunExitCode } from './events.ts';
|
|
4
|
+
import type { ResultRecord } from './records.ts';
|
|
5
|
+
import type { E2EConfig } from '../types.ts';
|
|
6
|
+
export interface RunOptions {
|
|
7
|
+
cwd?: string | undefined;
|
|
8
|
+
configPath?: string | undefined;
|
|
9
|
+
files?: readonly string[] | undefined;
|
|
10
|
+
tags?: readonly string[] | undefined;
|
|
11
|
+
tagMode?: 'any' | 'all' | undefined;
|
|
12
|
+
targetIds?: readonly string[] | undefined;
|
|
13
|
+
headed?: boolean | undefined;
|
|
14
|
+
retries?: number | undefined;
|
|
15
|
+
workers?: number | undefined;
|
|
16
|
+
reporters?: readonly ('list' | 'json')[] | undefined;
|
|
17
|
+
artifactsDir?: string | undefined;
|
|
18
|
+
passWithNoTests?: boolean | undefined;
|
|
19
|
+
/** Runs with the trace cache off (`--no-cache`), overriding the config. */
|
|
20
|
+
noCache?: boolean | undefined;
|
|
21
|
+
/** Prints aggregated phase timings to stderr after the run. */
|
|
22
|
+
debug?: boolean | undefined;
|
|
23
|
+
/** Records every model call to `.e2e/ai-trace.json` (`--ai-trace`). */
|
|
24
|
+
aiTrace?: boolean | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* A config value instead of a discovered file — the embedding-host entry
|
|
27
|
+
* point (see the embedding guide). May hold live values (executors, driver
|
|
28
|
+
* handles, model instances, cache stores, secret providers), which cannot
|
|
29
|
+
* cross a process boundary, so the run executes in-process on one worker.
|
|
30
|
+
*/
|
|
31
|
+
rawConfig?: E2EConfig | undefined;
|
|
32
|
+
env?: NodeJS.ProcessEnv | undefined;
|
|
33
|
+
quiet?: boolean | undefined;
|
|
34
|
+
interruptSignal?: AbortSignal | undefined;
|
|
35
|
+
/** Structured, JSON-serializable run events for embedding hosts. */
|
|
36
|
+
onEvent?: RunEventSink | undefined;
|
|
37
|
+
}
|
|
38
|
+
export interface RunOutcome {
|
|
39
|
+
exitCode: RunExitCode;
|
|
40
|
+
status: 'passed' | 'failed' | 'error' | 'interrupted';
|
|
41
|
+
report: Report1Document;
|
|
42
|
+
reportPath: string | undefined;
|
|
43
|
+
/** Where the AI trace was written; undefined unless `aiTrace` was requested. */
|
|
44
|
+
aiTracePath: string | undefined;
|
|
45
|
+
results: readonly ResultRecord[];
|
|
46
|
+
}
|
|
47
|
+
/** Executes one complete run and returns the outcome without exiting. */
|
|
48
|
+
export declare function run(options?: RunOptions): Promise<RunOutcome>;
|
|
49
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/run/runner.ts"],"names":[],"mappings":"AAAA,8EAA8E;AA2B9E,OAAO,EAA+B,KAAK,eAAe,EAAyB,MAAM,oBAAoB,CAAC;AAK9G,OAAO,EAAwC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAExG,OAAO,KAAK,EAAE,YAAY,EAA+B,MAAM,cAAc,CAAC;AAK9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,eAAe,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,oEAAoE;IACpE,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;IACtD,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gFAAgF;IAChF,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAsB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA0UvE"}
|