250 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| /*
 | ||
|  * This file is part of the Diff package.
 | ||
|  *
 | ||
|  * (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;
 | ||
| use SebastianBergmann\Diff\LCS\MemoryEfficientImplementation;
 | ||
| use SebastianBergmann\Diff\LCS\TimeEfficientImplementation;
 | ||
| 
 | ||
| class DifferTest extends PHPUnit_Framework_TestCase
 | ||
| {
 | ||
|     const REMOVED = 2;
 | ||
|     const ADDED   = 1;
 | ||
|     const OLD     = 0;
 | ||
| 
 | ||
|     /**
 | ||
|      * @var Differ
 | ||
|      */
 | ||
|     private $differ;
 | ||
| 
 | ||
|     protected function setUp()
 | ||
|     {
 | ||
|         $this->differ = new Differ;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @param array  $expected
 | ||
|      * @param string $from
 | ||
|      * @param string $to
 | ||
|      * @dataProvider arrayProvider
 | ||
|      * @covers       SebastianBergmann\Diff\Differ::diffToArray
 | ||
|      * @covers       SebastianBergmann\Diff\LCS\TimeEfficientImplementation
 | ||
|      */
 | ||
|     public function testArrayRepresentationOfDiffCanBeRenderedUsingTimeEfficientLcsImplementation(array $expected, $from, $to)
 | ||
|     {
 | ||
|         $this->assertEquals($expected, $this->differ->diffToArray($from, $to, new TimeEfficientImplementation));
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @param string $expected
 | ||
|      * @param string $from
 | ||
|      * @param string $to
 | ||
|      * @dataProvider textProvider
 | ||
|      * @covers       SebastianBergmann\Diff\Differ::diff
 | ||
|      * @covers       SebastianBergmann\Diff\LCS\TimeEfficientImplementation
 | ||
|      */
 | ||
|     public function testTextRepresentationOfDiffCanBeRenderedUsingTimeEfficientLcsImplementation($expected, $from, $to)
 | ||
|     {
 | ||
|         $this->assertEquals($expected, $this->differ->diff($from, $to, new TimeEfficientImplementation));
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @param array  $expected
 | ||
|      * @param string $from
 | ||
|      * @param string $to
 | ||
|      * @dataProvider arrayProvider
 | ||
|      * @covers       SebastianBergmann\Diff\Differ::diffToArray
 | ||
|      * @covers       SebastianBergmann\Diff\LCS\MemoryEfficientImplementation
 | ||
|      */
 | ||
|     public function testArrayRepresentationOfDiffCanBeRenderedUsingMemoryEfficientLcsImplementation(array $expected, $from, $to)
 | ||
|     {
 | ||
|         $this->assertEquals($expected, $this->differ->diffToArray($from, $to, new MemoryEfficientImplementation));
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @param string $expected
 | ||
|      * @param string $from
 | ||
|      * @param string $to
 | ||
|      * @dataProvider textProvider
 | ||
|      * @covers       SebastianBergmann\Diff\Differ::diff
 | ||
|      * @covers       SebastianBergmann\Diff\LCS\MemoryEfficientImplementation
 | ||
|      */
 | ||
|     public function testTextRepresentationOfDiffCanBeRenderedUsingMemoryEfficientLcsImplementation($expected, $from, $to)
 | ||
|     {
 | ||
|         $this->assertEquals($expected, $this->differ->diff($from, $to, new MemoryEfficientImplementation));
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @covers SebastianBergmann\Diff\Differ::diff
 | ||
|      */
 | ||
|     public function testCustomHeaderCanBeUsed()
 | ||
|     {
 | ||
|         $differ = new Differ('CUSTOM HEADER');
 | ||
| 
 | ||
|         $this->assertEquals(
 | ||
|             "CUSTOM HEADER@@ @@\n-a\n+b\n",
 | ||
|             $differ->diff('a', 'b')
 | ||
|         );
 | ||
|     }
 | ||
| 
 | ||
|     public function testTypesOtherThanArrayAndStringCanBePassed()
 | ||
|     {
 | ||
|         $this->assertEquals(
 | ||
|             "--- Original\n+++ New\n@@ @@\n-1\n+2\n",
 | ||
|             $this->differ->diff(1, 2)
 | ||
|         );
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @param string $diff
 | ||
|      * @param array  $expected
 | ||
|      * @dataProvider diffProvider
 | ||
|      * @covers       SebastianBergmann\Diff\Parser::parse
 | ||
|      */
 | ||
|     public function testParser($diff, $expected)
 | ||
|     {
 | ||
|         $parser = new Parser;
 | ||
|         $result = $parser->parse($diff);
 | ||
| 
 | ||
|         $this->assertEquals($expected, $result);
 | ||
|     }
 | ||
| 
 | ||
|     public function arrayProvider()
 | ||
|     {
 | ||
|         return array(
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('a', self::REMOVED),
 | ||
|                     array('b', self::ADDED)
 | ||
|                 ),
 | ||
|                 'a',
 | ||
|                 'b'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('ba', self::REMOVED),
 | ||
|                     array('bc', self::ADDED)
 | ||
|                 ),
 | ||
|                 'ba',
 | ||
|                 'bc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('ab', self::REMOVED),
 | ||
|                     array('cb', self::ADDED)
 | ||
|                 ),
 | ||
|                 'ab',
 | ||
|                 'cb'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('abc', self::REMOVED),
 | ||
|                     array('adc', self::ADDED)
 | ||
|                 ),
 | ||
|                 'abc',
 | ||
|                 'adc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('ab', self::REMOVED),
 | ||
|                     array('abc', self::ADDED)
 | ||
|                 ),
 | ||
|                 'ab',
 | ||
|                 'abc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('bc', self::REMOVED),
 | ||
|                     array('abc', self::ADDED)
 | ||
|                 ),
 | ||
|                 'bc',
 | ||
|                 'abc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('abc', self::REMOVED),
 | ||
|                     array('abbc', self::ADDED)
 | ||
|                 ),
 | ||
|                 'abc',
 | ||
|                 'abbc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 array(
 | ||
|                     array('abcdde', self::REMOVED),
 | ||
|                     array('abcde', self::ADDED)
 | ||
|                 ),
 | ||
|                 'abcdde',
 | ||
|                 'abcde'
 | ||
|             )
 | ||
|         );
 | ||
|     }
 | ||
| 
 | ||
|     public function textProvider()
 | ||
|     {
 | ||
|         return array(
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-a\n+b\n",
 | ||
|                 'a',
 | ||
|                 'b'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-ba\n+bc\n",
 | ||
|                 'ba',
 | ||
|                 'bc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-ab\n+cb\n",
 | ||
|                 'ab',
 | ||
|                 'cb'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-abc\n+adc\n",
 | ||
|                 'abc',
 | ||
|                 'adc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-ab\n+abc\n",
 | ||
|                 'ab',
 | ||
|                 'abc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-bc\n+abc\n",
 | ||
|                 'bc',
 | ||
|                 'abc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-abc\n+abbc\n",
 | ||
|                 'abc',
 | ||
|                 'abbc'
 | ||
|             ),
 | ||
|             array(
 | ||
|                 "--- Original\n+++ New\n@@ @@\n-abcdde\n+abcde\n",
 | ||
|                 'abcdde',
 | ||
|                 'abcde'
 | ||
|             ),
 | ||
|         );
 | ||
|     }
 | ||
| 
 | ||
|     public function diffProvider()
 | ||
|     {
 | ||
|         $serialized_arr = <<<EOL
 | ||
| a:1:{i:0;O:27:"SebastianBergmann\Diff\Diff":3:{s:33:" | 
