Arrays.getRef().phpt 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /**
  3. * Test: Nette\Utils\Arrays::getRef()
  4. */
  5. declare(strict_types=1);
  6. use Nette\Utils\Arrays;
  7. use Tester\Assert;
  8. require __DIR__ . '/../bootstrap.php';
  9. $arr = [
  10. '' => 'first',
  11. 1 => 'second',
  12. 7 => [
  13. 'item' => 'third',
  14. ],
  15. ];
  16. test('Single item', function () use ($arr) {
  17. $dolly = $arr;
  18. $item = &Arrays::getRef($dolly, '');
  19. $item = 'changed';
  20. Assert::same([
  21. '' => 'changed',
  22. 1 => 'second',
  23. 7 => [
  24. 'item' => 'third',
  25. ],
  26. ], $dolly);
  27. $dolly = $arr;
  28. $item = &Arrays::getRef($dolly, 'undefined');
  29. $item = 'changed';
  30. Assert::same([
  31. '' => 'first',
  32. 1 => 'second',
  33. 7 => [
  34. 'item' => 'third',
  35. ],
  36. 'undefined' => 'changed',
  37. ], $dolly);
  38. });
  39. test('Traversing', function () use ($arr) {
  40. $dolly = $arr;
  41. $item = &Arrays::getRef($dolly, []);
  42. $item = 'changed';
  43. Assert::same('changed', $dolly);
  44. $dolly = $arr;
  45. $item = &Arrays::getRef($dolly, [7, 'item']);
  46. $item = 'changed';
  47. Assert::same([
  48. '' => 'first',
  49. 1 => 'second',
  50. 7 => [
  51. 'item' => 'changed',
  52. ],
  53. ], $dolly);
  54. });
  55. test('Error', function () use ($arr) {
  56. $dolly = $arr;
  57. Assert::exception(
  58. fn() => $item = &Arrays::getRef($dolly, [7, 'item', 3]),
  59. InvalidArgumentException::class,
  60. 'Traversed item is not an array.',
  61. );
  62. });