PassableByReferencePassTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /*
  3. * This file is part of Psy Shell.
  4. *
  5. * (c) 2012-2023 Justin Hileman
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Psy\Test\CodeCleaner;
  11. use Psy\CodeCleaner\PassableByReferencePass;
  12. /**
  13. * @group isolation-fail
  14. */
  15. class PassableByReferencePassTest extends CodeCleanerTestCase
  16. {
  17. /**
  18. * @before
  19. */
  20. public function getReady()
  21. {
  22. $this->setPass(new PassableByReferencePass());
  23. }
  24. /**
  25. * @dataProvider invalidStatements
  26. */
  27. public function testProcessStatementFails($code)
  28. {
  29. $this->expectException(\Psy\Exception\FatalErrorException::class);
  30. $this->parseAndTraverse($code);
  31. $this->fail();
  32. }
  33. public function invalidStatements()
  34. {
  35. return [
  36. ['array_pop([])'],
  37. ['array_pop([$foo])'],
  38. ['array_shift([])'],
  39. ];
  40. }
  41. /**
  42. * @dataProvider validStatements
  43. */
  44. public function testProcessStatementPasses($code)
  45. {
  46. $this->parseAndTraverse($code);
  47. $this->assertTrue(true);
  48. }
  49. public function validStatements()
  50. {
  51. return [
  52. ['array_pop(json_decode("[]"))'],
  53. ['array_pop($foo)'],
  54. ['array_pop($foo->bar)'],
  55. ['array_pop($foo::baz)'],
  56. ['array_pop(Foo::qux)'],
  57. ['array_pop($foo["quux"])'],
  58. ['end(...[$a])'],
  59. ];
  60. }
  61. /**
  62. * @dataProvider validArrayMultisort
  63. */
  64. public function testArrayMultisort($code)
  65. {
  66. $this->parseAndTraverse($code);
  67. $this->assertTrue(true);
  68. }
  69. public function validArrayMultisort()
  70. {
  71. return [
  72. ['array_multisort($a)'],
  73. ['array_multisort($a, $b)'],
  74. ['array_multisort($a, SORT_NATURAL, $b)'],
  75. ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
  76. ['array_multisort($a, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
  77. ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, $b)'],
  78. ['array_multisort($a, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
  79. ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
  80. ['array_multisort($a, 1, $b)'],
  81. ['array_multisort($a, 1 + 2, $b)'],
  82. ['array_multisort($a, getMultisortFlags(), $b)'],
  83. ];
  84. }
  85. /**
  86. * @dataProvider invalidArrayMultisort
  87. */
  88. public function testInvalidArrayMultisort($code)
  89. {
  90. $this->expectException(\Psy\Exception\FatalErrorException::class);
  91. $this->parseAndTraverse($code);
  92. $this->fail();
  93. }
  94. public function invalidArrayMultisort()
  95. {
  96. return [
  97. ['array_multisort(1)'],
  98. ['array_multisort([1, 2, 3])'],
  99. ['array_multisort($a, SORT_NATURAL, SORT_ASC, SORT_NATURAL, $b)'],
  100. ];
  101. }
  102. }