From 9509b88f575434fb895b1a3627f0d36a683932b7 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Fri, 31 Jul 2026 18:33:20 +0800 Subject: [PATCH] test(compiler): cover separator symbol collisions --- ...ion-method-symbol-underscore-collision.php | 14 +++++++ phpunit/src/FunctionTest.php | 37 ++++++++++++++++--- 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 phpunit/code/function-method-symbol-underscore-collision.php diff --git a/phpunit/code/function-method-symbol-underscore-collision.php b/phpunit/code/function-method-symbol-underscore-collision.php new file mode 100644 index 00000000..77bc437d --- /dev/null +++ b/phpunit/code/function-method-symbol-underscore-collision.php @@ -0,0 +1,14 @@ +assertFunctionMethodNativeNameCollision('function-method-symbol-collision.php'); + $this->assertFunctionMethodNativeNameCollision( + 'function-method-symbol-collision.php', + 'Collision\\Worker::validate()', + 'Collision\\Worker\\validate()', + 'php_collision__worker__validate', + ); } public function testFunctionAndMethodNativeNameCollisionIsRejectedInReverseOrder(): void { - $this->assertFunctionMethodNativeNameCollision('function-method-symbol-collision-reversed.php'); + $this->assertFunctionMethodNativeNameCollision( + 'function-method-symbol-collision-reversed.php', + 'Collision\\Worker::validate()', + 'Collision\\Worker\\validate()', + 'php_collision__worker__validate', + ); } - private function assertFunctionMethodNativeNameCollision(string $filename): void + public function testFunctionNameContainingSeparatorCollidesWithClassMethod(): void + { + $this->assertFunctionMethodNativeNameCollision( + 'function-method-symbol-underscore-collision.php', + 'App\\User::test()', + 'App\\user__test()', + 'php_app__user__test', + ); + } + + private function assertFunctionMethodNativeNameCollision( + string $filename, + string $firstPhpName, + string $secondPhpName, + string $nativeName, + ): void { global $translator; $compiler = \TypePhp\CompilerTest::create(ROOT_PATH); @@ -26,9 +51,9 @@ class FunctionTest extends \BaseTest } catch (\TypePhp\Exception\TestError $error) { $message = $error->getMessage(); $this->assertStringContainsString('C++ symbol collision', $message); - $this->assertStringContainsString('Collision\\Worker::validate()', $message); - $this->assertStringContainsString('Collision\\Worker\\validate()', $message); - $this->assertStringContainsString('php_collision__worker__validate', $message); + $this->assertStringContainsString($firstPhpName, $message); + $this->assertStringContainsString($secondPhpName, $message); + $this->assertStringContainsString($nativeName, $message); $this->assertStringContainsString('rename one of them', $message); } }