Voici une description de la commande Magento 2 utilisée pour vérifier la duplication de code.
La commande pour vérifier la duplication / copier-coller du code est ci-dessous.
php bin/magento dev:tests:run static
Cette commande ira d'abord dans le dev/tests/static
dossier. Ici vous pouvez voir le fichier de déclaration phpunit.xml.dist pour cette suite de tests.
<testsuites>
<testsuite name="Less Static Code Analysis">
<file>testsuite/Magento/Test/Less/LiveCodeTest.php</file>
</testsuite>
<testsuite name="Javascript Static Code Analysis">
<file>testsuite/Magento/Test/Js/LiveCodeTest.php</file>
</testsuite>
<testsuite name="PHP Coding Standard Verification">
<file>testsuite/Magento/Test/Php/LiveCodeTest.php</file>
</testsuite>
<testsuite name="Code Integrity Tests">
<directory>testsuite/Magento/Test/Integrity</directory>
</testsuite>
<testsuite name="Xss Unsafe Output Test">
<file>testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php</file>
</testsuite>
</testsuites>
Dans ce fichier, vous trouverez ci-dessus le code qui définira quel fichier exécuter pour différents tests de code.
Pour affiner, vous pouvez voir PHP Coding Standard Verification
testsuite
Cela exécutera le fichier testsuite / Magento / Test / Php / LiveCodeTest.php
Lorsque vous ouvrez ce fichier, vous trouverez différentes fonctions pour vérifier les différents types de problèmes de code. La fonction qui sera exécutée esttestCopyPaste
public function testCopyPaste()
{
$reportFile = self::$reportDir . '/phpcpd_report.xml';
$copyPasteDetector = new CopyPasteDetector($reportFile);
if (!$copyPasteDetector->canRun()) {
$this->markTestSkipped('PHP Copy/Paste Detector is not available.');
}
$blackList = [];
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
$copyPasteDetector->setBlackList($blackList);
$result = $copyPasteDetector->run([BP]);
$output = "";
if (file_exists($reportFile)) {
$output = file_get_contents($reportFile);
}
$this->assertTrue(
$result,
"PHP Copy/Paste Detector has found error(s):" . PHP_EOL . $output
);
}
Ici, vous trouverez un code qui sera utilisé pour mettre sur liste noire tous les fichiers / dossiers de cette vérification de code.
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
Cette foreach
fonction vérifiera tout .txt
fichier ajouté dans dev / tests / static / testsuite / Magento / Test / Php / _files / phpcpd / blacklist . Il lira le fichier et ignorera tous les dossiers à exclure du processus de détection du code copier-coller.
Après avoir ajouté tous les fichiers / dossiers de la liste noire au code, il s'exécutera sous le code.
$result = $copyPasteDetector->run([BP]);
Ce code exécutera la run
fonction du fichier dev / tests / static / framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php .
public function run(array $whiteList)
{
$blackListStr = ' ';
foreach ($this->blacklist as $file) {
$file = escapeshellarg(trim($file));
if (!$file) {
continue;
}
$blackListStr .= '--exclude ' . $file . ' ';
}
$vendorDir = require BP . '/app/etc/vendor_path.php';
$command = 'php ' . BP . '/' . $vendorDir . '/bin/phpcpd' . ' --log-pmd ' . escapeshellarg(
$this->reportFile
) . ' --names-exclude "*Test.php" --min-lines 13' . $blackListStr . ' ' . implode(' ', $whiteList);
exec($command, $output, $exitCode);
return !(bool)$exitCode;
}
Ici, le code ajoute tous les blacklisted
dossiers / fichiers de la --exclude
liste.
Après cela, il exécutera la vendor/bin/phpcpd
commande.
Ici, dans la commande elle-même, Magento a
exclu tous les
Test
fichiers par code
--names-exclude "*Test.php"
Il a également ignoré tous les doublons de code de moins de 13 lignes par code.
--min-lines 13
La sortie de cette exécution de commande sera ajoutée au fichier défini dans la testCopyPaste
fonction. Le nom de fichier pour la détection de copier-coller est phpcpd_report.xml situé à l'emplacement dev / tests / static / report .
Après l'exécution réussie de la commande, la sortie sera ajoutée aux fichiers de rapport.