Chris@17: createTraitUseAdaptationBuilder(null, 'foo'); Chris@17: Chris@17: $this->assertEquals( Chris@17: new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'), Chris@17: (clone $builder)->as('bar')->getNode() Chris@17: ); Chris@17: Chris@17: $this->assertEquals( Chris@17: new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PUBLIC, null), Chris@17: (clone $builder)->makePublic()->getNode() Chris@17: ); Chris@17: Chris@17: $this->assertEquals( Chris@17: new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PROTECTED, null), Chris@17: (clone $builder)->makeProtected()->getNode() Chris@17: ); Chris@17: Chris@17: $this->assertEquals( Chris@17: new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PRIVATE, null), Chris@17: (clone $builder)->makePrivate()->getNode() Chris@17: ); Chris@17: } Chris@17: Chris@17: public function testInsteadof() { Chris@17: $node = $this->createTraitUseAdaptationBuilder('SomeTrait', 'foo') Chris@17: ->insteadof('AnotherTrait') Chris@17: ->getNode() Chris@17: ; Chris@17: Chris@17: $this->assertEquals( Chris@17: new Stmt\TraitUseAdaptation\Precedence( Chris@17: new Name('SomeTrait'), Chris@17: 'foo', Chris@17: [new Name('AnotherTrait')] Chris@17: ), Chris@17: $node Chris@17: ); Chris@17: } Chris@17: Chris@17: public function testAsOnNotAlias() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Cannot set alias for not alias adaptation buider'); Chris@17: $this->createTraitUseAdaptationBuilder('Test', 'foo') Chris@17: ->insteadof('AnotherTrait') Chris@17: ->as('bar') Chris@17: ; Chris@17: } Chris@17: Chris@17: public function testInsteadofOnNotPrecedence() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Cannot add overwritten traits for not precedence adaptation buider'); Chris@17: $this->createTraitUseAdaptationBuilder('Test', 'foo') Chris@17: ->as('bar') Chris@17: ->insteadof('AnotherTrait') Chris@17: ; Chris@17: } Chris@17: Chris@17: public function testInsteadofWithoutTrait() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Precedence adaptation must have trait'); Chris@17: $this->createTraitUseAdaptationBuilder(null, 'foo') Chris@17: ->insteadof('AnotherTrait') Chris@17: ; Chris@17: } Chris@17: Chris@17: public function testMakeOnNotAlias() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Cannot set access modifier for not alias adaptation buider'); Chris@17: $this->createTraitUseAdaptationBuilder('Test', 'foo') Chris@17: ->insteadof('AnotherTrait') Chris@17: ->makePublic() Chris@17: ; Chris@17: } Chris@17: Chris@17: public function testMultipleMake() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Multiple access type modifiers are not allowed'); Chris@17: $this->createTraitUseAdaptationBuilder(null, 'foo') Chris@17: ->makePrivate() Chris@17: ->makePublic() Chris@17: ; Chris@17: } Chris@17: Chris@17: public function testUndefinedType() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Type of adaptation is not defined'); Chris@17: $this->createTraitUseAdaptationBuilder(null, 'foo') Chris@17: ->getNode() Chris@17: ; Chris@17: } Chris@17: }