summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Piotrowski <aaron@trowski.com>2016-06-03 18:41:03 -0500
committerAaron Piotrowski <aaron@trowski.com>2016-06-03 18:41:03 -0500
commitbea9df52811d1b5f99fd59dfd4d8232d8448b538 (patch)
tree3a6e4642b34800bfd7aba8b79c7c45f67ca03841
parent8146c47d85dad9883d9153d221dc415b0ee3c12d (diff)
downloadphp-git-bea9df52811d1b5f99fd59dfd4d8232d8448b538.tar.gz
Add iterable tests
-rw-r--r--Zend/tests/type_declarations/iterable_001.phpt48
-rw-r--r--Zend/tests/type_declarations/iterable_002.phpt21
-rw-r--r--Zend/tests/type_declarations/iterable_003.phpt32
-rw-r--r--ext/standard/tests/general_functions/is_iterable.phpt24
4 files changed, 125 insertions, 0 deletions
diff --git a/Zend/tests/type_declarations/iterable_001.phpt b/Zend/tests/type_declarations/iterable_001.phpt
new file mode 100644
index 0000000000..f0c8bba610
--- /dev/null
+++ b/Zend/tests/type_declarations/iterable_001.phpt
@@ -0,0 +1,48 @@
+--TEST--
+iterable type#001
+--FILE--
+<?php
+
+function test(iterable $iterable) {
+ var_dump($iterable);
+}
+
+function gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+};
+
+test([1, 2, 3]);
+test(gen());
+test(new ArrayIterator([1, 2, 3]));
+
+try {
+ test(1);
+} catch (Throwable $e) {
+ echo $e->getMessage();
+}
+
+--EXPECTF--
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+object(Generator)#1 (0) {
+}
+object(ArrayIterator)#1 (1) {
+ ["storage":"ArrayIterator":private]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+Argument 1 passed to test() must be iterable, integer given, called in %s on line %d
diff --git a/Zend/tests/type_declarations/iterable_002.phpt b/Zend/tests/type_declarations/iterable_002.phpt
new file mode 100644
index 0000000000..74f6d83f1e
--- /dev/null
+++ b/Zend/tests/type_declarations/iterable_002.phpt
@@ -0,0 +1,21 @@
+--TEST--
+iterable type#002 - Default values
+--FILE--
+<?php
+
+function foo(iterable $iterable = null) {
+ // Null should be allowed as a default value
+}
+
+function bar(iterable $iterable = []) {
+ // Array should be allowed as a default value
+}
+
+function baz(iterable $iterable = 1) {
+ // No other values should be allowed as defaults
+}
+
+?>
+--EXPECTF--
+
+Fatal error: Default value for parameters with iterable type can only be an array or NULL in %s on line %d
diff --git a/Zend/tests/type_declarations/iterable_003.phpt b/Zend/tests/type_declarations/iterable_003.phpt
new file mode 100644
index 0000000000..8c91c993d0
--- /dev/null
+++ b/Zend/tests/type_declarations/iterable_003.phpt
@@ -0,0 +1,32 @@
+--TEST--
+iterable type#003 - Return types
+--FILE--
+<?php
+
+function foo(): iterable {
+ return [];
+}
+function bar(): iterable {
+ return (function () { yield; })();
+}
+
+function baz(): iterable {
+ return 1;
+}
+
+var_dump(foo());
+var_dump(bar());
+
+try {
+ baz();
+} catch (Throwable $e) {
+ echo $e->getMessage();
+}
+
+?>
+--EXPECT--
+array(0) {
+}
+object(Generator)#2 (0) {
+}
+Return value of baz() must be iterable, integer returned
diff --git a/ext/standard/tests/general_functions/is_iterable.phpt b/ext/standard/tests/general_functions/is_iterable.phpt
new file mode 100644
index 0000000000..e0822d7eb6
--- /dev/null
+++ b/ext/standard/tests/general_functions/is_iterable.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test is_iterable() function
+--FILE--
+<?php
+
+function gen() {
+ yield;
+}
+
+var_dump(is_iterable([1, 2, 3]));
+var_dump(is_iterable(new ArrayIterator([1, 2, 3])));
+var_dump(is_iterable(gen()));
+var_dump(is_iterable(1));
+var_dump(is_iterable(3.14));
+var_dump(is_iterable(new stdClass()));
+
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)