From a05684026e63cdc02089b72a3be76028d336b905 Mon Sep 17 00:00:00 2001 From: Fabio Ivona Date: Fri, 24 Mar 2023 19:00:38 +0100 Subject: [PATCH 1/4] wip --- overrides/Event/Value/ThrowableBuilder.php | 53 ++++++++++++++++++++++ src/Bootstrappers/BootOverrides.php | 1 + 2 files changed, 54 insertions(+) create mode 100644 overrides/Event/Value/ThrowableBuilder.php diff --git a/overrides/Event/Value/ThrowableBuilder.php b/overrides/Event/Value/ThrowableBuilder.php new file mode 100644 index 00000000..c2a0326e --- /dev/null +++ b/overrides/Event/Value/ThrowableBuilder.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Code; + +use NunoMaduro\Collision\Contracts\CustomEditor; +use PHPUnit\Event\NoPreviousThrowableException; +use PHPUnit\Framework\Exception; +use PHPUnit\Util\Filter; +use PHPUnit\Util\ThrowableToStringMapper; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ThrowableBuilder +{ + /** + * @throws Exception + * @throws NoPreviousThrowableException + */ + public static function from(\Throwable $t): Throwable + { + $previous = $t->getPrevious(); + + if ($previous !== null) { + $previous = self::from($previous); + } + + $trace = Filter::getFilteredStacktrace($t); + + if($t instanceof CustomEditor && $t->getCustomEditorFrame()){ + $frame = $t->getCustomEditorFrame(); + $file = $frame->getFile(); + $line = $frame->getLine(); + + $trace = "$file:$line\n$trace"; + } + + return new Throwable( + $t::class, + $t->getMessage(), + ThrowableToStringMapper::map($t), + $trace, + $previous + ); + } +} diff --git a/src/Bootstrappers/BootOverrides.php b/src/Bootstrappers/BootOverrides.php index e1489d7c..0fc1aee6 100644 --- a/src/Bootstrappers/BootOverrides.php +++ b/src/Bootstrappers/BootOverrides.php @@ -24,6 +24,7 @@ final class BootOverrides implements Bootstrapper 'TextUI/Command/WarmCodeCoverageCacheCommand.php', 'TextUI/Output/Default/ProgressPrinter/TestSkippedSubscriber.php', 'TextUI/TestSuiteFilterProcessor.php', + 'Event/Value/ThrowableBuilder.php', ]; /** From 681723cbc30b7007108d6d4737827900ba1b30ff Mon Sep 17 00:00:00 2001 From: Fabio Ivona Date: Fri, 31 Mar 2023 08:43:59 +0200 Subject: [PATCH 2/4] matches Collision changes --- composer.json | 2 +- overrides/Event/Value/ThrowableBuilder.php | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index ae07d0fb..497b8d56 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "require": { "php": "^8.1.0", "brianium/paratest": "^7.1.2", - "nunomaduro/collision": "^7.3.3", + "nunomaduro/collision": "^v7.x-dev", "nunomaduro/termwind": "^1.15.1", "pestphp/pest-plugin": "^2.0.0", "pestphp/pest-plugin-arch": "^2.0.1", diff --git a/overrides/Event/Value/ThrowableBuilder.php b/overrides/Event/Value/ThrowableBuilder.php index c2a0326e..681fcfd6 100644 --- a/overrides/Event/Value/ThrowableBuilder.php +++ b/overrides/Event/Value/ThrowableBuilder.php @@ -1,4 +1,6 @@ -getCustomEditorFrame()){ - $frame = $t->getCustomEditorFrame(); + if ($t instanceof RenderableOnCollisionEditor && $frame = $t->toCollisionEditor()) { $file = $frame->getFile(); $line = $frame->getLine(); From 90b6771451fdffe449b9bedad3853346bf359a33 Mon Sep 17 00:00:00 2001 From: Fabio Ivona Date: Fri, 31 Mar 2023 08:46:35 +0200 Subject: [PATCH 3/4] add tests --- tests/Unit/Overrides/ThrowableBuilder.php | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/Unit/Overrides/ThrowableBuilder.php diff --git a/tests/Unit/Overrides/ThrowableBuilder.php b/tests/Unit/Overrides/ThrowableBuilder.php new file mode 100644 index 00000000..0c47b3d6 --- /dev/null +++ b/tests/Unit/Overrides/ThrowableBuilder.php @@ -0,0 +1,29 @@ + __DIR__.'/../../Pest.php', + 'line' => 5, + ]); + } + }; + + expect(ThrowableBuilder::from($exception)) + ->stackTrace()->toStartWith('/data/projects/open-source/pest/tests/Unit/Overrides/../../Pest.php:5') + ->and(ThrowableBuilder::from(new Exception('test'))) + ->stackTrace()->toStartWith('/data/projects/open-source/pest/tests/Unit/Overrides/ThrowableBuilder.php:26'); + +}); From 4df6ab4a8448c364061c443c258fa4c19a6b7c42 Mon Sep 17 00:00:00 2001 From: Fabio Ivona Date: Fri, 31 Mar 2023 08:59:38 +0200 Subject: [PATCH 4/4] lint --- tests/Unit/Overrides/ThrowableBuilder.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Unit/Overrides/ThrowableBuilder.php b/tests/Unit/Overrides/ThrowableBuilder.php index 0c47b3d6..08a69680 100644 --- a/tests/Unit/Overrides/ThrowableBuilder.php +++ b/tests/Unit/Overrides/ThrowableBuilder.php @@ -25,5 +25,4 @@ test('collision editor can be added to the stack trace', function () { ->stackTrace()->toStartWith('/data/projects/open-source/pest/tests/Unit/Overrides/../../Pest.php:5') ->and(ThrowableBuilder::from(new Exception('test'))) ->stackTrace()->toStartWith('/data/projects/open-source/pest/tests/Unit/Overrides/ThrowableBuilder.php:26'); - });