Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.5 KiB
111 lines
3.5 KiB
7 years ago
|
<?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);
|
||
|
}
|
||
|
}
|
||
|
}
|