xref: /aosp_15_r20/external/protobuf/php/tests/GeneratedClassTest.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 Bar\TestLegacyMessage;
10*1b3f573fSAndroid Build Coastguard Workeruse Bar\TestLegacyMessage_NestedEnum;
11*1b3f573fSAndroid Build Coastguard Workeruse Bar\TestLegacyMessage_NestedMessage;
12*1b3f573fSAndroid Build Coastguard Workeruse Foo\Test32Fields;
13*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestEnum;
14*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestIncludeNamespaceMessage;
15*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestIncludePrefixMessage;
16*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage;
17*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage\Sub;
18*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage_Sub;
19*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage\NestedEnum;
20*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestReverseFieldOrder;
21*1b3f573fSAndroid Build Coastguard Workeruse Foo\testLowerCaseMessage;
22*1b3f573fSAndroid Build Coastguard Workeruse Foo\testLowerCaseEnum;
23*1b3f573fSAndroid Build Coastguard Workeruse PBEmpty\PBEcho\TestEmptyPackage;
24*1b3f573fSAndroid Build Coastguard Workeruse Php\Test\TestNamespace;
25*1b3f573fSAndroid Build Coastguard Worker
26*1b3f573fSAndroid Build Coastguard Worker# This is not allowed, but we at least shouldn't crash.
27*1b3f573fSAndroid Build Coastguard Workerclass C extends \Google\Protobuf\Internal\Message {
28*1b3f573fSAndroid Build Coastguard Worker    public function __construct($data = null) {
29*1b3f573fSAndroid Build Coastguard Worker        parent::__construct($data);
30*1b3f573fSAndroid Build Coastguard Worker    }
31*1b3f573fSAndroid Build Coastguard Worker}
32*1b3f573fSAndroid Build Coastguard Worker
33*1b3f573fSAndroid Build Coastguard Workerclass GeneratedClassTest extends TestBase
34*1b3f573fSAndroid Build Coastguard Worker{
35*1b3f573fSAndroid Build Coastguard Worker
36*1b3f573fSAndroid Build Coastguard Worker    #########################################################
37*1b3f573fSAndroid Build Coastguard Worker    # Test field accessors.
38*1b3f573fSAndroid Build Coastguard Worker    #########################################################
39*1b3f573fSAndroid Build Coastguard Worker
40*1b3f573fSAndroid Build Coastguard Worker    public function testSetterGetter()
41*1b3f573fSAndroid Build Coastguard Worker    {
42*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
43*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(1);
44*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalInt32());
45*1b3f573fSAndroid Build Coastguard Worker    }
46*1b3f573fSAndroid Build Coastguard Worker
47*1b3f573fSAndroid Build Coastguard Worker    #########################################################
48*1b3f573fSAndroid Build Coastguard Worker    # Test int32 field.
49*1b3f573fSAndroid Build Coastguard Worker    #########################################################
50*1b3f573fSAndroid Build Coastguard Worker
51*1b3f573fSAndroid Build Coastguard Worker    public function testInt32Field()
52*1b3f573fSAndroid Build Coastguard Worker    {
53*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
54*1b3f573fSAndroid Build Coastguard Worker
55*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
56*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MAX_INT32);
57*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT32, $m->getOptionalInt32());
58*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MIN_INT32);
59*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalInt32());
60*1b3f573fSAndroid Build Coastguard Worker
61*1b3f573fSAndroid Build Coastguard Worker        // Set float.
62*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(1.1);
63*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalInt32());
64*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MAX_INT32_FLOAT);
65*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT32, $m->getOptionalInt32());
66*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MIN_INT32_FLOAT);
67*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalInt32());
68*1b3f573fSAndroid Build Coastguard Worker
69*1b3f573fSAndroid Build Coastguard Worker        // Set string.
70*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32('2');
71*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $m->getOptionalInt32());
72*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32('3.1');
73*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, $m->getOptionalInt32());
74*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MAX_INT32_STRING);
75*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT32, $m->getOptionalInt32());
76*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32(MIN_INT32_STRING);
77*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalInt32());
78*1b3f573fSAndroid Build Coastguard Worker    }
79*1b3f573fSAndroid Build Coastguard Worker
80*1b3f573fSAndroid Build Coastguard Worker    #########################################################
81*1b3f573fSAndroid Build Coastguard Worker    # Test deprecated int32 field.
82*1b3f573fSAndroid Build Coastguard Worker    #########################################################
83*1b3f573fSAndroid Build Coastguard Worker
84*1b3f573fSAndroid Build Coastguard Worker    public function testDeprecatedInt32Field()
85*1b3f573fSAndroid Build Coastguard Worker    {
86*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
87*1b3f573fSAndroid Build Coastguard Worker
88*1b3f573fSAndroid Build Coastguard Worker        // temporarily change error handler to capture the deprecated errors
89*1b3f573fSAndroid Build Coastguard Worker        $deprecationCount = 0;
90*1b3f573fSAndroid Build Coastguard Worker        set_error_handler(function ($errno, $errstr) use (&$deprecationCount) {
91*1b3f573fSAndroid Build Coastguard Worker            if ($errstr === 'deprecated_optional_int32 is deprecated.') {
92*1b3f573fSAndroid Build Coastguard Worker                $deprecationCount++;
93*1b3f573fSAndroid Build Coastguard Worker            }
94*1b3f573fSAndroid Build Coastguard Worker        }, E_USER_DEPRECATED);
95*1b3f573fSAndroid Build Coastguard Worker
96*1b3f573fSAndroid Build Coastguard Worker        // default test set
97*1b3f573fSAndroid Build Coastguard Worker        $m->setDeprecatedOptionalInt32(MAX_INT32);
98*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT32, $m->getDeprecatedOptionalInt32());
99*1b3f573fSAndroid Build Coastguard Worker        $m->setDeprecatedOptionalInt32(MIN_INT32);
100*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getDeprecatedOptionalInt32());
101*1b3f573fSAndroid Build Coastguard Worker
102*1b3f573fSAndroid Build Coastguard Worker        restore_error_handler();
103*1b3f573fSAndroid Build Coastguard Worker
104*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(4, $deprecationCount);
105*1b3f573fSAndroid Build Coastguard Worker    }
106*1b3f573fSAndroid Build Coastguard Worker
107*1b3f573fSAndroid Build Coastguard Worker    #########################################################
108*1b3f573fSAndroid Build Coastguard Worker    # Test optional int32 field.
109*1b3f573fSAndroid Build Coastguard Worker    #########################################################
110*1b3f573fSAndroid Build Coastguard Worker
111*1b3f573fSAndroid Build Coastguard Worker    public function testOptionalInt32Field()
112*1b3f573fSAndroid Build Coastguard Worker    {
113*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
114*1b3f573fSAndroid Build Coastguard Worker
115*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasTrueOptionalInt32());
116*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, $m->getTrueOptionalInt32());
117*1b3f573fSAndroid Build Coastguard Worker
118*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
119*1b3f573fSAndroid Build Coastguard Worker        $m->setTrueOptionalInt32(MAX_INT32);
120*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->hasTrueOptionalInt32());
121*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT32, $m->getTrueOptionalInt32());
122*1b3f573fSAndroid Build Coastguard Worker
123*1b3f573fSAndroid Build Coastguard Worker        // Clear integer.
124*1b3f573fSAndroid Build Coastguard Worker        $m->clearTrueOptionalInt32();
125*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasTrueOptionalInt32());
126*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, $m->getTrueOptionalInt32());
127*1b3f573fSAndroid Build Coastguard Worker    }
128*1b3f573fSAndroid Build Coastguard Worker
129*1b3f573fSAndroid Build Coastguard Worker    #########################################################
130*1b3f573fSAndroid Build Coastguard Worker    # Test uint32 field.
131*1b3f573fSAndroid Build Coastguard Worker    #########################################################
132*1b3f573fSAndroid Build Coastguard Worker
133*1b3f573fSAndroid Build Coastguard Worker    public function testUint32Field()
134*1b3f573fSAndroid Build Coastguard Worker    {
135*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
136*1b3f573fSAndroid Build Coastguard Worker
137*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
138*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MAX_UINT32);
139*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
140*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(-1);
141*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
142*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MIN_UINT32);
143*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalUint32());
144*1b3f573fSAndroid Build Coastguard Worker
145*1b3f573fSAndroid Build Coastguard Worker        // Set float.
146*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(1.1);
147*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalUint32());
148*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MAX_UINT32_FLOAT);
149*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
150*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(-1.0);
151*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
152*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MIN_UINT32_FLOAT);
153*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalUint32());
154*1b3f573fSAndroid Build Coastguard Worker
155*1b3f573fSAndroid Build Coastguard Worker        // Set string.
156*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32('2');
157*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $m->getOptionalUint32());
158*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32('3.1');
159*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, $m->getOptionalUint32());
160*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MAX_UINT32_STRING);
161*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
162*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32('-1.0');
163*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(-1, $m->getOptionalUint32());
164*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint32(MIN_UINT32_STRING);
165*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MIN_INT32, $m->getOptionalUint32());
166*1b3f573fSAndroid Build Coastguard Worker    }
167*1b3f573fSAndroid Build Coastguard Worker
168*1b3f573fSAndroid Build Coastguard Worker    #########################################################
169*1b3f573fSAndroid Build Coastguard Worker    # Test int64 field.
170*1b3f573fSAndroid Build Coastguard Worker    #########################################################
171*1b3f573fSAndroid Build Coastguard Worker
172*1b3f573fSAndroid Build Coastguard Worker    public function testInt64Field()
173*1b3f573fSAndroid Build Coastguard Worker    {
174*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
175*1b3f573fSAndroid Build Coastguard Worker
176*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
177*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64(MAX_INT64);
178*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(MAX_INT64, $m->getOptionalInt64());
179*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64(MIN_INT64);
180*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(MIN_INT64, $m->getOptionalInt64());
181*1b3f573fSAndroid Build Coastguard Worker
182*1b3f573fSAndroid Build Coastguard Worker        // Set float.
183*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64(1.1);
184*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
185*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('1', $m->getOptionalInt64());
186*1b3f573fSAndroid Build Coastguard Worker        } else {
187*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(1, $m->getOptionalInt64());
188*1b3f573fSAndroid Build Coastguard Worker        }
189*1b3f573fSAndroid Build Coastguard Worker
190*1b3f573fSAndroid Build Coastguard Worker        // Set string.
191*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64('2');
192*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
193*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('2', $m->getOptionalInt64());
194*1b3f573fSAndroid Build Coastguard Worker        } else {
195*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(2, $m->getOptionalInt64());
196*1b3f573fSAndroid Build Coastguard Worker        }
197*1b3f573fSAndroid Build Coastguard Worker
198*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64('3.1');
199*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
200*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('3', $m->getOptionalInt64());
201*1b3f573fSAndroid Build Coastguard Worker        } else {
202*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(3, $m->getOptionalInt64());
203*1b3f573fSAndroid Build Coastguard Worker        }
204*1b3f573fSAndroid Build Coastguard Worker
205*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64(MAX_INT64_STRING);
206*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
207*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_INT64_STRING, $m->getOptionalInt64());
208*1b3f573fSAndroid Build Coastguard Worker        } else {
209*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_INT64, $m->getOptionalInt64());
210*1b3f573fSAndroid Build Coastguard Worker        }
211*1b3f573fSAndroid Build Coastguard Worker
212*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt64(MIN_INT64_STRING);
213*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
214*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MIN_INT64_STRING, $m->getOptionalInt64());
215*1b3f573fSAndroid Build Coastguard Worker        } else {
216*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MIN_INT64, $m->getOptionalInt64());
217*1b3f573fSAndroid Build Coastguard Worker        }
218*1b3f573fSAndroid Build Coastguard Worker    }
219*1b3f573fSAndroid Build Coastguard Worker
220*1b3f573fSAndroid Build Coastguard Worker    #########################################################
221*1b3f573fSAndroid Build Coastguard Worker    # Test uint64 field.
222*1b3f573fSAndroid Build Coastguard Worker    #########################################################
223*1b3f573fSAndroid Build Coastguard Worker
224*1b3f573fSAndroid Build Coastguard Worker    public function testUint64Field()
225*1b3f573fSAndroid Build Coastguard Worker    {
226*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
227*1b3f573fSAndroid Build Coastguard Worker
228*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
229*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint64(MAX_UINT64);
230*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
231*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
232*1b3f573fSAndroid Build Coastguard Worker        } else {
233*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
234*1b3f573fSAndroid Build Coastguard Worker        }
235*1b3f573fSAndroid Build Coastguard Worker
236*1b3f573fSAndroid Build Coastguard Worker        // Set float.
237*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint64(1.1);
238*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
239*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('1', $m->getOptionalUint64());
240*1b3f573fSAndroid Build Coastguard Worker        } else {
241*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(1, $m->getOptionalUint64());
242*1b3f573fSAndroid Build Coastguard Worker        }
243*1b3f573fSAndroid Build Coastguard Worker
244*1b3f573fSAndroid Build Coastguard Worker        // Set string.
245*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint64('2');
246*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
247*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('2', $m->getOptionalUint64());
248*1b3f573fSAndroid Build Coastguard Worker        } else {
249*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(2, $m->getOptionalUint64());
250*1b3f573fSAndroid Build Coastguard Worker        }
251*1b3f573fSAndroid Build Coastguard Worker
252*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint64('3.1');
253*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
254*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame('3', $m->getOptionalUint64());
255*1b3f573fSAndroid Build Coastguard Worker        } else {
256*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(3, $m->getOptionalUint64());
257*1b3f573fSAndroid Build Coastguard Worker        }
258*1b3f573fSAndroid Build Coastguard Worker
259*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalUint64(MAX_UINT64_STRING);
260*1b3f573fSAndroid Build Coastguard Worker        if (PHP_INT_SIZE == 4) {
261*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
262*1b3f573fSAndroid Build Coastguard Worker        } else {
263*1b3f573fSAndroid Build Coastguard Worker            $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
264*1b3f573fSAndroid Build Coastguard Worker        }
265*1b3f573fSAndroid Build Coastguard Worker    }
266*1b3f573fSAndroid Build Coastguard Worker
267*1b3f573fSAndroid Build Coastguard Worker    #########################################################
268*1b3f573fSAndroid Build Coastguard Worker    # Test enum field.
269*1b3f573fSAndroid Build Coastguard Worker    #########################################################
270*1b3f573fSAndroid Build Coastguard Worker
271*1b3f573fSAndroid Build Coastguard Worker    public function testEnumField()
272*1b3f573fSAndroid Build Coastguard Worker    {
273*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
274*1b3f573fSAndroid Build Coastguard Worker
275*1b3f573fSAndroid Build Coastguard Worker        // Set enum.
276*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalEnum(TestEnum::ONE);
277*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
278*1b3f573fSAndroid Build Coastguard Worker
279*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
280*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalEnum(1);
281*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
282*1b3f573fSAndroid Build Coastguard Worker
283*1b3f573fSAndroid Build Coastguard Worker        // Set float.
284*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalEnum(1.1);
285*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
286*1b3f573fSAndroid Build Coastguard Worker
287*1b3f573fSAndroid Build Coastguard Worker        // Set string.
288*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalEnum("1");
289*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
290*1b3f573fSAndroid Build Coastguard Worker
291*1b3f573fSAndroid Build Coastguard Worker        // Test Enum methods
292*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals('ONE', TestEnum::name(1));
293*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(1, TestEnum::value('ONE'));
294*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals('ECHO', TestEnum::name(3));
295*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(3, TestEnum::value('ECHO'));
296*1b3f573fSAndroid Build Coastguard Worker        // Backwards compat value lookup by prefixed-name.
297*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(3, TestEnum::value('PBECHO'));
298*1b3f573fSAndroid Build Coastguard Worker    }
299*1b3f573fSAndroid Build Coastguard Worker
300*1b3f573fSAndroid Build Coastguard Worker    public function testInvalidEnumValueThrowsException()
301*1b3f573fSAndroid Build Coastguard Worker    {
302*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(UnexpectedValueException::class);
303*1b3f573fSAndroid Build Coastguard Worker        $this->expectExceptionMessage(
304*1b3f573fSAndroid Build Coastguard Worker            'Enum Foo\TestEnum has no name defined for value -1');
305*1b3f573fSAndroid Build Coastguard Worker
306*1b3f573fSAndroid Build Coastguard Worker        TestEnum::name(-1);
307*1b3f573fSAndroid Build Coastguard Worker    }
308*1b3f573fSAndroid Build Coastguard Worker
309*1b3f573fSAndroid Build Coastguard Worker    public function testInvalidEnumNameThrowsException()
310*1b3f573fSAndroid Build Coastguard Worker    {
311*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(UnexpectedValueException::class);
312*1b3f573fSAndroid Build Coastguard Worker        $this->expectExceptionMessage(
313*1b3f573fSAndroid Build Coastguard Worker            'Enum Foo\TestEnum has no value defined for name DOES_NOT_EXIST');
314*1b3f573fSAndroid Build Coastguard Worker
315*1b3f573fSAndroid Build Coastguard Worker        TestEnum::value('DOES_NOT_EXIST');
316*1b3f573fSAndroid Build Coastguard Worker    }
317*1b3f573fSAndroid Build Coastguard Worker
318*1b3f573fSAndroid Build Coastguard Worker    public function testNestedEnum()
319*1b3f573fSAndroid Build Coastguard Worker    {
320*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
321*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalNestedEnum(NestedEnum::ZERO);
322*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
323*1b3f573fSAndroid Build Coastguard Worker    }
324*1b3f573fSAndroid Build Coastguard Worker
325*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyNestedEnum()
326*1b3f573fSAndroid Build Coastguard Worker    {
327*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
328*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalNestedEnum(\Foo\TestMessage_NestedEnum::ZERO);
329*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
330*1b3f573fSAndroid Build Coastguard Worker    }
331*1b3f573fSAndroid Build Coastguard Worker
332*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyTypehintWithNestedEnums()
333*1b3f573fSAndroid Build Coastguard Worker    {
334*1b3f573fSAndroid Build Coastguard Worker        $this->legacyEnum(new TestLegacyMessage\NestedEnum);
335*1b3f573fSAndroid Build Coastguard Worker    }
336*1b3f573fSAndroid Build Coastguard Worker
337*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyReadOnlyMessage()
338*1b3f573fSAndroid Build Coastguard Worker    {
339*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(class_exists('\Upper\READONLY'));
340*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(class_exists('\Lower\readonly'));
341*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(class_exists('\Php\Test\TestNamespace\PBEmpty\ReadOnly'));
342*1b3f573fSAndroid Build Coastguard Worker    }
343*1b3f573fSAndroid Build Coastguard Worker
344*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyReadOnlyEnum()
345*1b3f573fSAndroid Build Coastguard Worker    {
346*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(class_exists('\Upper_enum\READONLY'));
347*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(class_exists('\Lower_enum\readonly'));
348*1b3f573fSAndroid Build Coastguard Worker    }
349*1b3f573fSAndroid Build Coastguard Worker
350*1b3f573fSAndroid Build Coastguard Worker    private function legacyEnum(TestLegacyMessage_NestedEnum $enum)
351*1b3f573fSAndroid Build Coastguard Worker    {
352*1b3f573fSAndroid Build Coastguard Worker        // If we made it here without a PHP Fatal error, the typehint worked
353*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
354*1b3f573fSAndroid Build Coastguard Worker    }
355*1b3f573fSAndroid Build Coastguard Worker
356*1b3f573fSAndroid Build Coastguard Worker    #########################################################
357*1b3f573fSAndroid Build Coastguard Worker    # Test float field.
358*1b3f573fSAndroid Build Coastguard Worker    #########################################################
359*1b3f573fSAndroid Build Coastguard Worker
360*1b3f573fSAndroid Build Coastguard Worker    public function testFloatField()
361*1b3f573fSAndroid Build Coastguard Worker    {
362*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
363*1b3f573fSAndroid Build Coastguard Worker
364*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
365*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalFloat(1);
366*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(1.0, $m->getOptionalFloat(), MAX_FLOAT_DIFF);
367*1b3f573fSAndroid Build Coastguard Worker
368*1b3f573fSAndroid Build Coastguard Worker        // Set float.
369*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalFloat(1.1);
370*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(1.1, $m->getOptionalFloat(), MAX_FLOAT_DIFF);
371*1b3f573fSAndroid Build Coastguard Worker
372*1b3f573fSAndroid Build Coastguard Worker        // Set string.
373*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalFloat('2');
374*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(2.0, $m->getOptionalFloat(), MAX_FLOAT_DIFF);
375*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalFloat('3.1');
376*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(3.1, $m->getOptionalFloat(), MAX_FLOAT_DIFF);
377*1b3f573fSAndroid Build Coastguard Worker    }
378*1b3f573fSAndroid Build Coastguard Worker
379*1b3f573fSAndroid Build Coastguard Worker    #########################################################
380*1b3f573fSAndroid Build Coastguard Worker    # Test double field.
381*1b3f573fSAndroid Build Coastguard Worker    #########################################################
382*1b3f573fSAndroid Build Coastguard Worker
383*1b3f573fSAndroid Build Coastguard Worker    public function testDoubleField()
384*1b3f573fSAndroid Build Coastguard Worker    {
385*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
386*1b3f573fSAndroid Build Coastguard Worker
387*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
388*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalDouble(1);
389*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(1.0, $m->getOptionalDouble(), MAX_FLOAT_DIFF);
390*1b3f573fSAndroid Build Coastguard Worker
391*1b3f573fSAndroid Build Coastguard Worker        // Set float.
392*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalDouble(1.1);
393*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(1.1, $m->getOptionalDouble(), MAX_FLOAT_DIFF);
394*1b3f573fSAndroid Build Coastguard Worker
395*1b3f573fSAndroid Build Coastguard Worker        // Set string.
396*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalDouble('2');
397*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(2.0, $m->getOptionalDouble(), MAX_FLOAT_DIFF);
398*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalDouble('3.1');
399*1b3f573fSAndroid Build Coastguard Worker        $this->assertFloatEquals(3.1, $m->getOptionalDouble(), MAX_FLOAT_DIFF);
400*1b3f573fSAndroid Build Coastguard Worker    }
401*1b3f573fSAndroid Build Coastguard Worker
402*1b3f573fSAndroid Build Coastguard Worker    #########################################################
403*1b3f573fSAndroid Build Coastguard Worker    # Test bool field.
404*1b3f573fSAndroid Build Coastguard Worker    #########################################################
405*1b3f573fSAndroid Build Coastguard Worker
406*1b3f573fSAndroid Build Coastguard Worker    public function testBoolField()
407*1b3f573fSAndroid Build Coastguard Worker    {
408*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
409*1b3f573fSAndroid Build Coastguard Worker
410*1b3f573fSAndroid Build Coastguard Worker        // Set bool.
411*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBool(true);
412*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getOptionalBool());
413*1b3f573fSAndroid Build Coastguard Worker
414*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
415*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBool(-1);
416*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getOptionalBool());
417*1b3f573fSAndroid Build Coastguard Worker
418*1b3f573fSAndroid Build Coastguard Worker        // Set float.
419*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBool(1.1);
420*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(true, $m->getOptionalBool());
421*1b3f573fSAndroid Build Coastguard Worker
422*1b3f573fSAndroid Build Coastguard Worker        // Set string.
423*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBool('');
424*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(false, $m->getOptionalBool());
425*1b3f573fSAndroid Build Coastguard Worker    }
426*1b3f573fSAndroid Build Coastguard Worker
427*1b3f573fSAndroid Build Coastguard Worker    #########################################################
428*1b3f573fSAndroid Build Coastguard Worker    # Test string field.
429*1b3f573fSAndroid Build Coastguard Worker    #########################################################
430*1b3f573fSAndroid Build Coastguard Worker
431*1b3f573fSAndroid Build Coastguard Worker    public function testStringField()
432*1b3f573fSAndroid Build Coastguard Worker    {
433*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
434*1b3f573fSAndroid Build Coastguard Worker
435*1b3f573fSAndroid Build Coastguard Worker        // Set string.
436*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalString('abc');
437*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('abc', $m->getOptionalString());
438*1b3f573fSAndroid Build Coastguard Worker
439*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
440*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalString(1);
441*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1', $m->getOptionalString());
442*1b3f573fSAndroid Build Coastguard Worker
443*1b3f573fSAndroid Build Coastguard Worker        // Set double.
444*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalString(1.1);
445*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1.1', $m->getOptionalString());
446*1b3f573fSAndroid Build Coastguard Worker
447*1b3f573fSAndroid Build Coastguard Worker        // Set bool.
448*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalString(true);
449*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1', $m->getOptionalString());
450*1b3f573fSAndroid Build Coastguard Worker    }
451*1b3f573fSAndroid Build Coastguard Worker
452*1b3f573fSAndroid Build Coastguard Worker    #########################################################
453*1b3f573fSAndroid Build Coastguard Worker    # Test bytes field.
454*1b3f573fSAndroid Build Coastguard Worker    #########################################################
455*1b3f573fSAndroid Build Coastguard Worker
456*1b3f573fSAndroid Build Coastguard Worker    public function testBytesField()
457*1b3f573fSAndroid Build Coastguard Worker    {
458*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
459*1b3f573fSAndroid Build Coastguard Worker
460*1b3f573fSAndroid Build Coastguard Worker        // Set string.
461*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBytes('abc');
462*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('abc', $m->getOptionalBytes());
463*1b3f573fSAndroid Build Coastguard Worker
464*1b3f573fSAndroid Build Coastguard Worker        // Set integer.
465*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBytes(1);
466*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1', $m->getOptionalBytes());
467*1b3f573fSAndroid Build Coastguard Worker
468*1b3f573fSAndroid Build Coastguard Worker        // Set double.
469*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBytes(1.1);
470*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1.1', $m->getOptionalBytes());
471*1b3f573fSAndroid Build Coastguard Worker
472*1b3f573fSAndroid Build Coastguard Worker        // Set bool.
473*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBytes(true);
474*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('1', $m->getOptionalBytes());
475*1b3f573fSAndroid Build Coastguard Worker    }
476*1b3f573fSAndroid Build Coastguard Worker
477*1b3f573fSAndroid Build Coastguard Worker      public function testBytesFieldInvalidUTF8Success()
478*1b3f573fSAndroid Build Coastguard Worker      {
479*1b3f573fSAndroid Build Coastguard Worker          $m = new TestMessage();
480*1b3f573fSAndroid Build Coastguard Worker          $hex = hex2bin("ff");
481*1b3f573fSAndroid Build Coastguard Worker          $m->setOptionalBytes($hex);
482*1b3f573fSAndroid Build Coastguard Worker          $this->assertTrue(true);
483*1b3f573fSAndroid Build Coastguard Worker      }
484*1b3f573fSAndroid Build Coastguard Worker
485*1b3f573fSAndroid Build Coastguard Worker    #########################################################
486*1b3f573fSAndroid Build Coastguard Worker    # Test message field.
487*1b3f573fSAndroid Build Coastguard Worker    #########################################################
488*1b3f573fSAndroid Build Coastguard Worker
489*1b3f573fSAndroid Build Coastguard Worker    public function testMessageField()
490*1b3f573fSAndroid Build Coastguard Worker    {
491*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
492*1b3f573fSAndroid Build Coastguard Worker
493*1b3f573fSAndroid Build Coastguard Worker        $this->assertNull($m->getOptionalMessage());
494*1b3f573fSAndroid Build Coastguard Worker
495*1b3f573fSAndroid Build Coastguard Worker        $sub_m = new Sub();
496*1b3f573fSAndroid Build Coastguard Worker        $sub_m->setA(1);
497*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalMessage($sub_m);
498*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalMessage()->getA());
499*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->hasOptionalMessage());
500*1b3f573fSAndroid Build Coastguard Worker
501*1b3f573fSAndroid Build Coastguard Worker        $null = null;
502*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalMessage($null);
503*1b3f573fSAndroid Build Coastguard Worker        $this->assertNull($m->getOptionalMessage());
504*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOptionalMessage());
505*1b3f573fSAndroid Build Coastguard Worker    }
506*1b3f573fSAndroid Build Coastguard Worker
507*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyMessageField()
508*1b3f573fSAndroid Build Coastguard Worker    {
509*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
510*1b3f573fSAndroid Build Coastguard Worker
511*1b3f573fSAndroid Build Coastguard Worker        $sub_m = new TestMessage_Sub();
512*1b3f573fSAndroid Build Coastguard Worker        $sub_m->setA(1);
513*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalMessage($sub_m);
514*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalMessage()->getA());
515*1b3f573fSAndroid Build Coastguard Worker
516*1b3f573fSAndroid Build Coastguard Worker        $null = null;
517*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalMessage($null);
518*1b3f573fSAndroid Build Coastguard Worker        $this->assertNull($m->getOptionalMessage());
519*1b3f573fSAndroid Build Coastguard Worker    }
520*1b3f573fSAndroid Build Coastguard Worker
521*1b3f573fSAndroid Build Coastguard Worker    public function testLegacyTypehintWithNestedMessages()
522*1b3f573fSAndroid Build Coastguard Worker    {
523*1b3f573fSAndroid Build Coastguard Worker        $this->legacyMessage(new TestLegacyMessage\NestedMessage);
524*1b3f573fSAndroid Build Coastguard Worker    }
525*1b3f573fSAndroid Build Coastguard Worker
526*1b3f573fSAndroid Build Coastguard Worker    private function legacyMessage(TestLegacyMessage_NestedMessage $sub)
527*1b3f573fSAndroid Build Coastguard Worker    {
528*1b3f573fSAndroid Build Coastguard Worker        // If we made it here without a PHP Fatal error, the typehint worked
529*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
530*1b3f573fSAndroid Build Coastguard Worker    }
531*1b3f573fSAndroid Build Coastguard Worker
532*1b3f573fSAndroid Build Coastguard Worker    #########################################################
533*1b3f573fSAndroid Build Coastguard Worker    # Test repeated field.
534*1b3f573fSAndroid Build Coastguard Worker    #########################################################
535*1b3f573fSAndroid Build Coastguard Worker
536*1b3f573fSAndroid Build Coastguard Worker    public function testRepeatedField()
537*1b3f573fSAndroid Build Coastguard Worker    {
538*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
539*1b3f573fSAndroid Build Coastguard Worker
540*1b3f573fSAndroid Build Coastguard Worker        $repeated_int32 = new RepeatedField(GPBType::INT32);
541*1b3f573fSAndroid Build Coastguard Worker        $m->setRepeatedInt32($repeated_int32);
542*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($repeated_int32, $m->getRepeatedInt32());
543*1b3f573fSAndroid Build Coastguard Worker    }
544*1b3f573fSAndroid Build Coastguard Worker
545*1b3f573fSAndroid Build Coastguard Worker    public function testRepeatedFieldViaArray()
546*1b3f573fSAndroid Build Coastguard Worker    {
547*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
548*1b3f573fSAndroid Build Coastguard Worker
549*1b3f573fSAndroid Build Coastguard Worker        $arr = array();
550*1b3f573fSAndroid Build Coastguard Worker        $m->setRepeatedInt32($arr);
551*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, count($m->getRepeatedInt32()));
552*1b3f573fSAndroid Build Coastguard Worker
553*1b3f573fSAndroid Build Coastguard Worker        $arr = array(1, 2.1, "3");
554*1b3f573fSAndroid Build Coastguard Worker        $m->setRepeatedInt32($arr);
555*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->getRepeatedInt32() instanceof RepeatedField);
556*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("Google\Protobuf\Internal\RepeatedField",
557*1b3f573fSAndroid Build Coastguard Worker                          get_class($m->getRepeatedInt32()));
558*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, count($m->getRepeatedInt32()));
559*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getRepeatedInt32()[0]);
560*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $m->getRepeatedInt32()[1]);
561*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, $m->getRepeatedInt32()[2]);
562*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($arr instanceof RepeatedField);
563*1b3f573fSAndroid Build Coastguard Worker    }
564*1b3f573fSAndroid Build Coastguard Worker
565*1b3f573fSAndroid Build Coastguard Worker    #########################################################
566*1b3f573fSAndroid Build Coastguard Worker    # Test map field.
567*1b3f573fSAndroid Build Coastguard Worker    #########################################################
568*1b3f573fSAndroid Build Coastguard Worker
569*1b3f573fSAndroid Build Coastguard Worker    public function testMapField()
570*1b3f573fSAndroid Build Coastguard Worker    {
571*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
572*1b3f573fSAndroid Build Coastguard Worker
573*1b3f573fSAndroid Build Coastguard Worker        $map_int32_int32 = new MapField(GPBType::INT32, GPBType::INT32);
574*1b3f573fSAndroid Build Coastguard Worker        $m->setMapInt32Int32($map_int32_int32);
575*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($map_int32_int32, $m->getMapInt32Int32());
576*1b3f573fSAndroid Build Coastguard Worker    }
577*1b3f573fSAndroid Build Coastguard Worker
578*1b3f573fSAndroid Build Coastguard Worker    public function testMapFieldViaArray()
579*1b3f573fSAndroid Build Coastguard Worker    {
580*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
581*1b3f573fSAndroid Build Coastguard Worker
582*1b3f573fSAndroid Build Coastguard Worker        $dict = array();
583*1b3f573fSAndroid Build Coastguard Worker        $m->setMapInt32Int32($dict);
584*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, count($m->getMapInt32Int32()));
585*1b3f573fSAndroid Build Coastguard Worker
586*1b3f573fSAndroid Build Coastguard Worker        $dict = array(5 => 5, 6 => 6.1, "7" => "7");
587*1b3f573fSAndroid Build Coastguard Worker        $m->setMapInt32Int32($dict);
588*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->getMapInt32Int32() instanceof MapField);
589*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, count($m->getMapInt32Int32()));
590*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(5, $m->getMapInt32Int32()[5]);
591*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(6, $m->getMapInt32Int32()[6]);
592*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(7, $m->getMapInt32Int32()[7]);
593*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($dict instanceof MapField);
594*1b3f573fSAndroid Build Coastguard Worker    }
595*1b3f573fSAndroid Build Coastguard Worker
596*1b3f573fSAndroid Build Coastguard Worker    #########################################################
597*1b3f573fSAndroid Build Coastguard Worker    # Test oneof field.
598*1b3f573fSAndroid Build Coastguard Worker    #########################################################
599*1b3f573fSAndroid Build Coastguard Worker
600*1b3f573fSAndroid Build Coastguard Worker    public function testOneofField() {
601*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
602*1b3f573fSAndroid Build Coastguard Worker
603*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("", $m->getMyOneof());
604*1b3f573fSAndroid Build Coastguard Worker
605*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofInt32(1);
606*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOneofInt32());
607*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0.0, $m->getOneofFloat());
608*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('', $m->getOneofString());
609*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(NULL, $m->getOneofMessage());
610*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("oneof_int32", $m->getMyOneof());
611*1b3f573fSAndroid Build Coastguard Worker
612*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofFloat(2.0);
613*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, $m->getOneofInt32());
614*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2.0, $m->getOneofFloat());
615*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('', $m->getOneofString());
616*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(NULL, $m->getOneofMessage());
617*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("oneof_float", $m->getMyOneof());
618*1b3f573fSAndroid Build Coastguard Worker
619*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofString('abc');
620*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, $m->getOneofInt32());
621*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0.0, $m->getOneofFloat());
622*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('abc', $m->getOneofString());
623*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(NULL, $m->getOneofMessage());
624*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("oneof_string", $m->getMyOneof());
625*1b3f573fSAndroid Build Coastguard Worker
626*1b3f573fSAndroid Build Coastguard Worker        $sub_m = new Sub();
627*1b3f573fSAndroid Build Coastguard Worker        $sub_m->setA(1);
628*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofMessage($sub_m);
629*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0, $m->getOneofInt32());
630*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(0.0, $m->getOneofFloat());
631*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('', $m->getOneofString());
632*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOneofMessage()->getA());
633*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("oneof_message", $m->getMyOneof());
634*1b3f573fSAndroid Build Coastguard Worker    }
635*1b3f573fSAndroid Build Coastguard Worker
636*1b3f573fSAndroid Build Coastguard Worker    #########################################################
637*1b3f573fSAndroid Build Coastguard Worker    # Test clear method.
638*1b3f573fSAndroid Build Coastguard Worker    #########################################################
639*1b3f573fSAndroid Build Coastguard Worker
640*1b3f573fSAndroid Build Coastguard Worker    public function testMessageClear()
641*1b3f573fSAndroid Build Coastguard Worker    {
642*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
643*1b3f573fSAndroid Build Coastguard Worker        $this->setFields($m);
644*1b3f573fSAndroid Build Coastguard Worker        $this->expectFields($m);
645*1b3f573fSAndroid Build Coastguard Worker        $m->clear();
646*1b3f573fSAndroid Build Coastguard Worker        $this->expectEmptyFields($m);
647*1b3f573fSAndroid Build Coastguard Worker    }
648*1b3f573fSAndroid Build Coastguard Worker
649*1b3f573fSAndroid Build Coastguard Worker    #########################################################
650*1b3f573fSAndroid Build Coastguard Worker    # Test mergeFrom method.
651*1b3f573fSAndroid Build Coastguard Worker    #########################################################
652*1b3f573fSAndroid Build Coastguard Worker
653*1b3f573fSAndroid Build Coastguard Worker    public function testMessageMergeFrom()
654*1b3f573fSAndroid Build Coastguard Worker    {
655*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
656*1b3f573fSAndroid Build Coastguard Worker        $this->setFields($m);
657*1b3f573fSAndroid Build Coastguard Worker        $this->expectFields($m);
658*1b3f573fSAndroid Build Coastguard Worker        $arr = $m->getOptionalMessage()->getB();
659*1b3f573fSAndroid Build Coastguard Worker        $arr[] = 1;
660*1b3f573fSAndroid Build Coastguard Worker
661*1b3f573fSAndroid Build Coastguard Worker        $n = new TestMessage();
662*1b3f573fSAndroid Build Coastguard Worker
663*1b3f573fSAndroid Build Coastguard Worker        // Singular
664*1b3f573fSAndroid Build Coastguard Worker        $n->setOptionalInt32(100);
665*1b3f573fSAndroid Build Coastguard Worker        $sub1 = new Sub();
666*1b3f573fSAndroid Build Coastguard Worker        $sub1->setA(101);
667*1b3f573fSAndroid Build Coastguard Worker
668*1b3f573fSAndroid Build Coastguard Worker        $b = $sub1->getB();
669*1b3f573fSAndroid Build Coastguard Worker        $b[] = 102;
670*1b3f573fSAndroid Build Coastguard Worker        $sub1->setB($b);
671*1b3f573fSAndroid Build Coastguard Worker
672*1b3f573fSAndroid Build Coastguard Worker        $n->setOptionalMessage($sub1);
673*1b3f573fSAndroid Build Coastguard Worker
674*1b3f573fSAndroid Build Coastguard Worker        // Repeated
675*1b3f573fSAndroid Build Coastguard Worker        $repeatedInt32 = $n->getRepeatedInt32();
676*1b3f573fSAndroid Build Coastguard Worker        $repeatedInt32[] = 200;
677*1b3f573fSAndroid Build Coastguard Worker        $n->setRepeatedInt32($repeatedInt32);
678*1b3f573fSAndroid Build Coastguard Worker
679*1b3f573fSAndroid Build Coastguard Worker        $repeatedString = $n->getRepeatedString();
680*1b3f573fSAndroid Build Coastguard Worker        $repeatedString[] = 'abc';
681*1b3f573fSAndroid Build Coastguard Worker        $n->setRepeatedString($repeatedString);
682*1b3f573fSAndroid Build Coastguard Worker
683*1b3f573fSAndroid Build Coastguard Worker        $sub2 = new Sub();
684*1b3f573fSAndroid Build Coastguard Worker        $sub2->setA(201);
685*1b3f573fSAndroid Build Coastguard Worker        $repeatedMessage = $n->getRepeatedMessage();
686*1b3f573fSAndroid Build Coastguard Worker        $repeatedMessage[] = $sub2;
687*1b3f573fSAndroid Build Coastguard Worker        $n->setRepeatedMessage($repeatedMessage);
688*1b3f573fSAndroid Build Coastguard Worker
689*1b3f573fSAndroid Build Coastguard Worker        // Map
690*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Int32 = $n->getMapInt32Int32();
691*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Int32[1] = 300;
692*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Int32[-62] = 301;
693*1b3f573fSAndroid Build Coastguard Worker        $n->setMapInt32Int32($mapInt32Int32);
694*1b3f573fSAndroid Build Coastguard Worker
695*1b3f573fSAndroid Build Coastguard Worker        $mapStringString = $n->getMapStringString();
696*1b3f573fSAndroid Build Coastguard Worker        $mapStringString['def'] = 'def';
697*1b3f573fSAndroid Build Coastguard Worker        $n->setMapStringString($mapStringString);
698*1b3f573fSAndroid Build Coastguard Worker
699*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message = $n->getMapInt32Message();
700*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message[1] = new Sub();
701*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message[1]->setA(302);
702*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message[2] = new Sub();
703*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message[2]->setA(303);
704*1b3f573fSAndroid Build Coastguard Worker        $n->setMapInt32Message($mapInt32Message);
705*1b3f573fSAndroid Build Coastguard Worker
706*1b3f573fSAndroid Build Coastguard Worker        $m->mergeFrom($n);
707*1b3f573fSAndroid Build Coastguard Worker
708*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(100, $m->getOptionalInt32());
709*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(42, $m->getOptionalUint32());
710*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(101, $m->getOptionalMessage()->getA());
711*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, count($m->getOptionalMessage()->getB()));
712*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalMessage()->getB()[0]);
713*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(102, $m->getOptionalMessage()->getB()[1]);
714*1b3f573fSAndroid Build Coastguard Worker
715*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, count($m->getRepeatedInt32()));
716*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(200, $m->getRepeatedInt32()[2]);
717*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, count($m->getRepeatedUint32()));
718*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, count($m->getRepeatedString()));
719*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('abc', $m->getRepeatedString()[2]);
720*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(3, count($m->getRepeatedMessage()));
721*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(201, $m->getRepeatedMessage()[2]->getA());
722*1b3f573fSAndroid Build Coastguard Worker
723*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, count($m->getMapInt32Int32()));
724*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(300, $m->getMapInt32Int32()[1]);
725*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(301, $m->getMapInt32Int32()[-62]);
726*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, count($m->getMapUint32Uint32()));
727*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, count($m->getMapStringString()));
728*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('def', $m->getMapStringString()['def']);
729*1b3f573fSAndroid Build Coastguard Worker
730*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, count($m->getMapInt32Message()));
731*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(302, $m->getMapInt32Message()[1]->getA());
732*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(303, $m->getMapInt32Message()[2]->getA());
733*1b3f573fSAndroid Build Coastguard Worker
734*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("", $m->getMyOneof());
735*1b3f573fSAndroid Build Coastguard Worker
736*1b3f573fSAndroid Build Coastguard Worker        // Check sub-messages are copied by value.
737*1b3f573fSAndroid Build Coastguard Worker        $n->getOptionalMessage()->setA(-101);
738*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(101, $m->getOptionalMessage()->getA());
739*1b3f573fSAndroid Build Coastguard Worker
740*1b3f573fSAndroid Build Coastguard Worker        $repeatedMessage = $n->getRepeatedMessage();
741*1b3f573fSAndroid Build Coastguard Worker        $repeatedMessage[0]->setA(-201);
742*1b3f573fSAndroid Build Coastguard Worker        $n->setRepeatedMessage($repeatedMessage);
743*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(201, $m->getRepeatedMessage()[2]->getA());
744*1b3f573fSAndroid Build Coastguard Worker
745*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message = $n->getMapInt32Message();
746*1b3f573fSAndroid Build Coastguard Worker        $mapInt32Message[1]->setA(-302);
747*1b3f573fSAndroid Build Coastguard Worker        $n->setMapInt32Message($mapInt32Message);
748*1b3f573fSAndroid Build Coastguard Worker
749*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(302, $m->getMapInt32Message()[1]->getA());
750*1b3f573fSAndroid Build Coastguard Worker
751*1b3f573fSAndroid Build Coastguard Worker        // Test merge oneof.
752*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
753*1b3f573fSAndroid Build Coastguard Worker
754*1b3f573fSAndroid Build Coastguard Worker        $n = new TestMessage();
755*1b3f573fSAndroid Build Coastguard Worker        $n->setOneofInt32(1);
756*1b3f573fSAndroid Build Coastguard Worker        $m->mergeFrom($n);
757*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOneofInt32());
758*1b3f573fSAndroid Build Coastguard Worker
759*1b3f573fSAndroid Build Coastguard Worker        $sub = new Sub();
760*1b3f573fSAndroid Build Coastguard Worker        $n->setOneofMessage($sub);
761*1b3f573fSAndroid Build Coastguard Worker        $n->getOneofMessage()->setA(400);
762*1b3f573fSAndroid Build Coastguard Worker        $m->mergeFrom($n);
763*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(400, $m->getOneofMessage()->getA());
764*1b3f573fSAndroid Build Coastguard Worker        $n->getOneofMessage()->setA(-400);
765*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(400, $m->getOneofMessage()->getA());
766*1b3f573fSAndroid Build Coastguard Worker
767*1b3f573fSAndroid Build Coastguard Worker        // Test all fields
768*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
769*1b3f573fSAndroid Build Coastguard Worker        $n = new TestMessage();
770*1b3f573fSAndroid Build Coastguard Worker        $this->setFields($m);
771*1b3f573fSAndroid Build Coastguard Worker        $n->mergeFrom($m);
772*1b3f573fSAndroid Build Coastguard Worker        $this->expectFields($n);
773*1b3f573fSAndroid Build Coastguard Worker    }
774*1b3f573fSAndroid Build Coastguard Worker
775*1b3f573fSAndroid Build Coastguard Worker    #########################################################
776*1b3f573fSAndroid Build Coastguard Worker    # Test message/enum without namespace.
777*1b3f573fSAndroid Build Coastguard Worker    #########################################################
778*1b3f573fSAndroid Build Coastguard Worker
779*1b3f573fSAndroid Build Coastguard Worker    public function testMessageWithoutNamespace()
780*1b3f573fSAndroid Build Coastguard Worker    {
781*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
782*1b3f573fSAndroid Build Coastguard Worker        $n = new NoNamespaceMessage();
783*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalNoNamespaceMessage($n);
784*1b3f573fSAndroid Build Coastguard Worker        $repeatedNoNamespaceMessage = $m->getRepeatedNoNamespaceMessage();
785*1b3f573fSAndroid Build Coastguard Worker        $repeatedNoNamespaceMessage[] = new NoNamespaceMessage();
786*1b3f573fSAndroid Build Coastguard Worker        $m->setRepeatedNoNamespaceMessage($repeatedNoNamespaceMessage);
787*1b3f573fSAndroid Build Coastguard Worker
788*1b3f573fSAndroid Build Coastguard Worker        // test nested messages
789*1b3f573fSAndroid Build Coastguard Worker        $sub = new NoNamespaceMessage\NestedMessage();
790*1b3f573fSAndroid Build Coastguard Worker        $n->setNestedMessage($sub);
791*1b3f573fSAndroid Build Coastguard Worker
792*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
793*1b3f573fSAndroid Build Coastguard Worker    }
794*1b3f573fSAndroid Build Coastguard Worker
795*1b3f573fSAndroid Build Coastguard Worker    public function testEnumWithoutNamespace()
796*1b3f573fSAndroid Build Coastguard Worker    {
797*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
798*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalNoNamespaceEnum(NoNamespaceEnum::VALUE_A);
799*1b3f573fSAndroid Build Coastguard Worker        $repeatedNoNamespaceEnum = $m->getRepeatedNoNamespaceEnum();
800*1b3f573fSAndroid Build Coastguard Worker        $repeatedNoNamespaceEnum[] = NoNamespaceEnum::VALUE_A;
801*1b3f573fSAndroid Build Coastguard Worker        $m->setRepeatedNoNamespaceEnum($repeatedNoNamespaceEnum);
802*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
803*1b3f573fSAndroid Build Coastguard Worker    }
804*1b3f573fSAndroid Build Coastguard Worker
805*1b3f573fSAndroid Build Coastguard Worker    #########################################################
806*1b3f573fSAndroid Build Coastguard Worker    # Test message with given namespace.
807*1b3f573fSAndroid Build Coastguard Worker    #########################################################
808*1b3f573fSAndroid Build Coastguard Worker
809*1b3f573fSAndroid Build Coastguard Worker    public function testNestedMessagesAndEnums()
810*1b3f573fSAndroid Build Coastguard Worker    {
811*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
812*1b3f573fSAndroid Build Coastguard Worker        $n = new TestMessage\Sub();
813*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalMessage($n);
814*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalNestedEnum(TestMessage\NestedEnum::ZERO);
815*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getOptionalMessage());
816*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(TestMessage\NestedEnum::ZERO, $m->getOptionalNestedEnum());
817*1b3f573fSAndroid Build Coastguard Worker    }
818*1b3f573fSAndroid Build Coastguard Worker
819*1b3f573fSAndroid Build Coastguard Worker    public function testMessagesAndEnumsWithPrefix()
820*1b3f573fSAndroid Build Coastguard Worker    {
821*1b3f573fSAndroid Build Coastguard Worker        // Test message prefix
822*1b3f573fSAndroid Build Coastguard Worker        $m = new TestIncludePrefixMessage();
823*1b3f573fSAndroid Build Coastguard Worker        $n = new PrefixTestPrefix();
824*1b3f573fSAndroid Build Coastguard Worker        $n->setA(1);
825*1b3f573fSAndroid Build Coastguard Worker        $m->setPrefixMessage($n);
826*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getPrefixMessage()->getA());
827*1b3f573fSAndroid Build Coastguard Worker
828*1b3f573fSAndroid Build Coastguard Worker        // Test nested message prefix
829*1b3f573fSAndroid Build Coastguard Worker        $o = new PrefixTestPrefix();
830*1b3f573fSAndroid Build Coastguard Worker        $p = new PrefixTestPrefix\PrefixNestedMessage();
831*1b3f573fSAndroid Build Coastguard Worker        $o->setNestedMessage($p);
832*1b3f573fSAndroid Build Coastguard Worker        $o->setNestedEnum(PrefixTestPrefix\PrefixNestedEnum::ZERO);
833*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($p, $o->getNestedMessage());
834*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(PrefixTestPrefix\PrefixNestedEnum::ZERO, $o->getNestedEnum());
835*1b3f573fSAndroid Build Coastguard Worker    }
836*1b3f573fSAndroid Build Coastguard Worker
837*1b3f573fSAndroid Build Coastguard Worker    public function testMessagesAndEnumsWithPhpNamespace()
838*1b3f573fSAndroid Build Coastguard Worker    {
839*1b3f573fSAndroid Build Coastguard Worker        $m = new TestNamespace();
840*1b3f573fSAndroid Build Coastguard Worker        $n = new TestNamespace\NestedMessage();
841*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedMessage($n);
842*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedEnum(TestNamespace\NestedEnum::ZERO);
843*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getNestedMessage());
844*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(TestNamespace\NestedEnum::ZERO, $m->getNestedEnum());
845*1b3f573fSAndroid Build Coastguard Worker    }
846*1b3f573fSAndroid Build Coastguard Worker
847*1b3f573fSAndroid Build Coastguard Worker    public function testMesssagesAndEnumsWithEmptyPhpNamespace()
848*1b3f573fSAndroid Build Coastguard Worker    {
849*1b3f573fSAndroid Build Coastguard Worker        $m = new TestEmptyNamespace();
850*1b3f573fSAndroid Build Coastguard Worker        $n = new TestEmptyNamespace\NestedMessage();
851*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedMessage($n);
852*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedEnum(TestEmptyNamespace\NestedEnum::ZERO);
853*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getNestedMessage());
854*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(TestEmptyNamespace\NestedEnum::ZERO, $m->getNestedEnum());
855*1b3f573fSAndroid Build Coastguard Worker    }
856*1b3f573fSAndroid Build Coastguard Worker
857*1b3f573fSAndroid Build Coastguard Worker    public function testMessagesAndEnumsWithNoNamespace()
858*1b3f573fSAndroid Build Coastguard Worker    {
859*1b3f573fSAndroid Build Coastguard Worker        $m = new NoNamespaceMessage();
860*1b3f573fSAndroid Build Coastguard Worker        $n = new NoNamespaceMessage\NestedMessage();
861*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedMessage($n);
862*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedEnum(NoNamespaceMessage\NestedEnum::ZERO);
863*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getNestedMessage());
864*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(NoNamespaceMessage\NestedEnum::ZERO, $m->getNestedEnum());
865*1b3f573fSAndroid Build Coastguard Worker    }
866*1b3f573fSAndroid Build Coastguard Worker
867*1b3f573fSAndroid Build Coastguard Worker    public function testReservedWordsInPackageName()
868*1b3f573fSAndroid Build Coastguard Worker    {
869*1b3f573fSAndroid Build Coastguard Worker        $m = new TestEmptyPackage();
870*1b3f573fSAndroid Build Coastguard Worker        $n = new TestEmptyPackage\NestedMessage();
871*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedMessage($n);
872*1b3f573fSAndroid Build Coastguard Worker        $m->setNestedEnum(TestEmptyPackage\NestedEnum::ZERO);
873*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getNestedMessage());
874*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(TestEmptyPackage\NestedEnum::ZERO, $m->getNestedEnum());
875*1b3f573fSAndroid Build Coastguard Worker    }
876*1b3f573fSAndroid Build Coastguard Worker
877*1b3f573fSAndroid Build Coastguard Worker    public function testReservedWordsInNamespace()
878*1b3f573fSAndroid Build Coastguard Worker    {
879*1b3f573fSAndroid Build Coastguard Worker        $m = new TestNamespace();
880*1b3f573fSAndroid Build Coastguard Worker        $n = new TestNamespace\PBEmpty();
881*1b3f573fSAndroid Build Coastguard Worker        $o = new TestNamespace\PBEmpty\NestedMessage();
882*1b3f573fSAndroid Build Coastguard Worker        $n->setNestedMessage($o);
883*1b3f573fSAndroid Build Coastguard Worker        $n->setNestedEnum(TestNamespace\PBEmpty\NestedEnum::ZERO);
884*1b3f573fSAndroid Build Coastguard Worker        $m->setReservedName($n);
885*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($n, $m->getReservedName());
886*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($o, $n->getNestedMessage());
887*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(
888*1b3f573fSAndroid Build Coastguard Worker            TestNamespace\PBEmpty\NestedEnum::ZERO,
889*1b3f573fSAndroid Build Coastguard Worker            $n->getNestedEnum()
890*1b3f573fSAndroid Build Coastguard Worker        );
891*1b3f573fSAndroid Build Coastguard Worker    }
892*1b3f573fSAndroid Build Coastguard Worker
893*1b3f573fSAndroid Build Coastguard Worker    #########################################################
894*1b3f573fSAndroid Build Coastguard Worker    # Test prefix for reserved words.
895*1b3f573fSAndroid Build Coastguard Worker    #########################################################
896*1b3f573fSAndroid Build Coastguard Worker
897*1b3f573fSAndroid Build Coastguard Worker    public function testPrefixForReservedWords()
898*1b3f573fSAndroid Build Coastguard Worker    {
899*1b3f573fSAndroid Build Coastguard Worker        $m = new \Foo\TestMessage\PBEmpty();
900*1b3f573fSAndroid Build Coastguard Worker        $m = new \Foo\PBEmpty();
901*1b3f573fSAndroid Build Coastguard Worker        $m = new \PrefixEmpty();
902*1b3f573fSAndroid Build Coastguard Worker        $m = new \Foo\PBARRAY();
903*1b3f573fSAndroid Build Coastguard Worker
904*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBabstract();
905*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBand();
906*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBarray();
907*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBas();
908*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBbreak();
909*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBcallable();
910*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBcase();
911*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBcatch();
912*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBclass();
913*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBclone();
914*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBconst();
915*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBcontinue();
916*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBdeclare();
917*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBdefault();
918*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBdie();
919*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBdo();
920*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBecho();
921*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBelse();
922*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBelseif();
923*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBempty();
924*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBenddeclare();
925*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBendfor();
926*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBendforeach();
927*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBendif();
928*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBendswitch();
929*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBendwhile();
930*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBeval();
931*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBexit();
932*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBextends();
933*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfinal();
934*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfinally();
935*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfn();
936*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfor();
937*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBforeach();
938*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfunction();
939*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBglobal();
940*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBgoto();
941*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBif();
942*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBimplements();
943*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBinclude();
944*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBinclude_once();
945*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBinstanceof();
946*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBinsteadof();
947*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBinterface();
948*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBisset();
949*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBlist();
950*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBmatch();
951*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBnamespace();
952*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBnew();
953*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBor();
954*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBparent();
955*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBprint();
956*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBprivate();
957*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBprotected();
958*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBpublic();
959*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBreadonly();
960*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBrequire();
961*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBrequire_once();
962*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBreturn();
963*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBself();
964*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBstatic();
965*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBswitch();
966*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBthrow();
967*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBtrait();
968*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBtry();
969*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBunset();
970*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBuse();
971*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBvar();
972*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBwhile();
973*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBxor();
974*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PByield();
975*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBint();
976*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfloat();
977*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBbool();
978*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBstring();
979*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBtrue();
980*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBfalse();
981*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBnull();
982*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBvoid();
983*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower\PBiterable();
984*1b3f573fSAndroid Build Coastguard Worker
985*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBABSTRACT();
986*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBAND();
987*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBARRAY();
988*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBAS();
989*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBBREAK();
990*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCALLABLE();
991*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCASE();
992*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCATCH();
993*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCLASS();
994*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCLONE();
995*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCONST();
996*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBCONTINUE();
997*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBDECLARE();
998*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBDEFAULT();
999*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBDIE();
1000*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBDO();
1001*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBECHO();
1002*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBELSE();
1003*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBELSEIF();
1004*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBEMPTY();
1005*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDDECLARE();
1006*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDFOR();
1007*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDFOREACH();
1008*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDIF();
1009*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDSWITCH();
1010*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBENDWHILE();
1011*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBEVAL();
1012*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBEXIT();
1013*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBEXTENDS();
1014*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFINAL();
1015*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFINALLY();
1016*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFN();
1017*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFOR();
1018*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFOREACH();
1019*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFUNCTION();
1020*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBGLOBAL();
1021*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBGOTO();
1022*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBIF();
1023*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBIMPLEMENTS();
1024*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINCLUDE();
1025*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINCLUDE_ONCE();
1026*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINSTANCEOF();
1027*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINSTEADOF();
1028*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINTERFACE();
1029*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBISSET();
1030*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBLIST();
1031*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBMATCH();
1032*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBNAMESPACE();
1033*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBNEW();
1034*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBOR();
1035*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBPARENT();
1036*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBPRINT();
1037*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBPRIVATE();
1038*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBPROTECTED();
1039*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBPUBLIC();
1040*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBREADONLY();
1041*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBREQUIRE();
1042*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBREQUIRE_ONCE();
1043*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBRETURN();
1044*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBSELF();
1045*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBSTATIC();
1046*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBSWITCH();
1047*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBTHROW();
1048*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBTRAIT();
1049*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBTRY();
1050*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBUNSET();
1051*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBUSE();
1052*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBVAR();
1053*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBWHILE();
1054*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBXOR();
1055*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBYIELD();
1056*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBINT();
1057*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFLOAT();
1058*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBBOOL();
1059*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBSTRING();
1060*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBTRUE();
1061*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBFALSE();
1062*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBNULL();
1063*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBVOID();
1064*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper\PBITERABLE();
1065*1b3f573fSAndroid Build Coastguard Worker
1066*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBabstract();
1067*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBand();
1068*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBarray();
1069*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBas();
1070*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBbreak();
1071*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBcallable();
1072*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBcase();
1073*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBcatch();
1074*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBclass();
1075*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBclone();
1076*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBconst();
1077*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBcontinue();
1078*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBdeclare();
1079*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBdefault();
1080*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBdie();
1081*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBdo();
1082*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBecho();
1083*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBelse();
1084*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBelseif();
1085*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBempty();
1086*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBenddeclare();
1087*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBendfor();
1088*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBendforeach();
1089*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBendif();
1090*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBendswitch();
1091*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBendwhile();
1092*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBeval();
1093*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBexit();
1094*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBextends();
1095*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfinal();
1096*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfinally();
1097*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfn();
1098*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfor();
1099*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBforeach();
1100*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfunction();
1101*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBglobal();
1102*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBgoto();
1103*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBif();
1104*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBimplements();
1105*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBinclude();
1106*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBinclude_once();
1107*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBinstanceof();
1108*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBinsteadof();
1109*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBinterface();
1110*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBisset();
1111*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBlist();
1112*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBmatch();
1113*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBnamespace();
1114*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBnew();
1115*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBor();
1116*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBparent();
1117*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBprint();
1118*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBprivate();
1119*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBprotected();
1120*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBpublic();
1121*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBrequire();
1122*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBreadonly();
1123*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBrequire_once();
1124*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBreturn();
1125*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBself();
1126*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBstatic();
1127*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBswitch();
1128*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBthrow();
1129*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBtrait();
1130*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBtry();
1131*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBunset();
1132*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBuse();
1133*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBvar();
1134*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBwhile();
1135*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBxor();
1136*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PByield();
1137*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBint();
1138*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfloat();
1139*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBbool();
1140*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBstring();
1141*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBtrue();
1142*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBfalse();
1143*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBnull();
1144*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBvoid();
1145*1b3f573fSAndroid Build Coastguard Worker        $m = new \Lower_enum\PBiterable();
1146*1b3f573fSAndroid Build Coastguard Worker
1147*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBABSTRACT();
1148*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBAND();
1149*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBARRAY();
1150*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBAS();
1151*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBBREAK();
1152*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCALLABLE();
1153*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCASE();
1154*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCATCH();
1155*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCLASS();
1156*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCLONE();
1157*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCONST();
1158*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBCONTINUE();
1159*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBDECLARE();
1160*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBDEFAULT();
1161*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBDIE();
1162*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBDO();
1163*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBECHO();
1164*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBELSE();
1165*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBELSEIF();
1166*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBEMPTY();
1167*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDDECLARE();
1168*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDFOR();
1169*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDFOREACH();
1170*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDIF();
1171*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDSWITCH();
1172*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBENDWHILE();
1173*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBEVAL();
1174*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBEXIT();
1175*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBEXTENDS();
1176*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFINAL();
1177*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFINALLY();
1178*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFN();
1179*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFOR();
1180*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFOREACH();
1181*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFUNCTION();
1182*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBGLOBAL();
1183*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBGOTO();
1184*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBIF();
1185*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBIMPLEMENTS();
1186*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINCLUDE();
1187*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINCLUDE_ONCE();
1188*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINSTANCEOF();
1189*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINSTEADOF();
1190*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINTERFACE();
1191*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBISSET();
1192*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBLIST();
1193*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBMATCH();
1194*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBNAMESPACE();
1195*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBNEW();
1196*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBOR();
1197*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBPARENT();
1198*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBPRINT();
1199*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBPRIVATE();
1200*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBPROTECTED();
1201*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBPUBLIC();
1202*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBREADONLY();
1203*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBREQUIRE();
1204*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBREQUIRE_ONCE();
1205*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBRETURN();
1206*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBSELF();
1207*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBSTATIC();
1208*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBSWITCH();
1209*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBTHROW();
1210*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBTRAIT();
1211*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBTRY();
1212*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBUNSET();
1213*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBUSE();
1214*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBVAR();
1215*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBWHILE();
1216*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBXOR();
1217*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBYIELD();
1218*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBINT();
1219*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFLOAT();
1220*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBBOOL();
1221*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBSTRING();
1222*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBTRUE();
1223*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBFALSE();
1224*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBNULL();
1225*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBVOID();
1226*1b3f573fSAndroid Build Coastguard Worker        $m = new \Upper_enum\PBITERABLE();
1227*1b3f573fSAndroid Build Coastguard Worker
1228*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBabstract;
1229*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBand;
1230*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBarray;
1231*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBas;
1232*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBbreak;
1233*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBcallable;
1234*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBcase;
1235*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBcatch;
1236*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBclass;
1237*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBclone;
1238*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBconst;
1239*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBcontinue;
1240*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBdeclare;
1241*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBdefault;
1242*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBdie;
1243*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBdo;
1244*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBecho;
1245*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBelse;
1246*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBelseif;
1247*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBempty;
1248*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBenddeclare;
1249*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBendfor;
1250*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBendforeach;
1251*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBendif;
1252*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBendswitch;
1253*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBendwhile;
1254*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBeval;
1255*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBexit;
1256*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBextends;
1257*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBfinal;
1258*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBfinally;
1259*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBfn;
1260*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBfor;
1261*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBforeach;
1262*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBfunction;
1263*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBglobal;
1264*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBgoto;
1265*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBif;
1266*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBimplements;
1267*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBinclude;
1268*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBinclude_once;
1269*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBinstanceof;
1270*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBinsteadof;
1271*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBinterface;
1272*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBisset;
1273*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBlist;
1274*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBmatch;
1275*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBnamespace;
1276*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBnew;
1277*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBor;
1278*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBprint;
1279*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBprivate;
1280*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBprotected;
1281*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBpublic;
1282*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBrequire;
1283*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBrequire_once;
1284*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBreturn;
1285*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBstatic;
1286*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBswitch;
1287*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBthrow;
1288*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBtrait;
1289*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBtry;
1290*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBunset;
1291*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBuse;
1292*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBvar;
1293*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBwhile;
1294*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PBxor;
1295*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::PByield;
1296*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::int;
1297*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::float;
1298*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::bool;
1299*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::string;
1300*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::true;
1301*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::false;
1302*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::null;
1303*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::void;
1304*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::iterable;
1305*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::parent;
1306*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::self;
1307*1b3f573fSAndroid Build Coastguard Worker        $m = \Lower_enum_value\NotAllowed::readonly;
1308*1b3f573fSAndroid Build Coastguard Worker
1309*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBABSTRACT;
1310*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBAND;
1311*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBARRAY;
1312*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBAS;
1313*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBBREAK;
1314*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCALLABLE;
1315*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCASE;
1316*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCATCH;
1317*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCLASS;
1318*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCLONE;
1319*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCONST;
1320*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBCONTINUE;
1321*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBDECLARE;
1322*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBDEFAULT;
1323*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBDIE;
1324*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBDO;
1325*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBECHO;
1326*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBELSE;
1327*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBELSEIF;
1328*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBEMPTY;
1329*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDDECLARE;
1330*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDFOR;
1331*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDFOREACH;
1332*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDIF;
1333*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDSWITCH;
1334*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBENDWHILE;
1335*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBEVAL;
1336*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBEXIT;
1337*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBEXTENDS;
1338*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFINAL;
1339*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFINALLY;
1340*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFN;
1341*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFOR;
1342*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFOREACH;
1343*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBFUNCTION;
1344*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBGLOBAL;
1345*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBGOTO;
1346*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBIF;
1347*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBIMPLEMENTS;
1348*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBINCLUDE;
1349*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBINCLUDE_ONCE;
1350*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBINSTANCEOF;
1351*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBINSTEADOF;
1352*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBINTERFACE;
1353*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBISSET;
1354*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBLIST;
1355*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBMATCH;
1356*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBNAMESPACE;
1357*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBNEW;
1358*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBOR;
1359*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBPRINT;
1360*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBPRIVATE;
1361*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBPROTECTED;
1362*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBPUBLIC;
1363*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBREQUIRE;
1364*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBREQUIRE_ONCE;
1365*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBRETURN;
1366*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBSTATIC;
1367*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBSWITCH;
1368*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBTHROW;
1369*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBTRAIT;
1370*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBTRY;
1371*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBUNSET;
1372*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBUSE;
1373*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBVAR;
1374*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBWHILE;
1375*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBXOR;
1376*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PBYIELD;
1377*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::INT;
1378*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::FLOAT;
1379*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::BOOL;
1380*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::STRING;
1381*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::TRUE;
1382*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::FALSE;
1383*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::NULL;
1384*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::VOID;
1385*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::ITERABLE;
1386*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::PARENT;
1387*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::SELF;
1388*1b3f573fSAndroid Build Coastguard Worker        $m = \Upper_enum_value\NotAllowed::READONLY;
1389*1b3f573fSAndroid Build Coastguard Worker
1390*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1391*1b3f573fSAndroid Build Coastguard Worker    }
1392*1b3f573fSAndroid Build Coastguard Worker
1393*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1394*1b3f573fSAndroid Build Coastguard Worker    # Test fluent setters.
1395*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1396*1b3f573fSAndroid Build Coastguard Worker
1397*1b3f573fSAndroid Build Coastguard Worker    public function testFluentSetters()
1398*1b3f573fSAndroid Build Coastguard Worker    {
1399*1b3f573fSAndroid Build Coastguard Worker        $m = (new TestMessage())
1400*1b3f573fSAndroid Build Coastguard Worker            ->setOptionalInt32(1)
1401*1b3f573fSAndroid Build Coastguard Worker            ->setOptionalUInt32(2);
1402*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(1, $m->getOptionalInt32());
1403*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame(2, $m->getOptionalUInt32());
1404*1b3f573fSAndroid Build Coastguard Worker    }
1405*1b3f573fSAndroid Build Coastguard Worker
1406*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1407*1b3f573fSAndroid Build Coastguard Worker    # Test Reverse Field Order.
1408*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1409*1b3f573fSAndroid Build Coastguard Worker
1410*1b3f573fSAndroid Build Coastguard Worker    public function testReverseFieldOrder()
1411*1b3f573fSAndroid Build Coastguard Worker    {
1412*1b3f573fSAndroid Build Coastguard Worker        $m = new TestReverseFieldOrder();
1413*1b3f573fSAndroid Build Coastguard Worker        $m->setB("abc");
1414*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame("abc", $m->getB());
1415*1b3f573fSAndroid Build Coastguard Worker        $this->assertNotSame("abc", $m->getA());
1416*1b3f573fSAndroid Build Coastguard Worker    }
1417*1b3f573fSAndroid Build Coastguard Worker
1418*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1419*1b3f573fSAndroid Build Coastguard Worker    # Test Reverse Field Order.
1420*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1421*1b3f573fSAndroid Build Coastguard Worker
1422*1b3f573fSAndroid Build Coastguard Worker    public function testLowerCase()
1423*1b3f573fSAndroid Build Coastguard Worker    {
1424*1b3f573fSAndroid Build Coastguard Worker        $m = new testLowerCaseMessage();
1425*1b3f573fSAndroid Build Coastguard Worker        $n = testLowerCaseEnum::VALUE;
1426*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1427*1b3f573fSAndroid Build Coastguard Worker    }
1428*1b3f573fSAndroid Build Coastguard Worker
1429*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1430*1b3f573fSAndroid Build Coastguard Worker    # Test Array Constructor.
1431*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1432*1b3f573fSAndroid Build Coastguard Worker
1433*1b3f573fSAndroid Build Coastguard Worker    public function testArrayConstructor()
1434*1b3f573fSAndroid Build Coastguard Worker    {
1435*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage([
1436*1b3f573fSAndroid Build Coastguard Worker            'optional_int32' => -42,
1437*1b3f573fSAndroid Build Coastguard Worker            'optional_int64' => -43,
1438*1b3f573fSAndroid Build Coastguard Worker            'optional_uint32' => 42,
1439*1b3f573fSAndroid Build Coastguard Worker            'optional_uint64' => 43,
1440*1b3f573fSAndroid Build Coastguard Worker            'optional_sint32' => -44,
1441*1b3f573fSAndroid Build Coastguard Worker            'optional_sint64' => -45,
1442*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed32' => 46,
1443*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed64' => 47,
1444*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed32' => -46,
1445*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed64' => -47,
1446*1b3f573fSAndroid Build Coastguard Worker            'optional_float' => 1.5,
1447*1b3f573fSAndroid Build Coastguard Worker            'optional_double' => 1.6,
1448*1b3f573fSAndroid Build Coastguard Worker            'optional_bool' => true,
1449*1b3f573fSAndroid Build Coastguard Worker            'optional_string' => 'a',
1450*1b3f573fSAndroid Build Coastguard Worker            'optional_bytes' => 'bbbb',
1451*1b3f573fSAndroid Build Coastguard Worker            'optional_enum' => TestEnum::ONE,
1452*1b3f573fSAndroid Build Coastguard Worker            'optional_message' => new Sub([
1453*1b3f573fSAndroid Build Coastguard Worker                'a' => 33
1454*1b3f573fSAndroid Build Coastguard Worker            ]),
1455*1b3f573fSAndroid Build Coastguard Worker            'repeated_int32' => [-42, -52],
1456*1b3f573fSAndroid Build Coastguard Worker            'repeated_int64' => [-43, -53],
1457*1b3f573fSAndroid Build Coastguard Worker            'repeated_uint32' => [42, 52],
1458*1b3f573fSAndroid Build Coastguard Worker            'repeated_uint64' => [43, 53],
1459*1b3f573fSAndroid Build Coastguard Worker            'repeated_sint32' => [-44, -54],
1460*1b3f573fSAndroid Build Coastguard Worker            'repeated_sint64' => [-45, -55],
1461*1b3f573fSAndroid Build Coastguard Worker            'repeated_fixed32' => [46, 56],
1462*1b3f573fSAndroid Build Coastguard Worker            'repeated_fixed64' => [47, 57],
1463*1b3f573fSAndroid Build Coastguard Worker            'repeated_sfixed32' => [-46, -56],
1464*1b3f573fSAndroid Build Coastguard Worker            'repeated_sfixed64' => [-47, -57],
1465*1b3f573fSAndroid Build Coastguard Worker            'repeated_float' => [1.5, 2.5],
1466*1b3f573fSAndroid Build Coastguard Worker            'repeated_double' => [1.6, 2.6],
1467*1b3f573fSAndroid Build Coastguard Worker            'repeated_bool' => [true, false],
1468*1b3f573fSAndroid Build Coastguard Worker            'repeated_string' => ['a', 'c'],
1469*1b3f573fSAndroid Build Coastguard Worker            'repeated_bytes' => ['bbbb', 'dddd'],
1470*1b3f573fSAndroid Build Coastguard Worker            'repeated_enum' => [TestEnum::ZERO, TestEnum::ONE],
1471*1b3f573fSAndroid Build Coastguard Worker            'repeated_message' => [new Sub(['a' => 34]),
1472*1b3f573fSAndroid Build Coastguard Worker                                   new Sub(['a' => 35])],
1473*1b3f573fSAndroid Build Coastguard Worker            'map_int32_int32' => [-62 => -62],
1474*1b3f573fSAndroid Build Coastguard Worker            'map_int64_int64' => [-63 => -63],
1475*1b3f573fSAndroid Build Coastguard Worker            'map_uint32_uint32' => [62 => 62],
1476*1b3f573fSAndroid Build Coastguard Worker            'map_uint64_uint64' => [63 => 63],
1477*1b3f573fSAndroid Build Coastguard Worker            'map_sint32_sint32' => [-64 => -64],
1478*1b3f573fSAndroid Build Coastguard Worker            'map_sint64_sint64' => [-65 => -65],
1479*1b3f573fSAndroid Build Coastguard Worker            'map_fixed32_fixed32' => [66 => 66],
1480*1b3f573fSAndroid Build Coastguard Worker            'map_fixed64_fixed64' => [67 => 67],
1481*1b3f573fSAndroid Build Coastguard Worker            'map_sfixed32_sfixed32' => [-68 => -68],
1482*1b3f573fSAndroid Build Coastguard Worker            'map_sfixed64_sfixed64' => [-69 => -69],
1483*1b3f573fSAndroid Build Coastguard Worker            'map_int32_float' => [1 => 3.5],
1484*1b3f573fSAndroid Build Coastguard Worker            'map_int32_double' => [1 => 3.6],
1485*1b3f573fSAndroid Build Coastguard Worker            'map_bool_bool' => [true => true],
1486*1b3f573fSAndroid Build Coastguard Worker            'map_string_string' => ['e' => 'e'],
1487*1b3f573fSAndroid Build Coastguard Worker            'map_int32_bytes' => [1 => 'ffff'],
1488*1b3f573fSAndroid Build Coastguard Worker            'map_int32_enum' => [1 => TestEnum::ONE],
1489*1b3f573fSAndroid Build Coastguard Worker            'map_int32_message' => [1 => new Sub(['a' => 36])],
1490*1b3f573fSAndroid Build Coastguard Worker        ]);
1491*1b3f573fSAndroid Build Coastguard Worker
1492*1b3f573fSAndroid Build Coastguard Worker        TestUtil::assertTestMessage($m);
1493*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1494*1b3f573fSAndroid Build Coastguard Worker    }
1495*1b3f573fSAndroid Build Coastguard Worker
1496*1b3f573fSAndroid Build Coastguard Worker    public function testReferenceInArrayConstructor()
1497*1b3f573fSAndroid Build Coastguard Worker    {
1498*1b3f573fSAndroid Build Coastguard Worker        $keys = [[
1499*1b3f573fSAndroid Build Coastguard Worker                    'optional_bool' => true,
1500*1b3f573fSAndroid Build Coastguard Worker                    'repeated_bool' => [true],
1501*1b3f573fSAndroid Build Coastguard Worker                    'map_bool_bool' => [true => true],
1502*1b3f573fSAndroid Build Coastguard Worker                    'optional_double' => 1.0,
1503*1b3f573fSAndroid Build Coastguard Worker                    'repeated_double' => [1.0],
1504*1b3f573fSAndroid Build Coastguard Worker                    'map_int32_double' => [1 => 1.0],
1505*1b3f573fSAndroid Build Coastguard Worker                    'optional_int32' => 1,
1506*1b3f573fSAndroid Build Coastguard Worker                    'repeated_int32' => [1],
1507*1b3f573fSAndroid Build Coastguard Worker                    'map_int32_int32' => [1 => 1],
1508*1b3f573fSAndroid Build Coastguard Worker                    'optional_string' => 'a',
1509*1b3f573fSAndroid Build Coastguard Worker                    'repeated_string' => ['a'],
1510*1b3f573fSAndroid Build Coastguard Worker                    'map_string_string' => ['a' => 'a'],
1511*1b3f573fSAndroid Build Coastguard Worker                    'optional_message' => ['a' => 1],
1512*1b3f573fSAndroid Build Coastguard Worker                    'repeated_message' => [['a' => 1]],
1513*1b3f573fSAndroid Build Coastguard Worker                    'map_int32_message' => [1 => ['a' => 1]],
1514*1b3f573fSAndroid Build Coastguard Worker                ]];
1515*1b3f573fSAndroid Build Coastguard Worker
1516*1b3f573fSAndroid Build Coastguard Worker        foreach ($keys as &$key) {
1517*1b3f573fSAndroid Build Coastguard Worker            foreach ($key as $id => &$value) {
1518*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'repeated_bool') {
1519*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as &$element) {
1520*1b3f573fSAndroid Build Coastguard Worker                    }
1521*1b3f573fSAndroid Build Coastguard Worker                }
1522*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'map_bool_bool') {
1523*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as $mapKey => &$element) {
1524*1b3f573fSAndroid Build Coastguard Worker                    }
1525*1b3f573fSAndroid Build Coastguard Worker                }
1526*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'repeated_double') {
1527*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as &$element) {
1528*1b3f573fSAndroid Build Coastguard Worker                    }
1529*1b3f573fSAndroid Build Coastguard Worker                }
1530*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'map_int32_double') {
1531*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as $mapKey => &$element) {
1532*1b3f573fSAndroid Build Coastguard Worker                    }
1533*1b3f573fSAndroid Build Coastguard Worker                }
1534*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'repeated_int32') {
1535*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as &$element) {
1536*1b3f573fSAndroid Build Coastguard Worker                    }
1537*1b3f573fSAndroid Build Coastguard Worker                }
1538*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'map_int32_int32') {
1539*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as $mapKey => &$element) {
1540*1b3f573fSAndroid Build Coastguard Worker                    }
1541*1b3f573fSAndroid Build Coastguard Worker                }
1542*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'repeated_string') {
1543*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as &$element) {
1544*1b3f573fSAndroid Build Coastguard Worker                    }
1545*1b3f573fSAndroid Build Coastguard Worker                }
1546*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'map_string_string') {
1547*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as $mapKey => &$element) {
1548*1b3f573fSAndroid Build Coastguard Worker                    }
1549*1b3f573fSAndroid Build Coastguard Worker                }
1550*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'optional_message') {
1551*1b3f573fSAndroid Build Coastguard Worker                    $value = new Sub($value);
1552*1b3f573fSAndroid Build Coastguard Worker                }
1553*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'repeated_message') {
1554*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as &$element) {
1555*1b3f573fSAndroid Build Coastguard Worker                        $element = new Sub($element);
1556*1b3f573fSAndroid Build Coastguard Worker                    }
1557*1b3f573fSAndroid Build Coastguard Worker                }
1558*1b3f573fSAndroid Build Coastguard Worker                if ($id === 'map_int32_message') {
1559*1b3f573fSAndroid Build Coastguard Worker                    foreach ($value as $mapKey => &$element) {
1560*1b3f573fSAndroid Build Coastguard Worker                        $element = new Sub($element);
1561*1b3f573fSAndroid Build Coastguard Worker                    }
1562*1b3f573fSAndroid Build Coastguard Worker                }
1563*1b3f573fSAndroid Build Coastguard Worker            }
1564*1b3f573fSAndroid Build Coastguard Worker            $key = new TestMessage($key);
1565*1b3f573fSAndroid Build Coastguard Worker        }
1566*1b3f573fSAndroid Build Coastguard Worker
1567*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1568*1b3f573fSAndroid Build Coastguard Worker    }
1569*1b3f573fSAndroid Build Coastguard Worker
1570*1b3f573fSAndroid Build Coastguard Worker    public function testOneofMessageInArrayConstructor()
1571*1b3f573fSAndroid Build Coastguard Worker    {
1572*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage([
1573*1b3f573fSAndroid Build Coastguard Worker            'oneof_message' => new Sub(),
1574*1b3f573fSAndroid Build Coastguard Worker        ]);
1575*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame('oneof_message', $m->getMyOneof());
1576*1b3f573fSAndroid Build Coastguard Worker        $this->assertNotNull($m->getOneofMessage());
1577*1b3f573fSAndroid Build Coastguard Worker
1578*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1579*1b3f573fSAndroid Build Coastguard Worker    }
1580*1b3f573fSAndroid Build Coastguard Worker
1581*1b3f573fSAndroid Build Coastguard Worker    public function testOneofStringInArrayConstructor()
1582*1b3f573fSAndroid Build Coastguard Worker    {
1583*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage([
1584*1b3f573fSAndroid Build Coastguard Worker            'oneof_string' => 'abc',
1585*1b3f573fSAndroid Build Coastguard Worker        ]);
1586*1b3f573fSAndroid Build Coastguard Worker
1587*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1588*1b3f573fSAndroid Build Coastguard Worker    }
1589*1b3f573fSAndroid Build Coastguard Worker
1590*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1591*1b3f573fSAndroid Build Coastguard Worker    # Test clone.
1592*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1593*1b3f573fSAndroid Build Coastguard Worker
1594*1b3f573fSAndroid Build Coastguard Worker    public function testClone()
1595*1b3f573fSAndroid Build Coastguard Worker    {
1596*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage([
1597*1b3f573fSAndroid Build Coastguard Worker            'optional_int32' => -42,
1598*1b3f573fSAndroid Build Coastguard Worker            'optional_int64' => -43,
1599*1b3f573fSAndroid Build Coastguard Worker            'optional_message' => new Sub([
1600*1b3f573fSAndroid Build Coastguard Worker                'a' => 33
1601*1b3f573fSAndroid Build Coastguard Worker            ]),
1602*1b3f573fSAndroid Build Coastguard Worker            'map_int32_message' => [1 => new Sub(['a' => 36])],
1603*1b3f573fSAndroid Build Coastguard Worker        ]);
1604*1b3f573fSAndroid Build Coastguard Worker        $m2 = clone $m;
1605*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals($m->getOptionalInt32(), $m2->getOptionalInt32());
1606*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals($m->getOptionalInt64(), $m2->getOptionalInt64());
1607*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($m->getOptionalMessage(), $m2->getOptionalMessage());
1608*1b3f573fSAndroid Build Coastguard Worker        $this->assertSame($m->getMapInt32Message()[1], $m2->getMapInt32Message()[1]);
1609*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals($m->serializeToJsonString(), $m2->serializeToJsonString());
1610*1b3f573fSAndroid Build Coastguard Worker    }
1611*1b3f573fSAndroid Build Coastguard Worker
1612*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1613*1b3f573fSAndroid Build Coastguard Worker    # Test message equals.
1614*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1615*1b3f573fSAndroid Build Coastguard Worker
1616*1b3f573fSAndroid Build Coastguard Worker    public function testMessageEquals()
1617*1b3f573fSAndroid Build Coastguard Worker    {
1618*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1619*1b3f573fSAndroid Build Coastguard Worker        TestUtil::setTestMessage($m);
1620*1b3f573fSAndroid Build Coastguard Worker        $n = new TestMessage();
1621*1b3f573fSAndroid Build Coastguard Worker        TestUtil::setTestMessage($n);
1622*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals($m, $n);
1623*1b3f573fSAndroid Build Coastguard Worker    }
1624*1b3f573fSAndroid Build Coastguard Worker
1625*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1626*1b3f573fSAndroid Build Coastguard Worker    # Test reference of value
1627*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1628*1b3f573fSAndroid Build Coastguard Worker
1629*1b3f573fSAndroid Build Coastguard Worker    public function testValueIsReference()
1630*1b3f573fSAndroid Build Coastguard Worker    {
1631*1b3f573fSAndroid Build Coastguard Worker        // Bool element
1632*1b3f573fSAndroid Build Coastguard Worker        $values = [true];
1633*1b3f573fSAndroid Build Coastguard Worker        array_walk($values, function (&$value) {});
1634*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1635*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalBool($values[0]);
1636*1b3f573fSAndroid Build Coastguard Worker
1637*1b3f573fSAndroid Build Coastguard Worker        // Int32 element
1638*1b3f573fSAndroid Build Coastguard Worker        $values = [1];
1639*1b3f573fSAndroid Build Coastguard Worker        array_walk($values, function (&$value) {});
1640*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1641*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalInt32($values[0]);
1642*1b3f573fSAndroid Build Coastguard Worker
1643*1b3f573fSAndroid Build Coastguard Worker        // Double element
1644*1b3f573fSAndroid Build Coastguard Worker        $values = [1.0];
1645*1b3f573fSAndroid Build Coastguard Worker        array_walk($values, function (&$value) {});
1646*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1647*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalDouble($values[0]);
1648*1b3f573fSAndroid Build Coastguard Worker
1649*1b3f573fSAndroid Build Coastguard Worker        // String element
1650*1b3f573fSAndroid Build Coastguard Worker        $values = ['a'];
1651*1b3f573fSAndroid Build Coastguard Worker        array_walk($values, function (&$value) {});
1652*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1653*1b3f573fSAndroid Build Coastguard Worker        $m->setOptionalString($values[0]);
1654*1b3f573fSAndroid Build Coastguard Worker
1655*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1656*1b3f573fSAndroid Build Coastguard Worker    }
1657*1b3f573fSAndroid Build Coastguard Worker
1658*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1659*1b3f573fSAndroid Build Coastguard Worker    # Test equality
1660*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1661*1b3f573fSAndroid Build Coastguard Worker
1662*1b3f573fSAndroid Build Coastguard Worker    public function testShallowEquality()
1663*1b3f573fSAndroid Build Coastguard Worker    {
1664*1b3f573fSAndroid Build Coastguard Worker        $m1 = new TestMessage([
1665*1b3f573fSAndroid Build Coastguard Worker            'optional_int32' => -42,
1666*1b3f573fSAndroid Build Coastguard Worker            'optional_int64' => -43,
1667*1b3f573fSAndroid Build Coastguard Worker            'optional_uint32' => 42,
1668*1b3f573fSAndroid Build Coastguard Worker            'optional_uint64' => 43,
1669*1b3f573fSAndroid Build Coastguard Worker            'optional_sint32' => -44,
1670*1b3f573fSAndroid Build Coastguard Worker            'optional_sint64' => -45,
1671*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed32' => 46,
1672*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed64' => 47,
1673*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed32' => -46,
1674*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed64' => -47,
1675*1b3f573fSAndroid Build Coastguard Worker            'optional_float' => 1.5,
1676*1b3f573fSAndroid Build Coastguard Worker            'optional_double' => 1.6,
1677*1b3f573fSAndroid Build Coastguard Worker            'optional_bool' => true,
1678*1b3f573fSAndroid Build Coastguard Worker            'optional_string' => 'a',
1679*1b3f573fSAndroid Build Coastguard Worker            'optional_bytes' => 'bbbb',
1680*1b3f573fSAndroid Build Coastguard Worker            'optional_enum' => TestEnum::ONE,
1681*1b3f573fSAndroid Build Coastguard Worker            ]);
1682*1b3f573fSAndroid Build Coastguard Worker        $data = $m1->serializeToString();
1683*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1684*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1685*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 == $m2);
1686*1b3f573fSAndroid Build Coastguard Worker
1687*1b3f573fSAndroid Build Coastguard Worker        $m1->setOptionalInt32(1234);
1688*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1689*1b3f573fSAndroid Build Coastguard Worker    }
1690*1b3f573fSAndroid Build Coastguard Worker
1691*1b3f573fSAndroid Build Coastguard Worker    public function testDeepEquality()
1692*1b3f573fSAndroid Build Coastguard Worker    {
1693*1b3f573fSAndroid Build Coastguard Worker        $m1 = new TestMessage([
1694*1b3f573fSAndroid Build Coastguard Worker            'optional_int32' => -42,
1695*1b3f573fSAndroid Build Coastguard Worker            'optional_int64' => -43,
1696*1b3f573fSAndroid Build Coastguard Worker            'optional_uint32' => 42,
1697*1b3f573fSAndroid Build Coastguard Worker            'optional_uint64' => 43,
1698*1b3f573fSAndroid Build Coastguard Worker            'optional_sint32' => -44,
1699*1b3f573fSAndroid Build Coastguard Worker            'optional_sint64' => -45,
1700*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed32' => 46,
1701*1b3f573fSAndroid Build Coastguard Worker            'optional_fixed64' => 47,
1702*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed32' => -46,
1703*1b3f573fSAndroid Build Coastguard Worker            'optional_sfixed64' => -47,
1704*1b3f573fSAndroid Build Coastguard Worker            'optional_float' => 1.5,
1705*1b3f573fSAndroid Build Coastguard Worker            'optional_double' => 1.6,
1706*1b3f573fSAndroid Build Coastguard Worker            'optional_bool' => true,
1707*1b3f573fSAndroid Build Coastguard Worker            'optional_string' => 'a',
1708*1b3f573fSAndroid Build Coastguard Worker            'optional_bytes' => 'bbbb',
1709*1b3f573fSAndroid Build Coastguard Worker            'optional_enum' => TestEnum::ONE,
1710*1b3f573fSAndroid Build Coastguard Worker            'optional_message' => new Sub([
1711*1b3f573fSAndroid Build Coastguard Worker                'a' => 33
1712*1b3f573fSAndroid Build Coastguard Worker            ]),
1713*1b3f573fSAndroid Build Coastguard Worker            'repeated_int32' => [-42, -52],
1714*1b3f573fSAndroid Build Coastguard Worker            'repeated_int64' => [-43, -53],
1715*1b3f573fSAndroid Build Coastguard Worker            'repeated_uint32' => [42, 52],
1716*1b3f573fSAndroid Build Coastguard Worker            'repeated_uint64' => [43, 53],
1717*1b3f573fSAndroid Build Coastguard Worker            'repeated_sint32' => [-44, -54],
1718*1b3f573fSAndroid Build Coastguard Worker            'repeated_sint64' => [-45, -55],
1719*1b3f573fSAndroid Build Coastguard Worker            'repeated_fixed32' => [46, 56],
1720*1b3f573fSAndroid Build Coastguard Worker            'repeated_fixed64' => [47, 57],
1721*1b3f573fSAndroid Build Coastguard Worker            'repeated_sfixed32' => [-46, -56],
1722*1b3f573fSAndroid Build Coastguard Worker            'repeated_sfixed64' => [-47, -57],
1723*1b3f573fSAndroid Build Coastguard Worker            'repeated_float' => [1.5, 2.5],
1724*1b3f573fSAndroid Build Coastguard Worker            'repeated_double' => [1.6, 2.6],
1725*1b3f573fSAndroid Build Coastguard Worker            'repeated_bool' => [true, false],
1726*1b3f573fSAndroid Build Coastguard Worker            'repeated_string' => ['a', 'c'],
1727*1b3f573fSAndroid Build Coastguard Worker            'repeated_bytes' => ['bbbb', 'dddd'],
1728*1b3f573fSAndroid Build Coastguard Worker            'repeated_enum' => [TestEnum::ZERO, TestEnum::ONE],
1729*1b3f573fSAndroid Build Coastguard Worker            'repeated_message' => [new Sub(['a' => 34]),
1730*1b3f573fSAndroid Build Coastguard Worker                                   new Sub(['a' => 35])],
1731*1b3f573fSAndroid Build Coastguard Worker            'map_int32_int32' => [-62 => -62],
1732*1b3f573fSAndroid Build Coastguard Worker            'map_int64_int64' => [-63 => -63],
1733*1b3f573fSAndroid Build Coastguard Worker            'map_uint32_uint32' => [62 => 62],
1734*1b3f573fSAndroid Build Coastguard Worker            'map_uint64_uint64' => [63 => 63],
1735*1b3f573fSAndroid Build Coastguard Worker            'map_sint32_sint32' => [-64 => -64],
1736*1b3f573fSAndroid Build Coastguard Worker            'map_sint64_sint64' => [-65 => -65],
1737*1b3f573fSAndroid Build Coastguard Worker            'map_fixed32_fixed32' => [66 => 66],
1738*1b3f573fSAndroid Build Coastguard Worker            'map_fixed64_fixed64' => [67 => 67],
1739*1b3f573fSAndroid Build Coastguard Worker            'map_sfixed32_sfixed32' => [-68 => -68],
1740*1b3f573fSAndroid Build Coastguard Worker            'map_sfixed64_sfixed64' => [-69 => -69],
1741*1b3f573fSAndroid Build Coastguard Worker            'map_int32_float' => [1 => 3.5],
1742*1b3f573fSAndroid Build Coastguard Worker            'map_int32_double' => [1 => 3.6],
1743*1b3f573fSAndroid Build Coastguard Worker            'map_bool_bool' => [true => true],
1744*1b3f573fSAndroid Build Coastguard Worker            'map_string_string' => ['e' => 'e'],
1745*1b3f573fSAndroid Build Coastguard Worker            'map_int32_bytes' => [1 => 'ffff'],
1746*1b3f573fSAndroid Build Coastguard Worker            'map_int32_enum' => [1 => TestEnum::ONE],
1747*1b3f573fSAndroid Build Coastguard Worker            'map_int32_message' => [1 => new Sub(['a' => 36])],
1748*1b3f573fSAndroid Build Coastguard Worker        ]);
1749*1b3f573fSAndroid Build Coastguard Worker        $data = $m1->serializeToString();
1750*1b3f573fSAndroid Build Coastguard Worker
1751*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1752*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1753*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 == $m2);
1754*1b3f573fSAndroid Build Coastguard Worker
1755*1b3f573fSAndroid Build Coastguard Worker        # Nested sub-message is checked.
1756*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1757*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1758*1b3f573fSAndroid Build Coastguard Worker        $m2->getOptionalMessage()->setA(1234);
1759*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1760*1b3f573fSAndroid Build Coastguard Worker
1761*1b3f573fSAndroid Build Coastguard Worker        # Repeated field element is checked.
1762*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1763*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1764*1b3f573fSAndroid Build Coastguard Worker        $m2->getRepeatedInt32()[0] = 1234;
1765*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1766*1b3f573fSAndroid Build Coastguard Worker
1767*1b3f573fSAndroid Build Coastguard Worker        # Repeated field length is checked.
1768*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1769*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1770*1b3f573fSAndroid Build Coastguard Worker        $m2->getRepeatedInt32()[] = 1234;
1771*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1772*1b3f573fSAndroid Build Coastguard Worker
1773*1b3f573fSAndroid Build Coastguard Worker        # SubMessage inside repeated field is checked.
1774*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1775*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1776*1b3f573fSAndroid Build Coastguard Worker        $m2->getRepeatedMessage()[0]->setA(1234);
1777*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1778*1b3f573fSAndroid Build Coastguard Worker
1779*1b3f573fSAndroid Build Coastguard Worker        # Map value is checked.
1780*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1781*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1782*1b3f573fSAndroid Build Coastguard Worker        $m2->getMapInt32Int32()[-62] = 1234;
1783*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1784*1b3f573fSAndroid Build Coastguard Worker
1785*1b3f573fSAndroid Build Coastguard Worker        # Map size is checked.
1786*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1787*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1788*1b3f573fSAndroid Build Coastguard Worker        $m2->getMapInt32Int32()[1234] = 1234;
1789*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1790*1b3f573fSAndroid Build Coastguard Worker
1791*1b3f573fSAndroid Build Coastguard Worker        # SubMessage inside map field is checked.
1792*1b3f573fSAndroid Build Coastguard Worker        $m2 = new TestMessage();
1793*1b3f573fSAndroid Build Coastguard Worker        $m2->mergeFromString($data);
1794*1b3f573fSAndroid Build Coastguard Worker        $m2->getMapInt32Message()[1]->setA(1234);
1795*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m1 != $m2);
1796*1b3f573fSAndroid Build Coastguard Worker
1797*1b3f573fSAndroid Build Coastguard Worker        # TODO: what about unknown fields?
1798*1b3f573fSAndroid Build Coastguard Worker    }
1799*1b3f573fSAndroid Build Coastguard Worker
1800*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1801*1b3f573fSAndroid Build Coastguard Worker    # Test hasOneof<Field> methods exists and working
1802*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1803*1b3f573fSAndroid Build Coastguard Worker
1804*1b3f573fSAndroid Build Coastguard Worker    public function testHasOneof() {
1805*1b3f573fSAndroid Build Coastguard Worker        $m = new TestMessage();
1806*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOneofInt32());
1807*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofInt32(42);
1808*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->hasOneofInt32());
1809*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofString("bar");
1810*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOneofInt32());
1811*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->hasOneofString());
1812*1b3f573fSAndroid Build Coastguard Worker        $m->clear();
1813*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOneofInt32());
1814*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOneofString());
1815*1b3f573fSAndroid Build Coastguard Worker
1816*1b3f573fSAndroid Build Coastguard Worker        $sub_m = new Sub();
1817*1b3f573fSAndroid Build Coastguard Worker        $sub_m->setA(1);
1818*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofMessage($sub_m);
1819*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue($m->hasOneofMessage());
1820*1b3f573fSAndroid Build Coastguard Worker        $m->setOneofMessage(null);
1821*1b3f573fSAndroid Build Coastguard Worker        $this->assertFalse($m->hasOneofMessage());
1822*1b3f573fSAndroid Build Coastguard Worker    }
1823*1b3f573fSAndroid Build Coastguard Worker
1824*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1825*1b3f573fSAndroid Build Coastguard Worker    # Test that we don't crash if users create their own messages.
1826*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1827*1b3f573fSAndroid Build Coastguard Worker
1828*1b3f573fSAndroid Build Coastguard Worker    public function testUserDefinedClass() {
1829*1b3f573fSAndroid Build Coastguard Worker        if (getenv("USE_ZEND_ALLOC") === "0") {
1830*1b3f573fSAndroid Build Coastguard Worker            // We're running a memory test. This test appears to leak in a way
1831*1b3f573fSAndroid Build Coastguard Worker            // we cannot control, PHP bug?
1832*1b3f573fSAndroid Build Coastguard Worker            //
1833*1b3f573fSAndroid Build Coastguard Worker            // TODO: investigate further.
1834*1b3f573fSAndroid Build Coastguard Worker            $this->markTestSkipped();
1835*1b3f573fSAndroid Build Coastguard Worker            return;
1836*1b3f573fSAndroid Build Coastguard Worker        }
1837*1b3f573fSAndroid Build Coastguard Worker
1838*1b3f573fSAndroid Build Coastguard Worker        # This is not allowed, but at least we shouldn't crash.
1839*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(Exception::class);
1840*1b3f573fSAndroid Build Coastguard Worker        new C();
1841*1b3f573fSAndroid Build Coastguard Worker    }
1842*1b3f573fSAndroid Build Coastguard Worker
1843*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1844*1b3f573fSAndroid Build Coastguard Worker    # Test no segfault when error happens
1845*1b3f573fSAndroid Build Coastguard Worker    #########################################################
1846*1b3f573fSAndroid Build Coastguard Worker
1847*1b3f573fSAndroid Build Coastguard Worker    function throwIntendedException()
1848*1b3f573fSAndroid Build Coastguard Worker    {
1849*1b3f573fSAndroid Build Coastguard Worker        throw new Exception('Intended');
1850*1b3f573fSAndroid Build Coastguard Worker    }
1851*1b3f573fSAndroid Build Coastguard Worker    public function testNoSegfaultWithError()
1852*1b3f573fSAndroid Build Coastguard Worker    {
1853*1b3f573fSAndroid Build Coastguard Worker        if (getenv("USE_ZEND_ALLOC") === "0") {
1854*1b3f573fSAndroid Build Coastguard Worker            // We're running a memory test. This test appears to leak in a way
1855*1b3f573fSAndroid Build Coastguard Worker            // we cannot control, PHP bug?
1856*1b3f573fSAndroid Build Coastguard Worker            //
1857*1b3f573fSAndroid Build Coastguard Worker            // TODO: investigate further.
1858*1b3f573fSAndroid Build Coastguard Worker            $this->markTestSkipped();
1859*1b3f573fSAndroid Build Coastguard Worker            return;
1860*1b3f573fSAndroid Build Coastguard Worker        }
1861*1b3f573fSAndroid Build Coastguard Worker        $this->expectException(Exception::class);
1862*1b3f573fSAndroid Build Coastguard Worker
1863*1b3f573fSAndroid Build Coastguard Worker        new TestMessage(['optional_int32' => $this->throwIntendedException()]);
1864*1b3f573fSAndroid Build Coastguard Worker    }
1865*1b3f573fSAndroid Build Coastguard Worker
1866*1b3f573fSAndroid Build Coastguard Worker    public function testNoExceptionWithVarDump()
1867*1b3f573fSAndroid Build Coastguard Worker    {
1868*1b3f573fSAndroid Build Coastguard Worker        $m = new Sub(['a' => 1]);
1869*1b3f573fSAndroid Build Coastguard Worker        /*
1870*1b3f573fSAndroid Build Coastguard Worker         * This line currently segfaults on macOS with:
1871*1b3f573fSAndroid Build Coastguard Worker         *
1872*1b3f573fSAndroid Build Coastguard Worker         *    frame #0: 0x00000001029936cc xdebug.so`xdebug_zend_hash_is_recursive + 4
1873*1b3f573fSAndroid Build Coastguard Worker         *    frame #1: 0x00000001029a6736 xdebug.so`xdebug_var_export_text_ansi + 1006
1874*1b3f573fSAndroid Build Coastguard Worker         *    frame #2: 0x00000001029a715d xdebug.so`xdebug_get_zval_value_text_ansi + 273
1875*1b3f573fSAndroid Build Coastguard Worker         *    frame #3: 0x000000010298a441 xdebug.so`zif_xdebug_var_dump + 297
1876*1b3f573fSAndroid Build Coastguard Worker         *    frame #4: 0x000000010298d558 xdebug.so`xdebug_execute_internal + 640
1877*1b3f573fSAndroid Build Coastguard Worker         *    frame #5: 0x000000010046d47f php`ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER + 364
1878*1b3f573fSAndroid Build Coastguard Worker         *    frame #6: 0x000000010043cabc php`execute_ex + 44
1879*1b3f573fSAndroid Build Coastguard Worker         *    frame #7: 0x000000010298d151 xdebug.so`xdebug_execute_ex + 1662
1880*1b3f573fSAndroid Build Coastguard Worker         *    frame #8: 0x000000010046d865 php`ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER + 426
1881*1b3f573fSAndroid Build Coastguard Worker         *
1882*1b3f573fSAndroid Build Coastguard Worker         * The value we are passing to var_dump() appears to be corrupt somehow.
1883*1b3f573fSAndroid Build Coastguard Worker         */
1884*1b3f573fSAndroid Build Coastguard Worker        /* var_dump($m); */
1885*1b3f573fSAndroid Build Coastguard Worker
1886*1b3f573fSAndroid Build Coastguard Worker        $this->assertTrue(true);
1887*1b3f573fSAndroid Build Coastguard Worker    }
1888*1b3f573fSAndroid Build Coastguard Worker
1889*1b3f573fSAndroid Build Coastguard Worker    public function testIssue9440()
1890*1b3f573fSAndroid Build Coastguard Worker    {
1891*1b3f573fSAndroid Build Coastguard Worker        $m = new Test32Fields();
1892*1b3f573fSAndroid Build Coastguard Worker        $m->setId(8);
1893*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(8, $m->getId());
1894*1b3f573fSAndroid Build Coastguard Worker        $m->setVersion('1');
1895*1b3f573fSAndroid Build Coastguard Worker        $this->assertEquals(8, $m->getId());
1896*1b3f573fSAndroid Build Coastguard Worker    }
1897*1b3f573fSAndroid Build Coastguard Worker}
1898