1--TEST--
2Observer: Generator with manual traversal
3--EXTENSIONS--
4zend_test
5--INI--
6zend_test.observer.enabled=1
7zend_test.observer.observe_all=1
8zend_test.observer.show_return_value=1
9--FILE--
10<?php
11function fooResults() {
12    echo 'Starting generator' . PHP_EOL;
13    $i = 0;
14    while (true) {
15        if (yield $i++) break;
16    }
17}
18
19function doSomething() {
20    $generator = fooResults();
21
22    while($generator->current() !== NULL) {
23        echo $generator->current() . PHP_EOL;
24        if ($generator->current() === 5) {
25            $generator->send('Boop');
26        }
27        $generator->next();
28    }
29
30    return 'Done';
31}
32
33echo doSomething() . PHP_EOL;
34?>
35--EXPECTF--
36<!-- init '%s' -->
37<file '%s'>
38  <!-- init doSomething() -->
39  <doSomething>
40    <!-- init Generator::current() -->
41    <Generator::current>
42      <!-- init fooResults() -->
43      <fooResults>
44Starting generator
45      </fooResults:0>
46    </Generator::current:0>
47    <Generator::current>
48    </Generator::current:0>
490
50    <Generator::current>
51    </Generator::current:0>
52    <!-- init Generator::next() -->
53    <Generator::next>
54      <fooResults>
55      </fooResults:1>
56    </Generator::next:NULL>
57    <Generator::current>
58    </Generator::current:1>
59    <Generator::current>
60    </Generator::current:1>
611
62    <Generator::current>
63    </Generator::current:1>
64    <Generator::next>
65      <fooResults>
66      </fooResults:2>
67    </Generator::next:NULL>
68    <Generator::current>
69    </Generator::current:2>
70    <Generator::current>
71    </Generator::current:2>
722
73    <Generator::current>
74    </Generator::current:2>
75    <Generator::next>
76      <fooResults>
77      </fooResults:3>
78    </Generator::next:NULL>
79    <Generator::current>
80    </Generator::current:3>
81    <Generator::current>
82    </Generator::current:3>
833
84    <Generator::current>
85    </Generator::current:3>
86    <Generator::next>
87      <fooResults>
88      </fooResults:4>
89    </Generator::next:NULL>
90    <Generator::current>
91    </Generator::current:4>
92    <Generator::current>
93    </Generator::current:4>
944
95    <Generator::current>
96    </Generator::current:4>
97    <Generator::next>
98      <fooResults>
99      </fooResults:5>
100    </Generator::next:NULL>
101    <Generator::current>
102    </Generator::current:5>
103    <Generator::current>
104    </Generator::current:5>
1055
106    <Generator::current>
107    </Generator::current:5>
108    <!-- init Generator::send() -->
109    <Generator::send>
110      <fooResults>
111      </fooResults:NULL>
112    </Generator::send:NULL>
113    <Generator::next>
114    </Generator::next:NULL>
115    <Generator::current>
116    </Generator::current:NULL>
117  </doSomething:'Done'>
118Done
119</file '%s'>
120