Copy & Paste Detection in PHPUnit 3.2
Version 3.2 of PHPUnit is shaping up nicely. In this blog posting I want to highlight another aspect of PHPUnit's new Project Mess Detector feature set.
Duplicate code can be hard to find, especially in a large project. Johann-Peter Hartmann of MAYFLOWER GmbH recently implemented Copy & Paste Detection for PHPUnit's growing set of features that extends its usage scenarios beyond "just unit testing" to a one-stop solution for quality assurance in PHP-based projects.
Here is an example of how PHPUnit 3.2 will report code duplication:
<?xml version="1.0" encoding="UTF-8"?> <pmd-cpd version="PHPUnit 3.2.0"> <duplication lines="12" tokens="56"> <file path="/usr/local/src/ezcomponents/trunk/Graph/src/driver/svg.php" line="197"/> <file path="/usr/local/src/ezcomponents/trunk/Graph/src/driver/svg.php" line="248"/> <codefragment><![CDATA[ if ( !in_array( $color->__toString(), $this->drawnGradients, true ) ) { $gradient = $this->dom->createElement( 'linearGradient' ); $gradient->setAttribute( 'id', 'Definition_' . $color->__toString() ); $this->defs->appendChild( $gradient ); // Start of linear gradient $stop = $this->dom->createElement( 'stop' ); $stop->setAttribute( 'offset', 0 ); $stop->setAttribute( 'style', sprintf( 'stop-color: #%02x%02x%02x; stop-opacity: %.2F;', $color->startColor->red, $color->startColor->green, ]]></codefragment> </duplication>
