@@ -39,6 +39,11 @@ public function formatErrors(AnalysisResult $analysisResult, Output $output): in
3939 );
4040 }
4141
42+ private static function isWindows () : bool
43+ {
44+ return strtoupper (substr (PHP_OS , 0 , 3 )) === 'WIN ' ;
45+ }
46+
4247 /**
4348 * @return iterable<array{TicketSwapErrorFormatter::LINK_FORMAT_*, array<string, string>}>
4449 */
@@ -83,65 +88,79 @@ public function testGetLinkFormatFromEnv(string $expected, array $environmentVar
8388 public static function provideLinkFormats () : iterable
8489 {
8590 yield [
86- "↳ <href=phpstorm://open?file=/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php&line=20>src/Core/Admin/.../User/AddUserController.php:20</> \n" ,
91+ self ::isWindows ()
92+ ? "↳ <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"
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" ,
8794 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
8895 20 ,
89- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
90- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
96+ self :: isWindows () ? ' c:\www\project\src\Core\Admin\Controller\Dashboard\User\AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
97+ self :: isWindows () ? ' src\Core\Admin\Controller\Dashboard\User\AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
9198 self ::PHPSTORM_EDITOR_URL ,
9299 true ,
93100 ];
94101 yield [
95- "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
102+ self ::isWindows ()
103+ ? "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
104+ : "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
96105 TicketSwapErrorFormatter::LINK_FORMAT_GITHUB_ACTIONS ,
97106 20 ,
98- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
99- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
107+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
108+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
100109 self ::PHPSTORM_EDITOR_URL ,
101110 true ,
102111 ];
103112 yield [
104- "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
113+ self ::isWindows ()
114+ ? "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
115+ : "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
105116 TicketSwapErrorFormatter::LINK_FORMAT_WARP ,
106117 20 ,
107- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
108- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
118+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
119+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
109120 self ::PHPSTORM_EDITOR_URL ,
110121 true ,
111122 ];
112123 yield [
113- "↳ file:///www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
124+ self ::isWindows ()
125+ ? "↳ file://c: \\www \\project \\src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
126+ : "↳ file:///www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
114127 TicketSwapErrorFormatter::LINK_FORMAT_PHPSTORM ,
115128 20 ,
116- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
117- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
129+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
130+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
118131 self ::PHPSTORM_EDITOR_URL ,
119132 true ,
120133 ];
121134 yield [
122- "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
135+ self ::isWindows ()
136+ ? "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
137+ : "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
123138 TicketSwapErrorFormatter::LINK_FORMAT_WITHOUT_EDITOR ,
124139 20 ,
125- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
126- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
140+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
141+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
127142 self ::PHPSTORM_EDITOR_URL ,
128143 true ,
129144 ];
130145 yield [
131- "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
146+ self ::isWindows ()
147+ ? "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
148+ : "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
132149 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
133150 20 ,
134- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
135- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
151+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
152+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
136153 self ::PHPSTORM_EDITOR_URL ,
137154 false ,
138155 ];
139156 yield [
140- "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
157+ self ::isWindows ()
158+ ? "↳ src \\Core \\Admin \\Controller \\Dashboard \\User \\AddUserController.php:20 \n"
159+ : "↳ src/Core/Admin/Controller/Dashboard/User/AddUserController.php:20 \n" ,
141160 TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT ,
142161 20 ,
143- '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
144- 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
162+ self :: isWindows () ? ' c: \\ www \\ project \\ src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : '/www/project/src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
163+ self :: isWindows () ? ' src \\ Core \\ Admin \\ Controller \\ Dashboard \\ User \\ AddUserController.php ' : 'src/Core/Admin/Controller/Dashboard/User/AddUserController.php ' ,
145164 null ,
146165 true ,
147166 ];
@@ -398,12 +417,20 @@ public function testFormatErrorsNoErrorsWritesNoErrorsAndReturnsZero() : void
398417
399418 public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOne () : void
400419 {
420+ // Use OS-appropriate paths to test directory separator handling
421+ $ absolutePath = self ::isWindows ()
422+ ? 'C: \\www \\project \\src \\Foo \\Bar.php '
423+ : '/www/project/src/Foo/Bar.php ' ;
424+ $ configPath = self ::isWindows ()
425+ ? 'C: \\www \\project \\phpstan.neon '
426+ : '/www/project/phpstan.neon ' ;
427+
401428 $ fileError = new Error (
402429 'Parameter #1 $var expects string, int given. ' ,
403- ' /www/project/src/Foo/Bar.php ' ,
430+ $ absolutePath ,
404431 12 ,
405432 null ,
406- ' /www/project/src/Foo/Bar.php ' ,
433+ $ absolutePath ,
407434 null ,
408435 'Adjust in %configurationFile% ' ,
409436 null ,
@@ -419,7 +446,7 @@ public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOn
419446 [],
420447 [],
421448 false ,
422- ' /www/project/phpstan.neon ' ,
449+ $ configPath ,
423450 false ,
424451 0 ,
425452 false ,
@@ -433,7 +460,13 @@ public function testFormatErrorsWithErrorsPrintsMessagesLinksSummaryAndReturnsOn
433460
434461 self ::assertSame (1 , $ result );
435462
436- $ expectedLink = "↳ <href=phpstorm://open?file=/www/project/src/Foo/Bar.php&line=12>/www/project/.../Foo/Bar.php:12</> \n" ;
463+ // NullRelativePathHelper returns the absolute path, which has 6+ parts and gets trimmed
464+ // Windows: C:\www\project\src\Foo\Bar.php -> C:\www\project\...\Foo\Bar.php
465+ // Unix: /www/project/src/Foo/Bar.php -> /www/project/.../Foo/Bar.php
466+ $ expectedShortPath = self ::isWindows ()
467+ ? 'C: \\www \\project \\... \\Foo \\Bar.php '
468+ : '/www/project/.../Foo/Bar.php ' ;
469+ $ expectedLink = "↳ <href=phpstorm://open?file= $ absolutePath&line=12> $ expectedShortPath:12</> \n" ;
437470 $ expectedSummary = '<bg=red;options=bold>Found 1 error</> ' ;
438471
439472 $ writes = $ output ->getWrites ();
0 commit comments