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\Map. 44 * 45 * Test suite of the map iterator. 46 * 47 * @copyright Copyright © 2007-2017 Hoa community 48 * @license New BSD License 49 */ 50class Map extends Test\Unit\Suite 51{ 52 private static $_dummyArray = ['f', 'o', 'o', 'b', 'a', 'r']; 53 54 55 56 public function case_classic() 57 { 58 $this 59 ->given($iterator = new LUT\Map(self::$_dummyArray)) 60 ->when($result = iterator_to_array($iterator)) 61 ->then 62 ->array($result) 63 ->isEqualTo(self::$_dummyArray); 64 } 65 66 public function case_empty() 67 { 68 $this 69 ->given($iterator = new LUT\Map()) 70 ->when($result = iterator_to_array($iterator)) 71 ->then 72 ->array($result) 73 ->isEmpty(); 74 } 75 76 public function case_recursive() 77 { 78 $this 79 ->given( 80 $array = [ 81 'a' => ['b', 'c', 'd'], 82 'e' => ['f', 'g', 'i'], 83 'k' 84 ], 85 $iterator = new LUT\Recursive\Map($array) 86 ) 87 ->when(function () use ($iterator) { 88 foreach ($iterator as $key => $value) { 89 if ('a' === $key) { 90 $this 91 ->boolean($iterator->hasChildren()) 92 ->isTrue() 93 ->object($children = $iterator->getChildren()) 94 ->isInstanceOf(LUT\Recursive\Map::class) 95 ->array(iterator_to_array($children)) 96 ->isEqualTo(['b', 'c', 'd']); 97 } elseif ('e' === $key) { 98 $this 99 ->boolean($iterator->hasChildren()) 100 ->isTrue() 101 ->object($children = $iterator->getChildren()) 102 ->isInstanceOf(LUT\Recursive\Map::class) 103 ->array(iterator_to_array($children)) 104 ->isEqualTo(['f', 'g', 'i']); 105 } elseif ('k' === $value) { 106 $this 107 ->boolean($iterator->hasChildren()) 108 ->isFalse(); 109 } 110 } 111 }); 112 } 113} 114