summaryrefslogtreecommitdiff
path: root/Zend/tests/foreach_003.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests/foreach_003.phpt')
-rw-r--r--Zend/tests/foreach_003.phpt71
1 files changed, 71 insertions, 0 deletions
diff --git a/Zend/tests/foreach_003.phpt b/Zend/tests/foreach_003.phpt
new file mode 100644
index 0000000000..71b0f2a5a3
--- /dev/null
+++ b/Zend/tests/foreach_003.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Iterator exceptions in foreach by value
+--FILE--
+<?php
+class IT implements Iterator {
+ private $n = 0;
+ private $count = 0;
+ private $trap = null;
+
+ function __construct($count, $trap = null) {
+ $this->count = $count;
+ $this->trap = $trap;
+ }
+
+ function trap($trap) {
+ if ($trap === $this->trap) {
+ throw new Exception($trap);
+ }
+ }
+
+ function rewind() {$this->trap(__FUNCTION__); $this->n = 0;}
+ function valid() {$this->trap(__FUNCTION__); return $this->n < $this->count;}
+ function key() {$this->trap(__FUNCTION__); return $this->n;}
+ function current() {$this->trap(__FUNCTION__); return $this->n;}
+ function next() {$this->trap(__FUNCTION__); $this->n++;}
+}
+
+foreach(['rewind', 'valid', 'key', 'current', 'next'] as $trap) {
+ $obj = new IT(3, $trap);
+ try {
+ // IS_CV
+ foreach ($obj as $key => $val) echo "$val\n";
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ unset($obj);
+
+ try {
+ // IS_VAR
+ foreach (new IT(3, $trap) as $key => $val) echo "$val\n";
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+
+ try {
+ // IS_TMP_VAR
+ foreach ((object)new IT(2, $trap) as $key => $val) echo "$val\n";
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+}
+?>
+--EXPECT--
+rewind
+rewind
+rewind
+valid
+valid
+valid
+key
+key
+key
+current
+current
+current
+0
+next
+0
+next
+0
+next