152 lines
4.4 KiB
PHP
152 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* Phergie
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This source file is subject to the new BSD license that is bundled
|
|
* with this package in the file LICENSE.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://phergie.org/license
|
|
*
|
|
* @category Phergie
|
|
* @package Phergie_Tests
|
|
* @author Phergie Development Team <team@phergie.org>
|
|
* @copyright 2008-2010 Phergie Development Team (http://phergie.org)
|
|
* @license http://phergie.org/license New BSD License
|
|
* @link http://pear.phergie.org/package/Phergie_Tests
|
|
*/
|
|
|
|
/**
|
|
* Unit test suite for Pherge_Plugin_Iterator.
|
|
*
|
|
* @category Phergie
|
|
* @package Phergie_Tests
|
|
* @author Phergie Development Team <team@phergie.org>
|
|
* @license http://phergie.org/license New BSD License
|
|
* @link http://pear.phergie.org/package/Phergie_Tests
|
|
*/
|
|
class Phergie_Plugin_IteratorTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* Iterator instance being tested
|
|
*
|
|
* @var Phergie_Plugin_Iterator
|
|
*/
|
|
protected $iterator;
|
|
|
|
/**
|
|
* List of mock plugin instances to be iterated
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $plugins;
|
|
|
|
/**
|
|
* Initializes the iterator instance being tested.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setUp()
|
|
{
|
|
$this->plugins = array();
|
|
foreach (range(0, 4) as $index) {
|
|
$plugin = $this->getMock('Phergie_Plugin_Abstract');
|
|
$plugin
|
|
->expects($this->any())
|
|
->method('getName')
|
|
->will($this->returnValue($index));
|
|
$this->plugins[] = $plugin;
|
|
}
|
|
|
|
$this->iterator = new Phergie_Plugin_Iterator(
|
|
new ArrayIterator($this->plugins)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Tests that all plugins are iterated when no filters are applied.
|
|
*/
|
|
public function testIteratesAllPluginsWithNoFilters()
|
|
{
|
|
$expected = range(0, 4);
|
|
$actual = array();
|
|
foreach ($this->iterator as $plugin) {
|
|
$actual[] = $plugin->getName();
|
|
}
|
|
$this->assertEquals($expected, $actual);
|
|
}
|
|
|
|
/**
|
|
* Tests that appropriate plugins are iterated when plugin name filters
|
|
* are applied.
|
|
*/
|
|
public function testIteratesPluginsWithNameFilters()
|
|
{
|
|
// Test acceptance of strings and fluent interface implementation
|
|
$returned = $this->iterator->addPluginFilter('0');
|
|
$this->assertSame($this->iterator, $returned);
|
|
|
|
// Test acceptance of arrays
|
|
$this->iterator->addPluginFilter(array('1', '3'));
|
|
|
|
// Test application of filters to iteration
|
|
$expected = array('2', '4');
|
|
$actual = array();
|
|
foreach ($this->iterator as $plugin) {
|
|
$actual[] = $plugin->getName();
|
|
}
|
|
$this->assertEquals($expected, $actual);
|
|
}
|
|
|
|
/**
|
|
* Tests that appropriate plugins are iterated when method name filters
|
|
* are applied.
|
|
*
|
|
* The same method name is used in all cases here because mocked methods
|
|
* of mock objects do not appear to be detected by method_exists() or
|
|
* ReflectionClass, so filtering by a method defined in the base plugin
|
|
* class seems the easiest way to test that method filtering really
|
|
* works.
|
|
*/
|
|
public function testIteratesPluginsWithMethodFilters()
|
|
{
|
|
// Tests acceptance of strings and fluent interface implementation
|
|
$returned = $this->iterator->addMethodFilter('getName');
|
|
$this->assertSame($this->iterator, $returned);
|
|
|
|
// Test acceptance of arrays
|
|
$this->iterator->addMethodFilter(array('getName', 'getName'));
|
|
|
|
// Test application of filters to iteration
|
|
$expected = array();
|
|
$actual = array();
|
|
foreach ($this->iterator as $plugin) {
|
|
$actual[] = $plugin->getName();
|
|
}
|
|
$this->assertEquals($expected, $actual);
|
|
}
|
|
|
|
/**
|
|
* Tests that all plugins are iterated after filters are cleared.
|
|
*
|
|
* @depends testIteratesPluginsWithNameFilters
|
|
* @depends testIteratesPluginsWithMethodFilters
|
|
*/
|
|
public function testIteratesPluginsAfterClearingFilters()
|
|
{
|
|
$this->iterator->addPluginFilter('0');
|
|
$this->iterator->addMethodFilter('method1');
|
|
$this->iterator->clearFilters();
|
|
|
|
$expected = range(0, 4);
|
|
$actual = array();
|
|
foreach ($this->iterator as $plugin) {
|
|
$actual[] = $plugin->getName();
|
|
}
|
|
$this->assertEquals($expected, $actual);
|
|
}
|
|
}
|