@wp-tester/phpunit 0.0.4 → 0.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cache-fetch.d.ts","sourceRoot":"","sources":["../src/cache-fetch.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,YAAY,QAAiB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAsB,CAAC;AAC/C,eAAO,MAAM,YAAY,QAA0B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0D5E"}
1
+ {"version":3,"file":"cache-fetch.d.ts","sourceRoot":"","sources":["../src/cache-fetch.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,YAAY,QAAiB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAsB,CAAC;AAC/C,eAAO,MAAM,YAAY,QAA0B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuCD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiF5E"}
@@ -12,6 +12,39 @@ export const CACHE_DISABLED = -1;
12
12
  export const CACHE_1_HOUR = 60 * 60 * 1000;
13
13
  export const CACHE_1_DAY = 24 * 60 * 60 * 1000;
14
14
  export const CACHE_1_WEEK = 7 * 24 * 60 * 60 * 1000;
15
+ /**
16
+ * Validate that a file is a valid zip file by checking for the end of central directory signature
17
+ * The EOCD can have a variable-length comment, so we search backwards from the end
18
+ */
19
+ function validateZipFile(filePath) {
20
+ const fd = fs.openSync(filePath, 'r');
21
+ try {
22
+ const stats = fs.fstatSync(fd);
23
+ const fileSize = stats.size;
24
+ // ZIP files must have at least 22 bytes (minimum EOCD size)
25
+ if (fileSize < 22) {
26
+ throw new Error('File too small to be a valid zip file');
27
+ }
28
+ // Maximum comment length is 65535 bytes, so search last 65KB + 22 bytes
29
+ const searchSize = Math.min(fileSize, 65535 + 22);
30
+ const buffer = Buffer.alloc(searchSize);
31
+ fs.readSync(fd, buffer, 0, searchSize, fileSize - searchSize);
32
+ // Search backwards for EOCD signature (0x50, 0x4b, 0x05, 0x06 in little-endian)
33
+ let found = false;
34
+ for (let i = searchSize - 22; i >= 0; i--) {
35
+ if (buffer[i] === 0x50 && buffer[i + 1] === 0x4b && buffer[i + 2] === 0x05 && buffer[i + 3] === 0x06) {
36
+ found = true;
37
+ break;
38
+ }
39
+ }
40
+ if (!found) {
41
+ throw new Error('End of central directory record signature not found. Either not a zip file, or file is truncated.');
42
+ }
43
+ }
44
+ finally {
45
+ fs.closeSync(fd);
46
+ }
47
+ }
15
48
  /**
16
49
  * Download a file and cache it locally, with retry logic
17
50
  *
@@ -31,7 +64,17 @@ export async function cacheFetch(options) {
31
64
  }
32
65
  // If cacheExpiration is 0 (CACHE_FOREVER), cache never expires
33
66
  else if (cacheExpiration === 0) {
34
- return cacheFilePath;
67
+ // Validate cached file before returning
68
+ try {
69
+ if (url.endsWith('.zip')) {
70
+ validateZipFile(cacheFilePath);
71
+ }
72
+ return cacheFilePath;
73
+ }
74
+ catch {
75
+ // Cached file is corrupted, delete and re-download
76
+ fs.unlinkSync(cacheFilePath);
77
+ }
35
78
  }
36
79
  // For positive values, check if cache has expired
37
80
  else {
@@ -39,17 +82,32 @@ export async function cacheFetch(options) {
39
82
  const now = Date.now();
40
83
  const fileAge = now - stats.mtimeMs;
41
84
  if (fileAge < cacheExpiration) {
42
- // Cache is still valid
43
- return cacheFilePath;
85
+ // Cache exists and hasn't expired, validate before returning
86
+ try {
87
+ if (url.endsWith('.zip')) {
88
+ validateZipFile(cacheFilePath);
89
+ }
90
+ return cacheFilePath;
91
+ }
92
+ catch {
93
+ // Cached file is corrupted, delete and re-download
94
+ fs.unlinkSync(cacheFilePath);
95
+ }
96
+ }
97
+ else {
98
+ // Cache has expired, delete it
99
+ fs.unlinkSync(cacheFilePath);
44
100
  }
45
- // Cache has expired, delete it
46
- fs.unlinkSync(cacheFilePath);
47
101
  }
48
102
  }
49
103
  // Ensure cache directory exists
50
104
  fs.mkdirSync(cacheDir, { recursive: true });
51
105
  try {
52
106
  await downloadFileWithRetry(url, cacheFilePath, maxRetries);
107
+ // Validate the downloaded file if it's a zip
108
+ if (url.endsWith('.zip')) {
109
+ validateZipFile(cacheFilePath);
110
+ }
53
111
  return cacheFilePath;
54
112
  }
55
113
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"cache-fetch.js","sourceRoot":"","sources":["../src/cache-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-fetch.js","sourceRoot":"","sources":["../src/cache-fetch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
package/dist/runner.d.ts CHANGED
@@ -1,11 +1,32 @@
1
- import type { WPTesterConfig } from "@wp-tester/config";
1
+ import type { WPTesterConfig, ResolvedWPTesterConfig } from "@wp-tester/config";
2
2
  import type { Report } from "@wp-tester/results";
3
3
  export declare function shouldRunPhpunitTests(config: WPTesterConfig): boolean;
4
+ /**
5
+ * Options for running PHPUnit tests
6
+ */
7
+ export interface RunPhpunitTestsOptions {
8
+ /** Additional PHPUnit arguments to append */
9
+ phpunitArgs?: string[];
10
+ }
4
11
  /**
5
12
  * Run PHPUnit tests in WordPress Playground environment
6
13
  *
7
- * @param config - Test configuration or path to config file
14
+ * @param config - Resolved test configuration
15
+ * @param phpunitArgsOrOptions - Additional PHPUnit arguments or options object
8
16
  * @returns CTRF report with test results
9
17
  */
10
- export declare function runPhpunitTests(config: WPTesterConfig | string): Promise<Report>;
18
+ export declare function runPhpunitTests(config: ResolvedWPTesterConfig, phpunitArgsOrOptions?: string[] | RunPhpunitTestsOptions): Promise<Report>;
19
+ interface PlaygroundClient {
20
+ fileExists(path: string): Promise<boolean>;
21
+ }
22
+ /**
23
+ * Resolve PHPUnit arguments to map host paths to VFS paths
24
+ *
25
+ * @param args - Original arguments
26
+ * @param config - Resolved configuration
27
+ * @param playground - Playground client for checking VFS file existence
28
+ * @returns Resolved arguments
29
+ */
30
+ export declare function resolvePhpunitArgs(args: string[], config: ResolvedWPTesterConfig, playground: PlaygroundClient): Promise<string[]>;
31
+ export {};
11
32
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA+C,MAAM,mBAAmB,CAAC;AAOrG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAErE;AAoOD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,GAAG,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAErE;AAsSD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,sBAAsB,EAC9B,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,sBAAsB,GACvD,OAAO,CAAC,MAAM,CAAC,CAwEjB;AA6BD,UAAU,gBAAgB;IACxB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB"}
package/dist/runner.js CHANGED
@@ -1,5 +1,5 @@
1
- import { resolveConfig, parseBootstrapPath, hostToVfs, resolveAbsolute, } from "@wp-tester/config";
2
- import { EMPTY_REPORT, mergeReports, StreamingReporter, TeamCityParser } from "@wp-tester/results";
1
+ import { parseBootstrapPath, hostToVfs, resolveAbsolute, } from "@wp-tester/config";
2
+ import { EMPTY_REPORT, mergeReports, PHPUnitStreamingReporter, TeamCityParser } from "@wp-tester/results";
3
3
  import { startPlayground } from "@wp-tester/runtime";
4
4
  import { mountWordPressTestLibrary } from "./wordpress-test-lib.js";
5
5
  import { access } from "fs/promises";
@@ -16,15 +16,13 @@ export function shouldRunPhpunitTests(config) {
16
16
  */
17
17
  async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitConfigPath) {
18
18
  const testMode = config.tests.phpunit.testMode;
19
- let phpUnitEnvironmentVariables = {};
20
- let environmentWithMount = environment;
19
+ let environmentWithMount = {
20
+ ...environment,
21
+ };
21
22
  // Prepare environment with WordPress test library for unit tests only
22
23
  // Integration tests use standard WordPress installation via wp-load.php
23
24
  if (testMode === "unit") {
24
25
  environmentWithMount = await mountWordPressTestLibrary(environment);
25
- phpUnitEnvironmentVariables = {
26
- WP_TESTS_DIR: "/tmp/wordpress-tests-lib",
27
- };
28
26
  }
29
27
  // Start playground with all mounts and steps including test library initialization
30
28
  const runtime = await startPlayground(environmentWithMount);
@@ -89,16 +87,24 @@ async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitCon
89
87
  cliArgs.push("--bootstrap", bootstrapFilePath);
90
88
  }
91
89
  // Append additional PHPUnit arguments from config
90
+ // Resolve file/directory paths from host to VFS
92
91
  const phpunitArgs = config.tests.phpunit.phpunitArgs;
93
92
  if (phpunitArgs && phpunitArgs.length > 0) {
94
- cliArgs.push(...phpunitArgs);
93
+ // Use the helper to resolve arguments
94
+ const resolvedArgs = await resolvePhpunitArgs(phpunitArgs, config, playground);
95
+ cliArgs.push(...resolvedArgs);
95
96
  }
96
97
  // Create streaming reporter
97
98
  // Disable summary since the CLI will print a combined summary
98
- const useStreaming = config.reporters?.includes("default") ?? true;
99
- const reporter = new StreamingReporter({
99
+ const useStreaming = config.reporters?.default !== undefined;
100
+ // Get filter options from config reporters (only if it's an object, not boolean)
101
+ const filter = typeof config.reporters?.default === 'object'
102
+ ? config.reporters.default
103
+ : undefined;
104
+ const reporter = new PHPUnitStreamingReporter({
100
105
  enabled: useStreaming,
101
106
  showSummary: false,
107
+ filter,
102
108
  });
103
109
  // Signal test run start to initialize timing
104
110
  reporter.onEvent({
@@ -107,22 +113,25 @@ async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitCon
107
113
  });
108
114
  reporter.onEvent({
109
115
  type: "suite:start",
110
- name: `PHPUnit ${testMode} tests - '${environment.name}'`,
116
+ name: `${environment.name} - PHPUnit ${testMode} tests`,
111
117
  });
112
118
  // Create TeamCity parser connected to the reporter
113
119
  const parser = TeamCityParser.withReporter(reporter);
114
120
  // Run PHPUnit tests
115
121
  const result = await playground.cli(cliArgs, {
116
- env: phpUnitEnvironmentVariables,
122
+ env: environmentWithMount.env,
117
123
  });
118
124
  // Process stdout and stderr with TeamCity parser for streaming results
119
125
  // PHPUnit outputs TeamCity format to both stdout and stderr
120
126
  const textDecoder = new TextDecoder();
121
127
  const stderrDecoder = new TextDecoder();
128
+ let stdoutCapture = '';
129
+ let stderrCapture = '';
122
130
  await Promise.all([
123
131
  result.stdout.pipeTo(new WritableStream({
124
132
  write(chunk) {
125
133
  const text = textDecoder.decode(chunk, { stream: true });
134
+ stdoutCapture += text;
126
135
  parser.write(text);
127
136
  },
128
137
  close() {
@@ -132,6 +141,7 @@ async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitCon
132
141
  result.stderr.pipeTo(new WritableStream({
133
142
  write(chunk) {
134
143
  const text = stderrDecoder.decode(chunk, { stream: true });
144
+ stderrCapture += text;
135
145
  // Try to parse as TeamCity format first
136
146
  parser.write(text);
137
147
  // If streaming is disabled, also write non-TeamCity lines to stderr
@@ -153,20 +163,72 @@ async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitCon
153
163
  // Close the outer suite that was started earlier
154
164
  reporter.onEvent({
155
165
  type: "suite:end",
156
- name: `PHPUnit ${testMode} tests - '${environment.name}'`,
166
+ name: `${environment.name} - PHPUnit ${testMode} tests`,
157
167
  });
158
168
  // Signal test run end to finalize timing
159
169
  reporter.onEvent({
160
170
  type: "run:end",
161
171
  });
162
172
  const exitCode = await result.exitCode;
163
- if (exitCode !== 0 && exitCode !== 1 && exitCode !== 2) {
164
- // Exit code 1 indicates test failures, exit code 2 indicates errors - both are acceptable
165
- console.error(`PHPUnit exited with code ${exitCode}`);
166
- return EMPTY_REPORT;
167
- }
168
173
  // Get the report from the streaming reporter
169
174
  const report = reporter.getReport();
175
+ // PHPUnit outputs errors to stdout, not stderr, so we need to check both
176
+ const errorOutput = stderrCapture.trim() || stdoutCapture.trim();
177
+ // Check for bad exit codes that indicate fatal errors
178
+ // Exit code 0 = success, 1 = test failures, 2 = errors (all acceptable)
179
+ // Other exit codes (e.g., 127 = command not found, 255 = fatal error) are not acceptable
180
+ if (exitCode !== 0 && exitCode !== 1 && exitCode !== 2) {
181
+ // For bad exit codes without error output or with tests that already ran, return empty report
182
+ if (!errorOutput || report.results.tests.length > 0) {
183
+ console.error('\nPHPUnit tests could not run.');
184
+ // Provide specific guidance based on common exit codes
185
+ if (exitCode === 127) {
186
+ console.error('The PHPUnit executable was not found.');
187
+ console.error('Check that:');
188
+ console.error(' - PHPUnit is installed (run: composer install)');
189
+ console.error(' - The phpunitPath in your config points to the correct location');
190
+ }
191
+ else if (exitCode === 255) {
192
+ console.error('PHPUnit encountered a fatal error.');
193
+ console.error('Check your phpunit.xml configuration and test bootstrap files.');
194
+ }
195
+ else {
196
+ console.error(`Unexpected error occurred (exit code: ${exitCode})`);
197
+ console.error('Check your PHPUnit configuration and ensure all dependencies are installed.');
198
+ }
199
+ return EMPTY_REPORT;
200
+ }
201
+ // Fall through to create synthetic test below
202
+ }
203
+ // Add error output to CTRF results if present and no tests ran
204
+ // This handles both bad exit codes (from above) and acceptable exit codes with errors
205
+ if (errorOutput && report.results.tests.length === 0) {
206
+ // Check if this is a "no tests executed" scenario vs an actual error
207
+ // PHPUnit outputs "No tests executed!" when no tests match the filter
208
+ const noTestsPattern = /No tests executed!?/i;
209
+ const isNoTestsExecuted = noTestsPattern.test(errorOutput) && exitCode === 0;
210
+ if (false === isNoTestsExecuted) {
211
+ // Bootstrap failure - create a synthetic test with the error
212
+ report.results.tests.push({
213
+ name: 'PHPUnit Bootstrap',
214
+ status: 'failed',
215
+ duration: 0,
216
+ message: 'Bootstrap failed - see trace for details',
217
+ trace: errorOutput,
218
+ });
219
+ report.results.summary.tests = 1;
220
+ report.results.summary.failed = 1;
221
+ }
222
+ // If no tests executed (isNoTestsExecuted === true), return empty report
223
+ // The runner will handle this based on passWithNoTests option
224
+ }
225
+ else if (stderrCapture.trim()) {
226
+ // Tests ran but there's stderr - add it to extra field
227
+ report.results.extra = {
228
+ ...report.results.extra,
229
+ stderr: stderrCapture.split('\n'),
230
+ };
231
+ }
170
232
  // Update tool name with environment
171
233
  report.results.tool.name = `wp-tester-phpunit (${environment.name})`;
172
234
  return report;
@@ -190,12 +252,34 @@ async function runPhpunitTestsForEnvironment(config, environment, hostPhpunitCon
190
252
  /**
191
253
  * Run PHPUnit tests in WordPress Playground environment
192
254
  *
193
- * @param config - Test configuration or path to config file
255
+ * @param config - Resolved test configuration
256
+ * @param phpunitArgsOrOptions - Additional PHPUnit arguments or options object
194
257
  * @returns CTRF report with test results
195
258
  */
196
- export async function runPhpunitTests(config) {
197
- // Resolve config (loads from path if string, resolves paths)
198
- const resolvedConfig = await resolveConfig(config);
259
+ export async function runPhpunitTests(config, phpunitArgsOrOptions) {
260
+ // Support both old signature (string[]) and new signature (options object)
261
+ const options = Array.isArray(phpunitArgsOrOptions)
262
+ ? { phpunitArgs: phpunitArgsOrOptions }
263
+ : phpunitArgsOrOptions || {};
264
+ const { phpunitArgs } = options;
265
+ // Merge additional PHPUnit args if provided
266
+ let resolvedConfig = { ...config };
267
+ if (phpunitArgs && phpunitArgs.length > 0) {
268
+ const configArgs = resolvedConfig.tests.phpunit?.phpunitArgs || [];
269
+ const mergedArgs = [...configArgs, ...phpunitArgs];
270
+ resolvedConfig = {
271
+ ...resolvedConfig,
272
+ tests: {
273
+ ...resolvedConfig.tests,
274
+ phpunit: resolvedConfig.tests.phpunit
275
+ ? {
276
+ ...resolvedConfig.tests.phpunit,
277
+ phpunitArgs: mergedArgs,
278
+ }
279
+ : undefined,
280
+ },
281
+ };
282
+ }
199
283
  // Check if PHPUnit tests are configured
200
284
  if (!shouldRunPhpunitTests(resolvedConfig)) {
201
285
  return Promise.resolve(EMPTY_REPORT);
@@ -210,10 +294,12 @@ export async function runPhpunitTests(config) {
210
294
  console.error(`PHPUnit config file not found: ${hostPhpunitConfigPath}`);
211
295
  return Promise.resolve(EMPTY_REPORT);
212
296
  }
213
- // Run tests for all environments
297
+ // Run tests for all enabled environments (skip those marked with skip: true)
214
298
  const reports = [];
215
- for (const environment of resolvedConfig.environments) {
299
+ const enabledEnvironments = resolvedConfig.environments.filter((env) => !env.skip);
300
+ for (const environment of enabledEnvironments) {
216
301
  const report = await runPhpunitTestsForEnvironment(resolvedConfig, environment, hostPhpunitConfigPath);
302
+ // Include report only if it has tests
217
303
  if (report.results.summary.tests > 0) {
218
304
  reports.push(report);
219
305
  }
@@ -229,4 +315,83 @@ export async function runPhpunitTests(config) {
229
315
  // Import mergeReports for multiple environments
230
316
  return mergeReports(reports);
231
317
  }
318
+ /**
319
+ * PHPUnit flags that are boolean (do not take a value).
320
+ * If a flag is NOT in this list, we assume it takes a value,
321
+ * and therefore the next argument should NOT be resolved as a path.
322
+ */
323
+ const booleanFlags = new Set([
324
+ '--teamcity', '--debug', '--verbose', '--testdox',
325
+ '--stderr', '--stop-on-error', '--stop-on-failure', '--stop-on-warning',
326
+ '--stop-on-defect', '--stop-on-risky', '--stop-on-skipped', '--stop-on-incomplete',
327
+ '--stop-on-deprecation', '--stop-on-notice', // Added in recent versions
328
+ '--fail-on-warning', '--fail-on-risky', '--fail-on-incomplete', '--fail-on-skipped',
329
+ '--fail-on-deprecation', '--fail-on-notice', // Added in recent versions
330
+ '--strict-coverage', '--strict-global-state', '--disallow-test-output',
331
+ '--disallow-resource-usage', '--enforce-time-limit',
332
+ '--process-isolation', '--no-globals-backup', '--static-backup',
333
+ '--no-configuration', '--no-coverage', '--no-logging', '--no-interaction',
334
+ '--no-extensions', '--no-output', '--dont-report-useless-tests',
335
+ '--no-progress', // Added
336
+ '--display-deprecations', '--display-errors', '--display-incomplete', // Added
337
+ '--display-notices', '--display-skipped', '--display-warnings', // Added
338
+ '--strict',
339
+ '--help', '--version',
340
+ '--list-groups', '--list-suites', '--list-tests', '--list-tests-xml',
341
+ // Colors often handled as boolean in simple usage
342
+ ]);
343
+ /**
344
+ * Resolve PHPUnit arguments to map host paths to VFS paths
345
+ *
346
+ * @param args - Original arguments
347
+ * @param config - Resolved configuration
348
+ * @param playground - Playground client for checking VFS file existence
349
+ * @returns Resolved arguments
350
+ */
351
+ export async function resolvePhpunitArgs(args, config, playground) {
352
+ const resolvedArgs = [];
353
+ for (let i = 0; i < args.length; i++) {
354
+ const arg = args[i];
355
+ // Don't resolve flags
356
+ if (arg.startsWith('-')) {
357
+ resolvedArgs.push(arg);
358
+ continue;
359
+ }
360
+ // Check if the previous argument was a flag that takes a value
361
+ const prevArg = args[i - 1];
362
+ if (prevArg?.startsWith('-') && !prevArg.includes('=')) {
363
+ // If the previous flag is NOT a known boolean flag, assume it takes a value
364
+ const flagName = prevArg.split('=')[0];
365
+ if (!booleanFlags.has(flagName)) {
366
+ resolvedArgs.push(arg); // This is the flag's value, not a path
367
+ continue;
368
+ }
369
+ }
370
+ // Resolve arguments that look like file/directory paths
371
+ const looksLikePath = arg.includes('/') ||
372
+ arg.endsWith('.php') ||
373
+ arg === 'tests' || arg === 'test';
374
+ if (looksLikePath) {
375
+ const absoluteHostPath = resolveAbsolute(arg, config.projectHostPath);
376
+ const vfsPath = hostToVfs(absoluteHostPath, config);
377
+ try {
378
+ // Validate that the file actually exists in the VFS
379
+ const exists = await playground.fileExists(vfsPath);
380
+ if (exists) {
381
+ resolvedArgs.push(vfsPath);
382
+ continue;
383
+ }
384
+ }
385
+ catch {
386
+ // Ignore validation errors and fallback to original arg (or should we?)
387
+ // If file check fails, it's safer to probably not resolve it if we are strict,
388
+ // but existing behavior was "looksLikePath -> resolve".
389
+ // If we add this check, we might break things that "look like path" but aren't files YET?
390
+ // But for running tests, the files must exist.
391
+ }
392
+ }
393
+ resolvedArgs.push(arg);
394
+ }
395
+ return resolvedArgs;
396
+ }
232
397
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}