ArrayUtilsTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace App\Tests\Unit\Service\Utils;
  3. use App\Service\Utils\ArrayUtils;
  4. use PHPUnit\Framework\TestCase;
  5. class ArrayUtilsTest extends TestCase
  6. {
  7. public function testAll(): void
  8. {
  9. $isEven = function ($num) { return $num % 2 === 0; };
  10. $this->assertFalse(
  11. ArrayUtils::all([1, 2, 3], $isEven)
  12. );
  13. $this->assertTrue(
  14. ArrayUtils::all([2, 4, 6], $isEven)
  15. );
  16. }
  17. public function testAny(): void
  18. {
  19. $isEven = function ($num) { return $num % 2 === 0; };
  20. $this->assertFalse(
  21. ArrayUtils::any([1, 3, 5], $isEven)
  22. );
  23. $this->assertTrue(
  24. ArrayUtils::any([1, 2, 3], $isEven)
  25. );
  26. }
  27. /**
  28. * @øee ArrayUtils::getChanges()
  29. */
  30. public function testGetChanges(): void
  31. {
  32. $arrayUtils = new ArrayUtils();
  33. // Non-recursive (default)
  34. $this->assertEquals(
  35. ['b' => -2, 'c' => ['d' => 4, 'e' => ['f' => -5]], 'g' => 7],
  36. $arrayUtils->getChanges(
  37. ['a' => 1, 'b' => 2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  38. ['a' => 1, 'b' => -2, 'c' => ['d' => 4, 'e' => ['f' => -5]], 'g' => 7],
  39. )
  40. );
  41. // Recursive
  42. $this->assertEquals(
  43. ['b' => -2, 'c' => ['e' => ['f' => -5]], 'g' => 7],
  44. $arrayUtils->getChanges(
  45. ['a' => 1, 'b' => 2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  46. ['a' => 1, 'b' => -2, 'c' => ['d' => 4, 'e' => ['f' => -5]], 'g' => 7],
  47. true
  48. )
  49. );
  50. // Recursive with unchanged sub array
  51. $this->assertEquals(
  52. ['b' => -2],
  53. $arrayUtils->getChanges(
  54. ['a' => 1, 'b' => 2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  55. ['a' => 1, 'b' => -2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  56. true
  57. )
  58. );
  59. // No changes
  60. $this->assertEquals(
  61. [],
  62. $arrayUtils->getChanges(
  63. ['a' => 1, 'b' => 2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  64. ['a' => 1, 'b' => 2, 'c' => ['d' => 4, 'e' => ['f' => 5]]],
  65. )
  66. );
  67. // Empty arrays
  68. $this->assertEquals(
  69. [],
  70. $arrayUtils->getChanges(
  71. [],
  72. [],
  73. )
  74. );
  75. // First array is empty
  76. $this->assertEquals(
  77. ['a' => 1],
  78. $arrayUtils->getChanges(
  79. [],
  80. ['a' => 1],
  81. )
  82. );
  83. // With callback
  84. $this->assertEquals(
  85. ['a' => 2],
  86. $arrayUtils->getChanges(
  87. ['a' => 1, 'b' => ''],
  88. ['a' => 2, 'b' => null],
  89. false,
  90. static function ($v1, $v2) { return ($v1 ?? '') === ($v2 ?? ''); }
  91. )
  92. );
  93. }
  94. public function testGetAndCast(): void
  95. {
  96. $this->assertEquals(
  97. 123,
  98. ArrayUtils::getAndCast(['a' => '123'], 'a', 'int')
  99. );
  100. }
  101. public function testGetAndCastMissingKey(): void
  102. {
  103. $this->assertEquals(
  104. null,
  105. ArrayUtils::getAndCast(['a' => '123'], 'b', 'int')
  106. );
  107. }
  108. }