BraceClassInstantiationTransformerTest.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?php
  2. /*
  3. * This file is part of PHP CS Fixer.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  7. *
  8. * This source file is subject to the MIT license that is bundled
  9. * with this source code in the file LICENSE.
  10. */
  11. namespace PhpCsFixer\Tests\Tokenizer\Transformer;
  12. use PhpCsFixer\Tests\Test\AbstractTransformerTestCase;
  13. use PhpCsFixer\Tokenizer\CT;
  14. /**
  15. * @author Sebastiaans Stok <s.stok@rollerscapes.net>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Tokenizer\Transformer\BraceClassInstantiationTransformer
  20. */
  21. final class BraceClassInstantiationTransformerTest extends AbstractTransformerTestCase
  22. {
  23. /**
  24. * @param string $source
  25. *
  26. * @dataProvider provideProcessCases
  27. */
  28. public function testProcess($source, array $expectedTokens, array $observedKinds = array())
  29. {
  30. $this->doTest(
  31. $source,
  32. $expectedTokens,
  33. $observedKinds
  34. );
  35. }
  36. public function provideProcessCases()
  37. {
  38. return array(
  39. array(
  40. '<?php echo (new Process())->getOutput();',
  41. array(
  42. 3 => CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  43. 9 => CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  44. ),
  45. array(
  46. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  47. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  48. ),
  49. ),
  50. array(
  51. '<?php echo (new Process())::getOutput();',
  52. array(
  53. 3 => CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  54. 9 => CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  55. ),
  56. array(
  57. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  58. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  59. ),
  60. ),
  61. array(
  62. '<?php return foo()->bar(new Foo())->bar();',
  63. array(
  64. 4 => '(',
  65. 5 => ')',
  66. 8 => '(',
  67. 12 => '(',
  68. 13 => ')',
  69. 14 => ')',
  70. 17 => '(',
  71. 18 => ')',
  72. ),
  73. array(
  74. '(',
  75. ')',
  76. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  77. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  78. ),
  79. ),
  80. array(
  81. '<?php $foo[0](new Foo())->bar();',
  82. array(
  83. 5 => '(',
  84. 9 => '(',
  85. 10 => ')',
  86. 11 => ')',
  87. 14 => '(',
  88. 15 => ')',
  89. ),
  90. array(
  91. '(',
  92. ')',
  93. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  94. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  95. ),
  96. ),
  97. array(
  98. '<?php $foo{0}(new Foo())->bar();',
  99. array(
  100. 5 => '(',
  101. 9 => '(',
  102. 10 => ')',
  103. 11 => ')',
  104. 14 => '(',
  105. 15 => ')',
  106. ),
  107. array(
  108. '(',
  109. ')',
  110. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  111. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  112. ),
  113. ),
  114. array(
  115. '<?php $foo(new Foo())->bar();',
  116. array(
  117. 2 => '(',
  118. 6 => '(',
  119. 7 => ')',
  120. 8 => ')',
  121. 11 => '(',
  122. 12 => ')',
  123. ),
  124. array(
  125. '(',
  126. ')',
  127. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  128. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  129. ),
  130. ),
  131. array(
  132. '<?php $$foo(new Foo())->bar();',
  133. array(
  134. 3 => '(',
  135. 7 => '(',
  136. 8 => ')',
  137. 9 => ')',
  138. 12 => '(',
  139. 13 => ')',
  140. ),
  141. array(
  142. '(',
  143. ')',
  144. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  145. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  146. ),
  147. ),
  148. array(
  149. '<?php if ($foo){}(new Foo)->foo();',
  150. array(
  151. 8 => CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  152. 12 => CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  153. ),
  154. array(
  155. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  156. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  157. ),
  158. ),
  159. array(
  160. '<?php echo (((new \stdClass()))->a);',
  161. array(
  162. 5 => CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  163. 12 => CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  164. ),
  165. array(
  166. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  167. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  168. ),
  169. ),
  170. array(
  171. '<?php $foo = array(new Foo());',
  172. array(
  173. 6 => '(',
  174. 10 => '(',
  175. 11 => ')',
  176. 12 => ')',
  177. ),
  178. array(
  179. '(',
  180. ')',
  181. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  182. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  183. ),
  184. ),
  185. );
  186. }
  187. /**
  188. * @param string $source
  189. *
  190. * @dataProvider provideProcessPhp70Cases
  191. */
  192. public function testProcessPhp70($source, array $expectedTokens, array $observedKinds = array())
  193. {
  194. $this->doTest(
  195. $source,
  196. $expectedTokens,
  197. $observedKinds
  198. );
  199. }
  200. public function provideProcessPhp70Cases()
  201. {
  202. return array(
  203. array(
  204. '<?php $foo = new class(new \stdClass()) {};',
  205. array(
  206. 8 => '(',
  207. 13 => '(',
  208. 14 => ')',
  209. 15 => ')',
  210. ),
  211. array(
  212. '(',
  213. ')',
  214. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  215. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  216. ),
  217. ),
  218. array(
  219. '<?php $foo = (new class(new \stdClass()) {});',
  220. array(
  221. 5 => CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  222. 20 => CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  223. ),
  224. array(
  225. CT::T_BRACE_CLASS_INSTANTIATION_OPEN,
  226. CT::T_BRACE_CLASS_INSTANTIATION_CLOSE,
  227. ),
  228. ),
  229. );
  230. }
  231. }