Chris@13
|
1 <?php
|
Chris@13
|
2
|
Chris@13
|
3 /*
|
Chris@13
|
4 * This file is part of Psy Shell.
|
Chris@13
|
5 *
|
Chris@13
|
6 * (c) 2012-2018 Justin Hileman
|
Chris@13
|
7 *
|
Chris@13
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@13
|
9 * file that was distributed with this source code.
|
Chris@13
|
10 */
|
Chris@13
|
11
|
Chris@13
|
12 namespace Psy\Test\CodeCleaner;
|
Chris@13
|
13
|
Chris@13
|
14 use Psy\CodeCleaner;
|
Chris@13
|
15 use Psy\CodeCleaner\NamespacePass;
|
Chris@13
|
16
|
Chris@13
|
17 class NamespacePassTest extends CodeCleanerTestCase
|
Chris@13
|
18 {
|
Chris@13
|
19 private $cleaner;
|
Chris@13
|
20
|
Chris@13
|
21 public function setUp()
|
Chris@13
|
22 {
|
Chris@13
|
23 $this->cleaner = new CodeCleaner();
|
Chris@13
|
24 $this->setPass(new NamespacePass($this->cleaner));
|
Chris@13
|
25 }
|
Chris@13
|
26
|
Chris@13
|
27 public function testProcess()
|
Chris@13
|
28 {
|
Chris@16
|
29 $this->parseAndTraverse('');
|
Chris@16
|
30 $this->assertNull($this->cleaner->getNamespace());
|
Chris@16
|
31
|
Chris@13
|
32 $this->parseAndTraverse('array_merge()');
|
Chris@13
|
33 $this->assertNull($this->cleaner->getNamespace());
|
Chris@13
|
34
|
Chris@13
|
35 // A non-block namespace statement should set the current namespace.
|
Chris@13
|
36 $this->parseAndTraverse('namespace Alpha');
|
Chris@13
|
37 $this->assertSame(['Alpha'], $this->cleaner->getNamespace());
|
Chris@13
|
38
|
Chris@13
|
39 // A new non-block namespace statement should override the current namespace.
|
Chris@13
|
40 $this->parseAndTraverse('namespace Beta; class B {}');
|
Chris@13
|
41 $this->assertSame(['Beta'], $this->cleaner->getNamespace());
|
Chris@13
|
42
|
Chris@13
|
43 // A new block namespace clears out the current namespace...
|
Chris@13
|
44 $this->parseAndTraverse('namespace Gamma { array_merge(); }');
|
Chris@13
|
45
|
Chris@17
|
46 if (\defined('PhpParser\\Node\\Stmt\\Namespace_::KIND_SEMICOLON')) {
|
Chris@13
|
47 $this->assertNull($this->cleaner->getNamespace());
|
Chris@13
|
48 } else {
|
Chris@13
|
49 // But not for PHP-Parser < v3.1.2 :(
|
Chris@13
|
50 $this->assertSame(['Gamma'], $this->cleaner->getNamespace());
|
Chris@13
|
51 }
|
Chris@13
|
52
|
Chris@13
|
53 $this->parseAndTraverse('namespace Delta');
|
Chris@13
|
54
|
Chris@13
|
55 // A null namespace clears out the current namespace.
|
Chris@13
|
56 $this->parseAndTraverse('namespace { array_merge(); }');
|
Chris@13
|
57 $this->assertNull($this->cleaner->getNamespace());
|
Chris@13
|
58 }
|
Chris@13
|
59 }
|