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