From 5dc94365a93a92b7945da7ef657344b42febb55d Mon Sep 17 00:00:00 2001 From: azjezz Date: Wed, 13 Nov 2019 21:39:27 +0100 Subject: [PATCH] add more null-safe operator tests --- Zend/tests/null-safe/foreach.phpt | 67 +++++++++++++++++++++++++++++++ Zend/tests/null-safe/nested.phpt | 28 +++++++++++++ Zend/tests/null-safe/null.phpt | 28 +++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 Zend/tests/null-safe/foreach.phpt create mode 100644 Zend/tests/null-safe/nested.phpt create mode 100644 Zend/tests/null-safe/null.phpt diff --git a/Zend/tests/null-safe/foreach.phpt b/Zend/tests/null-safe/foreach.phpt new file mode 100644 index 0000000000000..ea8b897997cfa --- /dev/null +++ b/Zend/tests/null-safe/foreach.phpt @@ -0,0 +1,67 @@ +--TEST-- +Usages of the nullsafe operator inside foreach loop +--FILE-- +getUser()?->articles ?? [] as $article) { + printf('- %s%s', $article?->category ?? 'default', PHP_EOL); + } + + printf('OK%s', PHP_EOL); +} + +final class Token { + public ?User $user = null; + + public function getUser(): ?User { + return $this->user; + } +} + +final class User { + public ?array $articles = null; +} + +final class Article { + public ?string $category; + public function __construct(?string $category) { + $this->category = $category; + } +} + +action(null); +action(new Token()); +action(new Token(new User())); + +$user = new User(); +$user->articles = [ + new Article('Foo'), + new Article('Bar'), +]; + +$token = new Token(); +$token->user = $user; + +action($token); +$user->article = [ + new Article('Foo'), + new Article(null), + new Article('Bar'), +] +action($token); + +printf('-- DONE --'); +--EXPECTF-- +OK +OK +OK +- Foo +- Bar +OK +- Foo +- default +- Bar +OK +-- DONE -- diff --git a/Zend/tests/null-safe/nested.phpt b/Zend/tests/null-safe/nested.phpt new file mode 100644 index 0000000000000..aa594ee2058c4 --- /dev/null +++ b/Zend/tests/null-safe/nested.phpt @@ -0,0 +1,28 @@ +--TEST-- +Deep nested usages of the nullsafe operator +--FILE-- +bar = $bar; + } +} + +final class Bar { + public ?Foo $foo = null; +} + +$bar = new Bar(); +$foo = new Foo($bar); +$bar->foo = $foo; + +assert($bar === $bar?->foo?->bar?->foo?->bar); + +echo 'OK'; +--EXPECTF-- +OK diff --git a/Zend/tests/null-safe/null.phpt b/Zend/tests/null-safe/null.phpt new file mode 100644 index 0000000000000..82cefde31865d --- /dev/null +++ b/Zend/tests/null-safe/null.phpt @@ -0,0 +1,28 @@ +--TEST-- +usages of the nullsafe operator on null value +--FILE-- +foo(); + +$ret[] = ($null)?->bar(); + +$ret[] = (null)?->baz(); + +$ret[] = ($baz ?? qux()?->bar ?? null) + ?->qux; + +foreach($ret as $_) { + var_dump($_); +} +--EXPECTF-- +NULL +NULL +NULL +NULL