1<?php 2 3/** 4 * Hoa 5 * 6 * 7 * @license 8 * 9 * New BSD License 10 * 11 * Copyright © 2007-2017, Hoa community. All rights reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions are met: 15 * * Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * * Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * * Neither the name of the Hoa nor the names of its contributors may be 21 * used to endorse or promote products derived from this software without 22 * specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE 28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 */ 36 37namespace Hoa\Iterator\Test\Unit; 38 39use Hoa\Iterator as LUT; 40use Hoa\Test; 41 42/** 43 * Class \Hoa\Iterator\Test\Unit\IteratorIterator. 44 * 45 * Test suite of the iterator iterator iterator (;-)). 46 * 47 * @copyright Copyright © 2007-2017 Hoa community 48 * @license New BSD License 49 */ 50class IteratorIterator extends Test\Unit\Suite 51{ 52 public function case_inner_iterator() 53 { 54 $this 55 ->given( 56 $iterator = new LUT\Map([]), 57 $iteratoriterator = new LUT\IteratorIterator($iterator) 58 ) 59 ->when($result = $iteratoriterator->getInnerIterator()) 60 ->then 61 ->object($result) 62 ->isIdenticalTo($iterator); 63 } 64 65 public function case_traverse() 66 { 67 $this 68 ->given( 69 $iterator = new LUT\Map(['a', 'b', 'c']), 70 $iteratoriterator = new LUT\IteratorIterator($iterator) 71 ) 72 ->when($result = iterator_to_array($iteratoriterator)) 73 ->then 74 ->array($result) 75 ->isEqualTo(['a', 'b', 'c']); 76 } 77 78 public function case_recursive_leaves_only() 79 { 80 $this 81 ->given( 82 $array = [ 83 'a' => ['b', 'c', 'd'], 84 'e' => ['f', 'g', 'i'] 85 ], 86 $iterator = new LUT\Recursive\Map($array), 87 $iteratoriterator = new LUT\Recursive\Iterator( 88 $iterator, 89 LUT\Recursive\Iterator::LEAVES_ONLY 90 ) 91 ) 92 ->when($result = iterator_to_array($iteratoriterator, false)) 93 ->then 94 ->array($result) 95 ->isEqualTo(['b', 'c', 'd', 'f', 'g', 'i']); 96 } 97 98 public function case_recursive_self_first() 99 { 100 $this 101 ->given( 102 $array = [ 103 'a' => ['b', 'c', 'd'], 104 'e' => ['f', 'g', 'i'] 105 ], 106 $iterator = new LUT\Recursive\Map($array), 107 $iteratoriterator = new LUT\Recursive\Iterator( 108 $iterator, 109 LUT\Recursive\Iterator::SELF_FIRST 110 ) 111 ) 112 ->when($result = iterator_to_array($iteratoriterator, false)) 113 ->then 114 ->array($result) 115 ->isEqualTo([ 116 ['b', 'c', 'd'], 117 'b', 118 'c', 119 'd', 120 ['f', 'g', 'i'], 121 'f', 122 'g', 123 'i' 124 ]); 125 } 126 127 public function case_recursive_child_first() 128 { 129 $this 130 ->given( 131 $array = [ 132 'a' => ['b', 'c', 'd'], 133 'e' => ['f', 'g', 'i'] 134 ], 135 $iterator = new LUT\Recursive\Map($array), 136 $iteratoriterator = new LUT\Recursive\Iterator( 137 $iterator, 138 LUT\Recursive\Iterator::CHILD_FIRST 139 ) 140 ) 141 ->when($result = iterator_to_array($iteratoriterator, false)) 142 ->then 143 ->array($result) 144 ->isEqualTo([ 145 'b', 146 'c', 147 'd', 148 ['b', 'c', 'd'], 149 'f', 150 'g', 151 'i', 152 ['f', 'g', 'i'] 153 ]); 154 } 155} 156