diff --git a/tests/Composer/Test/InstallerTest.php b/tests/Composer/Test/InstallerTest.php index 0dfff7b0b..87e6fef52 100644 --- a/tests/Composer/Test/InstallerTest.php +++ b/tests/Composer/Test/InstallerTest.php @@ -123,7 +123,7 @@ class InstallerTest extends TestCase /** * @dataProvider getIntegrationTests */ - public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $installedDev, $run, $expect) + public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $installedDev, $run, $expectLock, $expect) { if ($condition) { eval('$res = '.$condition.';'); @@ -170,6 +170,17 @@ class InstallerTest extends TestCase ->method('exists') ->will($this->returnValue(true)); + if ($expectLock) { + $actualLock = array(); + $lockJsonMock->expects($this->atLeastOnce()) + ->method('write') + ->will($this->returnCallback(function ($hash, $options) use (&$actualLock) { + // need to do assertion outside of mock for nice phpunit output + // so store value temporarily in reference for later assetion + $actualLock = $hash; + })); + } + $locker = new Locker($lockJsonMock, $repositoryManager, $composer->getInstallationManager(), md5(json_encode($composerConfig))); $composer->setLocker($locker); @@ -208,6 +219,11 @@ class InstallerTest extends TestCase fseek($appOutput, 0); $this->assertEquals(0, $result, $output . stream_get_contents($appOutput)); + if ($expectLock) { + unset($actualLock['hash']); + $this->assertEquals($expectLock, $actualLock); + } + $installationManager = $composer->getInstallationManager(); $this->assertSame($expect, implode("\n", $installationManager->getTrace())); } @@ -233,12 +249,14 @@ class InstallerTest extends TestCase (?:--INSTALLED--\s*(?P'.$content.'))?\s* (?:--INSTALLED:DEV--\s*(?P'.$content.'))?\s* --RUN--\s*(?P.*?)\s* + (?:--EXPECT-LOCK--\s*(?P'.$content.'))?\s* --EXPECT--\s*(?P.*?)\s* $}xs'; $installed = array(); $installedDev = array(); $lock = array(); + $expectLock = array(); if (preg_match($pattern, $test, $match)) { try { @@ -258,6 +276,9 @@ class InstallerTest extends TestCase $installedDev = JsonFile::parseJson($match['installedDev']); } $run = $match['run']; + if (!empty($match['expectLock'])) { + $expectLock = JsonFile::parseJson($match['expectLock']); + } $expect = $match['expect']; } catch (\Exception $e) { die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file))); @@ -266,7 +287,7 @@ class InstallerTest extends TestCase die(sprintf('Test "%s" is not valid, did not match the expected format.', str_replace($fixturesDir.'/', '', $file))); } - $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $installedDev, $run, $expect); + $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $installedDev, $run, $expectLock, $expect); } return $tests;