FixerFactoryTest.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  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\AutoReview;
  12. use PhpCsFixer\Fixer\FixerInterface;
  13. use PhpCsFixer\FixerFactory;
  14. use PhpCsFixer\Tests\TestCase;
  15. /**
  16. * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  17. *
  18. * @internal
  19. *
  20. * @coversNothing
  21. * @group auto-review
  22. */
  23. final class FixerFactoryTest extends TestCase
  24. {
  25. public function testFixersPriorityEdgeFixers()
  26. {
  27. $factory = new FixerFactory();
  28. $factory->registerBuiltInFixers();
  29. $fixers = $factory->getFixers();
  30. $this->assertSame('encoding', $fixers[0]->getName(), 'Expected "encoding" fixer to have the highest priority.');
  31. $this->assertSame('full_opening_tag', $fixers[1]->getName(), 'Expected "full_opening_tag" fixer has second highest priority.');
  32. $this->assertSame('single_blank_line_at_eof', $fixers[count($fixers) - 1]->getName(), 'Expected "single_blank_line_at_eof" to have the lowest priority.');
  33. }
  34. /**
  35. * @dataProvider provideFixersPriorityCases
  36. * @dataProvider provideFixersPrioritySpecialPhpdocCases
  37. */
  38. public function testFixersPriority(FixerInterface $first, FixerInterface $second)
  39. {
  40. $this->assertLessThan($first->getPriority(), $second->getPriority(), sprintf('"%s" should have less priority than "%s"', get_class($second), get_class($first)));
  41. }
  42. public function provideFixersPriorityCases()
  43. {
  44. $factory = new FixerFactory();
  45. $factory->registerBuiltInFixers();
  46. $fixers = [];
  47. foreach ($factory->getFixers() as $fixer) {
  48. $fixers[$fixer->getName()] = $fixer;
  49. }
  50. return [
  51. [$fixers['array_syntax'], $fixers['binary_operator_spaces']],
  52. [$fixers['array_syntax'], $fixers['ternary_operator_spaces']],
  53. [$fixers['backtick_to_shell_exec'], $fixers['escape_implicit_backslashes']],
  54. [$fixers['blank_line_after_opening_tag'], $fixers['no_blank_lines_before_namespace']],
  55. [$fixers['braces'], $fixers['array_indentation']],
  56. [$fixers['class_attributes_separation'], $fixers['braces']],
  57. [$fixers['class_attributes_separation'], $fixers['indentation_type']],
  58. [$fixers['class_keyword_remove'], $fixers['no_unused_imports']],
  59. [$fixers['combine_consecutive_issets'], $fixers['multiline_whitespace_before_semicolons']],
  60. [$fixers['combine_consecutive_issets'], $fixers['no_spaces_inside_parenthesis']],
  61. [$fixers['combine_consecutive_issets'], $fixers['no_trailing_whitespace']],
  62. [$fixers['combine_consecutive_issets'], $fixers['no_whitespace_in_blank_line']],
  63. [$fixers['combine_consecutive_unsets'], $fixers['no_extra_blank_lines']],
  64. [$fixers['combine_consecutive_unsets'], $fixers['no_trailing_whitespace']],
  65. [$fixers['combine_consecutive_unsets'], $fixers['no_whitespace_in_blank_line']],
  66. [$fixers['combine_consecutive_unsets'], $fixers['space_after_semicolon']],
  67. [$fixers['declare_strict_types'], $fixers['blank_line_after_opening_tag']],
  68. [$fixers['declare_strict_types'], $fixers['declare_equal_normalize']],
  69. [$fixers['declare_strict_types'], $fixers['single_blank_line_before_namespace']],
  70. [$fixers['doctrine_annotation_array_assignment'], $fixers['doctrine_annotation_spaces']],
  71. [$fixers['elseif'], $fixers['braces']],
  72. [$fixers['escape_implicit_backslashes'], $fixers['heredoc_to_nowdoc']],
  73. [$fixers['escape_implicit_backslashes'], $fixers['single_quote']],
  74. [$fixers['function_to_constant'], $fixers['native_function_casing']],
  75. [$fixers['function_to_constant'], $fixers['no_extra_blank_lines']],
  76. [$fixers['function_to_constant'], $fixers['no_singleline_whitespace_before_semicolons']],
  77. [$fixers['function_to_constant'], $fixers['no_trailing_whitespace']],
  78. [$fixers['function_to_constant'], $fixers['no_whitespace_in_blank_line']],
  79. [$fixers['general_phpdoc_annotation_remove'], $fixers['phpdoc_separation']],
  80. [$fixers['general_phpdoc_annotation_remove'], $fixers['phpdoc_trim']],
  81. [$fixers['general_phpdoc_annotation_remove'], $fixers['no_empty_phpdoc']],
  82. [$fixers['indentation_type'], $fixers['phpdoc_indent']],
  83. [$fixers['is_null'], $fixers['yoda_style']],
  84. [$fixers['line_ending'], $fixers['single_blank_line_at_eof']],
  85. [$fixers['list_syntax'], $fixers['binary_operator_spaces']],
  86. [$fixers['list_syntax'], $fixers['ternary_operator_spaces']],
  87. [$fixers['method_separation'], $fixers['braces']],
  88. [$fixers['method_separation'], $fixers['indentation_type']],
  89. [$fixers['no_alias_functions'], $fixers['php_unit_dedicate_assert']],
  90. [$fixers['no_blank_lines_after_phpdoc'], $fixers['single_blank_line_before_namespace']],
  91. [$fixers['no_empty_comment'], $fixers['no_extra_blank_lines']],
  92. [$fixers['no_empty_comment'], $fixers['no_trailing_whitespace']],
  93. [$fixers['no_empty_comment'], $fixers['no_whitespace_in_blank_line']],
  94. [$fixers['no_empty_phpdoc'], $fixers['no_extra_blank_lines']],
  95. [$fixers['no_empty_phpdoc'], $fixers['no_trailing_whitespace']],
  96. [$fixers['no_empty_phpdoc'], $fixers['no_whitespace_in_blank_line']],
  97. [$fixers['no_empty_statement'], $fixers['braces']],
  98. [$fixers['no_empty_statement'], $fixers['combine_consecutive_unsets']],
  99. [$fixers['no_empty_statement'], $fixers['no_extra_blank_lines']],
  100. [$fixers['no_empty_statement'], $fixers['multiline_whitespace_before_semicolons']],
  101. [$fixers['no_empty_statement'], $fixers['no_singleline_whitespace_before_semicolons']],
  102. [$fixers['no_empty_statement'], $fixers['no_trailing_whitespace']],
  103. [$fixers['no_empty_statement'], $fixers['no_useless_else']],
  104. [$fixers['no_empty_statement'], $fixers['no_useless_return']],
  105. [$fixers['no_empty_statement'], $fixers['no_whitespace_in_blank_line']],
  106. [$fixers['no_empty_statement'], $fixers['space_after_semicolon']],
  107. [$fixers['no_empty_statement'], $fixers['switch_case_semicolon_to_colon']],
  108. [$fixers['no_leading_import_slash'], $fixers['ordered_imports']],
  109. [$fixers['no_multiline_whitespace_around_double_arrow'], $fixers['binary_operator_spaces']],
  110. [$fixers['no_multiline_whitespace_around_double_arrow'], $fixers['trailing_comma_in_multiline_array']],
  111. [$fixers['multiline_whitespace_before_semicolons'], $fixers['space_after_semicolon']],
  112. [$fixers['no_php4_constructor'], $fixers['ordered_class_elements']],
  113. [$fixers['no_short_bool_cast'], $fixers['cast_spaces']],
  114. [$fixers['no_short_echo_tag'], $fixers['no_mixed_echo_print']],
  115. [$fixers['no_spaces_after_function_name'], $fixers['function_to_constant']],
  116. [$fixers['no_spaces_inside_parenthesis'], $fixers['function_to_constant']],
  117. [$fixers['no_unneeded_control_parentheses'], $fixers['no_trailing_whitespace']],
  118. [$fixers['no_unneeded_curly_braces'], $fixers['no_useless_else']],
  119. [$fixers['no_unneeded_curly_braces'], $fixers['no_useless_return']],
  120. [$fixers['no_unused_imports'], $fixers['blank_line_after_namespace']],
  121. [$fixers['no_unused_imports'], $fixers['no_extra_blank_lines']],
  122. [$fixers['no_unused_imports'], $fixers['no_leading_import_slash']],
  123. [$fixers['no_useless_else'], $fixers['braces']],
  124. [$fixers['no_useless_else'], $fixers['combine_consecutive_unsets']],
  125. [$fixers['no_useless_else'], $fixers['no_extra_blank_lines']],
  126. [$fixers['no_useless_else'], $fixers['no_trailing_whitespace']],
  127. [$fixers['no_useless_else'], $fixers['no_useless_return']],
  128. [$fixers['no_useless_else'], $fixers['no_whitespace_in_blank_line']],
  129. [$fixers['no_useless_return'], $fixers['blank_line_before_return']],
  130. [$fixers['no_useless_return'], $fixers['blank_line_before_statement']],
  131. [$fixers['no_useless_return'], $fixers['no_extra_blank_lines']],
  132. [$fixers['no_useless_return'], $fixers['no_whitespace_in_blank_line']],
  133. [$fixers['no_whitespace_in_blank_line'], $fixers['no_blank_lines_after_phpdoc']],
  134. [$fixers['ordered_class_elements'], $fixers['class_attributes_separation']],
  135. [$fixers['ordered_class_elements'], $fixers['method_separation']],
  136. [$fixers['ordered_class_elements'], $fixers['no_blank_lines_after_class_opening']],
  137. [$fixers['ordered_class_elements'], $fixers['space_after_semicolon']],
  138. [$fixers['php_unit_construct'], $fixers['php_unit_dedicate_assert']],
  139. [$fixers['php_unit_fqcn_annotation'], $fixers['no_unused_imports']],
  140. [$fixers['php_unit_fqcn_annotation'], $fixers['php_unit_ordered_covers']],
  141. [$fixers['php_unit_no_expectation_annotation'], $fixers['no_empty_phpdoc']],
  142. [$fixers['php_unit_no_expectation_annotation'], $fixers['php_unit_expectation']],
  143. [$fixers['php_unit_strict'], $fixers['php_unit_construct']],
  144. [$fixers['phpdoc_add_missing_param_annotation'], $fixers['phpdoc_align']],
  145. [$fixers['phpdoc_add_missing_param_annotation'], $fixers['phpdoc_order']],
  146. [$fixers['phpdoc_no_access'], $fixers['no_empty_phpdoc']],
  147. [$fixers['phpdoc_no_access'], $fixers['phpdoc_order']],
  148. [$fixers['phpdoc_no_access'], $fixers['phpdoc_separation']],
  149. [$fixers['phpdoc_no_access'], $fixers['phpdoc_trim']],
  150. [$fixers['phpdoc_no_alias_tag'], $fixers['phpdoc_add_missing_param_annotation']],
  151. [$fixers['phpdoc_no_alias_tag'], $fixers['phpdoc_single_line_var_spacing']],
  152. [$fixers['phpdoc_no_empty_return'], $fixers['no_empty_phpdoc']],
  153. [$fixers['phpdoc_no_empty_return'], $fixers['phpdoc_order']],
  154. [$fixers['phpdoc_no_empty_return'], $fixers['phpdoc_separation']],
  155. [$fixers['phpdoc_no_empty_return'], $fixers['phpdoc_trim']],
  156. [$fixers['phpdoc_no_package'], $fixers['no_empty_phpdoc']],
  157. [$fixers['phpdoc_no_package'], $fixers['phpdoc_order']],
  158. [$fixers['phpdoc_no_package'], $fixers['phpdoc_separation']],
  159. [$fixers['phpdoc_no_package'], $fixers['phpdoc_trim']],
  160. [$fixers['phpdoc_no_useless_inheritdoc'], $fixers['no_empty_phpdoc']],
  161. [$fixers['phpdoc_no_useless_inheritdoc'], $fixers['no_trailing_whitespace_in_comment']],
  162. [$fixers['phpdoc_order'], $fixers['phpdoc_separation']],
  163. [$fixers['phpdoc_order'], $fixers['phpdoc_trim']],
  164. [$fixers['phpdoc_separation'], $fixers['phpdoc_trim']],
  165. [$fixers['phpdoc_summary'], $fixers['phpdoc_trim']],
  166. [$fixers['phpdoc_to_comment'], $fixers['no_empty_comment']],
  167. [$fixers['phpdoc_to_comment'], $fixers['phpdoc_no_useless_inheritdoc']],
  168. [$fixers['phpdoc_var_without_name'], $fixers['phpdoc_trim']],
  169. [$fixers['pow_to_exponentiation'], $fixers['binary_operator_spaces']],
  170. [$fixers['pow_to_exponentiation'], $fixers['method_argument_space']],
  171. [$fixers['pow_to_exponentiation'], $fixers['native_function_casing']],
  172. [$fixers['pow_to_exponentiation'], $fixers['no_spaces_after_function_name']],
  173. [$fixers['pow_to_exponentiation'], $fixers['no_spaces_inside_parenthesis']],
  174. [$fixers['protected_to_private'], $fixers['ordered_class_elements']],
  175. [$fixers['simplified_null_return'], $fixers['no_useless_return']],
  176. [$fixers['single_import_per_statement'], $fixers['no_leading_import_slash']],
  177. [$fixers['single_import_per_statement'], $fixers['multiline_whitespace_before_semicolons']],
  178. [$fixers['single_import_per_statement'], $fixers['no_singleline_whitespace_before_semicolons']],
  179. [$fixers['single_import_per_statement'], $fixers['no_unused_imports']],
  180. [$fixers['single_import_per_statement'], $fixers['space_after_semicolon']],
  181. [$fixers['standardize_increment'], $fixers['increment_style']],
  182. [$fixers['standardize_not_equals'], $fixers['binary_operator_spaces']],
  183. [$fixers['strict_comparison'], $fixers['binary_operator_spaces']],
  184. [$fixers['unary_operator_spaces'], $fixers['not_operator_with_space']],
  185. [$fixers['unary_operator_spaces'], $fixers['not_operator_with_successor_space']],
  186. [$fixers['void_return'], $fixers['phpdoc_no_empty_return']],
  187. [$fixers['void_return'], $fixers['return_type_declaration']],
  188. [$fixers['php_unit_test_annotation'], $fixers['no_empty_phpdoc']],
  189. [$fixers['php_unit_test_annotation'], $fixers['phpdoc_trim']],
  190. [$fixers['no_alternative_syntax'], $fixers['braces']],
  191. [$fixers['no_alternative_syntax'], $fixers['elseif']],
  192. ];
  193. }
  194. public function provideFixersPrioritySpecialPhpdocCases()
  195. {
  196. $factory = new FixerFactory();
  197. $factory->registerBuiltInFixers();
  198. $fixers = [];
  199. foreach ($factory->getFixers() as $fixer) {
  200. $fixers[$fixer->getName()] = $fixer;
  201. }
  202. $cases = [];
  203. // prepare bulk tests for phpdoc fixers to test that:
  204. // * `comment_to_phpdoc` is first
  205. // * `phpdoc_to_comment` is second
  206. // * `phpdoc_indent` is third
  207. // * `phpdoc_types` is fourth
  208. // * `phpdoc_scalar` is fifth
  209. // * `phpdoc_align` is last
  210. $cases[] = [$fixers['comment_to_phpdoc'], $fixers['phpdoc_to_comment']];
  211. $cases[] = [$fixers['phpdoc_indent'], $fixers['phpdoc_types']];
  212. $cases[] = [$fixers['phpdoc_to_comment'], $fixers['phpdoc_indent']];
  213. $cases[] = [$fixers['phpdoc_types'], $fixers['phpdoc_scalar']];
  214. $docFixerNames = array_filter(
  215. array_keys($fixers),
  216. static function ($name) {
  217. return false !== strpos($name, 'phpdoc');
  218. }
  219. );
  220. foreach ($docFixerNames as $docFixerName) {
  221. if (!in_array($docFixerName, ['comment_to_phpdoc', 'phpdoc_to_comment', 'phpdoc_indent', 'phpdoc_types', 'phpdoc_scalar'], true)) {
  222. $cases[] = [$fixers['comment_to_phpdoc'], $fixers[$docFixerName]];
  223. $cases[] = [$fixers['phpdoc_indent'], $fixers[$docFixerName]];
  224. $cases[] = [$fixers['phpdoc_scalar'], $fixers[$docFixerName]];
  225. $cases[] = [$fixers['phpdoc_to_comment'], $fixers[$docFixerName]];
  226. $cases[] = [$fixers['phpdoc_types'], $fixers[$docFixerName]];
  227. }
  228. if ('phpdoc_align' !== $docFixerName) {
  229. $cases[] = [$fixers[$docFixerName], $fixers['phpdoc_align']];
  230. }
  231. }
  232. return $cases;
  233. }
  234. /**
  235. * @dataProvider provideFixersPriorityPairsHaveIntegrationTestCases
  236. */
  237. public function testFixersPriorityPairsHaveIntegrationTest(FixerInterface $first, FixerInterface $second)
  238. {
  239. // This structure contains older cases that are not yet covered by tests.
  240. // It may only shrink, never add anything to it.
  241. $casesWithoutTests = [
  242. 'class_attributes_separation,braces.test',
  243. 'class_attributes_separation,indentation_type.test',
  244. 'indentation_type,phpdoc_indent.test',
  245. 'line_ending,single_blank_line_at_eof.test',
  246. 'method_separation,braces.test',
  247. 'method_separation,indentation_type.test',
  248. 'no_empty_statement,multiline_whitespace_before_semicolons.test',
  249. 'no_empty_statement,no_multiline_whitespace_before_semicolons.test',
  250. 'no_empty_statement,no_singleline_whitespace_before_semicolons.test',
  251. 'php_unit_strict,php_unit_construct.test',
  252. 'phpdoc_no_access,phpdoc_order.test',
  253. 'phpdoc_no_access,phpdoc_separation.test',
  254. 'phpdoc_no_empty_return,phpdoc_trim.test',
  255. 'phpdoc_no_package,phpdoc_order.test',
  256. 'phpdoc_no_package,phpdoc_trim.test',
  257. 'phpdoc_order,phpdoc_separation.test',
  258. 'phpdoc_order,phpdoc_trim.test',
  259. 'phpdoc_separation,phpdoc_trim.test',
  260. 'phpdoc_summary,phpdoc_trim.test',
  261. 'phpdoc_var_without_name,phpdoc_trim.test',
  262. 'unary_operator_spaces,not_operator_with_space.test',
  263. 'unary_operator_spaces,not_operator_with_successor_space.test',
  264. ];
  265. $integrationTestExists = $this->doesIntegrationTestExist($first, $second);
  266. if (in_array($this->generateIntegrationTestName($first, $second), $casesWithoutTests, true)) {
  267. $this->assertFalse($integrationTestExists, sprintf('Case "%s" already has an integration test, so it should be removed from "$casesWithoutTests".', $this->generateIntegrationTestName($first, $second)));
  268. $this->markTestIncomplete(sprintf('Case "%s" has no integration test yet, please help and add it.', $this->generateIntegrationTestName($first, $second)));
  269. }
  270. $this->assertTrue($integrationTestExists, sprintf('There shall be an integration test "%s". How do you know that priority set up is good, if there is no integration test to check it?', $this->generateIntegrationTestName($first, $second)));
  271. }
  272. public function provideFixersPriorityPairsHaveIntegrationTestCases()
  273. {
  274. return array_filter(
  275. $this->provideFixersPriorityCases(),
  276. // ignore speed-up only priorities set up
  277. function (array $case) {
  278. return !in_array(
  279. $this->generateIntegrationTestName($case[0], $case[1]),
  280. [
  281. 'function_to_constant,native_function_casing.test',
  282. 'no_unused_imports,no_leading_import_slash.test',
  283. 'pow_to_exponentiation,method_argument_space.test',
  284. 'pow_to_exponentiation,native_function_casing.test',
  285. 'pow_to_exponentiation,no_spaces_after_function_name.test',
  286. 'pow_to_exponentiation,no_spaces_inside_parenthesis.test',
  287. ],
  288. true
  289. );
  290. }
  291. );
  292. }
  293. public function testPriorityIntegrationDirectoryOnlyContainsFiles()
  294. {
  295. foreach (new \DirectoryIterator($this->getIntegrationPriorityDirectory()) as $candidate) {
  296. if ($candidate->isDot()) {
  297. continue;
  298. }
  299. $fileName = $candidate->getFilename();
  300. $this->assertTrue($candidate->isFile(), sprintf('Expected only files in the priority integration test directory, got "%s".', $fileName));
  301. $this->assertFalse($candidate->isLink(), sprintf('No (sym)links expected the priority integration test directory, got "%s".', $fileName));
  302. }
  303. }
  304. /**
  305. * @dataProvider provideIntegrationTestFilesCases
  306. *
  307. * @param string $fileName
  308. */
  309. public function testPriorityIntegrationTestFilesAreListedPriorityCases($fileName)
  310. {
  311. static $priorityCases;
  312. if (null === $priorityCases) {
  313. $priorityCases = [];
  314. foreach ($this->provideFixersPriorityCases() as $priorityCase) {
  315. $fixerName = $priorityCase[0]->getName();
  316. if (!isset($priorityCases[$fixerName])) {
  317. $priorityCases[$fixerName] = [];
  318. }
  319. $priorityCases[$fixerName][$priorityCase[1]->getName()] = true;
  320. }
  321. ksort($priorityCases);
  322. }
  323. if (in_array($fileName, [
  324. 'braces,indentation_type,no_break_comment.test',
  325. ], true)) {
  326. $this->markTestIncomplete(sprintf('Case "%s" has unexpected name, please help fixing it.', $fileName));
  327. }
  328. if (in_array($fileName, [
  329. 'combine_consecutive_issets,no_singleline_whitespace_before_semicolons.test',
  330. 'comment_to_phpdoc,phpdoc_to_comment.test',
  331. ], true)) {
  332. $this->markTestIncomplete(sprintf('Case "%s" is not fully handled, please help fixing it.', $fileName));
  333. }
  334. $this->assertSame(
  335. 1,
  336. preg_match('#^([a-z][a-z0-9_]*),([a-z][a-z_]*)(?:_\d{1,3})?\.test$#', $fileName, $matches),
  337. sprintf('File with unexpected name "%s" in the priority integration test directory.', $fileName)
  338. );
  339. $fixerName1 = $matches[1];
  340. $fixerName2 = $matches[2];
  341. $this->assertTrue(
  342. isset($priorityCases[$fixerName1][$fixerName2]) || isset($priorityCases[$fixerName2][$fixerName1]),
  343. sprintf('Missing priority test entry for file "%s".', $fileName)
  344. );
  345. }
  346. public function provideIntegrationTestFilesCases()
  347. {
  348. $fileNames = [];
  349. foreach (new \DirectoryIterator($this->getIntegrationPriorityDirectory()) as $candidate) {
  350. if ($candidate->isDot()) {
  351. continue;
  352. }
  353. $fileNames[] = [$candidate->getFilename()];
  354. }
  355. sort($fileNames);
  356. return $fileNames;
  357. }
  358. /**
  359. * @param FixerInterface $first
  360. * @param FixerInterface $second
  361. *
  362. * @return string
  363. */
  364. private function generateIntegrationTestName(FixerInterface $first, FixerInterface $second)
  365. {
  366. return "{$first->getName()},{$second->getName()}.test";
  367. }
  368. /**
  369. * @param FixerInterface $first
  370. * @param FixerInterface $second
  371. *
  372. * @return bool
  373. */
  374. private function doesIntegrationTestExist(FixerInterface $first, FixerInterface $second)
  375. {
  376. return
  377. is_file($this->getIntegrationPriorityDirectory().$this->generateIntegrationTestName($first, $second))
  378. || is_file($this->getIntegrationPriorityDirectory().$this->generateIntegrationTestName($second, $first))
  379. ;
  380. }
  381. /**
  382. * @return string
  383. */
  384. private function getIntegrationPriorityDirectory()
  385. {
  386. return __DIR__.'/../Fixtures/Integration/priority/';
  387. }
  388. }