123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604 |
- <?php
- /*
- * This file is part of PHP CS Fixer.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- * Dariusz Rumiński <dariusz.ruminski@gmail.com>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
- namespace PhpCsFixer\Tests\Fixer\Import;
- use PhpCsFixer\Test\AbstractFixerTestCase;
- /**
- * @internal
- *
- * @covers \PhpCsFixer\Fixer\Import\NoUnusedImportsFixer
- */
- final class NoUnusedImportsFixerTest extends AbstractFixerTestCase
- {
- public function testFix()
- {
- $expected = <<<'EOF'
- <?php
- use Foo\Bar;
- use Foo\Bar\FooBar as FooBaz;
- use SomeClass;
- $a = new Bar();
- $a = new FooBaz();
- $a = new SomeClass();
- use Symfony\Annotation\Template;
- use Symfony\Doctrine\Entities\Entity;
- use Symfony\Array123\ArrayInterface;
- class AnnotatedClass
- {
- /**
- * @Template(foobar=21)
- * @param Entity $foo
- */
- public function doSomething($foo)
- {
- $bar = $foo->toArray();
- /** @var ArrayInterface $bar */
- }
- }
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar;
- use Foo\Bar\Baz;
- use Foo\Bar\FooBar as FooBaz;
- use Foo\Bar\Foo as Fooo;
- use Foo\Bar\Baar\Baar;
- use SomeClass;
- $a = new Bar();
- $a = new FooBaz();
- $a = new SomeClass();
- use Symfony\Annotation\Template;
- use Symfony\Doctrine\Entities\Entity;
- use Symfony\Array123\ArrayInterface;
- class AnnotatedClass
- {
- /**
- * @Template(foobar=21)
- * @param Entity $foo
- */
- public function doSomething($foo)
- {
- $bar = $foo->toArray();
- /** @var ArrayInterface $bar */
- }
- }
- EOF;
- $this->doTest($expected, $input);
- }
- public function testFixFunWithIndent()
- {
- $expected = <<<'EOF'
- <?php
- use Foo\Bar;
- $foo = 1;
- use Foo\Bar\FooBar as FooBaz;
- use SomeClassIndented;
- $a = new Bar();
- $a = new FooBaz();
- $a = new SomeClassIndented();
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar;
- use Foo\Bar\Baz;
- $foo = 1;
- use Foo\Bar\FooBar as FooBaz;
- use Foo\Bar\Foo as Fooo;
- use Foo\Bar\Baar\Baar;
- use SomeClassIndented;
- $a = new Bar();
- $a = new FooBaz();
- $a = new SomeClassIndented();
- EOF;
- $this->doTest($expected, $input);
- }
- public function testFixUseInTheSameNamespace()
- {
- $expected = <<<'EOF'
- <?php
- namespace Foo\Bar\FooBar;
- use Foo\Bar\FooBar\Foo as Fooz;
- use Foo\Bar\FooBar\Aaa\Bbb;
- use XYZ\FQCN_XYZ;
- $a = new Baz();
- $b = new Fooz();
- $c = new Bar\Fooz();
- $d = new Bbb();
- $e = new FQCN_Babo();
- $f = new FQCN_XYZ();
- EOF;
- $input = <<<'EOF'
- <?php
- namespace Foo\Bar\FooBar;
- use Foo\Bar\FooBar\Baz;
- use Foo\Bar\FooBar\Foo as Fooz;
- use Foo\Bar\FooBar\Bar;
- use Foo\Bar\FooBar\Aaa\Bbb;
- use \Foo\Bar\FooBar\FQCN_Babo;
- use XYZ\FQCN_XYZ;
- $a = new Baz();
- $b = new Fooz();
- $c = new Bar\Fooz();
- $d = new Bbb();
- $e = new FQCN_Babo();
- $f = new FQCN_XYZ();
- EOF;
- $this->doTest($expected, $input);
- // the fixer doesn't support file with multiple namespace - test if we don't remove imports in that case
- $expected = <<<'EOF'
- <?php
- namespace Foooooooo;
- namespace Foo;
- use Foo\Bar;
- use Foo\Baz;
- $a = new Bar();
- $b = new Baz();
- EOF;
- $this->doTest($expected);
- }
- public function testMultipleUseStatements()
- {
- $expected = <<<'EOF'
- <?php
- namespace Foo;
- use BarB, BarC as C, BarD;
- use BarE;
- $c = new D();
- $e = new BarE();
- EOF;
- $input = <<<'EOF'
- <?php
- namespace Foo;
- use Bar;
- use BarA;
- use BarB, BarC as C, BarD;
- use BarB2;
- use BarB\B2;
- use BarE;
- $c = new D();
- $e = new BarE();
- EOF;
- $this->doTest($expected, $input);
- }
- public function testNamespaceWithBraces()
- {
- $expected = <<<'EOF'
- <?php
- namespace Foo\Bar\FooBar {
- use Foo\Bar\FooBar\Foo as Fooz;
- use Foo\Bar\FooBar\Aaa\Bbb;
- $a = new Baz();
- $b = new Fooz();
- $c = new Bar\Fooz();
- $d = new Bbb();
- }
- EOF;
- $input = <<<'EOF'
- <?php
- namespace Foo\Bar\FooBar {
- use Foo\Bar\FooBar\Baz;
- use Foo\Bar\FooBar\Foo as Fooz;
- use Foo\Bar\FooBar\Bar;
- use Foo\Bar\FooBar\Aaa\Bbb;
- $a = new Baz();
- $b = new Fooz();
- $c = new Bar\Fooz();
- $d = new Bbb();
- }
- EOF;
- $this->doTest($expected, $input);
- }
- public function testTrailingSpaces()
- {
- $expected = <<<'EOF'
- <?php
- use Foo\Bar ;
- use Foo\Bar\FooBar as FooBaz ;
- $a = new Bar();
- $a = new FooBaz();
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar ;
- use Foo\Bar\FooBar as FooBaz ;
- use Foo\Bar\Foo as Fooo ;
- use SomeClass ;
- $a = new Bar();
- $a = new FooBaz();
- EOF;
- $this->doTest($expected, $input);
- }
- public function testTraits()
- {
- $expected = <<<'EOF'
- <?php
- use Foo as Bar;
- class MyParent
- {
- use MyTrait1;
- use MyTrait2;
- use Bar;
- }
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo;
- use Foo as Bar;
- class MyParent
- {
- use MyTrait1;
- use MyTrait2;
- use Bar;
- }
- EOF;
- $this->doTest($expected, $input);
- }
- public function testFunctionUse()
- {
- $expected = <<<'EOF'
- <?php
- use Foo;
- $f = new Foo();
- $a = function ($item) use ($f) {
- return !in_array($item, $f);
- };
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo;
- use Bar;
- $f = new Foo();
- $a = function ($item) use ($f) {
- return !in_array($item, $f);
- };
- EOF;
- $this->doTest($expected, $input);
- }
- public function testSimilarNames()
- {
- $expected = <<<'EOF'
- <?php
- use SomeEntityRepository;
- class SomeService
- {
- public function __construct(SomeEntityRepository $repo)
- {
- $this->repo = $repo;
- }
- }
- EOF;
- $input = <<<'EOF'
- <?php
- use SomeEntityRepository;
- use SomeEntity;
- class SomeService
- {
- public function __construct(SomeEntityRepository $repo)
- {
- $this->repo = $repo;
- }
- }
- EOF;
- $this->doTest($expected, $input);
- }
- public function testVariableName()
- {
- $expected = <<<'EOF'
- <?php
- $bar = null;
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar;
- $bar = null;
- EOF;
- $this->doTest($expected, $input);
- }
- public function testPropertyName()
- {
- $expected = <<<'EOF'
- <?php
- $foo->bar = null;
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar;
- $foo->bar = null;
- EOF;
- $this->doTest($expected, $input);
- }
- public function testNamespacePart()
- {
- $expected = <<<'EOF'
- <?php
- new \Baz\Bar();
- EOF;
- $input = <<<'EOF'
- <?php
- use Foo\Bar;
- new \Baz\Bar();
- EOF;
- $this->doTest($expected, $input);
- }
- /**
- * @param string $expected
- * @param null|string $input
- *
- * @dataProvider providerUseInString
- */
- public function testUseInString($expected, $input = null)
- {
- $this->doTest($expected, $input);
- }
- public function providerUseInString()
- {
- $expected1 = <<<'EOF'
- $x=<<<'EOA'
- use a;
- use b;
- EOA;
- EOF;
- $expected2 = <<<'EOF'
- $x='
- use a;
- use b;
- ';
- EOF;
- $expected3 = <<<'EOF'
- $x="
- use a;
- use b;
- ";
- EOF;
- return array(
- array($expected1),
- array($expected2),
- array($expected3),
- );
- }
- public function testUseAsLastStatement()
- {
- $expected = <<<'EOF'
- <?php
- EOF;
- $input = <<<'EOF'
- <?php
- use Bar\Finder;
- EOF;
- $this->doTest($expected, $input);
- }
- public function testUseWithSameLastPartThatIsInNamespace()
- {
- $expected = <<<'EOF'
- <?php
- namespace Foo\Finder;
- EOF;
- $input = <<<'EOF'
- <?php
- namespace Foo\Finder;
- use Bar\Finder;
- EOF;
- $this->doTest($expected, $input);
- }
- public function testFoo()
- {
- $expected = <<<'EOF'
- <?php
- namespace Aaa;
- class Ddd
- {
- }
- EOF;
- $input = <<<'EOF'
- <?php
- namespace Aaa;
- use Aaa\Bbb;
- use Ccc;
- class Ddd
- {
- }
- EOF;
- $this->doTest($expected, $input);
- }
- /**
- * @param string $expected
- * @param null|string $input
- *
- * @dataProvider provideCloseTagCases
- */
- public function testFixABC($expected, $input = null)
- {
- $this->doTest($expected, $input);
- }
- public function provideCloseTagCases()
- {
- return array(
- array(
- '<?php
- ?>inline content<?php ?>',
- '<?php
- use A\AA;
- use B\C?>inline content<?php use A\D; use E\F ?>',
- ),
- array(
- '<?php ?>',
- '<?php use A\B;?>',
- ),
- array(
- '<?php ?>',
- '<?php use A\B?>',
- ),
- );
- }
- /**
- * @requires PHP 7.0
- */
- public function testPHP70()
- {
- $expected = <<<'EOF'
- <?php
- use some\a\{ClassD};
- use some\b\{ClassA, ClassB, ClassC as C};
- use function some\c\{fn_a, fn_b, fn_c};
- use const some\d\{ConstA, ConstB, ConstC};
- new CLassD();
- echo fn_a();
- EOF;
- $this->doTest($expected);
- }
- public function testFixWithComments()
- {
- $input = '<?php
- use#
- \#
- Exception#
- #
- ;
- echo 1;';
- $expected = '<?php
- echo 1;';
- $this->doTest($expected, $input);
- }
- }
|