annotate vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.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@17 1 <?php declare(strict_types=1);
Chris@17 2
Chris@17 3 namespace PhpParser\Builder;
Chris@17 4
Chris@17 5 use PhpParser\Node\Name;
Chris@17 6 use PhpParser\Node\Stmt;
Chris@17 7 use PhpParser\Node\Stmt\Class_;
Chris@17 8
Chris@17 9 class TraitUseAdaptationTest extends \PHPUnit\Framework\TestCase
Chris@17 10 {
Chris@17 11 protected function createTraitUseAdaptationBuilder($trait, $method) {
Chris@17 12 return new TraitUseAdaptation($trait, $method);
Chris@17 13 }
Chris@17 14
Chris@17 15 public function testAsMake() {
Chris@17 16 $builder = $this->createTraitUseAdaptationBuilder(null, 'foo');
Chris@17 17
Chris@17 18 $this->assertEquals(
Chris@17 19 new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'),
Chris@17 20 (clone $builder)->as('bar')->getNode()
Chris@17 21 );
Chris@17 22
Chris@17 23 $this->assertEquals(
Chris@17 24 new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PUBLIC, null),
Chris@17 25 (clone $builder)->makePublic()->getNode()
Chris@17 26 );
Chris@17 27
Chris@17 28 $this->assertEquals(
Chris@17 29 new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PROTECTED, null),
Chris@17 30 (clone $builder)->makeProtected()->getNode()
Chris@17 31 );
Chris@17 32
Chris@17 33 $this->assertEquals(
Chris@17 34 new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PRIVATE, null),
Chris@17 35 (clone $builder)->makePrivate()->getNode()
Chris@17 36 );
Chris@17 37 }
Chris@17 38
Chris@17 39 public function testInsteadof() {
Chris@17 40 $node = $this->createTraitUseAdaptationBuilder('SomeTrait', 'foo')
Chris@17 41 ->insteadof('AnotherTrait')
Chris@17 42 ->getNode()
Chris@17 43 ;
Chris@17 44
Chris@17 45 $this->assertEquals(
Chris@17 46 new Stmt\TraitUseAdaptation\Precedence(
Chris@17 47 new Name('SomeTrait'),
Chris@17 48 'foo',
Chris@17 49 [new Name('AnotherTrait')]
Chris@17 50 ),
Chris@17 51 $node
Chris@17 52 );
Chris@17 53 }
Chris@17 54
Chris@17 55 public function testAsOnNotAlias() {
Chris@17 56 $this->expectException(\LogicException::class);
Chris@17 57 $this->expectExceptionMessage('Cannot set alias for not alias adaptation buider');
Chris@17 58 $this->createTraitUseAdaptationBuilder('Test', 'foo')
Chris@17 59 ->insteadof('AnotherTrait')
Chris@17 60 ->as('bar')
Chris@17 61 ;
Chris@17 62 }
Chris@17 63
Chris@17 64 public function testInsteadofOnNotPrecedence() {
Chris@17 65 $this->expectException(\LogicException::class);
Chris@17 66 $this->expectExceptionMessage('Cannot add overwritten traits for not precedence adaptation buider');
Chris@17 67 $this->createTraitUseAdaptationBuilder('Test', 'foo')
Chris@17 68 ->as('bar')
Chris@17 69 ->insteadof('AnotherTrait')
Chris@17 70 ;
Chris@17 71 }
Chris@17 72
Chris@17 73 public function testInsteadofWithoutTrait() {
Chris@17 74 $this->expectException(\LogicException::class);
Chris@17 75 $this->expectExceptionMessage('Precedence adaptation must have trait');
Chris@17 76 $this->createTraitUseAdaptationBuilder(null, 'foo')
Chris@17 77 ->insteadof('AnotherTrait')
Chris@17 78 ;
Chris@17 79 }
Chris@17 80
Chris@17 81 public function testMakeOnNotAlias() {
Chris@17 82 $this->expectException(\LogicException::class);
Chris@17 83 $this->expectExceptionMessage('Cannot set access modifier for not alias adaptation buider');
Chris@17 84 $this->createTraitUseAdaptationBuilder('Test', 'foo')
Chris@17 85 ->insteadof('AnotherTrait')
Chris@17 86 ->makePublic()
Chris@17 87 ;
Chris@17 88 }
Chris@17 89
Chris@17 90 public function testMultipleMake() {
Chris@17 91 $this->expectException(\LogicException::class);
Chris@17 92 $this->expectExceptionMessage('Multiple access type modifiers are not allowed');
Chris@17 93 $this->createTraitUseAdaptationBuilder(null, 'foo')
Chris@17 94 ->makePrivate()
Chris@17 95 ->makePublic()
Chris@17 96 ;
Chris@17 97 }
Chris@17 98
Chris@17 99 public function testUndefinedType() {
Chris@17 100 $this->expectException(\LogicException::class);
Chris@17 101 $this->expectExceptionMessage('Type of adaptation is not defined');
Chris@17 102 $this->createTraitUseAdaptationBuilder(null, 'foo')
Chris@17 103 ->getNode()
Chris@17 104 ;
Chris@17 105 }
Chris@17 106 }