From c9a397ded073e877d8f353db2f0693ea15ea2a1d Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Thu, 6 Nov 2025 11:07:29 -0300 Subject: [PATCH 1/4] WP/DeprecatedClasses: rename test case file More tests will be added in a separate file in a subsequent commit. --- ...st.inc => DeprecatedClassesUnitTest.1.inc} | 0 .../Tests/WP/DeprecatedClassesUnitTest.php | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) rename WordPress/Tests/WP/{DeprecatedClassesUnitTest.inc => DeprecatedClassesUnitTest.1.inc} (100%) diff --git a/WordPress/Tests/WP/DeprecatedClassesUnitTest.inc b/WordPress/Tests/WP/DeprecatedClassesUnitTest.1.inc similarity index 100% rename from WordPress/Tests/WP/DeprecatedClassesUnitTest.inc rename to WordPress/Tests/WP/DeprecatedClassesUnitTest.1.inc diff --git a/WordPress/Tests/WP/DeprecatedClassesUnitTest.php b/WordPress/Tests/WP/DeprecatedClassesUnitTest.php index 682f144ebe..32d3af6557 100644 --- a/WordPress/Tests/WP/DeprecatedClassesUnitTest.php +++ b/WordPress/Tests/WP/DeprecatedClassesUnitTest.php @@ -24,17 +24,24 @@ final class DeprecatedClassesUnitTest extends AbstractSniffUnitTest { /** * Returns the lines where errors should occur. * + * @param string $testFile The test file to check for errors. + * * @return array Key is the line number, value is the number of expected errors. */ - public function getErrorList() { - $start_line = 9; - $end_line = 28; - $errors = array_fill( $start_line, ( ( $end_line - $start_line ) + 1 ), 1 ); + public function getErrorList( $testFile = '' ) { + switch ( $testFile ) { + case 'DeprecatedClassesUnitTest.1.inc': + $start_line = 9; + $end_line = 28; + $errors = array_fill( $start_line, ( ( $end_line - $start_line ) + 1 ), 1 ); - // Unset the lines related to version comments. - unset( $errors[16], $errors[18], $errors[21], $errors[26] ); + // Unset the lines related to version comments. + unset( $errors[16], $errors[18], $errors[21], $errors[26] ); - return $errors; + return $errors; + default: + return array(); + } } /** From 72def2df80bf23a0f20af9a15d4f09f2ed5ffdd1 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Thu, 6 Nov 2025 11:30:44 -0300 Subject: [PATCH 2/4] WP/DeprecatedClasses: add tests for namespaced names I opted to add the tests in a separate file as for DeprecatedClassesUnitTest.1.inc the error lines are generated dynamically. --- .../Tests/WP/DeprecatedClassesUnitTest.2.inc | 20 +++++++++++++++++++ .../Tests/WP/DeprecatedClassesUnitTest.php | 11 ++++++++++ 2 files changed, 31 insertions(+) create mode 100644 WordPress/Tests/WP/DeprecatedClassesUnitTest.2.inc diff --git a/WordPress/Tests/WP/DeprecatedClassesUnitTest.2.inc b/WordPress/Tests/WP/DeprecatedClassesUnitTest.2.inc new file mode 100644 index 0000000000..dbe46b72c6 --- /dev/null +++ b/WordPress/Tests/WP/DeprecatedClassesUnitTest.2.inc @@ -0,0 +1,20 @@ + 1, + 10 => 1, + 11 => 1, + 15 => 1, + 16 => 1, + 20 => 1, + ); + default: return array(); } From 0901e3bc00a4553375432fe3ff887a2c4db4c42c Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Thu, 6 Nov 2025 12:10:59 -0300 Subject: [PATCH 3/4] WP/ClassNameCase: add tests for namespaced names --- WordPress/Tests/WP/ClassNameCaseUnitTest.inc | 18 ++++++++++++++++++ WordPress/Tests/WP/ClassNameCaseUnitTest.php | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc index 1c540dc656..e3a7ccaeee 100644 --- a/WordPress/Tests/WP/ClassNameCaseUnitTest.inc +++ b/WordPress/Tests/WP/ClassNameCaseUnitTest.inc @@ -65,3 +65,21 @@ class NotYetDetected { public function paramTypeDeclaration( wp_role $role ) {} public function returnTypeDeclaration() : WP_TERM {} } + +/* + * Safeguard correct handling of namespaced class references (the namespace types not handled below are already handled + * in other tests above). + */ +$obj = new MyNamespace\atomEntry(); +$obj = new \MyNamespace\core_upgrader(); +$obj = new namespace\Sub\file_upload_upgrader(); +$obj = new namespace\pop3(); +class MyClass2 extends MyNamespace\twentytwenty_walker_page {} +class MyClass3 extends \MyNamespace\TWENTY_ELEVEN_EPHEMERA_WIDGET {} +class MyClass4 extends namespace\Sub\twenty_Twenty_One_SVG_icons {} +class MyClass5 extends namespace\twentynineteen_SVG_icons {} +\avifinfo\Box::prepare_query(); +MyNamespace\Avifinfo\CHAN_PROP::prepare_query(); +\MyNamespace\Avifinfo\features::prepare_query(); +namespace\Sub\AVIFINFO\parser::prepare_query(); +namespace\AVIFINFO\TILE::prepare_query(); diff --git a/WordPress/Tests/WP/ClassNameCaseUnitTest.php b/WordPress/Tests/WP/ClassNameCaseUnitTest.php index 7869ea7f6f..2beb75bd06 100644 --- a/WordPress/Tests/WP/ClassNameCaseUnitTest.php +++ b/WordPress/Tests/WP/ClassNameCaseUnitTest.php @@ -45,6 +45,10 @@ public function getWarningList() { 47 => 1, 48 => 1, 49 => 1, + 76 => 1, + 80 => 1, + 81 => 1, + 85 => 1, ); } } From 420def6f97090017a9d833bc21ba1158e14d49c6 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 12 Nov 2025 15:30:05 -0300 Subject: [PATCH 4/4] DB/RestrictedClasses: add tests for namespaced names --- .../Tests/DB/RestrictedClassesUnitTest.1.inc | 19 ++++++++++++++++++- .../Tests/DB/RestrictedClassesUnitTest.php | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/WordPress/Tests/DB/RestrictedClassesUnitTest.1.inc b/WordPress/Tests/DB/RestrictedClassesUnitTest.1.inc index 4449a0395b..32fa0662f9 100644 --- a/WordPress/Tests/DB/RestrictedClassesUnitTest.1.inc +++ b/WordPress/Tests/DB/RestrictedClassesUnitTest.1.inc @@ -30,7 +30,7 @@ class MyMysqli extends mysqli {} class YourMysqli extends \mysqli {} class OurMysqli implements mysqli {} -class TheirMysqli implements \mysqli {} +class TheirMysqli implements \MYSQLI {} $db5 = new PDO(); $db6 = ( new PDO() )->exec(); @@ -115,3 +115,20 @@ $anon = new readonly class { $anon = new readonly class() extends PDOStatement {}; // Error. $anon = new #[MyAttribute] readonly class {}; + +/* + * Safeguard correct handling of namespaced class references (the namespace types not handled below are already handled + * in other tests above). + */ +$obj = new MyNamespace\PDO(); +$obj = new \MyNamespace\PDOStatement(); +$obj = new namespace\Sub\mysqli(); +$obj = new namespace\PDO(); +class MyClass1 extends MyNamespace\mysqli {} +class MyClass2 extends \MyNamespace\PDO {} +class MyClass3 extends namespace\Sub\PDOStatement {} +class MyClass4 extends namespace\mysqli {} +MyNamespace\mysqli::do_something(); +\MyNamespace\PDO::do_something(); +namespace\Sub\PDOStatement::do_something(); +namespace\MYSQLI::do_something(); diff --git a/WordPress/Tests/DB/RestrictedClassesUnitTest.php b/WordPress/Tests/DB/RestrictedClassesUnitTest.php index a07ace04d8..06d9ae0ffe 100644 --- a/WordPress/Tests/DB/RestrictedClassesUnitTest.php +++ b/WordPress/Tests/DB/RestrictedClassesUnitTest.php @@ -102,6 +102,9 @@ public function getErrorList( $testFile = '' ) { 103 => 1, 106 => 1, 115 => 1, + 126 => 1, + 130 => 1, + 134 => 1, ); case 'RestrictedClassesUnitTest.2.inc':