annotate vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@0 2
Chris@0 3 namespace PhpParser\Node;
Chris@0 4
Chris@17 5 class NameTest extends \PHPUnit\Framework\TestCase
Chris@0 6 {
Chris@0 7 public function testConstruct() {
Chris@13 8 $name = new Name(['foo', 'bar']);
Chris@13 9 $this->assertSame(['foo', 'bar'], $name->parts);
Chris@0 10
Chris@0 11 $name = new Name('foo\bar');
Chris@13 12 $this->assertSame(['foo', 'bar'], $name->parts);
Chris@0 13
Chris@0 14 $name = new Name($name);
Chris@13 15 $this->assertSame(['foo', 'bar'], $name->parts);
Chris@0 16 }
Chris@0 17
Chris@0 18 public function testGet() {
Chris@0 19 $name = new Name('foo');
Chris@0 20 $this->assertSame('foo', $name->getFirst());
Chris@0 21 $this->assertSame('foo', $name->getLast());
Chris@0 22
Chris@0 23 $name = new Name('foo\bar');
Chris@0 24 $this->assertSame('foo', $name->getFirst());
Chris@0 25 $this->assertSame('bar', $name->getLast());
Chris@0 26 }
Chris@0 27
Chris@0 28 public function testToString() {
Chris@13 29 $name = new Name('Foo\Bar');
Chris@0 30
Chris@13 31 $this->assertSame('Foo\Bar', (string) $name);
Chris@13 32 $this->assertSame('Foo\Bar', $name->toString());
Chris@13 33 $this->assertSame('foo\bar', $name->toLowerString());
Chris@0 34 }
Chris@0 35
Chris@0 36 public function testSlice() {
Chris@0 37 $name = new Name('foo\bar\baz');
Chris@0 38 $this->assertEquals(new Name('foo\bar\baz'), $name->slice(0));
Chris@0 39 $this->assertEquals(new Name('bar\baz'), $name->slice(1));
Chris@0 40 $this->assertNull($name->slice(3));
Chris@0 41 $this->assertEquals(new Name('foo\bar\baz'), $name->slice(-3));
Chris@0 42 $this->assertEquals(new Name('bar\baz'), $name->slice(-2));
Chris@0 43 $this->assertEquals(new Name('foo\bar'), $name->slice(0, -1));
Chris@0 44 $this->assertNull($name->slice(0, -3));
Chris@0 45 $this->assertEquals(new Name('bar'), $name->slice(1, -1));
Chris@0 46 $this->assertNull($name->slice(1, -2));
Chris@0 47 $this->assertEquals(new Name('bar'), $name->slice(-2, 1));
Chris@0 48 $this->assertEquals(new Name('bar'), $name->slice(-2, -1));
Chris@0 49 $this->assertNull($name->slice(-2, -2));
Chris@0 50 }
Chris@0 51
Chris@0 52 public function testSliceOffsetTooLarge() {
Chris@17 53 $this->expectException(\OutOfBoundsException::class);
Chris@17 54 $this->expectExceptionMessage('Offset 4 is out of bounds');
Chris@0 55 (new Name('foo\bar\baz'))->slice(4);
Chris@0 56 }
Chris@0 57
Chris@0 58 public function testSliceOffsetTooSmall() {
Chris@17 59 $this->expectException(\OutOfBoundsException::class);
Chris@17 60 $this->expectExceptionMessage('Offset -4 is out of bounds');
Chris@0 61 (new Name('foo\bar\baz'))->slice(-4);
Chris@0 62 }
Chris@0 63
Chris@0 64 public function testSliceLengthTooLarge() {
Chris@17 65 $this->expectException(\OutOfBoundsException::class);
Chris@17 66 $this->expectExceptionMessage('Length 4 is out of bounds');
Chris@0 67 (new Name('foo\bar\baz'))->slice(0, 4);
Chris@0 68 }
Chris@0 69
Chris@0 70 public function testSliceLengthTooSmall() {
Chris@17 71 $this->expectException(\OutOfBoundsException::class);
Chris@17 72 $this->expectExceptionMessage('Length -4 is out of bounds');
Chris@0 73 (new Name('foo\bar\baz'))->slice(0, -4);
Chris@0 74 }
Chris@0 75
Chris@0 76 public function testConcat() {
Chris@0 77 $this->assertEquals(new Name('foo\bar\baz'), Name::concat('foo', 'bar\baz'));
Chris@0 78 $this->assertEquals(
Chris@0 79 new Name\FullyQualified('foo\bar'),
Chris@0 80 Name\FullyQualified::concat(['foo'], new Name('bar'))
Chris@0 81 );
Chris@0 82
Chris@0 83 $attributes = ['foo' => 'bar'];
Chris@0 84 $this->assertEquals(
Chris@0 85 new Name\Relative('foo\bar\baz', $attributes),
Chris@0 86 Name\Relative::concat(new Name\FullyQualified('foo\bar'), 'baz', $attributes)
Chris@0 87 );
Chris@0 88
Chris@0 89 $this->assertEquals(new Name('foo'), Name::concat(null, 'foo'));
Chris@0 90 $this->assertEquals(new Name('foo'), Name::concat('foo', null));
Chris@0 91 $this->assertNull(Name::concat(null, null));
Chris@0 92 }
Chris@0 93
Chris@13 94 public function testNameTypes() {
Chris@0 95 $name = new Name('foo');
Chris@13 96 $this->assertTrue($name->isUnqualified());
Chris@0 97 $this->assertFalse($name->isQualified());
Chris@0 98 $this->assertFalse($name->isFullyQualified());
Chris@0 99 $this->assertFalse($name->isRelative());
Chris@13 100 $this->assertSame('foo', $name->toCodeString());
Chris@0 101
Chris@0 102 $name = new Name('foo\bar');
Chris@0 103 $this->assertFalse($name->isUnqualified());
Chris@13 104 $this->assertTrue($name->isQualified());
Chris@0 105 $this->assertFalse($name->isFullyQualified());
Chris@0 106 $this->assertFalse($name->isRelative());
Chris@13 107 $this->assertSame('foo\bar', $name->toCodeString());
Chris@0 108
Chris@0 109 $name = new Name\FullyQualified('foo');
Chris@0 110 $this->assertFalse($name->isUnqualified());
Chris@0 111 $this->assertFalse($name->isQualified());
Chris@13 112 $this->assertTrue($name->isFullyQualified());
Chris@0 113 $this->assertFalse($name->isRelative());
Chris@13 114 $this->assertSame('\foo', $name->toCodeString());
Chris@0 115
Chris@0 116 $name = new Name\Relative('foo');
Chris@0 117 $this->assertFalse($name->isUnqualified());
Chris@0 118 $this->assertFalse($name->isQualified());
Chris@0 119 $this->assertFalse($name->isFullyQualified());
Chris@13 120 $this->assertTrue($name->isRelative());
Chris@13 121 $this->assertSame('namespace\foo', $name->toCodeString());
Chris@0 122 }
Chris@0 123
Chris@0 124 public function testInvalidArg() {
Chris@17 125 $this->expectException(\InvalidArgumentException::class);
Chris@17 126 $this->expectExceptionMessage('Expected string, array of parts or Name instance');
Chris@0 127 Name::concat('foo', new \stdClass);
Chris@0 128 }
Chris@13 129
Chris@13 130 public function testInvalidEmptyString() {
Chris@17 131 $this->expectException(\InvalidArgumentException::class);
Chris@17 132 $this->expectExceptionMessage('Name cannot be empty');
Chris@13 133 new Name('');
Chris@13 134 }
Chris@13 135
Chris@13 136 public function testInvalidEmptyArray() {
Chris@17 137 $this->expectException(\InvalidArgumentException::class);
Chris@17 138 $this->expectExceptionMessage('Name cannot be empty');
Chris@13 139 new Name([]);
Chris@13 140 }
Chris@13 141
Chris@13 142 /** @dataProvider provideTestIsSpecialClassName */
Chris@13 143 public function testIsSpecialClassName($name, $expected) {
Chris@13 144 $name = new Name($name);
Chris@13 145 $this->assertSame($expected, $name->isSpecialClassName());
Chris@13 146 }
Chris@13 147
Chris@13 148 public function provideTestIsSpecialClassName() {
Chris@13 149 return [
Chris@13 150 ['self', true],
Chris@13 151 ['PARENT', true],
Chris@13 152 ['Static', true],
Chris@13 153 ['self\not', false],
Chris@13 154 ['not\self', false],
Chris@13 155 ];
Chris@13 156 }
Chris@13 157 }