lithium\test\filter\Complexity::apply PHP Méthode

apply() public static méthode

Takes an instance of an object (usually a Collection object) containing test instances. Introspects the test subject classes to extract cyclomatic complexity data.
public static apply ( object $report, array $tests, array $options = [] ) : object
$report object Instance of Report which is calling apply.
$tests array The test to apply this filter on
$options array Additional options to overwrite dependencies. - `'classes'` _array_: Overwrite default classes array.
Résultat object Returns the instance of `$tests`.
    public static function apply($report, $tests, array $options = array())
    {
        $results = array();
        $options += array('classes' => array());
        $classes = $options['classes'] + static::$_classes;
        $inspector = $classes['inspector'];
        $parser = $classes['parser'];
        foreach ($tests->invoke('subject') as $class) {
            $results[$class] = array();
            if (!($methods = $inspector::methods($class, 'ranges', array('public' => false)))) {
                continue;
            }
            foreach ($methods as $method => $lines) {
                $lines = $inspector::lines($class, $lines);
                $branches = $parser::tokenize(join("\n", (array) $lines), array('include' => static::$_include));
                $results[$class][$method] = count($branches) + 1;
                $report->collect(__CLASS__, $results);
            }
        }
        return $tests;
    }

Usage Example

 /**
  * 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);
 }
All Usage Examples Of lithium\test\filter\Complexity::apply