|  | <?php | 
|  |  | 
|  | require_once('test_base.php'); | 
|  | require_once('test_util.php'); | 
|  |  | 
|  | use Google\Protobuf\Internal\RepeatedField; | 
|  | use Google\Protobuf\Internal\MapField; | 
|  | use Google\Protobuf\Internal\GPBType; | 
|  | use Foo\Greeter; | 
|  | use Foo\HelloRequest; | 
|  | use Foo\HelloReply; | 
|  |  | 
|  | class GeneratedServiceTest extends TestBase | 
|  | { | 
|  | /** | 
|  | * @var \ReflectionClass | 
|  | */ | 
|  | private $serviceClass; | 
|  |  | 
|  | /** | 
|  | * @var \ReflectionClass | 
|  | */ | 
|  | private $namespacedServiceClass; | 
|  |  | 
|  | /** | 
|  | * @var array | 
|  | */ | 
|  | private $methodNames = [ | 
|  | 'sayHello', | 
|  | 'sayHelloAgain' | 
|  | ]; | 
|  |  | 
|  | public function setUp() | 
|  | { | 
|  | parent::setUp(); | 
|  |  | 
|  | $this->serviceClass = new ReflectionClass('Foo\GreeterInterface'); | 
|  |  | 
|  | $this->namespacedServiceClass = new ReflectionClass('Bar\OtherGreeterInterface'); | 
|  | } | 
|  |  | 
|  | public function testIsInterface() | 
|  | { | 
|  | $this->assertTrue($this->serviceClass->isInterface()); | 
|  | } | 
|  |  | 
|  | public function testPhpDocForClass() | 
|  | { | 
|  | $this->assertContains('foo.Greeter', $this->serviceClass->getDocComment()); | 
|  | } | 
|  |  | 
|  | public function testPhpDocForNamespacedClass() | 
|  | { | 
|  | $this->assertContains('foo.OtherGreeter', $this->namespacedServiceClass->getDocComment()); | 
|  | } | 
|  |  | 
|  | public function testServiceMethodsAreGenerated() | 
|  | { | 
|  | $this->assertCount(count($this->methodNames), $this->serviceClass->getMethods()); | 
|  | foreach ($this->methodNames as $methodName) { | 
|  | $this->assertTrue($this->serviceClass->hasMethod($methodName)); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function testPhpDocForServiceMethod() | 
|  | { | 
|  | foreach ($this->methodNames as $methodName) { | 
|  | $docComment = $this->serviceClass->getMethod($methodName)->getDocComment(); | 
|  | $this->assertContains($methodName, $docComment); | 
|  | $this->assertContains('@param \Foo\HelloRequest $request', $docComment); | 
|  | $this->assertContains('@return \Foo\HelloReply', $docComment); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function testPhpDocForServiceMethodInNamespacedClass() | 
|  | { | 
|  | foreach ($this->methodNames as $methodName) { | 
|  | $docComment = $this->namespacedServiceClass->getMethod($methodName)->getDocComment(); | 
|  | $this->assertContains($methodName, $docComment); | 
|  | $this->assertContains('@param \Foo\HelloRequest $request', $docComment); | 
|  | $this->assertContains('@return \Foo\HelloReply', $docComment); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function testParamForServiceMethod() | 
|  | { | 
|  | foreach ($this->methodNames as $methodName) { | 
|  | $method = $this->serviceClass->getMethod($methodName); | 
|  | $this->assertCount(1, $method->getParameters()); | 
|  | $param = $method->getParameters()[0]; | 
|  | $this->assertFalse($param->isOptional()); | 
|  | $this->assertSame('request', $param->getName()); | 
|  | // ReflectionParameter::getType only exists in PHP 7+, so get the type from __toString | 
|  | $this->assertContains('Foo\HelloRequest $request', (string) $param); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function testParamForServiceMethodInNamespacedClass() | 
|  | { | 
|  | foreach ($this->methodNames as $methodName) { | 
|  | $method = $this->serviceClass->getMethod($methodName); | 
|  | $this->assertCount(1, $method->getParameters()); | 
|  | $param = $method->getParameters()[0]; | 
|  | $this->assertFalse($param->isOptional()); | 
|  | $this->assertSame('request', $param->getName()); | 
|  | // ReflectionParameter::getType only exists in PHP 7+, so get the type from __toString | 
|  | $this->assertContains('Foo\HelloRequest $request', (string) $param); | 
|  | } | 
|  | } | 
|  | } |