From 3bed335a857c32db6ddf5cdf9a85b7d33fbee20a Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 19 Dec 2025 07:35:27 +0700 Subject: [PATCH 1/4] Add windows on CI --- .github/workflows/ci.yaml | 3 ++- src/TicketSwapErrorFormatter.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3c8dc15..3ec518c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -10,10 +10,11 @@ concurrency: jobs: tests: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: + os: [ubuntu-latest, windows-latest] php: - '7.4' - '8.0' diff --git a/src/TicketSwapErrorFormatter.php b/src/TicketSwapErrorFormatter.php index 37cc849..fe1f477 100644 --- a/src/TicketSwapErrorFormatter.php +++ b/src/TicketSwapErrorFormatter.php @@ -178,7 +178,7 @@ public static function link( ); } - private static function trimPath(string $path) : string + private static function trimPath(string $path, $other = '') : string { $parts = explode(DIRECTORY_SEPARATOR, $path); if (count($parts) < 6) { From 9a8cfe585908a9c0dc8a4f5426caab367260f349 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 19 Dec 2025 07:38:00 +0700 Subject: [PATCH 2/4] update normalize directory separator to works on windows --- src/TicketSwapErrorFormatter.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/TicketSwapErrorFormatter.php b/src/TicketSwapErrorFormatter.php index fe1f477..9b1e24e 100644 --- a/src/TicketSwapErrorFormatter.php +++ b/src/TicketSwapErrorFormatter.php @@ -178,15 +178,17 @@ public static function link( ); } - private static function trimPath(string $path, $other = '') : string + private static function trimPath(string $path) : string { - $parts = explode(DIRECTORY_SEPARATOR, $path); + // Normalize to forward slashes for consistent handling across platforms + $normalizedPath = str_replace('\\', '/', $path); + $parts = explode('/', $normalizedPath); if (count($parts) < 6) { return $path; } return implode( - DIRECTORY_SEPARATOR, + '/', [ ...array_slice($parts, 0, 3), '...', From b7875a9edfb356e99b08b1192fd817c3581b9f95 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 19 Dec 2025 15:15:02 +0700 Subject: [PATCH 3/4] rollback directory separator normalize --- src/TicketSwapErrorFormatter.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/TicketSwapErrorFormatter.php b/src/TicketSwapErrorFormatter.php index 9b1e24e..37cc849 100644 --- a/src/TicketSwapErrorFormatter.php +++ b/src/TicketSwapErrorFormatter.php @@ -180,15 +180,13 @@ public static function link( private static function trimPath(string $path) : string { - // Normalize to forward slashes for consistent handling across platforms - $normalizedPath = str_replace('\\', '/', $path); - $parts = explode('/', $normalizedPath); + $parts = explode(DIRECTORY_SEPARATOR, $path); if (count($parts) < 6) { return $path; } return implode( - '/', + DIRECTORY_SEPARATOR, [ ...array_slice($parts, 0, 3), '...', From cd151051eb1399384f96bc31d733d0c09fbeb37b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 19 Dec 2025 15:20:48 +0700 Subject: [PATCH 4/4] fix unit test --- tests/TicketSwapErrorFormatterTest.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/TicketSwapErrorFormatterTest.php b/tests/TicketSwapErrorFormatterTest.php index 2b85231..5cc00d3 100644 --- a/tests/TicketSwapErrorFormatterTest.php +++ b/tests/TicketSwapErrorFormatterTest.php @@ -39,6 +39,11 @@ public function formatErrors(AnalysisResult $analysisResult, Output $output): in ); } + private static function isWindows() : bool + { + return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; + } + /** * @return iterable}> */ @@ -83,7 +88,9 @@ public function testGetLinkFormatFromEnv(string $expected, array $environmentVar public static function provideLinkFormats() : iterable { yield [ - "↳ src/Core/Admin/.../User/AddUserController.php:20\n", + self::isWindows() + ? "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20\n" + : "↳ src/Core/Admin/.../User/AddUserController.php:20\n", TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT, 20, '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php', @@ -433,7 +440,9 @@ public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOn self::assertSame(1, $result); - $expectedLink = "↳ /www/project/.../Foo/Bar.php:12\n"; + $expectedLink = self::isWindows() + ? "↳ /www/project/src/Foo/Bar.php:12\n" + : "↳ /www/project/.../Foo/Bar.php:12\n"; $expectedSummary = 'Found 1 error'; $writes = $output->getWrites();