Skip to content
Extraits de code Groupes Projets
Valider 33cfb1d0 rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Move test environment setup logic from TestingEnvironmentVariables::addHooks()...

Move test environment setup logic from TestingEnvironmentVariables::addHooks() to a new EnvironmentManipulator. Remove MakeGlobalSettingsWithFile since it is now redundant.
parent 53a29ed2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -85,6 +85,8 @@ class Environment ...@@ -85,6 +85,8 @@ class Environment
*/ */
public function init() public function init()
{ {
$this->invokeBeforeContainerCreatedHook();
$this->container = $this->createContainer(); $this->container = $this->createContainer();
StaticContainer::set($this->container); StaticContainer::set($this->container);
...@@ -112,7 +114,9 @@ class Environment ...@@ -112,7 +114,9 @@ class Environment
{ {
$pluginList = $this->getPluginListCached(); $pluginList = $this->getPluginListCached();
$settings = $this->getGlobalSettingsCached(); $settings = $this->getGlobalSettingsCached();
$definitions = array_merge(StaticContainer::getDefinitions(), array($this->definitions));
$extraDefinitions = $this->getExtraDefinitionsFromManipulators();
$definitions = array_merge(StaticContainer::getDefinitions(), $extraDefinitions, array($this->definitions));
$containerFactory = new ContainerFactory($pluginList, $settings, $this->environment, $definitions); $containerFactory = new ContainerFactory($pluginList, $settings, $this->environment, $definitions);
return $containerFactory->create(); return $containerFactory->create();
...@@ -185,4 +189,20 @@ class Environment ...@@ -185,4 +189,20 @@ class Environment
return null; return null;
} }
private function invokeBeforeContainerCreatedHook()
{
foreach (self::$globalEnvironmentManipulators as $manipulator) {
$manipulator->beforeContainerCreated();
}
}
private function getExtraDefinitionsFromManipulators()
{
$result = array();
foreach (self::$globalEnvironmentManipulators as $manipulator) {
$result = array_merge($result, $manipulator->getExtraDefinitions());
}
return $result;
}
} }
...@@ -23,4 +23,16 @@ interface EnvironmentManipulator ...@@ -23,4 +23,16 @@ interface EnvironmentManipulator
* @return GlobalSettingsProvider * @return GlobalSettingsProvider
*/ */
public function makeGlobalSettingsProvider(); public function makeGlobalSettingsProvider();
/**
* Invoked before the container is created.
*/
public function beforeContainerCreated();
/**
* Return an array of definition arrays that override DI config specified in PHP config files.
*
* @return array[]
*/
public function getExtraDefinitions();
} }
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Tests\Framework\TestingEnvironment;
use Piwik\Application\EnvironmentManipulator;
use Piwik\Application\Kernel\GlobalSettingsProvider;
use Piwik\Tests\Framework\TestingEnvironmentVariables;
class MakeGlobalSettingsWithFile implements EnvironmentManipulator
{
private $configFileGlobal;
private $configFileLocal;
private $configFileCommon;
public function __construct(\Piwik\Tests\Framework\TestingEnvironmentVariables $testingEnvironment)
{
$this->configFileGlobal = $testingEnvironment->configFileGlobal;
$this->configFileLocal = $testingEnvironment->configFileLocal;
$this->configFileCommon = $testingEnvironment->configFileCommon;
}
public function makeGlobalSettingsProvider()
{
return new GlobalSettingsProvider($this->configFileGlobal, $this->configFileLocal, $this->configFileCommon);
}
}
\ No newline at end of file
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Tests\Framework;
use Piwik\Application\EnvironmentManipulator;
use Piwik\Application\Kernel\GlobalSettingsProvider;
/**
* Manipulates an environment for tests.
*/
class TestingEnvironmentManipulator implements EnvironmentManipulator
{
/**
* @var TestingEnvironmentVariables
*/
private $vars;
private $globalObservers;
public function __construct(TestingEnvironmentVariables $testingEnvironment, array $globalObservers = array())
{
$this->vars = $testingEnvironment;
$this->globalObservers = $globalObservers;
}
public function makeGlobalSettingsProvider()
{
return new GlobalSettingsProvider($this->vars->configFileGlobal, $this->vars->configFileLocal, $this->vars->configFileCommon);
}
public function beforeContainerCreated()
{
if ($this->vars->queryParamOverride) {
foreach ($this->vars->queryParamOverride as $key => $value) {
$_GET[$key] = $value;
}
}
if ($this->vars->globalsOverride) {
foreach ($this->vars->globalsOverride as $key => $value) {
$GLOBALS[$key] = $value;
}
}
if ($this->vars->hostOverride) {
\Piwik\Url::setHost($this->vars->hostOverride);
}
if ($this->vars->useXhprof) {
\Piwik\Profiler::setupProfilerXHProf($mainRun = false, $setupDuringTracking = true);
}
\Piwik\Cache\Backend\File::$invalidateOpCacheBeforeRead = true;
}
public function getExtraDefinitions()
{
// Apply DI config from the fixture
$diConfig = array();
if ($this->vars->fixtureClass) {
$fixtureClass = $this->vars->fixtureClass;
if (class_exists($fixtureClass)) {
/** @var Fixture $fixture */
$fixture = new $fixtureClass;
$diConfig = $fixture->provideContainerConfig();
}
}
if ($this->vars->testCaseClass) {
$testCaseClass = $this->vars->testCaseClass;
if (class_exists($testCaseClass)) {
$testCase = new $testCaseClass();
if (method_exists($testCase, 'provideContainerConfigBeforeClass')) {
$diConfig = array_merge($diConfig, $testCaseClass::provideContainerConfigBeforeClass());
}
if (method_exists($testCase, 'provideContainerConfig')) {
$diConfig = array_merge($diConfig, $testCase->provideContainerConfig());
}
}
}
return array(
$diConfig,
array('observers.global' => \DI\add($this->globalObservers))
);
}
}
\ No newline at end of file
...@@ -9,9 +9,6 @@ ...@@ -9,9 +9,6 @@
namespace Piwik\Tests\Framework; namespace Piwik\Tests\Framework;
use Piwik\Plugin\Manager as PluginManager; use Piwik\Plugin\Manager as PluginManager;
use Exception;
use Piwik\Container\StaticContainer;
use Piwik\Tests\Framework\TestingEnvironment\MakeGlobalSettingsWithFile;
use Piwik\Piwik; use Piwik\Piwik;
use Piwik\Application\Environment; use Piwik\Application\Environment;
...@@ -115,59 +112,7 @@ class TestingEnvironmentVariables ...@@ -115,59 +112,7 @@ class TestingEnvironmentVariables
public static function addHooks($globalObservers = array()) public static function addHooks($globalObservers = array())
{ {
$testingEnvironment = new TestingEnvironmentVariables(); $testingEnvironment = new TestingEnvironmentVariables();
Environment::addEnvironmentManipulator(new TestingEnvironmentManipulator($testingEnvironment, $globalObservers));
if ($testingEnvironment->queryParamOverride) {
foreach ($testingEnvironment->queryParamOverride as $key => $value) {
$_GET[$key] = $value;
}
}
if ($testingEnvironment->globalsOverride) {
foreach ($testingEnvironment->globalsOverride as $key => $value) {
$GLOBALS[$key] = $value;
}
}
if ($testingEnvironment->hostOverride) {
\Piwik\Url::setHost($testingEnvironment->hostOverride);
}
if ($testingEnvironment->useXhprof) {
\Piwik\Profiler::setupProfilerXHProf($mainRun = false, $setupDuringTracking = true);
}
// Apply DI config from the fixture
$diConfig = array();
if ($testingEnvironment->fixtureClass) {
$fixtureClass = $testingEnvironment->fixtureClass;
if (class_exists($fixtureClass)) {
/** @var Fixture $fixture */
$fixture = new $fixtureClass;
$diConfig = $fixture->provideContainerConfig();
}
}
if ($testingEnvironment->testCaseClass) {
$testCaseClass = $testingEnvironment->testCaseClass;
if (class_exists($testCaseClass)) {
$testCase = new $testCaseClass();
if (method_exists($testCase, 'provideContainerConfigBeforeClass')) {
$diConfig = array_merge($diConfig, $testCaseClass::provideContainerConfigBeforeClass());
}
if (method_exists($testCase, 'provideContainerConfig')) {
$diConfig = array_merge($diConfig, $testCase->provideContainerConfig());
}
}
}
\Piwik\Cache\Backend\File::$invalidateOpCacheBeforeRead = true;
Environment::addEnvironmentManipulator(new MakeGlobalSettingsWithFile($testingEnvironment));
StaticContainer::addDefinitions($diConfig);
StaticContainer::addDefinitions(array('observers.global' => \DI\add($globalObservers)));
} }
/** /**
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter