xref: /aosp_15_r20/external/protobuf/php/tests/WellKnownTest.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 Foo\TestMessage;
7*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestImportDescriptorProto;
8*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Any;
9*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Api;
10*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\BoolValue;
11*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\BytesValue;
12*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\DoubleValue;
13*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Duration;
14*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Enum;
15*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\EnumValue;
16*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Field;
17*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\FieldMask;
18*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Field\Cardinality;
19*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Field\Kind;
20*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\FloatValue;
21*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\GPBEmpty;
22*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Int32Value;
23*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Int64Value;
24*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\ListValue;
25*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Method;
26*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Mixin;
27*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\NullValue;
28*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Option;
29*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\SourceContext;
30*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\StringValue;
31*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Struct;
32*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Syntax;
33*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Timestamp;
34*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Type;
35*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\UInt32Value;
36*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\UInt64Value;
37*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Value;
38*1b3f573fSAndroid Build Coastguard Worker
39*1b3f573fSAndroid Build Coastguard Workerclass NotMessage {}
40*1b3f573fSAndroid Build Coastguard Worker
41*1b3f573fSAndroid Build Coastguard Workerclass WellKnownTest extends TestBase {
42*1b3f573fSAndroid Build Coastguard Worker
43*1b3f573fSAndroid Build Coastguard Worker    public function testEmpty()
44*1b3f573fSAndroid Build Coastguard Worker    {
45*1b3f573fSAndroid Build Coastguard Worker        $msg = new GPBEmpty();
46*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($msg instanceof \Google\Protobuf\Internal\Message);
47*1b3f573fSAndroid Build Coastguard Worker    }
48*1b3f573fSAndroid Build Coastguard Worker
49*1b3f573fSAndroid Build Coastguard Worker    public function testImportDescriptorProto()
50*1b3f573fSAndroid Build Coastguard Worker    {
51*1b3f573fSAndroid Build Coastguard Worker        $msg = new TestImportDescriptorProto();
52*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
53*1b3f573fSAndroid Build Coastguard Worker    }
54*1b3f573fSAndroid Build Coastguard Worker
55*1b3f573fSAndroid Build Coastguard Worker    public function testAny()
56*1b3f573fSAndroid Build Coastguard Worker    {
57*1b3f573fSAndroid Build Coastguard Worker        // Create embed message
58*1b3f573fSAndroid Build Coastguard Worker        $embed = new TestMessage();
59*1b3f573fSAndroid Build Coastguard Worker        $this->setFields($embed);
60*1b3f573fSAndroid Build Coastguard Worker        $data = $embed->serializeToString();
61*1b3f573fSAndroid Build Coastguard Worker
62*1b3f573fSAndroid Build Coastguard Worker        // Set any via normal setter.
63*1b3f573fSAndroid Build Coastguard Worker        $any = new Any();
64*1b3f573fSAndroid Build Coastguard Worker
65*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(
66*1b3f573fSAndroid Build Coastguard Worker            $any, $any->setTypeUrl("type.googleapis.com/foo.TestMessage"));
67*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("type.googleapis.com/foo.TestMessage",
68*1b3f573fSAndroid Build Coastguard Worker                          $any->getTypeUrl());
69*1b3f573fSAndroid Build Coastguard Worker
70*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($any, $any->setValue($data));
71*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($data, $any->getValue());
72*1b3f573fSAndroid Build Coastguard Worker
73*1b3f573fSAndroid Build Coastguard Worker        // Test unpack.
74*1b3f573fSAndroid Build Coastguard Worker        $msg = $any->unpack();
75*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($msg instanceof TestMessage);
76*1b3f573fSAndroid Build Coastguard Worker        $this->expectFields($msg);
77*1b3f573fSAndroid Build Coastguard Worker
78*1b3f573fSAndroid Build Coastguard Worker        // Test pack.
79*1b3f573fSAndroid Build Coastguard Worker        $any = new Any();
80*1b3f573fSAndroid Build Coastguard Worker        $any->pack($embed);
81*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($data, $any->getValue());
82*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("type.googleapis.com/foo.TestMessage", $any->getTypeUrl());
83*1b3f573fSAndroid Build Coastguard Worker
84*1b3f573fSAndroid Build Coastguard Worker        // Test is.
85*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($any->is(TestMessage::class));
86*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($any->is(Any::class));
87*1b3f573fSAndroid Build Coastguard Worker    }
88*1b3f573fSAndroid Build Coastguard Worker
89*1b3f573fSAndroid Build Coastguard Worker    public function testAnyUnpackInvalidTypeUrl()
90*1b3f573fSAndroid Build Coastguard Worker    {
91*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(Exception::class);
92*1b3f573fSAndroid Build Coastguard Worker
93*1b3f573fSAndroid Build Coastguard Worker        $any = new Any();
94*1b3f573fSAndroid Build Coastguard Worker        $any->setTypeUrl("invalid");
95*1b3f573fSAndroid Build Coastguard Worker        $any->unpack();
96*1b3f573fSAndroid Build Coastguard Worker    }
97*1b3f573fSAndroid Build Coastguard Worker
98*1b3f573fSAndroid Build Coastguard Worker    public function testAnyUnpackMessageNotAdded()
99*1b3f573fSAndroid Build Coastguard Worker    {
100*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(Exception::class);
101*1b3f573fSAndroid Build Coastguard Worker
102*1b3f573fSAndroid Build Coastguard Worker        $any = new Any();
103*1b3f573fSAndroid Build Coastguard Worker        $any->setTypeUrl("type.googleapis.com/MessageNotAdded");
104*1b3f573fSAndroid Build Coastguard Worker        $any->unpack();
105*1b3f573fSAndroid Build Coastguard Worker    }
106*1b3f573fSAndroid Build Coastguard Worker
107*1b3f573fSAndroid Build Coastguard Worker    public function testAnyUnpackDecodeError()
108*1b3f573fSAndroid Build Coastguard Worker    {
109*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(Exception::class);
110*1b3f573fSAndroid Build Coastguard Worker
111*1b3f573fSAndroid Build Coastguard Worker        $any = new Any();
112*1b3f573fSAndroid Build Coastguard Worker        $any->setTypeUrl("type.googleapis.com/foo.TestMessage");
113*1b3f573fSAndroid Build Coastguard Worker        $any->setValue("abc");
114*1b3f573fSAndroid Build Coastguard Worker        $any->unpack();
115*1b3f573fSAndroid Build Coastguard Worker    }
116*1b3f573fSAndroid Build Coastguard Worker
117*1b3f573fSAndroid Build Coastguard Worker    public function testApi()
118*1b3f573fSAndroid Build Coastguard Worker    {
119*1b3f573fSAndroid Build Coastguard Worker        $m = new Api();
120*1b3f573fSAndroid Build Coastguard Worker
121*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
122*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
123*1b3f573fSAndroid Build Coastguard Worker
124*1b3f573fSAndroid Build Coastguard Worker        $m->setMethods([new Method()]);
125*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getMethods()));
126*1b3f573fSAndroid Build Coastguard Worker
127*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
128*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
129*1b3f573fSAndroid Build Coastguard Worker
130*1b3f573fSAndroid Build Coastguard Worker        $m->setVersion("a");
131*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getVersion());
132*1b3f573fSAndroid Build Coastguard Worker
133*1b3f573fSAndroid Build Coastguard Worker        $m->setSourceContext(new SourceContext());
134*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getSourceContext()));
135*1b3f573fSAndroid Build Coastguard Worker
136*1b3f573fSAndroid Build Coastguard Worker        $m->setMixins([new Mixin()]);
137*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getMixins()));
138*1b3f573fSAndroid Build Coastguard Worker
139*1b3f573fSAndroid Build Coastguard Worker        $m->setSyntax(Syntax::SYNTAX_PROTO2);
140*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(Syntax::SYNTAX_PROTO2, $m->getSyntax());
141*1b3f573fSAndroid Build Coastguard Worker
142*1b3f573fSAndroid Build Coastguard Worker        $m = new Method();
143*1b3f573fSAndroid Build Coastguard Worker
144*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
145*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
146*1b3f573fSAndroid Build Coastguard Worker
147*1b3f573fSAndroid Build Coastguard Worker        $m->setRequestTypeUrl("a");
148*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getRequestTypeUrl());
149*1b3f573fSAndroid Build Coastguard Worker
150*1b3f573fSAndroid Build Coastguard Worker        $m->setRequestStreaming(true);
151*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getRequestStreaming());
152*1b3f573fSAndroid Build Coastguard Worker
153*1b3f573fSAndroid Build Coastguard Worker        $m->setResponseTypeUrl("a");
154*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getResponseTypeUrl());
155*1b3f573fSAndroid Build Coastguard Worker
156*1b3f573fSAndroid Build Coastguard Worker        $m->setResponseStreaming(true);
157*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getResponseStreaming());
158*1b3f573fSAndroid Build Coastguard Worker
159*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
160*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
161*1b3f573fSAndroid Build Coastguard Worker
162*1b3f573fSAndroid Build Coastguard Worker        $m = new Mixin();
163*1b3f573fSAndroid Build Coastguard Worker
164*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
165*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
166*1b3f573fSAndroid Build Coastguard Worker
167*1b3f573fSAndroid Build Coastguard Worker        $m->setRoot("a");
168*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getRoot());
169*1b3f573fSAndroid Build Coastguard Worker    }
170*1b3f573fSAndroid Build Coastguard Worker
171*1b3f573fSAndroid Build Coastguard Worker    public function testEnum()
172*1b3f573fSAndroid Build Coastguard Worker    {
173*1b3f573fSAndroid Build Coastguard Worker        $m = new Enum();
174*1b3f573fSAndroid Build Coastguard Worker
175*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
176*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
177*1b3f573fSAndroid Build Coastguard Worker
178*1b3f573fSAndroid Build Coastguard Worker        $m->setEnumvalue([new EnumValue()]);
179*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getEnumvalue()));
180*1b3f573fSAndroid Build Coastguard Worker
181*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
182*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
183*1b3f573fSAndroid Build Coastguard Worker
184*1b3f573fSAndroid Build Coastguard Worker        $m->setSourceContext(new SourceContext());
185*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getSourceContext()));
186*1b3f573fSAndroid Build Coastguard Worker
187*1b3f573fSAndroid Build Coastguard Worker        $m->setSyntax(Syntax::SYNTAX_PROTO2);
188*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(Syntax::SYNTAX_PROTO2, $m->getSyntax());
189*1b3f573fSAndroid Build Coastguard Worker    }
190*1b3f573fSAndroid Build Coastguard Worker
191*1b3f573fSAndroid Build Coastguard Worker    public function testEnumValue()
192*1b3f573fSAndroid Build Coastguard Worker    {
193*1b3f573fSAndroid Build Coastguard Worker        $m = new EnumValue();
194*1b3f573fSAndroid Build Coastguard Worker
195*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
196*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
197*1b3f573fSAndroid Build Coastguard Worker
198*1b3f573fSAndroid Build Coastguard Worker        $m->setNumber(1);
199*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getNumber());
200*1b3f573fSAndroid Build Coastguard Worker
201*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
202*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
203*1b3f573fSAndroid Build Coastguard Worker    }
204*1b3f573fSAndroid Build Coastguard Worker
205*1b3f573fSAndroid Build Coastguard Worker    public function testField()
206*1b3f573fSAndroid Build Coastguard Worker    {
207*1b3f573fSAndroid Build Coastguard Worker        $m = new Field();
208*1b3f573fSAndroid Build Coastguard Worker
209*1b3f573fSAndroid Build Coastguard Worker        $m->setKind(Kind::TYPE_DOUBLE);
210*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(Kind::TYPE_DOUBLE, $m->getKind());
211*1b3f573fSAndroid Build Coastguard Worker
212*1b3f573fSAndroid Build Coastguard Worker        $m->setCardinality(Cardinality::CARDINALITY_OPTIONAL);
213*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(Cardinality::CARDINALITY_OPTIONAL, $m->getCardinality());
214*1b3f573fSAndroid Build Coastguard Worker
215*1b3f573fSAndroid Build Coastguard Worker        $m->setNumber(1);
216*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getNumber());
217*1b3f573fSAndroid Build Coastguard Worker
218*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
219*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
220*1b3f573fSAndroid Build Coastguard Worker
221*1b3f573fSAndroid Build Coastguard Worker        $m->setTypeUrl("a");
222*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getTypeUrl());
223*1b3f573fSAndroid Build Coastguard Worker
224*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofIndex(1);
225*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOneofIndex());
226*1b3f573fSAndroid Build Coastguard Worker
227*1b3f573fSAndroid Build Coastguard Worker        $m->setPacked(true);
228*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getPacked());
229*1b3f573fSAndroid Build Coastguard Worker
230*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
231*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
232*1b3f573fSAndroid Build Coastguard Worker
233*1b3f573fSAndroid Build Coastguard Worker        $m->setJsonName("a");
234*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getJsonName());
235*1b3f573fSAndroid Build Coastguard Worker
236*1b3f573fSAndroid Build Coastguard Worker        $m->setDefaultValue("a");
237*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getDefaultValue());
238*1b3f573fSAndroid Build Coastguard Worker    }
239*1b3f573fSAndroid Build Coastguard Worker
240*1b3f573fSAndroid Build Coastguard Worker    public function testFieldMask()
241*1b3f573fSAndroid Build Coastguard Worker    {
242*1b3f573fSAndroid Build Coastguard Worker        $m = new FieldMask();
243*1b3f573fSAndroid Build Coastguard Worker        $m->setPaths(["a"]);
244*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getPaths()));
245*1b3f573fSAndroid Build Coastguard Worker    }
246*1b3f573fSAndroid Build Coastguard Worker
247*1b3f573fSAndroid Build Coastguard Worker    public function testOption()
248*1b3f573fSAndroid Build Coastguard Worker    {
249*1b3f573fSAndroid Build Coastguard Worker        $m = new Option();
250*1b3f573fSAndroid Build Coastguard Worker
251*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
252*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
253*1b3f573fSAndroid Build Coastguard Worker
254*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(new Any());
255*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getValue()));
256*1b3f573fSAndroid Build Coastguard Worker    }
257*1b3f573fSAndroid Build Coastguard Worker
258*1b3f573fSAndroid Build Coastguard Worker    public function testSourceContext()
259*1b3f573fSAndroid Build Coastguard Worker    {
260*1b3f573fSAndroid Build Coastguard Worker        $m = new SourceContext();
261*1b3f573fSAndroid Build Coastguard Worker        $m->setFileName("a");
262*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getFileName());
263*1b3f573fSAndroid Build Coastguard Worker    }
264*1b3f573fSAndroid Build Coastguard Worker
265*1b3f573fSAndroid Build Coastguard Worker    public function testStruct()
266*1b3f573fSAndroid Build Coastguard Worker    {
267*1b3f573fSAndroid Build Coastguard Worker        $m = new ListValue();
268*1b3f573fSAndroid Build Coastguard Worker        $m->setValues([new Value()]);
269*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getValues()));
270*1b3f573fSAndroid Build Coastguard Worker
271*1b3f573fSAndroid Build Coastguard Worker        $m = new Value();
272*1b3f573fSAndroid Build Coastguard Worker
273*1b3f573fSAndroid Build Coastguard Worker        $this->assertNull($m->getStructValue());
274*1b3f573fSAndroid Build Coastguard Worker
275*1b3f573fSAndroid Build Coastguard Worker        $m->setNullValue(NullValue::NULL_VALUE);
276*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(NullValue::NULL_VALUE, $m->getNullValue());
277*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("null_value", $m->getKind());
278*1b3f573fSAndroid Build Coastguard Worker
279*1b3f573fSAndroid Build Coastguard Worker        $m->setNumberValue(1.0);
280*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1.0, $m->getNumberValue());
281*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("number_value", $m->getKind());
282*1b3f573fSAndroid Build Coastguard Worker
283*1b3f573fSAndroid Build Coastguard Worker        $m->setStringValue("a");
284*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getStringValue());
285*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("string_value", $m->getKind());
286*1b3f573fSAndroid Build Coastguard Worker
287*1b3f573fSAndroid Build Coastguard Worker        $m->setBoolValue(true);
288*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getBoolValue());
289*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("bool_value", $m->getKind());
290*1b3f573fSAndroid Build Coastguard Worker
291*1b3f573fSAndroid Build Coastguard Worker        $m->setStructValue(new Struct());
292*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getStructValue()));
293*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("struct_value", $m->getKind());
294*1b3f573fSAndroid Build Coastguard Worker
295*1b3f573fSAndroid Build Coastguard Worker        $m->setListValue(new ListValue());
296*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getListValue()));
297*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("list_value", $m->getKind());
298*1b3f573fSAndroid Build Coastguard Worker
299*1b3f573fSAndroid Build Coastguard Worker        $m = new Struct();
300*1b3f573fSAndroid Build Coastguard Worker        $m->setFields(array("a"=>new Value()));
301*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getFields()));
302*1b3f573fSAndroid Build Coastguard Worker    }
303*1b3f573fSAndroid Build Coastguard Worker
304*1b3f573fSAndroid Build Coastguard Worker    public function testTimestamp()
305*1b3f573fSAndroid Build Coastguard Worker    {
306*1b3f573fSAndroid Build Coastguard Worker        $timestamp = new Timestamp();
307*1b3f573fSAndroid Build Coastguard Worker
308*1b3f573fSAndroid Build Coastguard Worker        $timestamp->setSeconds(1);
309*1b3f573fSAndroid Build Coastguard Worker        $timestamp->setNanos(2);
310*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1, $timestamp->getSeconds());
311*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $timestamp->getNanos());
312*1b3f573fSAndroid Build Coastguard Worker
313*1b3f573fSAndroid Build Coastguard Worker        date_default_timezone_set('UTC');
314*1b3f573fSAndroid Build Coastguard Worker        $from = new DateTime('2011-01-01T15:03:01.012345UTC');
315*1b3f573fSAndroid Build Coastguard Worker        $timestamp->fromDateTime($from);
316*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals($from->format('U'), $timestamp->getSeconds());
317*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1000 * $from->format('u'), $timestamp->getNanos());
318*1b3f573fSAndroid Build Coastguard Worker
319*1b3f573fSAndroid Build Coastguard Worker        $to = $timestamp->toDateTime();
320*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(\DateTime::class, get_class($to));
321*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($from->format('U'), $to->format('U'));
322*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($from->format('u'), $to->format('u'));
323*1b3f573fSAndroid Build Coastguard Worker    }
324*1b3f573fSAndroid Build Coastguard Worker
325*1b3f573fSAndroid Build Coastguard Worker    public function testType()
326*1b3f573fSAndroid Build Coastguard Worker    {
327*1b3f573fSAndroid Build Coastguard Worker        $m = new Type();
328*1b3f573fSAndroid Build Coastguard Worker
329*1b3f573fSAndroid Build Coastguard Worker        $m->setName("a");
330*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getName());
331*1b3f573fSAndroid Build Coastguard Worker
332*1b3f573fSAndroid Build Coastguard Worker        $m->setFields([new Field()]);
333*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getFields()));
334*1b3f573fSAndroid Build Coastguard Worker
335*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofs(["a"]);
336*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOneofs()));
337*1b3f573fSAndroid Build Coastguard Worker
338*1b3f573fSAndroid Build Coastguard Worker        $m->setOptions([new Option()]);
339*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getOptions()));
340*1b3f573fSAndroid Build Coastguard Worker
341*1b3f573fSAndroid Build Coastguard Worker        $m->setSourceContext(new SourceContext());
342*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse(is_null($m->getSourceContext()));
343*1b3f573fSAndroid Build Coastguard Worker
344*1b3f573fSAndroid Build Coastguard Worker        $m->setSyntax(Syntax::SYNTAX_PROTO2);
345*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(Syntax::SYNTAX_PROTO2, $m->getSyntax());
346*1b3f573fSAndroid Build Coastguard Worker    }
347*1b3f573fSAndroid Build Coastguard Worker
348*1b3f573fSAndroid Build Coastguard Worker    public function testDuration()
349*1b3f573fSAndroid Build Coastguard Worker    {
350*1b3f573fSAndroid Build Coastguard Worker        $duration = new Duration();
351*1b3f573fSAndroid Build Coastguard Worker
352*1b3f573fSAndroid Build Coastguard Worker        $duration->setSeconds(1);
353*1b3f573fSAndroid Build Coastguard Worker        $duration->setNanos(2);
354*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1, $duration->getSeconds());
355*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $duration->getNanos());
356*1b3f573fSAndroid Build Coastguard Worker    }
357*1b3f573fSAndroid Build Coastguard Worker
358*1b3f573fSAndroid Build Coastguard Worker    public function testWrappers()
359*1b3f573fSAndroid Build Coastguard Worker    {
360*1b3f573fSAndroid Build Coastguard Worker        $m = new DoubleValue();
361*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1.0);
362*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1.0, $m->getValue());
363*1b3f573fSAndroid Build Coastguard Worker
364*1b3f573fSAndroid Build Coastguard Worker        $m = new FloatValue();
365*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1.0);
366*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1.0, $m->getValue());
367*1b3f573fSAndroid Build Coastguard Worker
368*1b3f573fSAndroid Build Coastguard Worker        $m = new Int64Value();
369*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1);
370*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1, $m->getValue());
371*1b3f573fSAndroid Build Coastguard Worker
372*1b3f573fSAndroid Build Coastguard Worker        $m = new UInt64Value();
373*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1);
374*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1, $m->getValue());
375*1b3f573fSAndroid Build Coastguard Worker
376*1b3f573fSAndroid Build Coastguard Worker        $m = new Int32Value();
377*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1);
378*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getValue());
379*1b3f573fSAndroid Build Coastguard Worker
380*1b3f573fSAndroid Build Coastguard Worker        $m = new UInt32Value();
381*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(1);
382*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getValue());
383*1b3f573fSAndroid Build Coastguard Worker
384*1b3f573fSAndroid Build Coastguard Worker        $m = new BoolValue();
385*1b3f573fSAndroid Build Coastguard Worker        $m->setValue(true);
386*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getValue());
387*1b3f573fSAndroid Build Coastguard Worker
388*1b3f573fSAndroid Build Coastguard Worker        $m = new StringValue();
389*1b3f573fSAndroid Build Coastguard Worker        $m->setValue("a");
390*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getValue());
391*1b3f573fSAndroid Build Coastguard Worker
392*1b3f573fSAndroid Build Coastguard Worker        $m = new BytesValue();
393*1b3f573fSAndroid Build Coastguard Worker        $m->setValue("a");
394*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("a", $m->getValue());
395*1b3f573fSAndroid Build Coastguard Worker    }
396*1b3f573fSAndroid Build Coastguard Worker
397*1b3f573fSAndroid Build Coastguard Worker    /**
398*1b3f573fSAndroid Build Coastguard Worker     * @dataProvider enumNameValueConversionDataProvider
399*1b3f573fSAndroid Build Coastguard Worker     */
400*1b3f573fSAndroid Build Coastguard Worker    public function testEnumNameValueConversion($class)
401*1b3f573fSAndroid Build Coastguard Worker    {
402*1b3f573fSAndroid Build Coastguard Worker        $reflectionClass = new ReflectionClass($class);
403*1b3f573fSAndroid Build Coastguard Worker        $constants = $reflectionClass->getConstants();
404*1b3f573fSAndroid Build Coastguard Worker        foreach ($constants as $k => $v) {
405*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame($k, $class::name($v));
406*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame($v, $class::value($k));
407*1b3f573fSAndroid Build Coastguard Worker        }
408*1b3f573fSAndroid Build Coastguard Worker    }
409*1b3f573fSAndroid Build Coastguard Worker
410*1b3f573fSAndroid Build Coastguard Worker    public function enumNameValueConversionDataProvider()
411*1b3f573fSAndroid Build Coastguard Worker    {
412*1b3f573fSAndroid Build Coastguard Worker        return [
413*1b3f573fSAndroid Build Coastguard Worker            ['\Google\Protobuf\Field\Cardinality'],
414*1b3f573fSAndroid Build Coastguard Worker            ['\Google\Protobuf\Field\Kind'],
415*1b3f573fSAndroid Build Coastguard Worker            ['\Google\Protobuf\NullValue'],
416*1b3f573fSAndroid Build Coastguard Worker            ['\Google\Protobuf\Syntax'],
417*1b3f573fSAndroid Build Coastguard Worker        ];
418*1b3f573fSAndroid Build Coastguard Worker    }
419*1b3f573fSAndroid Build Coastguard Worker}
420