/**
  * {@inheritdoc}
  */
 public function addPluginClass($pluginClass)
 {
     if ($this->rootPackageFile->hasPluginClass($pluginClass)) {
         // Already installed locally
         return;
     }
     $this->validatePluginClass($pluginClass);
     $previousClasses = $this->rootPackageFile->getPluginClasses();
     $this->rootPackageFile->addPluginClass($pluginClass);
     try {
         $this->packageFileStorage->saveRootPackageFile($this->rootPackageFile);
     } catch (Exception $e) {
         $this->rootPackageFile->setPluginClasses($previousClasses);
         throw $e;
     }
 }
 public function testHasPluginClasses()
 {
     $this->assertFalse($this->packageFile->hasPluginClasses());
     $this->packageFile->addPluginClass(self::PLUGIN_CLASS);
     $this->assertTrue($this->packageFile->hasPluginClasses());
 }
 public function testWriteRootPackageFileSortsPlugins()
 {
     $packageFile = new RootPackageFile();
     $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginC');
     $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginA');
     $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginB');
     $this->writer->writePackageFile($packageFile, $this->tempFile);
     $this->assertFileExists($this->tempFile);
     $this->assertJsonFileEquals(__DIR__ . '/Fixtures/json/sorted-plugins.json', $this->tempFile);
 }
    public function testSerializeRootPackageFileSortsPlugins()
    {
        $packageFile = new RootPackageFile();
        $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginC');
        $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginA');
        $packageFile->addPluginClass(__NAMESPACE__ . '\\PluginB');
        $json = <<<JSON
{
    "version": "1.0",
    "plugins": [
        "Puli\\\\Manager\\\\Tests\\\\Package\\\\PluginA",
        "Puli\\\\Manager\\\\Tests\\\\Package\\\\PluginB",
        "Puli\\\\Manager\\\\Tests\\\\Package\\\\PluginC"
    ]
}

JSON;
        $this->assertJsonEquals($json, $this->serializer->serializeRootPackageFile($packageFile));
    }