Chris@13: createFunctionBuilder('test') Chris@0: ->makeReturnByRef() Chris@0: ->getNode() Chris@0: ; Chris@0: Chris@0: $this->assertEquals( Chris@13: new Stmt\Function_('test', [ Chris@0: 'byRef' => true Chris@13: ]), Chris@0: $node Chris@0: ); Chris@0: } Chris@0: Chris@0: public function testParams() { Chris@13: $param1 = new Node\Param(new Variable('test1')); Chris@13: $param2 = new Node\Param(new Variable('test2')); Chris@13: $param3 = new Node\Param(new Variable('test3')); Chris@0: Chris@0: $node = $this->createFunctionBuilder('test') Chris@0: ->addParam($param1) Chris@13: ->addParams([$param2, $param3]) Chris@0: ->getNode() Chris@0: ; Chris@0: Chris@0: $this->assertEquals( Chris@13: new Stmt\Function_('test', [ Chris@13: 'params' => [$param1, $param2, $param3] Chris@13: ]), Chris@0: $node Chris@0: ); Chris@0: } Chris@0: Chris@0: public function testStmts() { Chris@0: $stmt1 = new Print_(new String_('test1')); Chris@0: $stmt2 = new Print_(new String_('test2')); Chris@0: $stmt3 = new Print_(new String_('test3')); Chris@0: Chris@0: $node = $this->createFunctionBuilder('test') Chris@0: ->addStmt($stmt1) Chris@13: ->addStmts([$stmt2, $stmt3]) Chris@0: ->getNode() Chris@0: ; Chris@0: Chris@0: $this->assertEquals( Chris@13: new Stmt\Function_('test', [ Chris@13: 'stmts' => [ Chris@13: new Stmt\Expression($stmt1), Chris@13: new Stmt\Expression($stmt2), Chris@13: new Stmt\Expression($stmt3), Chris@13: ] Chris@13: ]), Chris@0: $node Chris@0: ); Chris@0: } Chris@0: Chris@0: public function testDocComment() { Chris@0: $node = $this->createFunctionBuilder('test') Chris@0: ->setDocComment('/** Test */') Chris@0: ->getNode(); Chris@0: Chris@13: $this->assertEquals(new Stmt\Function_('test', [], [ Chris@13: 'comments' => [new Comment\Doc('/** Test */')] Chris@13: ]), $node); Chris@0: } Chris@0: Chris@0: public function testReturnType() { Chris@0: $node = $this->createFunctionBuilder('test') Chris@0: ->setReturnType('void') Chris@0: ->getNode(); Chris@0: Chris@13: $this->assertEquals(new Stmt\Function_('test', [ Chris@0: 'returnType' => 'void' Chris@13: ], []), $node); Chris@0: } Chris@0: Chris@0: public function testInvalidNullableVoidType() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('void type cannot be nullable'); Chris@0: $this->createFunctionBuilder('test')->setReturnType('?void'); Chris@0: } Chris@0: Chris@0: public function testInvalidParamError() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Expected parameter node, got "Name"'); Chris@0: $this->createFunctionBuilder('test') Chris@0: ->addParam(new Node\Name('foo')) Chris@0: ; Chris@0: } Chris@13: Chris@13: public function testAddNonStmt() { Chris@17: $this->expectException(\LogicException::class); Chris@17: $this->expectExceptionMessage('Expected statement or expression node'); Chris@13: $this->createFunctionBuilder('test') Chris@13: ->addStmt(new Node\Name('Test')); Chris@13: } Chris@0: }