‪TYPO3CMS  ‪main
ArrayDimensionMatcherTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PhpParser\NodeTraverser;
21 use PhpParser\NodeVisitor\NameResolver;
22 use PhpParser\ParserFactory;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
26 final class ‪ArrayDimensionMatcherTest extends UnitTestCase
27 {
31  public function ‪hitsFromFixtureAreFound(): void
32  {
33  ‪$parser = (new ParserFactory())->create(ParserFactory::ONLY_PHP7);
34  $fixtureFile = __DIR__ . '/Fixtures/ArrayDimensionMatcherFixture.php';
35  $statements = ‪$parser->parse(file_get_contents($fixtureFile));
36 
37  $traverser = new NodeTraverser();
38  $traverser->addVisitor(new NameResolver());
39 
40  $configuration = [
41  '$GLOBALS[\'TYPO3_CONF_VARS\'][\'FE\'][\'maxSessionDataSize\']' => [
42  'restFiles' => [
43  'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
44  'Deprecation-70316-FrontendBasketWithRecs.rst',
45  ],
46  ],
47  ];
48  $subject = new ‪ArrayDimensionMatcher($configuration);
49  $traverser->addVisitor($subject);
50  $traverser->traverse($statements);
51  $expectedHitLineNumbers = [
52  28,
53  29,
54  ];
55  $actualHitLineNumbers = [];
56  foreach ($subject->getMatches() as $hit) {
57  $actualHitLineNumbers[] = $hit['line'];
58  }
59  self::assertEquals($expectedHitLineNumbers, $actualHitLineNumbers);
60  }
61 
62  public static function ‪matchesReturnsExpectedRestFilesDataProvider(): array
63  {
64  return [
65  'two candidates' => [
66  [
67  '$foo[\'bar\'][\'findMe\']' => [
68  'restFiles' => [
69  'Foo-1.rst',
70  'Foo-2.rst',
71  ],
72  ],
73  '$foo[\'findMe\']' => [
74  'restFiles' => [
75  'Bar-1.rst',
76  'Bar-2.rst',
77  ],
78  ],
79  ],
80  '<?php
81  $bar = $foo[\'findMe\'];',
82  [
83  0 => [
84  'restFiles' => [
85  'Foo-1.rst',
86  'Foo-2.rst',
87  'Bar-1.rst',
88  'Bar-2.rst',
89  ],
90  ],
91  ],
92  ],
93  'double linked .rst file is returned only once' => [
94  [
95  '$foo[\'bar\'][\'findMe\']' => [
96  'unusedArgumentNumbers' => [ 1 ],
97  'restFiles' => [
98  'aRest.rst',
99  ],
100  ],
101  '$foo[\'findMe\']' => [
102  'unusedArgumentNumbers' => [ 1 ],
103  'restFiles' => [
104  'aRest.rst',
105  ],
106  ],
107  ],
108  '<?php
109  $bar = $foo[\'findMe\'];',
110  [
111  0 => [
112  'restFiles' => [
113  'aRest.rst',
114  ],
115  ],
116  ],
117  ],
118  ];
119  }
120 
125  public function ‪matchesReturnsExpectedRestFiles(array $configuration, string $phpCode, array $expected): void
126  {
127  ‪$parser = (new ParserFactory())->create(ParserFactory::ONLY_PHP7);
128  $statements = ‪$parser->parse($phpCode);
129 
130  $subject = new ‪ArrayDimensionMatcher($configuration);
131 
132  $traverser = new NodeTraverser();
133  $traverser->addVisitor($subject);
134  $traverser->traverse($statements);
135 
136  $result = $subject->getMatches();
137  self::assertEquals($expected[0]['restFiles'], $result[0]['restFiles']);
138  }
139 }
‪TYPO3\CMS\Install\Tests\Unit\ExtensionScanner\Php\Matcher\ArrayDimensionMatcherTest\matchesReturnsExpectedRestFiles
‪matchesReturnsExpectedRestFiles(array $configuration, string $phpCode, array $expected)
Definition: ArrayDimensionMatcherTest.php:125
‪$parser
‪$parser
Definition: annotationChecker.php:108
‪TYPO3\CMS\Install\Tests\Unit\ExtensionScanner\Php\Matcher
Definition: AbstractCoreMatcherTest.php:18
‪TYPO3\CMS\Install\Tests\Unit\ExtensionScanner\Php\Matcher\ArrayDimensionMatcherTest\hitsFromFixtureAreFound
‪hitsFromFixtureAreFound()
Definition: ArrayDimensionMatcherTest.php:31
‪TYPO3\CMS\Install\ExtensionScanner\Php\Matcher\ArrayDimensionMatcher
Definition: ArrayDimensionMatcher.php:31
‪TYPO3\CMS\Install\Tests\Unit\ExtensionScanner\Php\Matcher\ArrayDimensionMatcherTest
Definition: ArrayDimensionMatcherTest.php:27
‪TYPO3\CMS\Install\Tests\Unit\ExtensionScanner\Php\Matcher\ArrayDimensionMatcherTest\matchesReturnsExpectedRestFilesDataProvider
‪static matchesReturnsExpectedRestFilesDataProvider()
Definition: ArrayDimensionMatcherTest.php:62