Przeglądaj źródła

Allow testing for installed repo state

Jordi Boggiano 4 lat temu
rodzic
commit
82502684b2
1 zmienionych plików z 24 dodań i 2 usunięć
  1. 24 2
      tests/Composer/Test/InstallerTest.php

+ 24 - 2
tests/Composer/Test/InstallerTest.php

@@ -184,7 +184,7 @@ class InstallerTest extends TestCase
     /**
      * @dataProvider getIntegrationTests
      */
-    public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectResult)
+    public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $run, $expectLock, $expectInstalled, $expectOutput, $expect, $expectResult)
     {
         if ($condition) {
             eval('$res = '.$condition.';');
@@ -327,6 +327,23 @@ class InstallerTest extends TestCase
             $this->assertEquals($expectLock, $actualLock);
         }
 
+        if ($expectInstalled !== null) {
+            $actualInstalled = array();
+            $dumper = new ArrayDumper();
+
+            foreach ($repositoryManager->getLocalRepository()->getCanonicalPackages() as $package) {
+                $package = $dumper->dump($package);
+                unset($package['version_normalized']);
+                $actualInstalled[] = $package;
+            }
+
+            usort($actualInstalled, function ($a, $b) {
+                return strcmp($a['name'], $b['name']);
+            });
+
+            $this->assertSame($expectInstalled, $actualInstalled);
+        }
+
         $installationManager = $composer->getInstallationManager();
         $this->assertSame(rtrim($expect), implode("\n", $installationManager->getTrace()));
 
@@ -355,6 +372,7 @@ class InstallerTest extends TestCase
                 $installedDev = array();
                 $lock = array();
                 $expectLock = array();
+                $expectInstalled = null;
                 $expectResult = 0;
 
                 $message = $testData['TEST'];
@@ -393,6 +411,9 @@ class InstallerTest extends TestCase
                         $expectLock = JsonFile::parseJson($testData['EXPECT-LOCK']);
                     }
                 }
+                if (!empty($testData['EXPECT-INSTALLED'])) {
+                    $expectInstalled = JsonFile::parseJson($testData['EXPECT-INSTALLED']);
+                }
                 $expectOutput = isset($testData['EXPECT-OUTPUT']) ? $testData['EXPECT-OUTPUT'] : null;
                 $expect = $testData['EXPECT'];
                 if (!empty($testData['EXPECT-EXCEPTION'])) {
@@ -409,7 +430,7 @@ class InstallerTest extends TestCase
                 die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file)));
             }
 
-            $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectResult);
+            $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectInstalled, $expectOutput, $expect, $expectResult);
         }
 
         return $tests;
@@ -427,6 +448,7 @@ class InstallerTest extends TestCase
             'INSTALLED' => false,
             'RUN' => true,
             'EXPECT-LOCK' => false,
+            'EXPECT-INSTALLED' => false,
             'EXPECT-OUTPUT' => false,
             'EXPECT-EXIT-CODE' => false,
             'EXPECT-EXCEPTION' => false,