@midscene/test 1.15.6 → 1.16.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.
@@ -2,6 +2,8 @@ import { Awaitable } from '@midscene/core/internal/test-runner';
2
2
  import { CommonAgentTestRunnerApi } from '@midscene/core/agent/test';
3
3
  import type * as Core from '@midscene/core/internal/test-runner';
4
4
  import type { ExecutionProjectDefinition as ExecutionProjectDefinition_2 } from '@midscene/core/internal/test-runner';
5
+ import { FileSetupContext } from '@midscene/core/internal/test-runner';
6
+ import { FileSetupDefinition } from '@midscene/core/internal/test-runner';
5
7
  import type { IExecutionDump } from '@midscene/core';
6
8
  import { JsonPrimitive } from '@midscene/core/internal/test-runner';
7
9
  import { JsonValue } from '@midscene/core/internal/test-runner';
@@ -33,33 +35,41 @@ export declare const createTestRunId: (date?: Date, uuid?: `${string}-${string}-
33
35
 
34
36
  export declare const DEFAULT_TEST_FILE_SELECTION: TestFileSelection;
35
37
 
38
+ export declare const defineFileSetup: <TContext, TProjectContext = unknown>(definition: FileSetupDefinition<TContext, TProjectContext>) => FileSetupDefinition<TContext, TProjectContext>;
39
+
36
40
  declare type DefineNodeOptions<TInput = unknown, TData = unknown, TContext = unknown> = Omit<Core.DefineNodeOptions<TInput, TData, TContext>, 'execute'> & {
37
41
  execute(ctx: NodeExecutionContext<TInput, TContext>): Core.NodeExecutionReturn<TData>;
38
42
  };
39
43
 
40
44
  export declare const defineProjectSetup: <TProjectContext>(definition: ProjectSetupDefinition<TProjectContext>) => ProjectSetupDefinition<TProjectContext>;
41
45
 
42
- export declare const defineTestProject: <TContext = undefined>(definition: TestProjectDefinition<TContext>) => TestProjectDefinition<TContext>;
46
+ export declare const defineTestProject: <TContext = undefined, TProjectContext = TContext>(definition: TestProjectDefinition<TContext, TProjectContext>) => TestProjectDefinition<TContext, TProjectContext>;
43
47
 
44
48
  export declare const discoverTestConfig: (projectRoot: string) => string | undefined;
45
49
 
46
50
  export declare const discoverTestFiles: (projectRoot: string, selection?: TestFileSelection) => string[];
47
51
 
48
- export declare type ExecutionProjectDefinition<TContext = unknown> = Omit<ExecutionProjectDefinition_2<TContext>, 'nodes'> & {
52
+ export declare type ExecutionProjectDefinition<TContext = unknown, TProjectContext = TContext> = Omit<ExecutionProjectDefinition_2<TProjectContext>, 'nodes' | 'fileSetup'> & {
53
+ fileSetup?: FileSetupDefinition<TContext, TProjectContext>;
49
54
  nodes?: readonly NodeDefinition<any, any, TContext>[];
50
55
  };
51
56
 
57
+ export { FileSetupContext }
58
+
59
+ export { FileSetupDefinition }
60
+
52
61
  export { JsonPrimitive }
53
62
 
54
63
  export { JsonValue }
55
64
 
56
- export declare interface LoadedExecutionProject<TProjectContext = unknown> extends ResolvedExecutionProject<TProjectContext> {
65
+ export declare interface LoadedExecutionProject<TContext = unknown, TProjectContext = TContext> extends ResolvedExecutionProject<TProjectContext> {
66
+ readonly fileSetup?: FileSetupDefinition<TContext, TProjectContext>;
57
67
  /** Effective Nodes: globals plus project-local overrides. */
58
68
  readonly nodes: NodeRegistry;
59
69
  }
60
70
 
61
- export declare interface LoadedTestProject<TContext = undefined> {
62
- projects: readonly LoadedExecutionProject<TContext>[];
71
+ export declare interface LoadedTestProject<TContext = undefined, TProjectContext = TContext> {
72
+ projects: readonly LoadedExecutionProject<TContext, TProjectContext>[];
63
73
  hasExplicitProjects: boolean;
64
74
  test: ResolvedTestOptions;
65
75
  output: ResolvedTestOutputDefinition;
@@ -67,7 +77,7 @@ export declare interface LoadedTestProject<TContext = undefined> {
67
77
  resolveNode(name: string): NodeDefinition<any, any, TContext> | undefined;
68
78
  }
69
79
 
70
- export declare function loadTestProject<TContext = undefined>(configPath?: string): Promise<LoadedTestProject<TContext>>;
80
+ export declare function loadTestProject<TContext = undefined, TProjectContext = TContext>(configPath?: string): Promise<LoadedTestProject<TContext, TProjectContext>>;
71
81
 
72
82
  declare interface MidsceneExecutionRef {
73
83
  id?: string;
@@ -126,7 +136,10 @@ export { ProjectTeardownContext }
126
136
  export { ResolvedExecutionProject }
127
137
 
128
138
  export declare interface ResolvedTestOptions {
129
- maxConcurrency: number;
139
+ maxConcurrentFiles: number | null;
140
+ maxConcurrentProjects: number | null;
141
+ setupTimeout: number;
142
+ teardownTimeout: number;
130
143
  bail: number;
131
144
  testTimeout: number;
132
145
  }
@@ -161,7 +174,14 @@ export declare interface TestExecutionProjectRunResult {
161
174
  export { TestFileSelection }
162
175
 
163
176
  export declare interface TestOptions {
164
- maxConcurrency?: number;
177
+ /** Global active files, including preparation and cleanup. Default 1; null is unlimited. */
178
+ maxConcurrentFiles?: number | null;
179
+ /** Projects from setup through completed cleanup. Default 1; null is unlimited. */
180
+ maxConcurrentProjects?: number | null;
181
+ /** Milliseconds for each Project setup/fileSetup, including device waits. */
182
+ setupTimeout?: number;
183
+ /** Milliseconds per cleanup scope; shared deadline during abnormal shutdown. */
184
+ teardownTimeout?: number;
165
185
  bail?: number;
166
186
  testTimeout?: number;
167
187
  }
@@ -182,9 +202,10 @@ export declare interface TestProjectCollectionError {
182
202
  error: WorkflowError;
183
203
  }
184
204
 
185
- export declare interface TestProjectDefinition<TContext = undefined> {
186
- setup?: ProjectSetupDefinition<TContext>;
187
- projects?: readonly ExecutionProjectDefinition<TContext>[];
205
+ export declare interface TestProjectDefinition<TContext = undefined, TProjectContext = TContext> {
206
+ setup?: ProjectSetupDefinition<TProjectContext>;
207
+ fileSetup?: FileSetupDefinition<TContext, TProjectContext>;
208
+ projects?: readonly ExecutionProjectDefinition<TContext, TProjectContext>[];
188
209
  test?: TestOptions;
189
210
  output?: TestOutputDefinition;
190
211
  nodes?: readonly NodeDefinition<any, any, TContext>[];
@@ -129,7 +129,7 @@ export declare const createCaseRunner: <TContext = undefined>(options?: CaseRunn
129
129
 
130
130
  export declare const createDocumentRuntime: <TContext = undefined>(document: CollectedWorkflowDocument, options: CreateDocumentRuntimeOptions<TContext>) => WorkflowDocumentRuntime<TContext>;
131
131
 
132
- export declare type CreateDocumentRuntimeOptions<TContext = undefined> = Omit<Core.CreateDocumentRuntimeOptions<TContext>, 'documentSetup' | 'documentAttemptIndex' | 'resolveNode' | 'onStepResult' | 'onResult'> & {
132
+ export declare type CreateDocumentRuntimeOptions<TContext = undefined> = Omit<Core.CreateDocumentRuntimeOptions<TContext>, 'documentSetup' | 'setupTimeoutMs' | 'teardownTimeoutMs' | 'documentAttemptIndex' | 'resolveNode' | 'onStepResult' | 'onResult'> & {
133
133
  resolveNode(name: string): NodeDefinition<any, any, TContext>;
134
134
  onStepResult?: StepResultHandler;
135
135
  onResult?(result: WorkflowDocumentRunResult): Core.Awaitable<unknown>;
@@ -262,7 +262,7 @@ export declare interface ResolveWorkflowVariablesOptions {
262
262
  location: VariableResolutionLocation;
263
263
  }
264
264
 
265
- export declare type RunCollectedCaseOptions<TContext = undefined> = Omit<Core.RunCollectedCaseOptions<TContext>, 'reportScopeId' | 'resolveNode' | 'beforeEach' | 'afterEach' | 'onStepResult' | 'onResult'> & {
265
+ export declare type RunCollectedCaseOptions<TContext = undefined> = Omit<Core.RunCollectedCaseOptions<TContext>, 'reportScopeId' | 'teardownTimeoutMs' | 'resolveNode' | 'beforeEach' | 'afterEach' | 'onStepResult' | 'onResult'> & {
266
266
  resolveNode(name: string): NodeDefinition<any, any, TContext>;
267
267
  beforeEach?: readonly NormalizedStep[];
268
268
  afterEach?: readonly NormalizedStep[];
@@ -272,7 +272,7 @@ export declare type RunCollectedCaseOptions<TContext = undefined> = Omit<Core.Ru
272
272
 
273
273
  export declare const runWorkflowDocument: <TContext = undefined>(document: CollectedWorkflowDocument, options: RunWorkflowDocumentOptions<TContext>) => Promise<WorkflowDocumentExecutionResult>;
274
274
 
275
- export declare type RunWorkflowDocumentOptions<TContext = undefined> = Omit<Core.RunWorkflowDocumentOptions<TContext>, 'documentSetup' | 'documentAttemptIndex' | 'resolveCaseReportScopeId' | 'resolveNode' | 'onStepResult' | 'onCaseStart' | 'isFatalError' | 'onCaseResult' | 'onCaseOutcome' | 'onDocumentResult' | 'createCaseRunId' | 'createDocumentRunId'> & {
275
+ export declare type RunWorkflowDocumentOptions<TContext = undefined> = Omit<Core.RunWorkflowDocumentOptions<TContext>, 'documentSetup' | 'setupTimeoutMs' | 'teardownTimeoutMs' | 'documentAttemptIndex' | 'resolveCaseReportScopeId' | 'resolveNode' | 'onStepResult' | 'onCaseStart' | 'isFatalError' | 'onCaseResult' | 'onCaseOutcome' | 'onDocumentResult' | 'createCaseRunId' | 'createDocumentRunId'> & {
276
276
  resolveNode(name: string): NodeDefinition<any, any, TContext>;
277
277
  onStepResult?: StepResultHandler;
278
278
  onCaseStart?(collectedCase: CollectedCase): Core.Awaitable<void>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@midscene/test",
3
3
  "description": "Midscene Test: an extensible YAML testing framework and Node SDK.",
4
- "version": "1.15.6",
4
+ "version": "1.16.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/web-infra-dev/midscene.git",
@@ -58,8 +58,8 @@
58
58
  "tsx": "^4.19.2",
59
59
  "yargs": "17.7.3",
60
60
  "zod": "^3.25.1",
61
- "@midscene/core": "1.15.6",
62
- "@midscene/shared": "1.15.6"
61
+ "@midscene/core": "1.16.1",
62
+ "@midscene/shared": "1.16.1"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@rslib/core": "^0.18.3",
@@ -71,20 +71,20 @@
71
71
  "puppeteer": "24.6.0",
72
72
  "typescript": "^5.8.3",
73
73
  "vitest": "3.0.5",
74
- "@midscene/android": "1.15.6",
75
- "@midscene/harmony": "1.15.6",
76
- "@midscene/computer": "1.15.6",
77
- "@midscene/ios": "1.15.6",
78
- "@midscene/web": "1.15.6"
74
+ "@midscene/android": "1.16.1",
75
+ "@midscene/harmony": "1.16.1",
76
+ "@midscene/ios": "1.16.1",
77
+ "@midscene/computer": "1.16.1",
78
+ "@midscene/web": "1.16.1"
79
79
  },
80
80
  "peerDependencies": {
81
81
  "playwright": "^1.45.0",
82
82
  "puppeteer": "24.6.0",
83
- "@midscene/android": "1.15.6",
84
- "@midscene/harmony": "1.15.6",
85
- "@midscene/computer": "1.15.6",
86
- "@midscene/web": "1.15.6",
87
- "@midscene/ios": "1.15.6"
83
+ "@midscene/computer": "1.16.1",
84
+ "@midscene/ios": "1.16.1",
85
+ "@midscene/android": "1.16.1",
86
+ "@midscene/harmony": "1.16.1",
87
+ "@midscene/web": "1.16.1"
88
88
  },
89
89
  "peerDependenciesMeta": {
90
90
  "@midscene/android": {