ArrayUtilsTest.php 3.2 KB

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