From f331591b65367e26854ca4db57ab9e37c4af9080 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Mon, 25 May 2026 15:36:52 +0800 Subject: [PATCH] =?UTF-8?q?test(assign):=20=E6=B7=BB=E5=8A=A0=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E6=96=B0=E8=B5=8B=E5=80=BC=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新了现有测试用例的消息格式以包含具体的变量和类型信息 - 添加了对象类型到各种基本类型的重新赋值测试用例(int、float、bool、str、array) - 添加了基本类型到对象类型的重新赋值测试用例(int、float、bool、array) - 添加了字符串数组到各种基本类型的重新赋值测试用例(int、float、bool) - 添加了标量类型到数组类型的重新赋值测试用例(int、float、bool、str) - 新增了多个PHP代码文件用于测试不同类型的重新赋值场景 - 重命名了原有的字符串到对象重新赋值测试文件 --- phpunit/code/re-assign-array-to-bool.php | 7 ++ phpunit/code/re-assign-array-to-float.php | 7 ++ phpunit/code/re-assign-array-to-int.php | 7 ++ phpunit/code/re-assign-array-to-obj.php | 7 ++ phpunit/code/re-assign-bool-to-array.php | 7 ++ phpunit/code/re-assign-bool-to-obj.php | 7 ++ phpunit/code/re-assign-float-to-array.php | 7 ++ phpunit/code/re-assign-float-to-obj.php | 7 ++ phpunit/code/re-assign-int-to-array.php | 7 ++ phpunit/code/re-assign-int-to-obj.php | 7 ++ phpunit/code/re-assign-obj-to-array.php | 3 +- phpunit/code/re-assign-obj-to-bool.php | 7 ++ phpunit/code/re-assign-obj-to-float.php | 7 ++ phpunit/code/re-assign-obj-to-int.php | 7 ++ phpunit/code/re-assign-obj-to-str.php | 8 ++ phpunit/code/re-assign-str-to-array.php | 7 ++ phpunit/code/re-assign-str-to-bool.php | 7 ++ phpunit/code/re-assign-str-to-float.php | 7 ++ phpunit/code/re-assign-str-to-int.php | 7 ++ phpunit/code/re-assign-str-to-obj.php | 15 --- phpunit/src/AssignTest.php | 107 +++++++++++++++++++++- 21 files changed, 235 insertions(+), 17 deletions(-) create mode 100644 phpunit/code/re-assign-array-to-bool.php create mode 100644 phpunit/code/re-assign-array-to-float.php create mode 100644 phpunit/code/re-assign-array-to-int.php create mode 100644 phpunit/code/re-assign-array-to-obj.php create mode 100644 phpunit/code/re-assign-bool-to-array.php create mode 100644 phpunit/code/re-assign-bool-to-obj.php create mode 100644 phpunit/code/re-assign-float-to-array.php create mode 100644 phpunit/code/re-assign-float-to-obj.php create mode 100644 phpunit/code/re-assign-int-to-array.php create mode 100644 phpunit/code/re-assign-int-to-obj.php create mode 100644 phpunit/code/re-assign-obj-to-bool.php create mode 100644 phpunit/code/re-assign-obj-to-float.php create mode 100644 phpunit/code/re-assign-obj-to-int.php create mode 100644 phpunit/code/re-assign-obj-to-str.php create mode 100644 phpunit/code/re-assign-str-to-array.php create mode 100644 phpunit/code/re-assign-str-to-bool.php create mode 100644 phpunit/code/re-assign-str-to-float.php create mode 100644 phpunit/code/re-assign-str-to-int.php delete mode 100644 phpunit/code/re-assign-str-to-obj.php diff --git a/phpunit/code/re-assign-array-to-bool.php b/phpunit/code/re-assign-array-to-bool.php new file mode 100644 index 00000000..e15cfe71 --- /dev/null +++ b/phpunit/code/re-assign-array-to-bool.php @@ -0,0 +1,7 @@ +exec('Cannot re-assign variable', 're-assign.php'); + $this->exec('Cannot re-assign `$obj` from `php::Str` to `php::Object`', 're-assign.php'); } public function testAssignClass() @@ -51,4 +53,107 @@ class AssignTest extends \BaseTest 'std-unsafe-ptr-argument-requires-container.php' ); } + + // === Object value assigned to non-object variable (right side is New_ expr) === + + public function testObjectToInt() + { + $this->exec("Cannot re-assign `\$x` from `php::Object` to `php::Int`", 're-assign-obj-to-int.php'); + } + + public function testObjectToFloat() + { + $this->exec("Cannot re-assign `\$x` from `php::Object` to `php::Float`", 're-assign-obj-to-float.php'); + } + + public function testObjectToBool() + { + $this->exec("Cannot re-assign `\$x` from `php::Object` to `php::Bool`", 're-assign-obj-to-bool.php'); + } + + public function testObjectToStr() + { + $this->exec("Cannot re-assign `\$x` from `php::Object` to `php::Str`", 're-assign-obj-to-str.php'); + } + + public function testObjectToArray() + { + $this->exec("Cannot re-assign `\$obj` from `php::Object` to `php::Array`", 're-assign-obj-to-array.php'); + } + + // === Non-object value assigned to Object variable === + + public function testIntToObject() + { + $this->exec("Cannot re-assign `\$obj` from `php::Int` to `php::Object`", 're-assign-int-to-obj.php'); + } + + public function testFloatToObject() + { + $this->exec("Cannot re-assign `\$obj` from `php::Float` to `php::Object`", 're-assign-float-to-obj.php'); + } + + public function testBoolToObject() + { + $this->exec("Cannot re-assign `\$obj` from `php::Bool` to `php::Object`", 're-assign-bool-to-obj.php'); + } + + public function testArrayToObject() + { + $this->exec("Cannot re-assign `\$obj` from `php::Array` to `php::Object`", 're-assign-array-to-obj.php'); + } + + // === Str / Array value assigned to non-object scalar variable === + + public function testStrToInt() + { + $this->exec("Cannot re-assign `\$x` from `php::Str` to `php::Int`", 're-assign-str-to-int.php'); + } + + public function testArrayToInt() + { + $this->exec("Cannot re-assign `\$x` from `php::Array` to `php::Int`", 're-assign-array-to-int.php'); + } + + public function testStrToFloat() + { + $this->exec("Cannot re-assign `\$x` from `php::Str` to `php::Float`", 're-assign-str-to-float.php'); + } + + public function testArrayToFloat() + { + $this->exec("Cannot re-assign `\$x` from `php::Array` to `php::Float`", 're-assign-array-to-float.php'); + } + + public function testStrToBool() + { + $this->exec("Cannot re-assign `\$x` from `php::Str` to `php::Bool`", 're-assign-str-to-bool.php'); + } + + public function testArrayToBool() + { + $this->exec("Cannot re-assign `\$x` from `php::Array` to `php::Bool`", 're-assign-array-to-bool.php'); + } + + // === Scalar value assigned to Array variable === + + public function testIntToArray() + { + $this->exec("Cannot re-assign `\$x` from `php::Int` to `php::Array`", 're-assign-int-to-array.php'); + } + + public function testFloatToArray() + { + $this->exec("Cannot re-assign `\$x` from `php::Float` to `php::Array`", 're-assign-float-to-array.php'); + } + + public function testBoolToArray() + { + $this->exec("Cannot re-assign `\$x` from `php::Bool` to `php::Array`", 're-assign-bool-to-array.php'); + } + + public function testStrToArray() + { + $this->exec("Cannot re-assign `\$x` from `php::Str` to `php::Array`", 're-assign-str-to-array.php'); + } }