Berikut adalah beberapa deskripsi untuk perintah Magento 2 yang digunakan untuk memeriksa duplikasi kode.
Perintah untuk memeriksa duplikasi / copy-paste kode di bawah ini.
php bin/magento dev:tests:run static
Perintah ini pertama-tama akan masuk ke dev/tests/static
folder. Di sini Anda dapat melihat file deklarasi phpunit.xml.dist untuk suite tes ini.
<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>
Dalam file ini, Anda akan menemukan kode di atas yang akan menentukan file mana yang akan dieksekusi untuk tes kode yang berbeda.
Untuk mempersempit Anda dapat melihat PHP Coding Standard Verification
testsuite
Ini akan menjalankan file testsuite / Magento / Test / Php / LiveCodeTest.php
Ketika Anda membuka file ini, Anda akan menemukan berbagai fungsi untuk memeriksa berbagai jenis masalah kode. Fungsi yang akan dieksekusi adalahtestCopyPaste
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
);
}
Di sini, Anda akan menemukan kode yang akan digunakan untuk daftar hitam file / folder dari pemeriksaan kode ini.
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
foreach
Fungsi ini akan memeriksa semua .txt
file yang ditambahkan di dev / test / static / testuite / Magento / Test / Php / _files / phpcpd / lokasi daftar hitam . Ini akan membaca file dan akan mengabaikan semua folder untuk dikecualikan dari proses deteksi kode copy paste.
Setelah menambahkan semua file / folder daftar hitam ke kode, itu akan berjalan di bawah kode.
$result = $copyPasteDetector->run([BP]);
Kode ini akan menjalankan run
fungsi dev / test / static / framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php file.
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;
}
Di sini, kode menambahkan semua blacklisted
folder / file dalam --exclude
daftar.
Setelah itu akan menjalankan vendor/bin/phpcpd
perintah.
Di sini, di perintah itu sendiri Magento miliki
mengecualikan semua
Test
file dengan kode
--names-exclude "*Test.php"
Itu juga melewatkan semua duplikat kode yang kurang dari 13 baris dengan kode
--min-lines 13
Output untuk eksekusi perintah ini akan ditambahkan ke file yang didefinisikan dalam testCopyPaste
fungsi. Nama file untuk deteksi salin-rekat adalah phpcpd_report.xml yang terletak di lokasi dev / tests / static / report .
Setelah eksekusi berhasil dari perintah, output akan ditambahkan ke file laporan.