/** * Processes all {@link PHP_Depend_Code_Package} code nodes. * * @param PHP_Depend_Code_NodeIterator $packages All code packages. * * @return void */ public function analyze(PHP_Depend_Code_NodeIterator $packages) { if ($this->nodeMetrics === null) { $this->fireStartAnalyzer(); $factory = new PHP_Depend_Metrics_CodeRank_StrategyFactory(); if (isset($this->options[self::STRATEGY_OPTION])) { foreach ($this->options[self::STRATEGY_OPTION] as $identifier) { $this->strategies[] = $factory->createStrategy($identifier); } } else { $this->strategies[] = $factory->createDefaultStrategy(); } // Register all listeners foreach ($this->getVisitListeners() as $listener) { foreach ($this->strategies as $strategy) { $strategy->addVisitListener($listener); } } // First traverse package tree foreach ($packages as $package) { // Traverse all strategies foreach ($this->strategies as $strategy) { $package->accept($strategy); } } // Collect all nodes foreach ($this->strategies as $strategy) { $collected = $strategy->getCollectedNodes(); $this->nodes = array_merge_recursive($collected, $this->nodes); } // Init node metrics $this->nodeMetrics = array(); // Calculate code rank metrics $this->buildCodeRankMetrics(); $this->fireEndAnalyzer(); } }
/** * Tests that the factory throws the expected exception for an invalid * strategy identifier. * * @return void * @covers PHP_Depend_Metrics_CodeRank_StrategyFactory * @group pdepend * @group pdepend::metrics * @group pdepend::metrics::coderank * @group unittest */ public function testFactoryMethodThrowsExceptionForInvalidStrategyIdentifier() { $factory = new PHP_Depend_Metrics_CodeRank_StrategyFactory(); $this->setExpectedException('InvalidArgumentException', 'Cannot load file for identifier "foo_bar_baz".'); $factory->createStrategy('foo_bar_baz'); }