Skip to content

[DependencyInjection] Compiler Pass Cusomization Type #10778

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,19 @@
*/
class PassConfig
{
const TYPE_BEFORE_CUSTOMIZATION = 'beforeCustomization';
const TYPE_CUSTOMIZE = 'customization';
const TYPE_AFTER_CUSTOMIZATION = 'afterCustomization';
const TYPE_AFTER_REMOVING = 'afterRemoving';
const TYPE_BEFORE_OPTIMIZATION = 'beforeOptimization';
const TYPE_BEFORE_REMOVING = 'beforeRemoving';
const TYPE_OPTIMIZE = 'optimization';
const TYPE_REMOVE = 'removing';

private $mergePass;
private $beforeCustomizationPasses = array();
private $customizationPasses = array();
private $afterCustomizationPasses = array();
private $afterRemovingPasses = array();
private $beforeOptimizationPasses = array();
private $beforeRemovingPasses = array();
Expand Down Expand Up @@ -81,6 +87,9 @@ public function getPasses()
{
return array_merge(
array($this->mergePass),
$this->beforeCustomizationPasses,
$this->customizationPasses,
$this->afterCustomizationPasses,
$this->beforeOptimizationPasses,
$this->optimizationPasses,
$this->beforeRemovingPasses,
Expand Down Expand Up @@ -110,6 +119,42 @@ public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_O
$passes[] = $pass;
}

/**
* Gets all passes for the BeforeCustomization pass.
*
* @return array An array of passes
*
* @api
*/
public function getBeforeCustomizationPasses()
{
return $this->beforeCustomizationPasses;
}

/**
* Gets all passes for the Customization pass.
*
* @return array An array of passes
*
* @api
*/
public function getCustomizationPasses()
{
return $this->customizationPasses;
}

/**
* Gets all passes for the AfterCustomization pass.
*
* @return array An array of passes
*
* @api
*/
public function getAfterCustomizationPasses()
{
return $this->afterCustomizationPasses;
}

/**
* Gets all passes for the AfterRemoving pass.
*
Expand Down Expand Up @@ -194,6 +239,42 @@ public function setMergePass(CompilerPassInterface $pass)
$this->mergePass = $pass;
}

/**
* Sets the BeforeCustomization passes.
*
* @param array $passes An array of passes
*
* @api
*/
public function setBeforeCustomizationPasses(array $passes)
{
$this->beforeCustomizationPasses = $passes;
}

/**
* Sets the Customization passes.
*
* @param array $passes An array of passes
*
* @api
*/
public function setCustomizationPasses(array $passes)
{
$this->customizationPasses = $passes;
}

/**
* Sets the AfterCustomization passes.
*
* @param array $passes An array of passes
*
* @api
*/
public function setAfterCustomizationPasses(array $passes)
{
$this->afterCustomizationPasses = $passes;
}

/**
* Sets the AfterRemoving passes.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Component\DependencyInjection\Tests\Compiler;

use Symfony\Component\DependencyInjection\Compiler\PassConfig;

class PassConfigTest extends \PHPUnit_Framework_TestCase
{

protected function getNewCompilerPassMock()
{
return $this->getMock('Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface');
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getBeforeCustomization
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setBeforeCustomization
*/
public function testBeforeCustomizationPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getBeforeCustomizationPasses());
$passConfig->setBeforeCustomizationPasses(
array_merge(
$passConfig->getBeforeCustomizationPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getBeforeCustomizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_BEFORE_CUSTOMIZATION);
$this->assertCount($initialCount + 2, $passConfig->getBeforeCustomizationPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getCustomizationPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setCustomizationPasses
*/
public function testCustomizationPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getCustomizationPasses());
$passConfig->setCustomizationPasses(
array_merge(
$passConfig->getCustomizationPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getCustomizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_CUSTOMIZE);
$this->assertCount($initialCount + 2, $passConfig->getCustomizationPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getAfterCustomizationPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setAfterCustomizationPasses
*/
public function testAfterCustomizationPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getAfterCustomizationPasses());
$passConfig->setAfterCustomizationPasses(
array_merge(
$passConfig->getAfterCustomizationPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getAfterCustomizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_AFTER_CUSTOMIZATION);
$this->assertCount($initialCount + 2, $passConfig->getAfterCustomizationPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getBeforeOptimizationPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setBeforeOptimizationPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::addPass
*/
public function testBeforeOptimizationPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getBeforeOptimizationPasses());
$passConfig->setBeforeOptimizationPasses(
array_merge(
$passConfig->getBeforeOptimizationPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getBeforeOptimizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock());
$this->assertCount($initialCount + 2, $passConfig->getBeforeOptimizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_BEFORE_OPTIMIZATION);
$this->assertCount($initialCount + 3, $passConfig->getBeforeOptimizationPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getOptimizationPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setOptimizationPasses
*/
public function testOptimizationPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getOptimizationPasses());
$passConfig->setOptimizationPasses(
array_merge(
$passConfig->getOptimizationPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getOptimizationPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_OPTIMIZE);
$this->assertCount($initialCount + 2, $passConfig->getOptimizationPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getBeforeRemovingPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setBeforeRemovingPasses
*/
public function testBeforeRemovingPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getBeforeRemovingPasses());
$passConfig->setBeforeRemovingPasses(
array_merge(
$passConfig->getBeforeRemovingPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getBeforeRemovingPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_BEFORE_REMOVING);
$this->assertCount($initialCount + 2, $passConfig->getBeforeRemovingPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getRemovingPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setRemovingPasses
*/
public function testRemovingPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getRemovingPasses());
$passConfig->setRemovingPasses(
array_merge(
$passConfig->getRemovingPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getRemovingPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_REMOVE);
$this->assertCount($initialCount + 2, $passConfig->getRemovingPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getAfterRemovingPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::setAfterRemovingPasses
*/
public function testAfterRemovingPasses()
{
$passConfig = new PassConfig();
$initialCount = count($passConfig->getAfterRemovingPasses());
$passConfig->setAfterRemovingPasses(
array_merge(
$passConfig->getAfterRemovingPasses(),
array($this->getNewCompilerPassMock())
)
);
$this->assertCount($initialCount + 1, $passConfig->getAfterRemovingPasses());
$passConfig->addPass($this->getNewCompilerPassMock(), PassConfig::TYPE_AFTER_REMOVING);
$this->assertCount($initialCount + 2, $passConfig->getAfterRemovingPasses());
}

/**
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::addPasses
* @covers Symfony\Component\DependencyInjection\Compiler\PassConfig::getPasses
*/
public function testGetPasses()
{
$types = array(
PassConfig::TYPE_BEFORE_CUSTOMIZATION,
PassConfig::TYPE_CUSTOMIZE,
PassConfig::TYPE_AFTER_CUSTOMIZATION,
PassConfig::TYPE_AFTER_REMOVING,
PassConfig::TYPE_BEFORE_OPTIMIZATION,
PassConfig::TYPE_BEFORE_REMOVING,
PassConfig::TYPE_OPTIMIZE,
PassConfig::TYPE_REMOVE
);

$passConfig = new PassConfig();
$count = count($passConfig->getPasses());

foreach ($types as $type) {
$passConfig->addPass($this->getNewCompilerPassMock(), $type);
$this->assertCount(++$count, $passConfig->getPasses());
}
}
}