1*1b3f573fSAndroid Build Coastguard Worker<?php 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_base.php'); 4*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_util.php'); 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\RepeatedField; 7*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\MapField; 8*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBType; 9*1b3f573fSAndroid Build Coastguard Workeruse Foo\Greeter; 10*1b3f573fSAndroid Build Coastguard Workeruse Foo\HelloRequest; 11*1b3f573fSAndroid Build Coastguard Workeruse Foo\HelloReply; 12*1b3f573fSAndroid Build Coastguard Worker 13*1b3f573fSAndroid Build Coastguard Workerclass GeneratedServiceTest extends TestBase 14*1b3f573fSAndroid Build Coastguard Worker{ 15*1b3f573fSAndroid Build Coastguard Worker /** 16*1b3f573fSAndroid Build Coastguard Worker * @var \ReflectionClass 17*1b3f573fSAndroid Build Coastguard Worker */ 18*1b3f573fSAndroid Build Coastguard Worker private $serviceClass; 19*1b3f573fSAndroid Build Coastguard Worker 20*1b3f573fSAndroid Build Coastguard Worker /** 21*1b3f573fSAndroid Build Coastguard Worker * @var \ReflectionClass 22*1b3f573fSAndroid Build Coastguard Worker */ 23*1b3f573fSAndroid Build Coastguard Worker private $namespacedServiceClass; 24*1b3f573fSAndroid Build Coastguard Worker 25*1b3f573fSAndroid Build Coastguard Worker /** 26*1b3f573fSAndroid Build Coastguard Worker * @var array 27*1b3f573fSAndroid Build Coastguard Worker */ 28*1b3f573fSAndroid Build Coastguard Worker private $methodNames = [ 29*1b3f573fSAndroid Build Coastguard Worker 'sayHello', 30*1b3f573fSAndroid Build Coastguard Worker 'sayHelloAgain' 31*1b3f573fSAndroid Build Coastguard Worker ]; 32*1b3f573fSAndroid Build Coastguard Worker 33*1b3f573fSAndroid Build Coastguard Worker /** 34*1b3f573fSAndroid Build Coastguard Worker * Avoid calling setUp, which has void return type (not avalialbe in php7.0). 35*1b3f573fSAndroid Build Coastguard Worker * 36*1b3f573fSAndroid Build Coastguard Worker * @before 37*1b3f573fSAndroid Build Coastguard Worker */ 38*1b3f573fSAndroid Build Coastguard Worker public function setUpTest() 39*1b3f573fSAndroid Build Coastguard Worker { 40*1b3f573fSAndroid Build Coastguard Worker $this->serviceClass = new ReflectionClass('Foo\GreeterInterface'); 41*1b3f573fSAndroid Build Coastguard Worker 42*1b3f573fSAndroid Build Coastguard Worker $this->namespacedServiceClass = new ReflectionClass('Bar\OtherGreeterInterface'); 43*1b3f573fSAndroid Build Coastguard Worker } 44*1b3f573fSAndroid Build Coastguard Worker 45*1b3f573fSAndroid Build Coastguard Worker public function testIsInterface() 46*1b3f573fSAndroid Build Coastguard Worker { 47*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($this->serviceClass->isInterface()); 48*1b3f573fSAndroid Build Coastguard Worker } 49*1b3f573fSAndroid Build Coastguard Worker 50*1b3f573fSAndroid Build Coastguard Worker public function testPhpDocForClass() 51*1b3f573fSAndroid Build Coastguard Worker { 52*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 53*1b3f573fSAndroid Build Coastguard Worker 'foo.Greeter', $this->serviceClass->getDocComment()); 54*1b3f573fSAndroid Build Coastguard Worker } 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Worker public function testPhpDocForNamespacedClass() 57*1b3f573fSAndroid Build Coastguard Worker { 58*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 59*1b3f573fSAndroid Build Coastguard Worker 'foo.OtherGreeter', $this->namespacedServiceClass->getDocComment()); 60*1b3f573fSAndroid Build Coastguard Worker } 61*1b3f573fSAndroid Build Coastguard Worker 62*1b3f573fSAndroid Build Coastguard Worker public function testServiceMethodsAreGenerated() 63*1b3f573fSAndroid Build Coastguard Worker { 64*1b3f573fSAndroid Build Coastguard Worker $this->assertCount( 65*1b3f573fSAndroid Build Coastguard Worker count($this->methodNames), $this->serviceClass->getMethods()); 66*1b3f573fSAndroid Build Coastguard Worker foreach ($this->methodNames as $methodName) { 67*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($this->serviceClass->hasMethod($methodName)); 68*1b3f573fSAndroid Build Coastguard Worker } 69*1b3f573fSAndroid Build Coastguard Worker } 70*1b3f573fSAndroid Build Coastguard Worker 71*1b3f573fSAndroid Build Coastguard Worker public function testPhpDocForServiceMethod() 72*1b3f573fSAndroid Build Coastguard Worker { 73*1b3f573fSAndroid Build Coastguard Worker foreach ($this->methodNames as $methodName) { 74*1b3f573fSAndroid Build Coastguard Worker $docComment = 75*1b3f573fSAndroid Build Coastguard Worker $this->serviceClass->getMethod($methodName)->getDocComment(); 76*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains($methodName, $docComment); 77*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 78*1b3f573fSAndroid Build Coastguard Worker '@param \Foo\HelloRequest $request', $docComment); 79*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 80*1b3f573fSAndroid Build Coastguard Worker '@return \Foo\HelloReply', $docComment); 81*1b3f573fSAndroid Build Coastguard Worker } 82*1b3f573fSAndroid Build Coastguard Worker } 83*1b3f573fSAndroid Build Coastguard Worker 84*1b3f573fSAndroid Build Coastguard Worker public function testPhpDocForServiceMethodInNamespacedClass() 85*1b3f573fSAndroid Build Coastguard Worker { 86*1b3f573fSAndroid Build Coastguard Worker foreach ($this->methodNames as $methodName) { 87*1b3f573fSAndroid Build Coastguard Worker $docComment = 88*1b3f573fSAndroid Build Coastguard Worker $this->namespacedServiceClass->getMethod( 89*1b3f573fSAndroid Build Coastguard Worker $methodName)->getDocComment(); 90*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains($methodName, $docComment); 91*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 92*1b3f573fSAndroid Build Coastguard Worker '@param \Foo\HelloRequest $request', $docComment); 93*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 94*1b3f573fSAndroid Build Coastguard Worker '@return \Foo\HelloReply', $docComment); 95*1b3f573fSAndroid Build Coastguard Worker } 96*1b3f573fSAndroid Build Coastguard Worker } 97*1b3f573fSAndroid Build Coastguard Worker 98*1b3f573fSAndroid Build Coastguard Worker public function testParamForServiceMethod() 99*1b3f573fSAndroid Build Coastguard Worker { 100*1b3f573fSAndroid Build Coastguard Worker foreach ($this->methodNames as $methodName) { 101*1b3f573fSAndroid Build Coastguard Worker $method = $this->serviceClass->getMethod($methodName); 102*1b3f573fSAndroid Build Coastguard Worker $this->assertCount(1, $method->getParameters()); 103*1b3f573fSAndroid Build Coastguard Worker $param = $method->getParameters()[0]; 104*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($param->isOptional()); 105*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('request', $param->getName()); 106*1b3f573fSAndroid Build Coastguard Worker // ReflectionParameter::getType only exists in PHP 7+, so get the 107*1b3f573fSAndroid Build Coastguard Worker // type from __toString 108*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 109*1b3f573fSAndroid Build Coastguard Worker 'Foo\HelloRequest $request', (string) $param); 110*1b3f573fSAndroid Build Coastguard Worker } 111*1b3f573fSAndroid Build Coastguard Worker } 112*1b3f573fSAndroid Build Coastguard Worker 113*1b3f573fSAndroid Build Coastguard Worker public function testParamForServiceMethodInNamespacedClass() 114*1b3f573fSAndroid Build Coastguard Worker { 115*1b3f573fSAndroid Build Coastguard Worker foreach ($this->methodNames as $methodName) { 116*1b3f573fSAndroid Build Coastguard Worker $method = $this->serviceClass->getMethod($methodName); 117*1b3f573fSAndroid Build Coastguard Worker $this->assertCount(1, $method->getParameters()); 118*1b3f573fSAndroid Build Coastguard Worker $param = $method->getParameters()[0]; 119*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($param->isOptional()); 120*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('request', $param->getName()); 121*1b3f573fSAndroid Build Coastguard Worker // ReflectionParameter::getType only exists in PHP 7+, so get the 122*1b3f573fSAndroid Build Coastguard Worker // type from __toString 123*1b3f573fSAndroid Build Coastguard Worker $this->assertStringContains( 124*1b3f573fSAndroid Build Coastguard Worker 'Foo\HelloRequest $request', (string) $param); 125*1b3f573fSAndroid Build Coastguard Worker } 126*1b3f573fSAndroid Build Coastguard Worker } 127*1b3f573fSAndroid Build Coastguard Worker} 128