diff --git a/README.md b/README.md index d8484d1..ce14162 100644 --- a/README.md +++ b/README.md @@ -563,6 +563,7 @@ There are several environment variables available to configure: | `PANTHER_BROWSER_CLASS` | `PantherBrowser` class to use. | `Zenstruck\Browser\PantherBrowser` | | `PANTHER_NO_HEADLESS` | Disable headless-mode and allow usage of `PantherBrowser::pause()`. | `0` _(false)_ | | `BROWSER_ALWAYS_START_WEBSERVER` | Always start a webserver configured for your current test env before running tests (only applies to `PantherBrowser`). | `0` _(false)_ | +| `BROWSER_FILE_LINK_FORMAT` | Turns file paths seen in `Saved Source Files` into links that open those files right inside your browser | `file://%f#L%l` | ## Extending diff --git a/src/Browser/Test/LegacyExtension.php b/src/Browser/Test/LegacyExtension.php index 7842c27..3369a3a 100644 --- a/src/Browser/Test/LegacyExtension.php +++ b/src/Browser/Test/LegacyExtension.php @@ -11,8 +11,15 @@ namespace Zenstruck\Browser\Test; +use Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter; +use Symfony\Component\HttpKernel\Debug\FileLinkFormatter as LegacyFileLinkFormatter; use Zenstruck\Browser; +if (!class_exists(FileLinkFormatter::class) && class_exists(LegacyFileLinkFormatter::class)) { + class_alias(LegacyFileLinkFormatter::class, FileLinkFormatter::class); +} + + /** * @author Kevin Bond */ @@ -24,6 +31,12 @@ class LegacyExtension /** @var array> */ private array $savedArtifacts = []; + private FileLinkFormatter $fileLinkFormatter; + + public function __construct(FileLinkFormatter|null $fileLinkFormatter = null) + { + $this->fileLinkFormatter = $fileLinkFormatter ?? new FileLinkFormatter($_ENV['BROWSER_FILE_LINK_FORMAT'] ?? $_SERVER['BROWSER_FILE_LINK_FORMAT'] ?? ''); + } /** * @internal @@ -77,7 +90,7 @@ public function executeAfterLastTest(): void echo "\n {$category}:"; foreach ($artifacts as $artifact) { - echo "\n * {$artifact}:"; + echo "\n * \033]8;;{$this->fileLinkFormatter->format(realpath($artifact) ?: '', 1)}\033\\$artifact\033]8;;\033\\"; } } }