Chris@13: constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier)) Chris@13: ]); Chris@0: Chris@0: $this->assertTrue($node->{'is' . $modifier}()); Chris@0: } Chris@0: Chris@0: public function testNoModifiers() { Chris@13: $node = new ClassMethod('foo', ['type' => 0]); Chris@0: Chris@0: $this->assertTrue($node->isPublic()); Chris@0: $this->assertFalse($node->isProtected()); Chris@0: $this->assertFalse($node->isPrivate()); Chris@0: $this->assertFalse($node->isAbstract()); Chris@0: $this->assertFalse($node->isFinal()); Chris@0: $this->assertFalse($node->isStatic()); Chris@13: $this->assertFalse($node->isMagic()); Chris@0: } Chris@0: Chris@0: public function provideModifiers() { Chris@13: return [ Chris@13: ['public'], Chris@13: ['protected'], Chris@13: ['private'], Chris@13: ['abstract'], Chris@13: ['final'], Chris@13: ['static'], Chris@13: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Checks that implicit public modifier detection for method is working Chris@0: * Chris@0: * @dataProvider implicitPublicModifiers Chris@0: * Chris@13: * @param string $modifier Node type modifier Chris@0: */ Chris@13: public function testImplicitPublic(string $modifier) Chris@0: { Chris@13: $node = new ClassMethod('foo', [ Chris@0: 'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier)) Chris@13: ]); Chris@0: Chris@0: $this->assertTrue($node->isPublic(), 'Node should be implicitly public'); Chris@0: } Chris@0: Chris@0: public function implicitPublicModifiers() { Chris@13: return [ Chris@13: ['abstract'], Chris@13: ['final'], Chris@13: ['static'], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider provideMagics Chris@13: * Chris@13: * @param string $name Node name Chris@13: */ Chris@13: public function testMagic(string $name) { Chris@13: $node = new ClassMethod($name); Chris@13: $this->assertTrue($node->isMagic(), 'Method should be magic'); Chris@13: } Chris@13: Chris@13: public function provideMagics() { Chris@13: return [ Chris@13: ['__construct'], Chris@13: ['__DESTRUCT'], Chris@13: ['__caLL'], Chris@13: ['__callstatic'], Chris@13: ['__get'], Chris@13: ['__set'], Chris@13: ['__isset'], Chris@13: ['__unset'], Chris@13: ['__sleep'], Chris@13: ['__wakeup'], Chris@13: ['__tostring'], Chris@13: ['__set_state'], Chris@13: ['__clone'], Chris@13: ['__invoke'], Chris@13: ['__debuginfo'], Chris@13: ]; Chris@13: } Chris@13: Chris@13: public function testFunctionLike() { Chris@13: $param = new Param(new Variable('a')); Chris@13: $type = new Name('Foo'); Chris@13: $return = new Return_(new Variable('a')); Chris@13: $method = new ClassMethod('test', [ Chris@13: 'byRef' => false, Chris@13: 'params' => [$param], Chris@13: 'returnType' => $type, Chris@13: 'stmts' => [$return], Chris@13: ]); Chris@13: Chris@13: $this->assertFalse($method->returnsByRef()); Chris@13: $this->assertSame([$param], $method->getParams()); Chris@13: $this->assertSame($type, $method->getReturnType()); Chris@13: $this->assertSame([$return], $method->getStmts()); Chris@13: Chris@13: $method = new ClassMethod('test', [ Chris@13: 'byRef' => true, Chris@13: 'stmts' => null, Chris@13: ]); Chris@13: Chris@13: $this->assertTrue($method->returnsByRef()); Chris@13: $this->assertNull($method->getStmts()); Chris@0: } Chris@0: }