 1ac0f42a58
			
		
	
	1ac0f42a58
	
	
	
		
			
			Travis config update Removed HHVM script as Laravel no longer support HHVM after releasing 5.3
		
			
				
	
	
		
			130 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php declare(strict_types=1);
 | |
| /*
 | |
|  * 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\Utils;
 | |
| 
 | |
| use PHPUnit\Framework\TestCase;
 | |
| use Symfony\Component\Process\Process;
 | |
| 
 | |
| /**
 | |
|  * @requires OS Linux
 | |
|  *
 | |
|  * @coversNothing
 | |
|  */
 | |
| final class UnifiedDiffAssertTraitIntegrationTest extends TestCase
 | |
| {
 | |
|     use UnifiedDiffAssertTrait;
 | |
| 
 | |
|     private $filePatch;
 | |
| 
 | |
|     protected function setUp(): void
 | |
|     {
 | |
|         $this->filePatch = __DIR__ . '/../fixtures/out/patch.txt';
 | |
| 
 | |
|         $this->cleanUpTempFiles();
 | |
|     }
 | |
| 
 | |
|     protected function tearDown(): void
 | |
|     {
 | |
|         $this->cleanUpTempFiles();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $fileFrom
 | |
|      * @param string $fileTo
 | |
|      *
 | |
|      * @dataProvider provideFilePairsCases
 | |
|      */
 | |
|     public function testValidPatches(string $fileFrom, string $fileTo): void
 | |
|     {
 | |
|         $command = \sprintf(
 | |
|             'diff -u %s %s > %s',
 | |
|             \escapeshellarg(\realpath($fileFrom)),
 | |
|             \escapeshellarg(\realpath($fileTo)),
 | |
|             \escapeshellarg($this->filePatch)
 | |
|         );
 | |
| 
 | |
|         $p = new Process($command);
 | |
|         $p->run();
 | |
| 
 | |
|         $exitCode = $p->getExitCode();
 | |
| 
 | |
|         if (0 === $exitCode) {
 | |
|             // odd case when two files have the same content. Test after executing as it is more efficient than to read the files and check the contents every time.
 | |
|             $this->addToAssertionCount(1);
 | |
| 
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         $this->assertSame(
 | |
|             1, // means `diff` found a diff between the files we gave it
 | |
|             $exitCode,
 | |
|             \sprintf(
 | |
|                 "Command exec. was not successful:\n\"%s\"\nOutput:\n\"%s\"\nStdErr:\n\"%s\"\nExit code %d.\n",
 | |
|                 $command,
 | |
|                 $p->getOutput(),
 | |
|                 $p->getErrorOutput(),
 | |
|                 $p->getExitCode()
 | |
|             )
 | |
|         );
 | |
| 
 | |
|         $this->assertValidUnifiedDiffFormat(FileUtils::getFileContent($this->filePatch));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return array<string, array<string, string>>
 | |
|      */
 | |
|     public function provideFilePairsCases(): array
 | |
|     {
 | |
|         $cases = [];
 | |
| 
 | |
|         // created cases based on dedicated fixtures
 | |
|         $dir       = \realpath(__DIR__ . '/../fixtures/UnifiedDiffAssertTraitIntegrationTest');
 | |
|         $dirLength = \strlen($dir);
 | |
| 
 | |
|         for ($i = 1;; ++$i) {
 | |
|             $fromFile = \sprintf('%s/%d_a.txt', $dir, $i);
 | |
|             $toFile   = \sprintf('%s/%d_b.txt', $dir, $i);
 | |
| 
 | |
|             if (!\file_exists($fromFile)) {
 | |
|                 break;
 | |
|             }
 | |
| 
 | |
|             $this->assertFileExists($toFile);
 | |
|             $cases[\sprintf("Diff file:\n\"%s\"\nvs.\n\"%s\"\n", \substr(\realpath($fromFile), $dirLength), \substr(\realpath($toFile), $dirLength))] = [$fromFile, $toFile];
 | |
|         }
 | |
| 
 | |
|         // create cases based on PHP files within the vendor directory for integration testing
 | |
|         $dir       = \realpath(__DIR__ . '/../../vendor');
 | |
|         $dirLength = \strlen($dir);
 | |
| 
 | |
|         $fileIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS));
 | |
|         $fromFile     = __FILE__;
 | |
| 
 | |
|         /** @var \SplFileInfo $file */
 | |
|         foreach ($fileIterator as $file) {
 | |
|             if ('php' !== $file->getExtension()) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             $toFile                                                                                                                                   = $file->getPathname();
 | |
|             $cases[\sprintf("Diff file:\n\"%s\"\nvs.\n\"%s\"\n", \substr(\realpath($fromFile), $dirLength), \substr(\realpath($toFile), $dirLength))] = [$fromFile, $toFile];
 | |
|             $fromFile                                                                                                                                 = $toFile;
 | |
|         }
 | |
| 
 | |
|         return $cases;
 | |
|     }
 | |
| 
 | |
|     private function cleanUpTempFiles(): void
 | |
|     {
 | |
|         @\unlink($this->filePatch);
 | |
|     }
 | |
| }
 |