From 453f0a0d7346c16b327e39520374a555ecc8f2e4 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 28 Apr 2024 17:47:20 +0900 Subject: test: check trap error message --- src/Execution/TrapException.php | 17 +++++++++++++++++ src/Execution/TrapKind.php | 11 +++++++++++ tests/src/SpecTestsuites/SpecTestsuiteBase.php | 24 ++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/Execution/TrapKind.php diff --git a/src/Execution/TrapException.php b/src/Execution/TrapException.php index 2948e8d..3e6a440 100644 --- a/src/Execution/TrapException.php +++ b/src/Execution/TrapException.php @@ -5,7 +5,24 @@ declare(strict_types=1); namespace Nsfisis\Waddiwasi\Execution; use RuntimeException; +use Throwable; class TrapException extends RuntimeException { + private readonly TrapKind $trapKind; + + public function __construct( + string $message = "", + int $code = 0, + ?Throwable $previous = null, + TrapKind $trapKind = TrapKind::Unknown, + ) { + parent::__construct($message, $code, $previous); + $this->trapKind = $trapKind; + } + + public function getTrapKind(): TrapKind + { + return $this->trapKind; + } } diff --git a/src/Execution/TrapKind.php b/src/Execution/TrapKind.php new file mode 100644 index 0000000..47c1c77 --- /dev/null +++ b/src/Execution/TrapKind.php @@ -0,0 +1,11 @@ +assertNotNull($exception, "at $line"); - // @todo check trap message + $this->assertTrapKind($text, $e->getTrapKind(), "at $line"); } else { $this->assertTrue(false, "assert_trap: unknown action, $actionType"); } @@ -176,7 +177,7 @@ abstract class SpecTestsuiteBase extends TestCase $this->assertCount( count($expectedResults), $actualResults, - "results count mismatch" . $message, + 'results count mismatch' . $message, ); for ($i = 0; $i < count($expectedResults); $i++) { @@ -222,4 +223,23 @@ abstract class SpecTestsuiteBase extends TestCase } } } + + private function assertTrapKind( + string $expectedErrorMessage, + TrapKind $kind, + string $message = '', + ): void { + if ($message !== '') { + $message = " ($message)"; + } + $actualErrorMessage = match ($kind) { + TrapKind::OutOfBoundsMemoryAccess => 'out of bounds memory access', + TrapKind::Unknown => 'unknown', + }; + $this->assertSame( + $expectedErrorMessage, + $actualErrorMessage, + 'trap kind mismatch' . $message, + ); + } } -- cgit v1.3-1-g0d28