UseStatementPassTest.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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\UseStatementPass;
  12. /**
  13. * @group isolation-fail
  14. */
  15. class UseStatementPassTest extends CodeCleanerTestCase
  16. {
  17. /**
  18. * @before
  19. */
  20. public function getReady()
  21. {
  22. $this->setPass(new UseStatementPass());
  23. }
  24. /**
  25. * @dataProvider useStatements
  26. */
  27. public function testProcess($from, $to)
  28. {
  29. $this->assertProcessesAs($from, $to);
  30. }
  31. public function useStatements()
  32. {
  33. return [
  34. [
  35. "use StdClass as NotSoStd;\n\$std = new NotSoStd();",
  36. '$std = new \\StdClass();',
  37. ],
  38. [
  39. "namespace Foo;\n\nuse StdClass as S;\n\$std = new S();",
  40. "namespace Foo;\n\n\$std = new \\StdClass();",
  41. ],
  42. [
  43. "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();",
  44. "namespace Foo;\n\n\$std = new \\StdClass();",
  45. ],
  46. [
  47. "use Foo\\Bar as fb;\n\$baz = new fb\\Baz();",
  48. '$baz = new \\Foo\\Bar\\Baz();',
  49. ],
  50. [
  51. "use Foo\\Bar;\n\$baz = new Bar\\Baz();",
  52. '$baz = new \\Foo\\Bar\\Baz();',
  53. ],
  54. [
  55. "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();",
  56. "namespace Foo;\n\n\$baz = new \\Bar\\Baz();",
  57. ],
  58. [
  59. "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();",
  60. "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();",
  61. ],
  62. [
  63. "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();",
  64. "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();",
  65. ],
  66. [
  67. "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();",
  68. "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();",
  69. ],
  70. [
  71. "use Foo\\Bar;\nuse Bar\\Baz;\n\$baz = new Baz();",
  72. '$baz = new \\Bar\\Baz();',
  73. ],
  74. ];
  75. }
  76. /**
  77. * @dataProvider groupUseStatements
  78. */
  79. public function testGroupUseProcess($from, $to)
  80. {
  81. $this->assertProcessesAs($from, $to);
  82. }
  83. public function groupUseStatements()
  84. {
  85. return [
  86. [
  87. "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();",
  88. "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();",
  89. ],
  90. [
  91. "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();",
  92. "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();",
  93. ],
  94. [
  95. "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();",
  96. "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();",
  97. ],
  98. ];
  99. }
  100. }