/**
* Tests the `apply` method which provides a high-level interface to the complexity generation.
* It tests the cyclomatic complexity of the FooObject class and its methods.
*
* @see lithium\test\filter\Complexity::apply()
*/
public function testApply()
{
extract($this->_paths);
$collection = new CollectionMock();
$group = new GroupMock();
$group->add($testClassTest);
$this->report->group = $group;
InspectorMock::applyFilter('methods', function ($self, $params, $chain) {
return array('foo' => array(1), 'bar' => array(2));
// return 2 methods
});
InspectorMock::applyFilter('lines', function ($self, $params, $chain) {
return 'return;';
// return a single return
});
ParserMock::applyFilter('tokenize', function ($self, $params, $chain) {
return array(1, 2, 3);
// always return 3 methods
});
$group->applyFilter('tests', function ($self, $params, $chain) use($collection) {
return $collection;
});
$collection->applyFilter('invoke', function ($self, $params, $chain) {
return array('FooObject');
});
Complexity::apply($this->report, $group->tests(), array('classes' => array('parser' => 'lithium\\analysis\\parser\\Mock', 'inspector' => 'lithium\\analysis\\inspector\\Mock')));
$results = array_pop($this->report->results['filters'][$complexity]);
$expected = array($testClass => array('foo' => 4, 'bar' => 4));
$this->assertEqual($expected, $results);
}