xref: /aosp_15_r20/external/protobuf/php/tests/GeneratedServiceTest.php (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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