From 8a48643f53ea30822cb5112cf47dced100dbb151 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 11 Feb 2025 14:10:43 +0000 Subject: [PATCH] Zend: Add tests for relative types --- .../invalid_types/parent_global_function.phpt | 10 +++++++ .../invalid_types/parent_interface.phpt | 12 +++++++++ .../invalid_types/self_global_function.phpt | 10 +++++++ .../invalid_types/static_global_function.phpt | 10 +++++++ .../relative_type_in_closures.phpt | 13 +++++++++ ...tive_type_in_evaled_class_using_trait.phpt | 27 +++++++++++++++++++ .../relative_type_in_evaled_trait.phpt | 27 +++++++++++++++++++ ...trait_parent_type_in_class_no_parent1.phpt | 15 +++++++++++ ...trait_parent_type_in_class_no_parent2.phpt | 15 +++++++++++ ...trait_parent_type_in_class_no_parent3.phpt | 15 +++++++++++ ...trait_parent_type_in_class_no_parent4.phpt | 15 +++++++++++ 11 files changed, 169 insertions(+) create mode 100644 Zend/tests/type_declarations/relative_types/invalid_types/parent_global_function.phpt create mode 100644 Zend/tests/type_declarations/relative_types/invalid_types/parent_interface.phpt create mode 100644 Zend/tests/type_declarations/relative_types/invalid_types/self_global_function.phpt create mode 100644 Zend/tests/type_declarations/relative_types/invalid_types/static_global_function.phpt create mode 100644 Zend/tests/type_declarations/relative_types/relative_type_in_closures.phpt create mode 100644 Zend/tests/type_declarations/relative_types/relative_type_in_evaled_class_using_trait.phpt create mode 100644 Zend/tests/type_declarations/relative_types/relative_type_in_evaled_trait.phpt create mode 100644 Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent1.phpt create mode 100644 Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent2.phpt create mode 100644 Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent3.phpt create mode 100644 Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent4.phpt diff --git a/Zend/tests/type_declarations/relative_types/invalid_types/parent_global_function.phpt b/Zend/tests/type_declarations/relative_types/invalid_types/parent_global_function.phpt new file mode 100644 index 0000000000000..38ca437dd3869 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/invalid_types/parent_global_function.phpt @@ -0,0 +1,10 @@ +--TEST-- +Cannot use parent type outside a class/trait: global function +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use "parent" when no class scope is active in %s on line %d diff --git a/Zend/tests/type_declarations/relative_types/invalid_types/parent_interface.phpt b/Zend/tests/type_declarations/relative_types/invalid_types/parent_interface.phpt new file mode 100644 index 0000000000000..66e33a080903b --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/invalid_types/parent_interface.phpt @@ -0,0 +1,12 @@ +--TEST-- +Cannot use parent type outside a class/trait: interface +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use "parent" when current class scope has no parent in %s on line %d diff --git a/Zend/tests/type_declarations/relative_types/invalid_types/self_global_function.phpt b/Zend/tests/type_declarations/relative_types/invalid_types/self_global_function.phpt new file mode 100644 index 0000000000000..a9b1a075d0735 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/invalid_types/self_global_function.phpt @@ -0,0 +1,10 @@ +--TEST-- +Cannot use self type outside a class/trait: global function +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use "self" when no class scope is active in %s on line %d diff --git a/Zend/tests/type_declarations/relative_types/invalid_types/static_global_function.phpt b/Zend/tests/type_declarations/relative_types/invalid_types/static_global_function.phpt new file mode 100644 index 0000000000000..4d287bbe9835f --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/invalid_types/static_global_function.phpt @@ -0,0 +1,10 @@ +--TEST-- +Cannot use static type outside a class/trait: global function +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use "static" when no class scope is active in %s on line %d diff --git a/Zend/tests/type_declarations/relative_types/relative_type_in_closures.phpt b/Zend/tests/type_declarations/relative_types/relative_type_in_closures.phpt new file mode 100644 index 0000000000000..c729df12bf306 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/relative_type_in_closures.phpt @@ -0,0 +1,13 @@ +--TEST-- +Relative class types can be used for closures as it may be bound to a class +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_class_using_trait.phpt b/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_class_using_trait.phpt new file mode 100644 index 0000000000000..0c0e64cdec86e --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_class_using_trait.phpt @@ -0,0 +1,27 @@ +--TEST-- +Eval Class definition should not leak memory when using compiled traits +--FILE-- +bar(); +var_dump($a2); + +?> +DONE +--EXPECT-- +object(A)#2 (0) { +} +DONE diff --git a/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_trait.phpt b/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_trait.phpt new file mode 100644 index 0000000000000..74e71f6c324e7 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/relative_type_in_evaled_trait.phpt @@ -0,0 +1,27 @@ +--TEST-- +Eval code should not leak memory when using traits +--FILE-- +bar(); +var_dump($a2); + +?> +DONE +--EXPECT-- +object(A)#2 (0) { +} +DONE diff --git a/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent1.phpt b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent1.phpt new file mode 100644 index 0000000000000..1959ab7f802cd --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent1.phpt @@ -0,0 +1,15 @@ +--TEST-- +Cannot use a trait which references parent as a type in a class with no parent, single type +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent2.phpt b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent2.phpt new file mode 100644 index 0000000000000..0d5b9eefc4414 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent2.phpt @@ -0,0 +1,15 @@ +--TEST-- +Cannot use a trait which references parent as a type in a class with no parent, nullable type +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent3.phpt b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent3.phpt new file mode 100644 index 0000000000000..eeb50a2abef46 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent3.phpt @@ -0,0 +1,15 @@ +--TEST-- +Cannot use a trait which references parent as a type in a class with no parent, union type +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent4.phpt b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent4.phpt new file mode 100644 index 0000000000000..02605b28bdcc3 --- /dev/null +++ b/Zend/tests/type_declarations/relative_types/traits/trait_parent_type_in_class_no_parent4.phpt @@ -0,0 +1,15 @@ +--TEST-- +Cannot use a trait which references parent as a type in a class with no parent, DNF type +--FILE-- + +DONE +--EXPECT-- +DONE