<?php /* * This file is part of sebastian/diff. * * (c) Sebastian Bergmann <sebastian@phpunit.de> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Diff; use PHPUnit\Framework\TestCase; /** * @covers SebastianBergmann\Diff\Parser * * @uses SebastianBergmann\Diff\Chunk * @uses SebastianBergmann\Diff\Diff * @uses SebastianBergmann\Diff\Line */ class ParserTest extends TestCase { /** * @var Parser */ private $parser; protected function setUp() { $this->parser = new Parser; } public function testParse() { $content = \file_get_contents(__DIR__ . '/fixtures/patch.txt'); $diffs = $this->parser->parse($content); $this->assertInternalType('array', $diffs); $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Diff', $diffs); $this->assertCount(1, $diffs); $chunks = $diffs[0]->getChunks(); $this->assertInternalType('array', $chunks); $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Chunk', $chunks); $this->assertCount(1, $chunks); $this->assertEquals(20, $chunks[0]->getStart()); $this->assertCount(4, $chunks[0]->getLines()); } public function testParseWithMultipleChunks() { $content = \file_get_contents(__DIR__ . '/fixtures/patch2.txt'); $diffs = $this->parser->parse($content); $this->assertCount(1, $diffs); $chunks = $diffs[0]->getChunks(); $this->assertCount(3, $chunks); $this->assertEquals(20, $chunks[0]->getStart()); $this->assertEquals(320, $chunks[1]->getStart()); $this->assertEquals(600, $chunks[2]->getStart()); $this->assertCount(5, $chunks[0]->getLines()); $this->assertCount(5, $chunks[1]->getLines()); $this->assertCount(4, $chunks[2]->getLines()); } public function testParseWithRemovedLines() { $content = <<<A diff --git a/Test.txt b/Test.txt index abcdefg..abcdefh 100644 --- a/Test.txt +++ b/Test.txt @@ -49,9 +49,8 @@ A -B A; $diffs = $this->parser->parse($content); $this->assertInternalType('array', $diffs); $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Diff', $diffs); $this->assertCount(1, $diffs); $chunks = $diffs[0]->getChunks(); $this->assertInternalType('array', $chunks); $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Chunk', $chunks); $this->assertCount(1, $chunks); $chunk = $chunks[0]; $this->assertSame(49, $chunk->getStart()); $this->assertSame(49, $chunk->getEnd()); $this->assertSame(9, $chunk->getStartRange()); $this->assertSame(8, $chunk->getEndRange()); $lines = $chunk->getLines(); $this->assertInternalType('array', $lines); $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Line', $lines); $this->assertCount(2, $lines); /** @var Line $line */ $line = $lines[0]; $this->assertSame('A', $line->getContent()); $this->assertSame(Line::UNCHANGED, $line->getType()); $line = $lines[1]; $this->assertSame('B', $line->getContent()); $this->assertSame(Line::REMOVED, $line->getType()); } public function testParseDiffForMulitpleFiles() { $content = <<<A diff --git a/Test.txt b/Test.txt index abcdefg..abcdefh 100644 --- a/Test.txt +++ b/Test.txt @@ -1,3 +1,2 @@ A -B diff --git a/Test123.txt b/Test123.txt index abcdefg..abcdefh 100644 --- a/Test2.txt +++ b/Test2.txt @@ -1,2 +1,3 @@ A +B A; $diffs = $this->parser->parse($content); $this->assertCount(2, $diffs); /** @var Diff $diff */ $diff = $diffs[0]; $this->assertSame('a/Test.txt', $diff->getFrom()); $this->assertSame('b/Test.txt', $diff->getTo()); $this->assertCount(1, $diff->getChunks()); $diff = $diffs[1]; $this->assertSame('a/Test2.txt', $diff->getFrom()); $this->assertSame('b/Test2.txt', $diff->getTo()); $this->assertCount(1, $diff->getChunks()); } }