123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- --TEST--
- SPL: MultipleIterator
- --FILE--
- <?php
- $iter1 = new ArrayIterator(array(1,2,3));
- $iter2 = new ArrayIterator(array(1,2));
- $iter3 = new ArrayIterator(array(new stdClass(),"string",3));
- $m = new MultipleIterator();
- echo "-- Default flags, no iterators --\n";
- foreach($m as $value) {
- var_dump($value);
- }
- var_dump($m->current());
- $m->attachIterator($iter1);
- $m->attachIterator($iter2);
- $m->attachIterator($iter3);
- echo "-- Default flags, MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC --\n";
- var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC));
- foreach($m as $key => $value) {
- var_dump($key, $value);
- }
- try {
- $m->current();
- } catch(RuntimeException $e) {
- echo "RuntimeException thrown: " . $e->getMessage() . "\n";
- }
- try {
- $m->key();
- } catch(RuntimeException $e) {
- echo "RuntimeException thrown: " . $e->getMessage() . "\n";
- }
- echo "-- Flags = MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC --\n";
- $m->setFlags(MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC);
- var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC));
- foreach($m as $key => $value) {
- var_dump($key, $value);
- }
- echo "-- Default flags, added element --\n";
- $m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC);
- $iter2[] = 3;
- foreach($m as $key => $value) {
- var_dump($key, $value);
- }
- echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated with NULL --\n";
- $m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC);
- $m->rewind();
- try {
- $m->current();
- } catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
- }
- echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC --\n";
- $m->attachIterator($iter1, "iter1");
- $m->attachIterator($iter2, b"iter2");
- $m->attachIterator($iter3, 3);
- foreach($m as $key => $value) {
- var_dump($key, $value);
- }
- echo "-- Associate with invalid value --\n";
- try {
- $m->attachIterator($iter3, new stdClass());
- } catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
- }
- echo "-- Associate with duplicate value --\n";
- try {
- $m->attachIterator($iter3, "iter1");
- } catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
- }
- echo "-- Count, contains, detach, count, contains, iterate --\n";
- var_dump($m->countIterators());
- var_dump($m->containsIterator($iter2));
- var_dump($m->detachIterator($iter2));
- var_dump($m->countIterators());
- var_dump($m->containsIterator($iter2));
- foreach($m as $key => $value) {
- var_dump($key, $value);
- }
- ?>
- --EXPECTF--
- -- Default flags, no iterators --
- bool(false)
- -- Default flags, MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC --
- bool(true)
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- [2]=>
- int(0)
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- object(stdClass)#%d (0) {
- }
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(1)
- }
- array(3) {
- [0]=>
- int(2)
- [1]=>
- int(2)
- [2]=>
- string(6) "string"
- }
- RuntimeException thrown: Called current() with non valid sub iterator
- RuntimeException thrown: Called key() with non valid sub iterator
- -- Flags = MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC --
- bool(true)
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- [2]=>
- int(0)
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- object(stdClass)#%d (0) {
- }
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(1)
- }
- array(3) {
- [0]=>
- int(2)
- [1]=>
- int(2)
- [2]=>
- string(6) "string"
- }
- array(3) {
- [0]=>
- int(2)
- [1]=>
- NULL
- [2]=>
- int(2)
- }
- array(3) {
- [0]=>
- int(3)
- [1]=>
- NULL
- [2]=>
- int(3)
- }
- -- Default flags, added element --
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(0)
- [2]=>
- int(0)
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- object(stdClass)#%d (0) {
- }
- }
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(1)
- }
- array(3) {
- [0]=>
- int(2)
- [1]=>
- int(2)
- [2]=>
- string(6) "string"
- }
- array(3) {
- [0]=>
- int(2)
- [1]=>
- int(2)
- [2]=>
- int(2)
- }
- array(3) {
- [0]=>
- int(3)
- [1]=>
- int(3)
- [2]=>
- int(3)
- }
- -- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated with NULL --
- InvalidArgumentException thrown: Sub-Iterator is associated with NULL
- -- Flags |= MultipleIterator::MIT_KEYS_ASSOC --
- array(3) {
- ["iter1"]=>
- int(0)
- ["iter2"]=>
- int(0)
- [3]=>
- int(0)
- }
- array(3) {
- ["iter1"]=>
- int(1)
- ["iter2"]=>
- int(1)
- [3]=>
- object(stdClass)#%d (0) {
- }
- }
- array(3) {
- ["iter1"]=>
- int(1)
- ["iter2"]=>
- int(1)
- [3]=>
- int(1)
- }
- array(3) {
- ["iter1"]=>
- int(2)
- ["iter2"]=>
- int(2)
- [3]=>
- string(6) "string"
- }
- array(3) {
- ["iter1"]=>
- int(2)
- ["iter2"]=>
- int(2)
- [3]=>
- int(2)
- }
- array(3) {
- ["iter1"]=>
- int(3)
- ["iter2"]=>
- int(3)
- [3]=>
- int(3)
- }
- -- Associate with invalid value --
- InvalidArgumentException thrown: Info must be NULL, integer or string
- -- Associate with duplicate value --
- InvalidArgumentException thrown: Key duplication error
- -- Count, contains, detach, count, contains, iterate --
- int(3)
- bool(true)
- NULL
- int(2)
- bool(false)
- array(2) {
- ["iter1"]=>
- int(0)
- [3]=>
- int(0)
- }
- array(2) {
- ["iter1"]=>
- int(1)
- [3]=>
- object(stdClass)#%d (0) {
- }
- }
- array(2) {
- ["iter1"]=>
- int(1)
- [3]=>
- int(1)
- }
- array(2) {
- ["iter1"]=>
- int(2)
- [3]=>
- string(6) "string"
- }
- array(2) {
- ["iter1"]=>
- int(2)
- [3]=>
- int(2)
- }
- array(2) {
- ["iter1"]=>
- int(3)
- [3]=>
- int(3)
- }
|