44
55namespace DocbookCS \Tests \Unit \Diff ;
66
7+ use DocbookCS \Diff \Diff ;
78use DocbookCS \Diff \DiffParser ;
9+ use DocbookCS \Diff \FileChange ;
810use PHPUnit \Framework \Attributes \CoversClass ;
911use PHPUnit \Framework \Attributes \Test ;
12+ use PHPUnit \Framework \Attributes \UsesClass ;
1013use PHPUnit \Framework \TestCase ;
1114
1215#[
1316 CoversClass(DiffParser::class),
17+ UsesClass(Diff::class),
18+ UsesClass(FileChange::class),
1419]
1520final class DiffParserTest extends TestCase
1621{
@@ -24,7 +29,7 @@ protected function setUp(): void
2429 #[Test]
2530 public function itReturnsEmptyArrayForEmptyDiff (): void
2631 {
27- self ::assertSame ([], $ this ->parser ->parse ('' ));
32+ self ::assertSame ([], $ this ->lineNumbersByFile ( $ this -> parser ->parse ('' ) ));
2833 }
2934
3035 #[Test]
@@ -41,7 +46,7 @@ public function itParsesAddedLineNumbers(): void
4146 line3
4247DIFF;
4348
44- $ result = $ this ->parser ->parse ($ diff );
49+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
4550
4651 self ::assertArrayHasKey ('reference/file.xml ' , $ result );
4752 self ::assertSame ([2 ], $ result ['reference/file.xml ' ]);
@@ -62,7 +67,7 @@ public function itParsesMultipleAddedLines(): void
6267 last line
6368DIFF;
6469
65- $ result = $ this ->parser ->parse ($ diff );
70+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
6671
6772 self ::assertSame ([6 , 7 ], $ result ['doc/chapter.xml ' ]);
6873 }
@@ -79,7 +84,7 @@ public function itStripsTheBPrefix(): void
7984+added
8085DIFF;
8186
82- $ result = $ this ->parser ->parse ($ diff );
87+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
8388
8489 self ::assertArrayHasKey ('src/file.xml ' , $ result );
8590 self ::assertArrayNotHasKey ('b/src/file.xml ' , $ result );
@@ -99,7 +104,7 @@ public function itExcludesDeletedFiles(): void
99104-line3
100105DIFF;
101106
102- self ::assertSame ([], $ this ->parser ->parse ($ diff ));
107+ self ::assertSame ([], $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) ));
103108 }
104109
105110 #[Test]
@@ -116,7 +121,7 @@ public function itHandlesNewlyCreatedFiles(): void
116121+line3
117122DIFF;
118123
119- $ result = $ this ->parser ->parse ($ diff );
124+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
120125
121126 self ::assertArrayHasKey ('new.xml ' , $ result );
122127 self ::assertSame ([1 , 2 , 3 ], $ result ['new.xml ' ]);
@@ -142,7 +147,7 @@ public function itHandlesMultipleFilesInOneDiff(): void
142147 unchanged
143148DIFF;
144149
145- $ result = $ this ->parser ->parse ($ diff );
150+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
146151
147152 self ::assertArrayHasKey ('first.xml ' , $ result );
148153 self ::assertArrayHasKey ('second.xml ' , $ result );
@@ -164,7 +169,7 @@ public function itIgnoresRemovedLines(): void
164169 line3
165170DIFF;
166171
167- $ result = $ this ->parser ->parse ($ diff );
172+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
168173
169174 // No lines added, so the changed set is empty (not absent — the file is tracked).
170175 self ::assertArrayHasKey ('file.xml ' , $ result );
@@ -185,7 +190,7 @@ public function itIgnoresTheMissingFinalNewlineMarker(): void
185190+second
186191DIFF;
187192
188- $ result = $ this ->parser ->parse ($ diff );
193+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
189194
190195 self ::assertSame ([1 , 2 ], $ result ['file.xml ' ]);
191196 }
@@ -209,7 +214,7 @@ public function itTracksLineNumbersAcrossMultipleHunks(): void
209214 line12
210215DIFF;
211216
212- $ result = $ this ->parser ->parse ($ diff );
217+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
213218
214219 self ::assertSame ([2 , 12 ], $ result ['file.xml ' ]);
215220 }
@@ -225,8 +230,21 @@ public function itHandlesHunkWithNoContext(): void
225230+only line
226231DIFF;
227232
228- $ result = $ this ->parser ->parse ($ diff );
233+ $ result = $ this ->lineNumbersByFile ( $ this -> parser ->parse ($ diff) );
229234
230235 self ::assertSame ([1 ], $ result ['file.xml ' ]);
231236 }
237+
238+ // TODO: avoids test diff churn; remove when fixers merged
239+ /** @return array<string, list<int>> */
240+ private function lineNumbersByFile (Diff $ diff ): array
241+ {
242+ $ lineNumbersByFile = [];
243+
244+ foreach ($ diff ->fileChanges as $ fileChange ) {
245+ $ lineNumbersByFile [$ fileChange ->filePath ] = $ fileChange ->addedLineNumbers ;
246+ }
247+
248+ return $ lineNumbersByFile ;
249+ }
232250}
0 commit comments