|
|
|
<?php
|
|
|
|
|
|
|
|
require_once('test_base.php');
|
|
|
|
require_once('test_util.php');
|
|
|
|
|
|
|
|
use Google\Protobuf\GPBEmpty;
|
|
|
|
use Google\Protobuf\Any;
|
|
|
|
use Google\Protobuf\Duration;
|
|
|
|
use Google\Protobuf\Timestamp;
|
|
|
|
|
|
|
|
use Foo\TestMessage;
|
|
|
|
|
|
|
|
class NotMessage {}
|
|
|
|
|
|
|
|
class WellKnownTest extends TestBase {
|
|
|
|
|
|
|
|
public function testNone()
|
|
|
|
{
|
|
|
|
$msg = new GPBEmpty();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testImportDescriptorProto()
|
|
|
|
{
|
|
|
|
$msg = new TestImportDescriptorProto();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testAny()
|
|
|
|
{
|
|
|
|
// Create embed message
|
|
|
|
$embed = new TestMessage();
|
|
|
|
$this->setFields($embed);
|
|
|
|
$data = $embed->serializeToString();
|
|
|
|
|
|
|
|
// Set any via normal setter.
|
|
|
|
$any = new Any();
|
|
|
|
|
|
|
|
$this->assertSame(
|
|
|
|
$any, $any->setTypeUrl("type.googleapis.com/foo.TestMessage"));
|
|
|
|
$this->assertSame("type.googleapis.com/foo.TestMessage",
|
|
|
|
$any->getTypeUrl());
|
|
|
|
|
|
|
|
$this->assertSame($any, $any->setValue($data));
|
|
|
|
$this->assertSame($data, $any->getValue());
|
|
|
|
|
|
|
|
// Test unpack.
|
|
|
|
$msg = $any->unpack();
|
|
|
|
$this->assertTrue($msg instanceof TestMessage);
|
|
|
|
$this->expectFields($msg);
|
|
|
|
|
|
|
|
// Test pack.
|
|
|
|
$any = new Any();
|
|
|
|
$any->pack($embed);
|
|
|
|
$this->assertSame($data, $any->getValue());
|
|
|
|
$this->assertSame("type.googleapis.com/foo.TestMessage", $any->getTypeUrl());
|
|
|
|
|
|
|
|
// Test is.
|
|
|
|
$this->assertTrue($any->is(TestMessage::class));
|
|
|
|
$this->assertFalse($any->is(Any::class));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException Exception
|
|
|
|
*/
|
|
|
|
public function testAnyUnpackInvalidTypeUrl()
|
|
|
|
{
|
|
|
|
$any = new Any();
|
|
|
|
$any->setTypeUrl("invalid");
|
|
|
|
$any->unpack();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException Exception
|
|
|
|
*/
|
|
|
|
public function testAnyUnpackMessageNotAdded()
|
|
|
|
{
|
|
|
|
$any = new Any();
|
|
|
|
$any->setTypeUrl("type.googleapis.com/MessageNotAdded");
|
|
|
|
$any->unpack();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @expectedException Exception
|
|
|
|
*/
|
|
|
|
public function testAnyUnpackDecodeError()
|
|
|
|
{
|
|
|
|
$any = new Any();
|
|
|
|
$any->setTypeUrl("type.googleapis.com/foo.TestMessage");
|
|
|
|
$any->setValue("abc");
|
|
|
|
$any->unpack();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testTimestamp()
|
|
|
|
{
|
|
|
|
$timestamp = new Timestamp();
|
|
|
|
|
|
|
|
$timestamp->setSeconds(1);
|
|
|
|
$timestamp->setNanos(2);
|
|
|
|
$this->assertEquals(1, $timestamp->getSeconds());
|
|
|
|
$this->assertSame(2, $timestamp->getNanos());
|
|
|
|
|
|
|
|
date_default_timezone_set('UTC');
|
|
|
|
$from = new DateTime('2011-01-01T15:03:01.012345UTC');
|
|
|
|
$timestamp->fromDateTime($from);
|
|
|
|
$this->assertEquals($from->format('U'), $timestamp->getSeconds());
|
|
|
|
$this->assertSame(0, $timestamp->getNanos());
|
|
|
|
|
|
|
|
$to = $timestamp->toDateTime();
|
|
|
|
$this->assertSame(\DateTime::class, get_class($to));
|
|
|
|
$this->assertSame($from->format('U'), $to->format('U'));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testDuration()
|
|
|
|
{
|
|
|
|
$duration = new Duration();
|
|
|
|
|
|
|
|
$duration->setSeconds(1);
|
|
|
|
$duration->setNanos(2);
|
|
|
|
$this->assertEquals(1, $duration->getSeconds());
|
|
|
|
$this->assertSame(2, $duration->getNanos());
|
|
|
|
}
|
|
|
|
}
|