Beispiel #1
0
 /**
  * Returns an iterator with all generated {@link PHP_Depend_Code_Package}
  * objects.
  *
  * @return PHP_Depend_Code_NodeIterator
  */
 public function getPackages()
 {
     // Create a package array copy
     $packages = $this->_packages;
     // Remove default package if empty
     if ($this->defaultPackage->getTypes()->count() === 0 && $this->defaultPackage->getFunctions()->count() === 0) {
         unset($packages[self::DEFAULT_PACKAGE]);
     }
     return new PHP_Depend_Code_NodeIterator($packages);
 }
Beispiel #2
0
 /**
  * Sets the parent package for this function.
  *
  * @param PHP_Depend_Code_Package $package The parent package.
  *
  * @return void
  */
 public function setPackage(PHP_Depend_Code_Package $package)
 {
     $this->packageName = $package->getName();
     $this->package = $package;
 }
 /**
  * Visits a package node.
  *
  * @param PHP_Depend_Code_Class $package The package class node.
  *
  * @return void
  * @see PHP_Depend_VisitorI::visitPackage()
  */
 public function visitPackage(PHP_Depend_Code_Package $package)
 {
     $this->visits[] = $package->getName();
     parent::visitPackage($package);
 }
Beispiel #4
0
 /**
  * testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists
  *
  * @return void
  * @covers PHP_Depend_Code_Package
  * @group pdepend
  * @group pdepend::code
  * @group unittest
  */
 public function testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists()
 {
     $package = new PHP_Depend_Code_Package('package1');
     $package->addFunction(new PHP_Depend_Code_Function("foo", 0));
     $this->assertTrue($package->isUserDefined());
 }
Beispiel #5
0
 /**
  * Visits a package node.
  *
  * @param PHP_Depend_Code_Class $package The package class node.
  *
  * @return void
  * @see PHP_Depend_VisitorI::visitPackage()
  */
 public function visitPackage(PHP_Depend_Code_Package $package)
 {
     if (!$package->isUserDefined()) {
         return;
     }
     $stats = $this->analyzer->getStats($package);
     if (count($stats) === 0) {
         return;
     }
     $doc = $this->packages->ownerDocument;
     $this->concreteClasses = $doc->createElement('ConcreteClasses');
     $this->abstractClasses = $doc->createElement('AbstractClasses');
     $packageXml = $doc->createElement('Package');
     $packageXml->setAttribute('name', $package->getName());
     $statsXml = $doc->createElement('Stats');
     $statsXml->appendChild($doc->createElement('TotalClasses'))->appendChild($doc->createTextNode($stats['tc']));
     $statsXml->appendChild($doc->createElement('ConcreteClasses'))->appendChild($doc->createTextNode($stats['cc']));
     $statsXml->appendChild($doc->createElement('AbstractClasses'))->appendChild($doc->createTextNode($stats['ac']));
     $statsXml->appendChild($doc->createElement('Ca'))->appendChild($doc->createTextNode($stats['ca']));
     $statsXml->appendChild($doc->createElement('Ce'))->appendChild($doc->createTextNode($stats['ce']));
     $statsXml->appendChild($doc->createElement('A'))->appendChild($doc->createTextNode($stats['a']));
     $statsXml->appendChild($doc->createElement('I'))->appendChild($doc->createTextNode($stats['i']));
     $statsXml->appendChild($doc->createElement('D'))->appendChild($doc->createTextNode($stats['d']));
     $dependsUpon = $doc->createElement('DependsUpon');
     foreach ($this->analyzer->getEfferents($package) as $efferent) {
         $efferentXml = $doc->createElement('Package');
         $efferentXml->appendChild($doc->createTextNode($efferent->getName()));
         $dependsUpon->appendChild($efferentXml);
     }
     $usedBy = $doc->createElement('UsedBy');
     foreach ($this->analyzer->getAfferents($package) as $afferent) {
         $afferentXml = $doc->createElement('Package');
         $afferentXml->appendChild($doc->createTextNode($afferent->getName()));
         $usedBy->appendChild($afferentXml);
     }
     $packageXml->appendChild($statsXml);
     $packageXml->appendChild($this->concreteClasses);
     $packageXml->appendChild($this->abstractClasses);
     $packageXml->appendChild($dependsUpon);
     $packageXml->appendChild($usedBy);
     if (($cycles = $this->analyzer->getCycle($package)) !== null) {
         $cycleXml = $doc->createElement('Package');
         $cycleXml->setAttribute('Name', $package->getName());
         foreach ($cycles as $cycle) {
             $cycleXml->appendChild($doc->createElement('Package'))->appendChild($doc->createTextNode($cycle->getName()));
         }
         $this->cycles->appendChild($cycleXml);
     }
     foreach ($package->getTypes() as $type) {
         $type->accept($this);
     }
     if ($this->concreteClasses->firstChild === null && $this->abstractClasses->firstChild === null) {
         return;
     }
     $this->packages->appendChild($packageXml);
 }
 /**
  * testVisitorInvokesEndTraitOnListener
  *
  * @return void
  * @since 1.0.0
  */
 public function testVisitorInvokesEndTraitOnListener()
 {
     $trait = $this->createTraitFixture();
     $trait->setSourceFile(new PHP_Depend_Code_File(__FILE__));
     $package = new PHP_Depend_Code_Package('MyPackage');
     $package->addType($trait);
     $listener = $this->getMock('PHP_Depend_Visitor_ListenerI');
     $listener->expects($this->once())->method('endVisitTrait');
     $visitor = $this->getMock('PHP_Depend_Visitor_AbstractVisitor', array('getVisitListeners'));
     $visitor->addVisitListener($listener);
     $visitor->visitPackage($package);
 }
Beispiel #7
0
 /**
  * Visits a package node.
  *
  * @param PHP_Depend_Code_Class $package The package class node.
  *
  * @return void
  * @see PHP_Depend_VisitorI::visitPackage()
  */
 public function visitPackage(PHP_Depend_Code_Package $package)
 {
     $xml = end($this->_xmlStack);
     $doc = $xml->ownerDocument;
     $packageXml = $doc->createElement('package');
     $packageXml->setAttribute('name', $package->getName());
     $this->writeNodeMetrics($packageXml, $package);
     array_push($this->_xmlStack, $packageXml);
     foreach ($package->getTypes() as $type) {
         $type->accept($this);
     }
     foreach ($package->getFunctions() as $function) {
         $function->accept($this);
     }
     array_pop($this->_xmlStack);
     if ($packageXml->firstChild === null) {
         return;
     }
     $xml->appendChild($packageXml);
 }
Beispiel #8
0
 /**
  * Returns an iterator with all generated {@link PHP_Depend_Code_Package}
  * objects.
  *
  * @return PHP_Depend_Code_NodeIterator
  * @since 0.9.12
  */
 private function _getPreparedPackages()
 {
     // Create a package array copy
     $packages = $this->_packages;
     // Remove default package if empty
     if ($this->defaultPackage->getTypes()->count() === 0 && $this->defaultPackage->getFunctions()->count() === 0) {
         unset($packages[self::DEFAULT_PACKAGE]);
     }
     return $packages;
 }
Beispiel #9
0
 /**
  * Calculates metrics for the given <b>$package</b> instance.
  *
  * @param PHP_Depend_Code_Package $package The context package instance.
  *
  * @return void
  * @see PHP_Depend_VisitorI::visitPackage()
  */
 public function visitPackage(PHP_Depend_Code_Package $package)
 {
     if (!$package->isUserDefined()) {
         //return;
     }
     $this->fireStartPackage($package);
     foreach ($package->getTypes() as $type) {
         $type->accept($this);
     }
     foreach ($package->getFunctions() as $function) {
         $function->accept($this);
     }
     $this->fireEndPackage($package);
 }
Beispiel #10
0
 /**
  * Initializes the node metric record for the given <b>$package</b>.
  *
  * @param PHP_Depend_Code_Package $package The context package.
  *
  * @return void
  */
 protected function initPackageMetric(PHP_Depend_Code_Package $package)
 {
     $uuid = $package->getUuid();
     if (!isset($this->nodeMetrics[$uuid])) {
         // Store a package reference
         $this->nodeSet[$uuid] = $package;
         // Create empty metrics for this package
         $this->nodeMetrics[$uuid] = array(self::M_NUMBER_OF_CLASSES => 0, self::M_NUMBER_OF_CONCRETE_CLASSES => 0, self::M_NUMBER_OF_ABSTRACT_CLASSES => 0, self::M_AFFERENT_COUPLING => array(), self::M_EFFERENT_COUPLING => array(), self::M_ABSTRACTION => 0, self::M_INSTABILITY => 0, self::M_DISTANCE => 0);
     }
 }
Beispiel #11
0
 /**
  * testVisitClassCountsInterfacesThatAreNotUserDefined
  *
  * @return void
  * @covers PHP_Depend_Metrics_NodeCount_Analyzer
  * @group pdepend
  * @group pdepend::metrics
  * @group pdepend::metrics::nodecount
  * @group unittest
  */
 public function testVisitClassCountsInterfacesThatAreNotUserDefined()
 {
     $userDefined = new PHP_Depend_Code_Interface('Manuel');
     $userDefined->setUserDefined();
     $package = new PHP_Depend_Code_Package('PHP_Depend');
     $package->addType($userDefined);
     $analyzer = new PHP_Depend_Metrics_NodeCount_Analyzer();
     $analyzer->analyze(new PHP_Depend_Code_NodeIterator(array($package)));
     $metrics = $analyzer->getNodeMetrics($package);
     $this->assertEquals(1, $metrics['noi']);
 }
Beispiel #12
0
 /**
  * Sets the parent package for this function.
  *
  * @param PHP_Depend_Code_Package $package The parent package.
  *
  * @return void
  */
 public function setPackage(PHP_Depend_Code_Package $package = null)
 {
     if ($package === null) {
         $this->packageName = null;
         $this->_package = null;
     } else {
         $this->packageName = $package->getName();
         $this->_package = $package;
     }
 }
Beispiel #13
0
 /**
  * Tests that the filter not accepts a function with an invalid package.
  *
  * @return void
  * @covers PHP_Depend_Code_Filter_Package
  * @group pdepend
  * @group pdepend::code
  * @group pdepend::code::filter
  * @group unittest
  */
 public function testFilterNotAcceptsFunction()
 {
     $package = new PHP_Depend_Code_Package(__FUNCTION__);
     $function = $package->addFunction(new PHP_Depend_Code_Function('Func'));
     $filter = new PHP_Depend_Code_Filter_Package(array(__FUNCTION__));
     $this->assertFalse($filter->accept($function));
 }
Beispiel #14
0
 /**
  * Tests that the analyzer calculates the correct number of functions values.
  *
  * @return void
  */
 public function testAnalyzerCalculatesCorrectNumberOfFunctions()
 {
     $packageA = new PHP_Depend_Code_Package('A');
     $packageA->addFunction(new PHP_Depend_Code_Function('a1'));
     $packageA->addFunction(new PHP_Depend_Code_Function('a2'));
     $packageA->addFunction(new PHP_Depend_Code_Function('a3'));
     $packageB = new PHP_Depend_Code_Package('B');
     $packageB->addFunction(new PHP_Depend_Code_Function('b1'));
     $packageB->addFunction(new PHP_Depend_Code_Function('b2'));
     $packageC = new PHP_Depend_Code_Package('C');
     $packageC->addFunction(new PHP_Depend_Code_Function('c1'));
     $packages = array($packageA, $packageB, $packageC);
     $analyzer = new PHP_Depend_Metrics_NodeCount_Analyzer();
     $analyzer->analyze(new PHP_Depend_Code_NodeIterator($packages));
     $project = $analyzer->getProjectMetrics();
     $this->assertArrayHasKey('nof', $project);
     $this->assertEquals(6, $project['nof']);
     $metrics = $analyzer->getNodeMetrics($packageA);
     $this->assertArrayHasKey('nof', $metrics);
     $this->assertEquals(3, $metrics['nof']);
     $metrics = $analyzer->getNodeMetrics($packageB);
     $this->assertArrayHasKey('nof', $metrics);
     $this->assertEquals(2, $metrics['nof']);
     $metrics = $analyzer->getNodeMetrics($packageC);
     $this->assertArrayHasKey('nof', $metrics);
     $this->assertEquals(1, $metrics['nof']);
 }