Skip to content

Commit

Permalink
Added testing, refactored a little bit the configuration building ser…
Browse files Browse the repository at this point in the history
…vices
  • Loading branch information
Markcial committed Mar 3, 2015
1 parent d44d773 commit f8c127e
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 73 deletions.
36 changes: 0 additions & 36 deletions src/Psy/Command/DemoCommand.php

This file was deleted.

18 changes: 0 additions & 18 deletions src/Psy/Plugin/AbstractPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,6 @@ final public static function getName()
return preg_replace('#Plugin$#', '', $class->getShortName());
}

/**
* @param array $configuration
*
* @return array
*/
final public static function getConfiguration($configuration = array())
{
return array_merge_recursive(
$configuration,
array(
'commands' => static::getCommands(),
'presenters' => static::getPresenters(),
'matchers' => static::getMatchers(),
// if any more parts of the config are exposed publicly, remember to add here with the static ref.
)
);
}

// any publicly exposed configuration piece below here ↓

/**
Expand Down
18 changes: 0 additions & 18 deletions src/Psy/Plugin/DemoPlugin.php

This file was deleted.

23 changes: 22 additions & 1 deletion src/Psy/Plugin/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

class Manager
{
protected static $exposedConfigurationItems = array(
'commands', 'matchers', 'presenters',
);

/** @var AbstractPlugin[] */
protected static $plugins = array();

Expand All @@ -24,7 +28,24 @@ public static function register(AbstractPlugin $plugin, $name)
public static function getConfiguration($configuration = array())
{
foreach (self::$plugins as $plugin) {
$configuration = $plugin::getConfiguration($configuration);
foreach (self::$exposedConfigurationItems as $cfgBlock) {
$getter = sprintf('get%s', ucfirst($cfgBlock));
$cfgData = call_user_func(array($plugin, $getter));
if (array_key_exists($cfgBlock, $configuration)) {
if (is_array($configuration[$cfgBlock])) {
// is array, let's merge
$configuration[$cfgBlock] = array_merge(
$configuration[$cfgBlock],
$cfgData
);
} else {
// not an array, it will be overwritten
$configuration[$cfgBlock] = $cfgData;
}
} else {
$configuration[$cfgBlock] = $cfgData;
}
}
}

return $configuration;
Expand Down
101 changes: 101 additions & 0 deletions test/Psy/Test/Plugin/ManagerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php

namespace Psy\Test\Plugin;

use Psy\Plugin\Manager;

class ManagerTest extends \PHPUnit_Framework_TestCase
{
public function setup()
{
$prop = new \ReflectionProperty('Psy\Plugin\Manager', 'plugins');
$prop->setAccessible(true);
$prop->setValue('Psy\Plugin\Manager', array());
}

public function testRegisterMultiplePlugins()
{
$mockedPlugin = $this->getMock('Psy\Plugin\AbstractPlugin');
Manager::register($mockedPlugin, 'mock1');
Manager::register($mockedPlugin, 'mock2');

$prop = new \ReflectionProperty('Psy\Plugin\Manager', 'plugins');
$prop->setAccessible(true);
$plugins = $prop->getValue('Psy\Plugin\Manager');
$this->assertArrayHasKey('mock1', $plugins);
$this->assertArrayHasKey('mock2', $plugins);
}

public function testConfigurationWithSinglePlugin()
{
$commands = array(
'cmd1', 'cmd2',
);

$presenters = array(
'presenter1', 'presenter2',
);

$matchers = array(
'matcher1', 'matcher2',
);

$stub = new PluginStub();
$stub->setCommands($commands);
$stub->setPresenters($presenters);
$stub->setMatchers($matchers);

Manager::register($stub, 'mock');

$config = Manager::getConfiguration();
$this->assertArraySubset($commands, $config['commands']);
$this->assertArraySubset($presenters, $config['presenters']);
$this->assertArraySubset($matchers, $config['matchers']);
}

public function testConfigurationWithMultiplePlugins()
{
$commands1 = array(
'cmd1', 'cmd2',
);

$presenters1 = array(
'presenter1', 'presenter2',
);

$matchers1 = array(
'matcher1', 'matcher2',
);

$stub1 = new PluginStub();
$stub1->setCommands($commands1);
$stub1->setPresenters($presenters1);
$stub1->setMatchers($matchers1);

Manager::register($stub1, 'mock1');

$commands2 = array(
'cmd3', 'cmd4',
);

$presenters2 = array(
'presenter3', 'presenter4',
);

$matchers2 = array(
'matcher3', 'matcher4',
);

$stub2 = new PluginStub();
$stub2->setCommands($commands2);
$stub2->setPresenters($presenters2);
$stub2->setMatchers($matchers2);

Manager::register($stub2, 'mock2');

$config = Manager::getConfiguration();
$this->assertArraySubset($commands1, $config['commands']);
$this->assertArraySubset($presenters1, $config['presenters']);
$this->assertArraySubset($matchers1, $config['matchers']);
}
}
44 changes: 44 additions & 0 deletions test/Psy/Test/Plugin/PluginStub.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace Psy\Test\Plugin;

use Psy\Plugin\AbstractPlugin;

class PluginStub extends AbstractPlugin
{
// due to the static nature, and the negative of Mr bergmann to audit static code
// the data here is treated as a FIFO pile.
protected static $matchers = array();
protected static $presenters = array();
protected static $commands = array();

public function setMatchers(array $matchers)
{
self::$matchers[] = $matchers;
}

public function setPresenters(array $presenters)
{
self::$presenters[] = $presenters;
}

public function setCommands(array $commands)
{
self::$commands[] = $commands;
}

public static function getMatchers()
{
return array_shift(self::$matchers);
}

public static function getPresenters()
{
return array_shift(self::$presenters);
}

public static function getCommands()
{
return array_shift(self::$commands);
}
}

0 comments on commit f8c127e

Please sign in to comment.