diff options
Diffstat (limited to 'tests/classes')
19 files changed, 281 insertions, 17 deletions
diff --git a/tests/classes/__call_007.phpt b/tests/classes/__call_007.phpt index b061d17d85..cc7a2773bd 100644 --- a/tests/classes/__call_007.phpt +++ b/tests/classes/__call_007.phpt @@ -54,21 +54,25 @@ try { --EXPECTF-- Warning: The magic method __call() must have public visibility and cannot be static in %s on line 3 ---> Invoke __call via simple method call. -NULL +object(A)#1 (0) { +} Exception caught OK; continuing. ---> Invoke __call via scope resolution operator within instance. -NULL +object(A)#1 (0) { +} Exception caught OK; continuing. ---> Invoke __call via scope resolution operator within child instance. -NULL +object(B)#2 (0) { +} Exception caught OK; continuing. ---> Invoke __call via callback. -NULL +object(B)#2 (0) { +} Exception caught OK; continuing. ==DONE== diff --git a/tests/classes/constants_comments_001.phpt b/tests/classes/constants_comments_001.phpt new file mode 100644 index 0000000000..dbdd67c332 --- /dev/null +++ b/tests/classes/constants_comments_001.phpt @@ -0,0 +1,34 @@ +--TEST-- +Class constants and doc comments +--INI-- +opcache.save_comments=1 +--FILE-- +<?php +class X { + /** comment X1 */ + const X1 = 1; + const X2 = 2; + /** comment X3 */ + const X3 = 3; +} +class Y extends X { + /** comment Y1 */ + const Y1 = 1; + const Y2 = 2; + /** comment Y3 */ + const Y3 = 3; +} +$r = new ReflectionClass('Y'); +foreach ($r->getReflectionConstants() as $rc) { + echo $rc->getName() . " : " . $rc->getDocComment() . "\n"; +} + + +?> +--EXPECT-- +Y1 : /** comment Y1 */ +Y2 : +Y3 : /** comment Y3 */ +X1 : /** comment X1 */ +X2 : +X3 : /** comment X3 */ diff --git a/tests/classes/constants_visibility_001.phpt b/tests/classes/constants_visibility_001.phpt new file mode 100644 index 0000000000..37a0154d92 --- /dev/null +++ b/tests/classes/constants_visibility_001.phpt @@ -0,0 +1,23 @@ +--TEST-- +Class public constant visibility +--FILE-- +<?php +class A { + public const publicConst = 'publicConst'; + static function staticConstDump() { + var_dump(self::publicConst); + } + function constDump() { + var_dump(self::publicConst); + } +} + +var_dump(A::publicConst); +A::staticConstDump(); +(new A())->constDump(); + +?> +--EXPECTF-- +string(11) "publicConst" +string(11) "publicConst" +string(11) "publicConst" diff --git a/tests/classes/constants_visibility_002.phpt b/tests/classes/constants_visibility_002.phpt new file mode 100644 index 0000000000..6ec9901269 --- /dev/null +++ b/tests/classes/constants_visibility_002.phpt @@ -0,0 +1,28 @@ +--TEST-- +Class protected constant visibility +--FILE-- +<?php +class A { + protected const protectedConst = 'protectedConst'; + static function staticConstDump() { + var_dump(self::protectedConst); + } + function constDump() { + var_dump(self::protectedConst); + } +} + +A::staticConstDump(); +(new A())->constDump(); +constant('A::protectedConst'); + +?> +--EXPECTF-- +string(14) "protectedConst" +string(14) "protectedConst" + +Fatal error: Uncaught Error: Cannot access protected const A::protectedConst in %s:14 +Stack trace: +#0 %s(14): constant('A::protectedCon...') +#1 {main} + thrown in %s on line 14 diff --git a/tests/classes/constants_visibility_003.phpt b/tests/classes/constants_visibility_003.phpt new file mode 100644 index 0000000000..9c7bcfb21c --- /dev/null +++ b/tests/classes/constants_visibility_003.phpt @@ -0,0 +1,28 @@ +--TEST-- +Class private constant visibility +--FILE-- +<?php +class A { + private const privateConst = 'privateConst'; + static function staticConstDump() { + var_dump(self::privateConst); + } + function constDump() { + var_dump(self::privateConst); + } +} + +A::staticConstDump(); +(new A())->constDump(); +constant('A::privateConst'); + +?> +--EXPECTF-- +string(12) "privateConst" +string(12) "privateConst" + +Fatal error: Uncaught Error: Cannot access private const A::privateConst in %s:14 +Stack trace: +#0 %s(14): constant('A::privateConst') +#1 {main} + thrown in %s on line 14 diff --git a/tests/classes/constants_visibility_004.phpt b/tests/classes/constants_visibility_004.phpt new file mode 100644 index 0000000000..93acacf3c9 --- /dev/null +++ b/tests/classes/constants_visibility_004.phpt @@ -0,0 +1,28 @@ +--TEST-- +Only public and protected class constants should be inherited +--FILE-- +<?php +class A { + public const X = 1; + protected const Y = 2; + private const Z = 3; +} +class B extends A { + static public function checkConstants() { + var_dump(self::X); + var_dump(self::Y); + var_dump(self::Z); + } +} + +B::checkConstants(); +?> +--EXPECTF-- +int(1) +int(2) + +Fatal error: Uncaught Error: Undefined class constant 'Z' in %s:11 +Stack trace: +#0 %s(15): B::checkConstants() +#1 {main} + thrown in %s on line 11 diff --git a/tests/classes/constants_visibility_005.phpt b/tests/classes/constants_visibility_005.phpt new file mode 100644 index 0000000000..813009c675 --- /dev/null +++ b/tests/classes/constants_visibility_005.phpt @@ -0,0 +1,10 @@ +--TEST-- +Static constants are not allowed +--FILE-- +<?php +class A { + static const X = 1; +} +?> +--EXPECTF-- +Fatal error: Cannot use 'static' as constant modifier in %s on line 3 diff --git a/tests/classes/constants_visibility_006.phpt b/tests/classes/constants_visibility_006.phpt new file mode 100644 index 0000000000..537c8eac0f --- /dev/null +++ b/tests/classes/constants_visibility_006.phpt @@ -0,0 +1,11 @@ +--TEST-- +Abstract constants are not allowed +--FILE-- +<?php +class A { + abstract const X = 1; +} +?> +--EXPECTF-- +Fatal error: Cannot use 'abstract' as constant modifier in %s on line 3 + diff --git a/tests/classes/constants_visibility_007.phpt b/tests/classes/constants_visibility_007.phpt new file mode 100644 index 0000000000..f1b040c5c3 --- /dev/null +++ b/tests/classes/constants_visibility_007.phpt @@ -0,0 +1,10 @@ +--TEST-- +Final constants are not allowed +--FILE-- +<?php +class A { + final const X = 1; +} +?> +--EXPECTF-- +Fatal error: Cannot use 'final' as constant modifier in %s on line 3 diff --git a/tests/classes/constants_visibility_error_001.phpt b/tests/classes/constants_visibility_error_001.phpt new file mode 100644 index 0000000000..397dd24882 --- /dev/null +++ b/tests/classes/constants_visibility_error_001.phpt @@ -0,0 +1,16 @@ +--TEST-- +Class private constant visibility error +--FILE-- +<?php +class A { + private const privateConst = 'privateConst'; +} + +var_dump(A::privateConst); + +?> +--EXPECTF-- +Fatal error: Uncaught Error: Cannot access private const A::privateConst in %s:6 +Stack trace: +#0 {main} + thrown in %s on line 6 diff --git a/tests/classes/constants_visibility_error_002.phpt b/tests/classes/constants_visibility_error_002.phpt new file mode 100644 index 0000000000..2980b52c37 --- /dev/null +++ b/tests/classes/constants_visibility_error_002.phpt @@ -0,0 +1,16 @@ +--TEST-- +Class protected constant visibility error +--FILE-- +<?php +class A { + protected const protectedConst = 'protectedConst'; +} + +var_dump(A::protectedConst); + +?> +--EXPECTF-- +Fatal error: Uncaught Error: Cannot access protected const A::protectedConst in %s:6 +Stack trace: +#0 {main} + thrown in %s on line 6 diff --git a/tests/classes/constants_visibility_error_003.phpt b/tests/classes/constants_visibility_error_003.phpt new file mode 100644 index 0000000000..c385bbd300 --- /dev/null +++ b/tests/classes/constants_visibility_error_003.phpt @@ -0,0 +1,16 @@ +--TEST-- +A redeclared class constant must have the same or higher visibility +--FILE-- +<?php + +class A { + public const publicConst = 0; +} + +class B extends A { + protected const publicConst = 1; +} + + +--EXPECTF-- +Fatal error: Access level to B::publicConst must be public (as in class A) in %s on line 9 diff --git a/tests/classes/constants_visibility_error_004.phpt b/tests/classes/constants_visibility_error_004.phpt new file mode 100644 index 0000000000..fe37b0691f --- /dev/null +++ b/tests/classes/constants_visibility_error_004.phpt @@ -0,0 +1,16 @@ +--TEST-- +A redeclared class constant must have the same or higher visibility +--FILE-- +<?php + +class A { + protected const protectedConst = 0; +} + +class B extends A { + private const protectedConst = 1; +} + + +--EXPECTF-- +Fatal error: Access level to B::protectedConst must be protected (as in class A) or weaker in %s on line 9 diff --git a/tests/classes/interface_constant_inheritance_005.phpt b/tests/classes/interface_constant_inheritance_005.phpt new file mode 100644 index 0000000000..60bf222e85 --- /dev/null +++ b/tests/classes/interface_constant_inheritance_005.phpt @@ -0,0 +1,12 @@ +--TEST-- +Ensure a interface can have public constants +--FILE-- +<?php +interface IA { + public const FOO = 10; +} + +echo "Done\n"; +?> +--EXPECT-- +Done
\ No newline at end of file diff --git a/tests/classes/interface_constant_inheritance_006.phpt b/tests/classes/interface_constant_inheritance_006.phpt new file mode 100644 index 0000000000..125326b224 --- /dev/null +++ b/tests/classes/interface_constant_inheritance_006.phpt @@ -0,0 +1,10 @@ +--TEST-- +Ensure a interface can not have protected constants + +--FILE-- +<?php +interface A { + protected const FOO = 10; +} +--EXPECTF-- +Fatal error: Access type for interface constant A::FOO must be public in %s on line 3 diff --git a/tests/classes/interface_constant_inheritance_007.phpt b/tests/classes/interface_constant_inheritance_007.phpt new file mode 100644 index 0000000000..52695343e1 --- /dev/null +++ b/tests/classes/interface_constant_inheritance_007.phpt @@ -0,0 +1,10 @@ +--TEST-- +Ensure a interface can not have private constants + +--FILE-- +<?php +interface A { + private const FOO = 10; +} +--EXPECTF-- +Fatal error: Access type for interface constant A::FOO must be public in %s on line 3 diff --git a/tests/classes/interfaces_003.phpt b/tests/classes/interfaces_003.phpt index e1cbfdaf54..28680096c5 100644 --- a/tests/classes/interfaces_003.phpt +++ b/tests/classes/interfaces_003.phpt @@ -23,7 +23,7 @@ $obj = new MyTestClass; ===DONE=== --EXPECTF-- -Fatal error: Uncaught TypeError: Argument 1 passed to MyTestClass::__construct() must be an instance of MyObject, none given, called in %sinterfaces_003.php:%d +Fatal error: Uncaught ArgumentCountError: Too few arguments to function MyTestClass::__construct(), 0 passed in %sinterfaces_003.php on line 17 and exactly 1 expected in %sinterfaces_003.php:12 Stack trace: #0 %s(%d): MyTestClass->__construct() #1 {main} diff --git a/tests/classes/static_this.phpt b/tests/classes/static_this.phpt index 91b0287195..f7a11f5481 100644 --- a/tests/classes/static_this.phpt +++ b/tests/classes/static_this.phpt @@ -28,12 +28,4 @@ TestClass::Test2(new stdClass); ?> ===DONE=== --EXPECTF-- - -Notice: Undefined variable: this in %sstatic_this.php on line %d -NULL - -Notice: Undefined variable: this in %sstatic_this.php on line %d -NULL -object(stdClass)#%d (0) { -} -===DONE=== +Fatal error: Cannot use $this as parameter in %sstatic_this.php on line 16 diff --git a/tests/classes/type_hinting_004.phpt b/tests/classes/type_hinting_004.phpt index 8883f26336..95df6264dd 100644 --- a/tests/classes/type_hinting_004.phpt +++ b/tests/classes/type_hinting_004.phpt @@ -152,7 +152,7 @@ Ensure type hints are enforced for functions invoked as callbacks. 0: Argument 1 passed to f1() must be an instance of A, integer given%s(%d) in f1; -0: Argument 1 passed to f2() must be an instance of A, integer given%s(%d) +0: Argument 1 passed to f2() must be an instance of A or null, integer given%s(%d) in f2; in f2; @@ -163,7 +163,7 @@ in f2; 0: Argument 1 passed to C::f1() must be an instance of A, integer given%s(%d) in C::f1 (static); -0: Argument 1 passed to C::f2() must be an instance of A, integer given%s(%d) +0: Argument 1 passed to C::f2() must be an instance of A or null, integer given%s(%d) in C::f2 (static); in C::f2 (static); @@ -174,7 +174,7 @@ in C::f2 (static); 0: Argument 1 passed to D::f1() must be an instance of A, integer given%s(%d) in C::f1 (instance); -0: Argument 1 passed to D::f2() must be an instance of A, integer given%s(%d) +0: Argument 1 passed to D::f2() must be an instance of A or null, integer given%s(%d) in C::f2 (instance); in C::f2 (instance); |