@@ -87,18 +87,17 @@ public function testGetLinkFormatFromEnv(string $expected, array $environmentVar
8787 */
8888 public static function provideLinkFormats () : iterable
8989 {
90- yield [
91- self ::isWindows ()
92- ? "↳ <href=phpstorm://open?file=/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php&line=20>src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20</> \n"
93- : "↳ <href=phpstorm://open?file=/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php&line=20>src/Core/Admin/.../User/AddUserController.php:20</> \n" ,
90+ // Unix/Linux paths (forward slashes)
91+ yield 'Unix - DEFAULT with editor and decoration ' => [
92+ "↳ <href=phpstorm://open?file=/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php&line=20>src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20</> \n" ,
9493 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
9594 20 ,
9695 '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
9796 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
9897 self ::PHPSTORM_EDITOR_URL ,
9998 true ,
10099 ];
101- yield [
100+ yield ' Unix - GITHUB_ACTIONS ' => [
102101 "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
103102 TicketSwapErrorFormatter::LINK_FORMAT_GITHUB_ACTIONS ,
104103 20 ,
@@ -107,7 +106,7 @@ public static function provideLinkFormats() : iterable
107106 self ::PHPSTORM_EDITOR_URL ,
108107 true ,
109108 ];
110- yield [
109+ yield ' Unix - WARP ' => [
111110 "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
112111 TicketSwapErrorFormatter::LINK_FORMAT_WARP ,
113112 20 ,
@@ -116,7 +115,7 @@ public static function provideLinkFormats() : iterable
116115 self ::PHPSTORM_EDITOR_URL ,
117116 true ,
118117 ];
119- yield [
118+ yield ' Unix - PHPSTORM ' => [
120119 "↳ file:///www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
121120 TicketSwapErrorFormatter::LINK_FORMAT_PHPSTORM ,
122121 20 ,
@@ -125,7 +124,7 @@ public static function provideLinkFormats() : iterable
125124 self ::PHPSTORM_EDITOR_URL ,
126125 true ,
127126 ];
128- yield [
127+ yield ' Unix - WITHOUT_EDITOR ' => [
129128 "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
130129 TicketSwapErrorFormatter::LINK_FORMAT_WITHOUT_EDITOR ,
131130 20 ,
@@ -134,7 +133,7 @@ public static function provideLinkFormats() : iterable
134133 self ::PHPSTORM_EDITOR_URL ,
135134 true ,
136135 ];
137- yield [
136+ yield ' Unix - DEFAULT without decoration ' => [
138137 "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
139138 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
140139 20 ,
@@ -143,7 +142,7 @@ public static function provideLinkFormats() : iterable
143142 self ::PHPSTORM_EDITOR_URL ,
144143 false ,
145144 ];
146- yield [
145+ yield ' Unix - DEFAULT without editor URL ' => [
147146 "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
148147 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
149148 20 ,
@@ -152,6 +151,35 @@ public static function provideLinkFormats() : iterable
152151 null ,
153152 true ,
154153 ];
154+
155+ // Windows paths (backslashes)
156+ yield 'Windows - DEFAULT with editor and decoration ' => [
157+ "↳ <href=phpstorm://open?file=C: \\www \\project \\src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php&line=20>src \\Core \\Admin \\... \\User \\AddUserController.php:20</> \n" ,
158+ TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
159+ 20 ,
160+ 'C: \\www \\project \\src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
161+ 'src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
162+ self ::PHPSTORM_EDITOR_URL ,
163+ true ,
164+ ];
165+ yield 'Windows - GITHUB_ACTIONS ' => [
166+ "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n" ,
167+ TicketSwapErrorFormatter::LINK_FORMAT_GITHUB_ACTIONS ,
168+ 20 ,
169+ 'C: \\www \\project \\src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
170+ 'src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
171+ self ::PHPSTORM_EDITOR_URL ,
172+ true ,
173+ ];
174+ yield 'Windows - WITHOUT_EDITOR ' => [
175+ "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n" ,
176+ TicketSwapErrorFormatter::LINK_FORMAT_WITHOUT_EDITOR ,
177+ 20 ,
178+ 'C: \\www \\project \\src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
179+ 'src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php ' ,
180+ self ::PHPSTORM_EDITOR_URL ,
181+ true ,
182+ ];
155183 }
156184
157185 /**
@@ -405,12 +433,20 @@ public function testFormatErrorsNoErrorsWritesNoErrorsAndReturnsZero() : void
405433
406434 public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOne () : void
407435 {
436+ // Use OS-appropriate paths to test directory separator handling
437+ $ absolutePath = self ::isWindows ()
438+ ? 'C: \\www \\project \\src \\Foo \\Bar.php '
439+ : '/www/project/src/Foo/Bar.php ' ;
440+ $ configPath = self ::isWindows ()
441+ ? 'C: \\www \\project \\phpstan.neon '
442+ : '/www/project/phpstan.neon ' ;
443+
408444 $ fileError = new Error (
409445 'Parameter #1 $var expects string, int given. ' ,
410- ' /www/project/src/Foo/Bar.php ' ,
446+ $ absolutePath ,
411447 12 ,
412448 null ,
413- ' /www/project/src/Foo/Bar.php ' ,
449+ $ absolutePath ,
414450 null ,
415451 'Adjust in %configurationFile% ' ,
416452 null ,
@@ -426,7 +462,7 @@ public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOn
426462 [],
427463 [],
428464 false ,
429- ' /www/project/phpstan.neon ' ,
465+ $ configPath ,
430466 false ,
431467 0 ,
432468 false ,
@@ -440,9 +476,13 @@ public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOn
440476
441477 self ::assertSame (1 , $ result );
442478
443- $ expectedLink = self ::isWindows ()
444- ? "↳ <href=phpstorm://open?file=/www/project/src/Foo/Bar.php&line=12>/www/project/src/Foo/Bar.php:12</> \n"
445- : "↳ <href=phpstorm://open?file=/www/project/src/Foo/Bar.php&line=12>/www/project/.../Foo/Bar.php:12</> \n" ;
479+ // NullRelativePathHelper returns the absolute path, which has 6+ parts and gets trimmed
480+ // Windows: C:\www\project\src\Foo\Bar.php -> C:\www\project\...\Foo\Bar.php
481+ // Unix: /www/project/src/Foo/Bar.php -> /www/project/.../Foo/Bar.php
482+ $ expectedShortPath = self ::isWindows ()
483+ ? 'C: \\www \\project \\... \\Foo \\Bar.php '
484+ : '/www/project/.../Foo/Bar.php ' ;
485+ $ expectedLink = "↳ <href=phpstorm://open?file= $ absolutePath&line=12> $ expectedShortPath:12</> \n" ;
446486 $ expectedSummary = '<bg=red;options=bold>Found 1 error</> ' ;
447487
448488 $ writes = $ output ->getWrites ();
0 commit comments