ArrayUtilTest.php
1 year ago
StringUtilTest.php
1 year ago
TimeUnitTest.php
1 year ago
TimeUtilTest.php
1 year ago
TimeValueTest.php
1 year ago
UrlUtilTest.php
1 year ago
ArrayUtilTest.php
108 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WonderPush\Util; |
| 4 | |
| 5 | class ArrayUtilTest extends \WonderPush\TestCase { |
| 6 | |
| 7 | public function testFlattenNonArrayValues() { |
| 8 | $nonArrayReturnValue = array(); |
| 9 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(null)); |
| 10 | /** @noinspection PhpParamsInspection */ |
| 11 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(true)); |
| 12 | /** @noinspection PhpParamsInspection */ |
| 13 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(false)); |
| 14 | /** @noinspection PhpParamsInspection */ |
| 15 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(0)); |
| 16 | /** @noinspection PhpParamsInspection */ |
| 17 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(3.14)); |
| 18 | /** @noinspection PhpParamsInspection */ |
| 19 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten('')); |
| 20 | /** @noinspection PhpParamsInspection */ |
| 21 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten('foo')); |
| 22 | /** @noinspection PhpParamsInspection */ |
| 23 | $this->assertEquals($nonArrayReturnValue, ArrayUtil::flatten(new \stdClass())); |
| 24 | } |
| 25 | |
| 26 | public function testFlatten() { |
| 27 | $this->assertEquals(array( ), ArrayUtil::flatten(array( ))); |
| 28 | $this->assertEquals(array(0 ), ArrayUtil::flatten(array(0 ))); |
| 29 | $this->assertEquals(array(3, 2, 1), ArrayUtil::flatten(array(3, 2, 1))); |
| 30 | |
| 31 | $this->assertEquals(array( ), ArrayUtil::flatten(array(array( )))); |
| 32 | $this->assertEquals(array(0 ), ArrayUtil::flatten(array(array(0 )))); |
| 33 | $this->assertEquals(array(3, 2, 1), ArrayUtil::flatten(array(array(3, 2, 1)))); |
| 34 | |
| 35 | $this->assertEquals(array( ), ArrayUtil::flatten(array(array(), array( ), array()))); |
| 36 | $this->assertEquals(array(0 ), ArrayUtil::flatten(array(array(), array(0 ), array()))); |
| 37 | $this->assertEquals(array(3, 2, 1), ArrayUtil::flatten(array(array(), array(3, 2, 1), array()))); |
| 38 | |
| 39 | // Test that flatten elements do not overwrite elements at occupied positions |
| 40 | $this->assertEquals(array('00', '01', '1'), ArrayUtil::flatten(array(array('00', '01'), '1'))); |
| 41 | $this->assertEquals(array('0', '10', '11'), ArrayUtil::flatten(array('0', array('10', '11')))); |
| 42 | } |
| 43 | |
| 44 | public function testFlattenAssoc() { |
| 45 | $this->assertEquals(array('FOO'), ArrayUtil::flatten(array('foo' => 'FOO'))); |
| 46 | $this->assertEquals(array('FOO', 'BAR.FOO'), ArrayUtil::flatten(array('foo' => 'FOO', 'bar' => array('foo' => 'BAR.FOO')))); |
| 47 | } |
| 48 | |
| 49 | public function testGetIfSetScalars() { |
| 50 | $def = new \stdClass(); |
| 51 | foreach (array(null, 42, true) as $value) { // no string to avoid "String offset cast occurred" |
| 52 | foreach (array(null, 42, true, 'foo', array(1,2,3)) as $key) { |
| 53 | $this->assertNull(ArrayUtil::getIfSet($value, $key)); |
| 54 | $this->assertSame($def, ArrayUtil::getIfSet($value, $key, $def)); |
| 55 | } |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | public function testGetIfSetArrays() { |
| 60 | $def = new \stdClass(); |
| 61 | |
| 62 | // null is converted to '' |
| 63 | $this->assertSame($def, ArrayUtil::getIfSet(array(), null, $def)); |
| 64 | $this->assertSame($def, ArrayUtil::getIfSet(array(0), null, $def)); |
| 65 | $this->assertEquals('', ArrayUtil::getIfSet(array('' => ''), null, $def)); |
| 66 | $this->assertEquals('', ArrayUtil::getIfSet(array('' => ''), '', $def)); |
| 67 | |
| 68 | $this->assertEquals('FOO', ArrayUtil::getIfSet(array('foo' => 'FOO'), 'foo', $def)); |
| 69 | $this->assertSame($def, ArrayUtil::getIfSet(array('foo' => 'FOO'), 'bar', $def)); |
| 70 | |
| 71 | $this->assertSame($def, ArrayUtil::getIfSet(array('foo', 'bar'), -1, $def)); |
| 72 | $this->assertEquals('foo', ArrayUtil::getIfSet(array('foo', 'bar'), 0, $def)); |
| 73 | $this->assertEquals('bar', ArrayUtil::getIfSet(array('foo', 'bar'), 1, $def)); |
| 74 | $this->assertSame($def, ArrayUtil::getIfSet(array('foo', 'bar'), 2, $def)); |
| 75 | } |
| 76 | |
| 77 | public function testGetIfSetWithNullValues() { |
| 78 | $def = new \stdClass(); |
| 79 | |
| 80 | $this->assertSame($def, ArrayUtil::getIfSet(array('foo', null, 'bar'), 1, $def)); |
| 81 | $this->assertSame($def, ArrayUtil::getIfSet(array('foo' => 'FOO', 'null' => null, 'bar' => 'BAR'), 'null', $def)); |
| 82 | } |
| 83 | |
| 84 | public function testIsNotNull() { |
| 85 | $this->assertFalse(ArrayUtil::is_not_null(null)); |
| 86 | $this->assertTrue(ArrayUtil::is_not_null('foo')); |
| 87 | $this->assertTrue(ArrayUtil::is_not_null(0)); |
| 88 | $this->assertTrue(ArrayUtil::is_not_null(1)); |
| 89 | $this->assertTrue(ArrayUtil::is_not_null(true)); |
| 90 | $this->assertTrue(ArrayUtil::is_not_null(false)); |
| 91 | $this->assertTrue(ArrayUtil::is_not_null(array())); |
| 92 | $this->assertTrue(ArrayUtil::is_not_null(new \stdClass())); |
| 93 | } |
| 94 | |
| 95 | public function testFilterNulls() { |
| 96 | // It does not renumber non-associative arrays |
| 97 | $this->assertEquals(array(0 => false, 2 => 1), ArrayUtil::filterNulls(array(false, null, 1))); |
| 98 | |
| 99 | $this->assertEquals(array('foo' => 'FOO', 0), ArrayUtil::filterNulls(array('foo' => 'FOO', 'bar' => null, 0, null))); |
| 100 | |
| 101 | // It does not work recursively |
| 102 | $this->assertEquals(array('foo' => array(null)), ArrayUtil::filterNulls(array('foo' => array(null)))); |
| 103 | $this->assertEquals(array('foo' => array(0, null, 2)), ArrayUtil::filterNulls(array('foo' => array(0, null, 2)))); |
| 104 | $this->assertEquals(array('foo' => array('foo' => null)), ArrayUtil::filterNulls(array('foo' => array('foo' => null)))); |
| 105 | } |
| 106 | |
| 107 | } |
| 108 |