1*1b3f573fSAndroid Build Coastguard Worker<?php 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_base.php'); 4*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_util.php'); 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestEnum; 7*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage; 8*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage\Sub; 9*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestPackedMessage; 10*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\CodedInputStream; 11*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\FileDescriptorSet; 12*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBLabel; 13*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBType; 14*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBWire; 15*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\CodedOutputStream; 16*1b3f573fSAndroid Build Coastguard Worker 17*1b3f573fSAndroid Build Coastguard Worker/** 18*1b3f573fSAndroid Build Coastguard Worker * Please note, this test is only intended to be run without the protobuf C 19*1b3f573fSAndroid Build Coastguard Worker * extension. 20*1b3f573fSAndroid Build Coastguard Worker */ 21*1b3f573fSAndroid Build Coastguard Workerclass PhpImplementationTest extends TestBase 22*1b3f573fSAndroid Build Coastguard Worker{ 23*1b3f573fSAndroid Build Coastguard Worker /** 24*1b3f573fSAndroid Build Coastguard Worker * Avoid calling setUp, which has void return type (not avalialbe in php7.0). 25*1b3f573fSAndroid Build Coastguard Worker * @before 26*1b3f573fSAndroid Build Coastguard Worker */ 27*1b3f573fSAndroid Build Coastguard Worker public function skipTestsForExtension() 28*1b3f573fSAndroid Build Coastguard Worker { 29*1b3f573fSAndroid Build Coastguard Worker if (extension_loaded('protobuf')) { 30*1b3f573fSAndroid Build Coastguard Worker $this->markTestSkipped(); 31*1b3f573fSAndroid Build Coastguard Worker } 32*1b3f573fSAndroid Build Coastguard Worker } 33*1b3f573fSAndroid Build Coastguard Worker 34*1b3f573fSAndroid Build Coastguard Worker public function testReadInt32() 35*1b3f573fSAndroid Build Coastguard Worker { 36*1b3f573fSAndroid Build Coastguard Worker $value = null; 37*1b3f573fSAndroid Build Coastguard Worker 38*1b3f573fSAndroid Build Coastguard Worker // Positive number. 39*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 40*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt32($input, $value); 41*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $value); 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker // Negative number. 44*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffff0f")); 45*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt32($input, $value); 46*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $value); 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker // Discard overflow bits. 49*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffff7f")); 50*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt32($input, $value); 51*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $value); 52*1b3f573fSAndroid Build Coastguard Worker } 53*1b3f573fSAndroid Build Coastguard Worker 54*1b3f573fSAndroid Build Coastguard Worker public function testReadUint32() 55*1b3f573fSAndroid Build Coastguard Worker { 56*1b3f573fSAndroid Build Coastguard Worker $value = null; 57*1b3f573fSAndroid Build Coastguard Worker 58*1b3f573fSAndroid Build Coastguard Worker // Positive number. 59*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 60*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint32($input, $value); 61*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $value); 62*1b3f573fSAndroid Build Coastguard Worker 63*1b3f573fSAndroid Build Coastguard Worker // Max uint32. 64*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffff0f")); 65*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint32($input, $value); 66*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $value); 67*1b3f573fSAndroid Build Coastguard Worker 68*1b3f573fSAndroid Build Coastguard Worker // Discard overflow bits. 69*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffff7f")); 70*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint32($input, $value); 71*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $value); 72*1b3f573fSAndroid Build Coastguard Worker } 73*1b3f573fSAndroid Build Coastguard Worker 74*1b3f573fSAndroid Build Coastguard Worker public function testReadInt64() 75*1b3f573fSAndroid Build Coastguard Worker { 76*1b3f573fSAndroid Build Coastguard Worker $value = null; 77*1b3f573fSAndroid Build Coastguard Worker 78*1b3f573fSAndroid Build Coastguard Worker // Positive number. 79*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 80*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt64($input, $value); 81*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $value); 82*1b3f573fSAndroid Build Coastguard Worker 83*1b3f573fSAndroid Build Coastguard Worker // Negative number. 84*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffffffffffffff01")); 85*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt64($input, $value); 86*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $value); 87*1b3f573fSAndroid Build Coastguard Worker 88*1b3f573fSAndroid Build Coastguard Worker // Discard overflow bits. 89*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("ffffffffffffffffff0f")); 90*1b3f573fSAndroid Build Coastguard Worker GPBWire::readInt64($input, $value); 91*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $value); 92*1b3f573fSAndroid Build Coastguard Worker } 93*1b3f573fSAndroid Build Coastguard Worker 94*1b3f573fSAndroid Build Coastguard Worker public function testReadUint64() 95*1b3f573fSAndroid Build Coastguard Worker { 96*1b3f573fSAndroid Build Coastguard Worker $value = null; 97*1b3f573fSAndroid Build Coastguard Worker 98*1b3f573fSAndroid Build Coastguard Worker // Positive number. 99*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 100*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint64($input, $value); 101*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $value); 102*1b3f573fSAndroid Build Coastguard Worker 103*1b3f573fSAndroid Build Coastguard Worker // Negative number. 104*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("FFFFFFFFFFFFFFFFFF01")); 105*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint64($input, $value); 106*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $value); 107*1b3f573fSAndroid Build Coastguard Worker 108*1b3f573fSAndroid Build Coastguard Worker // Discard overflow bits. 109*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("FFFFFFFFFFFFFFFFFF0F")); 110*1b3f573fSAndroid Build Coastguard Worker GPBWire::readUint64($input, $value); 111*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $value); 112*1b3f573fSAndroid Build Coastguard Worker } 113*1b3f573fSAndroid Build Coastguard Worker 114*1b3f573fSAndroid Build Coastguard Worker public function testReadSint32() 115*1b3f573fSAndroid Build Coastguard Worker { 116*1b3f573fSAndroid Build Coastguard Worker $value = null; 117*1b3f573fSAndroid Build Coastguard Worker 118*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("00")); 119*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint32($input, $value); 120*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $value); 121*1b3f573fSAndroid Build Coastguard Worker 122*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 123*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint32($input, $value); 124*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $value); 125*1b3f573fSAndroid Build Coastguard Worker 126*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("02")); 127*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint32($input, $value); 128*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $value); 129*1b3f573fSAndroid Build Coastguard Worker } 130*1b3f573fSAndroid Build Coastguard Worker 131*1b3f573fSAndroid Build Coastguard Worker public function testReadSint64() 132*1b3f573fSAndroid Build Coastguard Worker { 133*1b3f573fSAndroid Build Coastguard Worker $value = null; 134*1b3f573fSAndroid Build Coastguard Worker 135*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("00")); 136*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint64($input, $value); 137*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $value); 138*1b3f573fSAndroid Build Coastguard Worker 139*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 140*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint64($input, $value); 141*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $value); 142*1b3f573fSAndroid Build Coastguard Worker 143*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("02")); 144*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSint64($input, $value); 145*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $value); 146*1b3f573fSAndroid Build Coastguard Worker } 147*1b3f573fSAndroid Build Coastguard Worker 148*1b3f573fSAndroid Build Coastguard Worker public function testReadFixed32() 149*1b3f573fSAndroid Build Coastguard Worker { 150*1b3f573fSAndroid Build Coastguard Worker $value = null; 151*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("12345678")); 152*1b3f573fSAndroid Build Coastguard Worker GPBWire::readFixed32($input, $value); 153*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x78563412, $value); 154*1b3f573fSAndroid Build Coastguard Worker } 155*1b3f573fSAndroid Build Coastguard Worker 156*1b3f573fSAndroid Build Coastguard Worker public function testReadFixed64() 157*1b3f573fSAndroid Build Coastguard Worker { 158*1b3f573fSAndroid Build Coastguard Worker $value = null; 159*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("1234567812345678")); 160*1b3f573fSAndroid Build Coastguard Worker GPBWire::readFixed64($input, $value); 161*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 162*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("8671175386481439762", $value); 163*1b3f573fSAndroid Build Coastguard Worker } else { 164*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7856341278563412, $value); 165*1b3f573fSAndroid Build Coastguard Worker } 166*1b3f573fSAndroid Build Coastguard Worker } 167*1b3f573fSAndroid Build Coastguard Worker 168*1b3f573fSAndroid Build Coastguard Worker public function testReadSfixed32() 169*1b3f573fSAndroid Build Coastguard Worker { 170*1b3f573fSAndroid Build Coastguard Worker $value = null; 171*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("12345678")); 172*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSfixed32($input, $value); 173*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x78563412, $value); 174*1b3f573fSAndroid Build Coastguard Worker } 175*1b3f573fSAndroid Build Coastguard Worker 176*1b3f573fSAndroid Build Coastguard Worker public function testReadFloat() 177*1b3f573fSAndroid Build Coastguard Worker { 178*1b3f573fSAndroid Build Coastguard Worker $value = null; 179*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("0000803F")); 180*1b3f573fSAndroid Build Coastguard Worker GPBWire::readFloat($input, $value); 181*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1.0, $value); 182*1b3f573fSAndroid Build Coastguard Worker } 183*1b3f573fSAndroid Build Coastguard Worker 184*1b3f573fSAndroid Build Coastguard Worker public function testReadBool() 185*1b3f573fSAndroid Build Coastguard Worker { 186*1b3f573fSAndroid Build Coastguard Worker $value = null; 187*1b3f573fSAndroid Build Coastguard Worker 188*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("00")); 189*1b3f573fSAndroid Build Coastguard Worker GPBWire::readBool($input, $value); 190*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(false, $value); 191*1b3f573fSAndroid Build Coastguard Worker 192*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("01")); 193*1b3f573fSAndroid Build Coastguard Worker GPBWire::readBool($input, $value); 194*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $value); 195*1b3f573fSAndroid Build Coastguard Worker } 196*1b3f573fSAndroid Build Coastguard Worker 197*1b3f573fSAndroid Build Coastguard Worker public function testReadDouble() 198*1b3f573fSAndroid Build Coastguard Worker { 199*1b3f573fSAndroid Build Coastguard Worker $value = null; 200*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("000000000000F03F")); 201*1b3f573fSAndroid Build Coastguard Worker GPBWire::readDouble($input, $value); 202*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1.0, $value); 203*1b3f573fSAndroid Build Coastguard Worker } 204*1b3f573fSAndroid Build Coastguard Worker 205*1b3f573fSAndroid Build Coastguard Worker public function testReadSfixed64() 206*1b3f573fSAndroid Build Coastguard Worker { 207*1b3f573fSAndroid Build Coastguard Worker $value = null; 208*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin("1234567812345678")); 209*1b3f573fSAndroid Build Coastguard Worker GPBWire::readSfixed64($input, $value); 210*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 211*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("8671175386481439762", $value); 212*1b3f573fSAndroid Build Coastguard Worker } else { 213*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7856341278563412, $value); 214*1b3f573fSAndroid Build Coastguard Worker } 215*1b3f573fSAndroid Build Coastguard Worker } 216*1b3f573fSAndroid Build Coastguard Worker 217*1b3f573fSAndroid Build Coastguard Worker public function testZigZagEncodeDecode() 218*1b3f573fSAndroid Build Coastguard Worker { 219*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, GPBWire::zigZagEncode32(0)); 220*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, GPBWire::zigZagEncode32(-1)); 221*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, GPBWire::zigZagEncode32(1)); 222*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, GPBWire::zigZagEncode32(-2)); 223*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7FFFFFFE, GPBWire::zigZagEncode32(0x3FFFFFFF)); 224*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7FFFFFFF, GPBWire::zigZagEncode32(0xC0000000)); 225*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7FFFFFFF, GPBWire::zigZagEncode32(-1073741824)); 226*1b3f573fSAndroid Build Coastguard Worker 227*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, GPBWire::zigZagDecode32(0)); 228*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, GPBWire::zigZagDecode32(1)); 229*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, GPBWire::zigZagDecode32(2)); 230*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-2, GPBWire::zigZagDecode32(3)); 231*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x3FFFFFFF, GPBWire::zigZagDecode32(0x7FFFFFFE)); 232*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1073741824, GPBWire::zigZagDecode32(0x7FFFFFFF)); 233*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7FFFFFFF, GPBWire::zigZagDecode32(0xFFFFFFFE)); 234*1b3f573fSAndroid Build Coastguard Worker $this->assertSame((int)-2147483648,GPBWire::zigZagDecode32(0xFFFFFFFF)); 235*1b3f573fSAndroid Build Coastguard Worker 236*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 237*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-2, GPBWire::zigZagEncode32(0x7FFFFFFF)); 238*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, GPBWire::zigZagEncode32(0x80000000)); 239*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('0', GPBWire::zigZagEncode64(0)); 240*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', GPBWire::zigZagEncode64(-1)); 241*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', GPBWire::zigZagEncode64(1)); 242*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', GPBWire::zigZagEncode64(-2)); 243*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 244*1b3f573fSAndroid Build Coastguard Worker '2147483646', // 0x7FFFFFE 245*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0x3FFFFFFF)); 246*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 247*1b3f573fSAndroid Build Coastguard Worker '2147483647', // 0x7FFFFFF 248*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(-1073741824)); // 0xFFFFFFFFC0000000 249*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 250*1b3f573fSAndroid Build Coastguard Worker '4294967294', // 0xFFFFFFFE 251*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(2147483647)); // 0x7FFFFFFF 252*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 253*1b3f573fSAndroid Build Coastguard Worker '4294967295', // 0xFFFFFFFF 254*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(-2147483648)); // 0xFFFFFFFF80000000 255*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 256*1b3f573fSAndroid Build Coastguard Worker '18446744073709551614', // 0xFFFFFFFFFFFFFFFE 257*1b3f573fSAndroid Build Coastguard Worker // 0x7FFFFFFFFFFFFFFF 258*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64("9223372036854775807")); 259*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 260*1b3f573fSAndroid Build Coastguard Worker '18446744073709551615', // 0xFFFFFFFFFFFFFFFF 261*1b3f573fSAndroid Build Coastguard Worker // 0x8000000000000000 262*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64("-9223372036854775808")); 263*1b3f573fSAndroid Build Coastguard Worker 264*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('0', GPBWire::zigZagDecode64(0)); 265*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('-1', GPBWire::zigZagDecode64(1)); 266*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', GPBWire::zigZagDecode64(2)); 267*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('-2', GPBWire::zigZagDecode64(3)); 268*1b3f573fSAndroid Build Coastguard Worker } else { 269*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(4294967294, GPBWire::zigZagEncode32(0x7FFFFFFF)); 270*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(4294967295, GPBWire::zigZagEncode32(0x80000000)); 271*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, GPBWire::zigZagEncode64(0)); 272*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, GPBWire::zigZagEncode64(-1)); 273*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, GPBWire::zigZagEncode64(1)); 274*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, GPBWire::zigZagEncode64(-2)); 275*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0x7FFFFFFE, GPBWire::zigZagEncode64(0x3FFFFFFF)); 276*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 277*1b3f573fSAndroid Build Coastguard Worker 0x7FFFFFFF, 278*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0xFFFFFFFFC0000000)); 279*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 280*1b3f573fSAndroid Build Coastguard Worker 0xFFFFFFFE, 281*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0x7FFFFFFF)); 282*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 283*1b3f573fSAndroid Build Coastguard Worker 0xFFFFFFFF, 284*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0xFFFFFFFF80000000)); 285*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 286*1b3f573fSAndroid Build Coastguard Worker -2, // 0xFFFFFFFFFFFFFFFE 287*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0x7FFFFFFFFFFFFFFF)); 288*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 289*1b3f573fSAndroid Build Coastguard Worker -1, // 0xFFFFFFFFFFFFFFFF 290*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagEncode64(0x8000000000000000)); 291*1b3f573fSAndroid Build Coastguard Worker 292*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, GPBWire::zigZagDecode64(0)); 293*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, GPBWire::zigZagDecode64(1)); 294*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, GPBWire::zigZagDecode64(2)); 295*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-2, GPBWire::zigZagDecode64(3)); 296*1b3f573fSAndroid Build Coastguard Worker } 297*1b3f573fSAndroid Build Coastguard Worker 298*1b3f573fSAndroid Build Coastguard Worker // Round trip 299*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, GPBWire::zigZagDecode32(GPBWire::zigZagEncode32(0))); 300*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, GPBWire::zigZagDecode32(GPBWire::zigZagEncode32(1))); 301*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, GPBWire::zigZagDecode32(GPBWire::zigZagEncode32(-1))); 302*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(14927, 303*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagDecode32(GPBWire::zigZagEncode32(14927))); 304*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-3612, 305*1b3f573fSAndroid Build Coastguard Worker GPBWire::zigZagDecode32(GPBWire::zigZagEncode32(-3612))); 306*1b3f573fSAndroid Build Coastguard Worker } 307*1b3f573fSAndroid Build Coastguard Worker 308*1b3f573fSAndroid Build Coastguard Worker public function testDecode() 309*1b3f573fSAndroid Build Coastguard Worker { 310*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 311*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(TestUtil::getGoldenTestMessage()); 312*1b3f573fSAndroid Build Coastguard Worker TestUtil::assertTestMessage($m); 313*1b3f573fSAndroid Build Coastguard Worker 314*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 315*1b3f573fSAndroid Build Coastguard Worker } 316*1b3f573fSAndroid Build Coastguard Worker 317*1b3f573fSAndroid Build Coastguard Worker public function testDescriptorDecode() 318*1b3f573fSAndroid Build Coastguard Worker { 319*1b3f573fSAndroid Build Coastguard Worker $file_desc_set = new FileDescriptorSet(); 320*1b3f573fSAndroid Build Coastguard Worker $file_desc_set->mergeFromString(hex2bin( 321*1b3f573fSAndroid Build Coastguard Worker "0a3b0a12746573745f696e636c7564652e70726f746f120362617222180a" . 322*1b3f573fSAndroid Build Coastguard Worker "0b54657374496e636c75646512090a0161180120012805620670726f746f33")); 323*1b3f573fSAndroid Build Coastguard Worker 324*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, sizeof($file_desc_set->getFile())); 325*1b3f573fSAndroid Build Coastguard Worker 326*1b3f573fSAndroid Build Coastguard Worker $file_desc = $file_desc_set->getFile()[0]; 327*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("test_include.proto", $file_desc->getName()); 328*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("bar", $file_desc->getPackage()); 329*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, sizeof($file_desc->getDependency())); 330*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, sizeof($file_desc->getMessageType())); 331*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, sizeof($file_desc->getEnumType())); 332*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("proto3", $file_desc->getSyntax()); 333*1b3f573fSAndroid Build Coastguard Worker 334*1b3f573fSAndroid Build Coastguard Worker $desc = $file_desc->getMessageType()[0]; 335*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("TestInclude", $desc->getName()); 336*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, sizeof($desc->getField())); 337*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, sizeof($desc->getNestedType())); 338*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, sizeof($desc->getEnumType())); 339*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, sizeof($desc->getOneofDecl())); 340*1b3f573fSAndroid Build Coastguard Worker 341*1b3f573fSAndroid Build Coastguard Worker $field = $desc->getField()[0]; 342*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $field->getName()); 343*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $field->getNumber()); 344*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(GPBLabel::OPTIONAL, $field->getLabel()); 345*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(GPBType::INT32, $field->getType()); 346*1b3f573fSAndroid Build Coastguard Worker } 347*1b3f573fSAndroid Build Coastguard Worker 348*1b3f573fSAndroid Build Coastguard Worker public function testReadVarint64() 349*1b3f573fSAndroid Build Coastguard Worker { 350*1b3f573fSAndroid Build Coastguard Worker $var = 0; 351*1b3f573fSAndroid Build Coastguard Worker 352*1b3f573fSAndroid Build Coastguard Worker // Empty buffer. 353*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('')); 354*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint64($var)); 355*1b3f573fSAndroid Build Coastguard Worker 356*1b3f573fSAndroid Build Coastguard Worker // The largest varint is 10 bytes long. 357*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('8080808080808080808001')); 358*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint64($var)); 359*1b3f573fSAndroid Build Coastguard Worker 360*1b3f573fSAndroid Build Coastguard Worker // Corrupted varint. 361*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808080')); 362*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint64($var)); 363*1b3f573fSAndroid Build Coastguard Worker 364*1b3f573fSAndroid Build Coastguard Worker // Normal case. 365*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001')); 366*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint64($var)); 367*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 368*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('16384', $var); 369*1b3f573fSAndroid Build Coastguard Worker } else { 370*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $var); 371*1b3f573fSAndroid Build Coastguard Worker } 372*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint64($var)); 373*1b3f573fSAndroid Build Coastguard Worker 374*1b3f573fSAndroid Build Coastguard Worker // Read two varint. 375*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001808002')); 376*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint64($var)); 377*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 378*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('16384', $var); 379*1b3f573fSAndroid Build Coastguard Worker } else { 380*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $var); 381*1b3f573fSAndroid Build Coastguard Worker } 382*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint64($var)); 383*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 384*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('32768', $var); 385*1b3f573fSAndroid Build Coastguard Worker } else { 386*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(32768, $var); 387*1b3f573fSAndroid Build Coastguard Worker } 388*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint64($var)); 389*1b3f573fSAndroid Build Coastguard Worker 390*1b3f573fSAndroid Build Coastguard Worker // Read 64 testing 391*1b3f573fSAndroid Build Coastguard Worker $testVals = array( 392*1b3f573fSAndroid Build Coastguard Worker '10' => '0a000000000000000000', 393*1b3f573fSAndroid Build Coastguard Worker '100' => '64000000000000000000', 394*1b3f573fSAndroid Build Coastguard Worker '800' => 'a0060000000000000000', 395*1b3f573fSAndroid Build Coastguard Worker '6400' => '80320000000000000000', 396*1b3f573fSAndroid Build Coastguard Worker '70400' => '80a60400000000000000', 397*1b3f573fSAndroid Build Coastguard Worker '774400' => '80a22f00000000000000', 398*1b3f573fSAndroid Build Coastguard Worker '9292800' => '8098b704000000000000', 399*1b3f573fSAndroid Build Coastguard Worker '74342400' => '80c0b923000000000000', 400*1b3f573fSAndroid Build Coastguard Worker '743424000' => '8080bfe2020000000000', 401*1b3f573fSAndroid Build Coastguard Worker '8177664000' => '8080b5bb1e0000000000', 402*1b3f573fSAndroid Build Coastguard Worker '65421312000' => '8080a8dbf30100000000', 403*1b3f573fSAndroid Build Coastguard Worker '785055744000' => '8080e0c7ec1600000000', 404*1b3f573fSAndroid Build Coastguard Worker '9420668928000' => '808080dd969202000000', 405*1b3f573fSAndroid Build Coastguard Worker '103627358208000' => '808080fff9c717000000', 406*1b3f573fSAndroid Build Coastguard Worker '1139900940288000' => '808080f5bd9783020000', 407*1b3f573fSAndroid Build Coastguard Worker '13678811283456000' => '808080fce699a6180000', 408*1b3f573fSAndroid Build Coastguard Worker '109430490267648000' => '808080e0b7ceb1c20100', 409*1b3f573fSAndroid Build Coastguard Worker '984874412408832000' => '808080e0f5c1bed50d00', 410*1b3f573fSAndroid Build Coastguard Worker ); 411*1b3f573fSAndroid Build Coastguard Worker 412*1b3f573fSAndroid Build Coastguard Worker foreach ($testVals as $original => $encoded) { 413*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin($encoded)); 414*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint64($var)); 415*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($original, $var); 416*1b3f573fSAndroid Build Coastguard Worker } 417*1b3f573fSAndroid Build Coastguard Worker } 418*1b3f573fSAndroid Build Coastguard Worker 419*1b3f573fSAndroid Build Coastguard Worker public function testReadVarint32() 420*1b3f573fSAndroid Build Coastguard Worker { 421*1b3f573fSAndroid Build Coastguard Worker $var = 0; 422*1b3f573fSAndroid Build Coastguard Worker 423*1b3f573fSAndroid Build Coastguard Worker // Empty buffer. 424*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('')); 425*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 426*1b3f573fSAndroid Build Coastguard Worker 427*1b3f573fSAndroid Build Coastguard Worker // The largest varint is 10 bytes long. 428*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('8080808080808080808001')); 429*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 430*1b3f573fSAndroid Build Coastguard Worker 431*1b3f573fSAndroid Build Coastguard Worker // Corrupted varint. 432*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808080')); 433*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 434*1b3f573fSAndroid Build Coastguard Worker 435*1b3f573fSAndroid Build Coastguard Worker // Normal case. 436*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001')); 437*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint32($var)); 438*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $var); 439*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 440*1b3f573fSAndroid Build Coastguard Worker 441*1b3f573fSAndroid Build Coastguard Worker // Read two varint. 442*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001808002')); 443*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint32($var)); 444*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $var); 445*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint32($var)); 446*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(32768, $var); 447*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 448*1b3f573fSAndroid Build Coastguard Worker 449*1b3f573fSAndroid Build Coastguard Worker // Read a 64-bit integer. High-order bits should be discarded. 450*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808081808001')); 451*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readVarint32($var)); 452*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $var); 453*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readVarint32($var)); 454*1b3f573fSAndroid Build Coastguard Worker } 455*1b3f573fSAndroid Build Coastguard Worker 456*1b3f573fSAndroid Build Coastguard Worker public function testReadTag() 457*1b3f573fSAndroid Build Coastguard Worker { 458*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001')); 459*1b3f573fSAndroid Build Coastguard Worker $tag = $input->readTag(); 460*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $tag); 461*1b3f573fSAndroid Build Coastguard Worker $tag = $input->readTag(); 462*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $tag); 463*1b3f573fSAndroid Build Coastguard Worker } 464*1b3f573fSAndroid Build Coastguard Worker 465*1b3f573fSAndroid Build Coastguard Worker public function testPushPopLimit() 466*1b3f573fSAndroid Build Coastguard Worker { 467*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001')); 468*1b3f573fSAndroid Build Coastguard Worker $old_limit = $input->pushLimit(0); 469*1b3f573fSAndroid Build Coastguard Worker $tag = $input->readTag(); 470*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $tag); 471*1b3f573fSAndroid Build Coastguard Worker $input->popLimit($old_limit); 472*1b3f573fSAndroid Build Coastguard Worker $tag = $input->readTag(); 473*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(16384, $tag); 474*1b3f573fSAndroid Build Coastguard Worker } 475*1b3f573fSAndroid Build Coastguard Worker 476*1b3f573fSAndroid Build Coastguard Worker public function testReadRaw() 477*1b3f573fSAndroid Build Coastguard Worker { 478*1b3f573fSAndroid Build Coastguard Worker $input = new CodedInputStream(hex2bin('808001')); 479*1b3f573fSAndroid Build Coastguard Worker $buffer = null; 480*1b3f573fSAndroid Build Coastguard Worker 481*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($input->readRaw(3, $buffer)); 482*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('808001'), $buffer); 483*1b3f573fSAndroid Build Coastguard Worker 484*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($input->readRaw(1, $buffer)); 485*1b3f573fSAndroid Build Coastguard Worker } 486*1b3f573fSAndroid Build Coastguard Worker 487*1b3f573fSAndroid Build Coastguard Worker public function testWriteVarint32() 488*1b3f573fSAndroid Build Coastguard Worker { 489*1b3f573fSAndroid Build Coastguard Worker $output = new CodedOutputStream(3); 490*1b3f573fSAndroid Build Coastguard Worker $output->writeVarint32(16384, true); 491*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('808001'), $output->getData()); 492*1b3f573fSAndroid Build Coastguard Worker 493*1b3f573fSAndroid Build Coastguard Worker // Negative numbers are padded to be compatible with int64. 494*1b3f573fSAndroid Build Coastguard Worker $output = new CodedOutputStream(10); 495*1b3f573fSAndroid Build Coastguard Worker $output->writeVarint32(-43, false); 496*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('D5FFFFFFFFFFFFFFFF01'), $output->getData()); 497*1b3f573fSAndroid Build Coastguard Worker } 498*1b3f573fSAndroid Build Coastguard Worker 499*1b3f573fSAndroid Build Coastguard Worker public function testWriteVarint64() 500*1b3f573fSAndroid Build Coastguard Worker { 501*1b3f573fSAndroid Build Coastguard Worker $output = new CodedOutputStream(10); 502*1b3f573fSAndroid Build Coastguard Worker $output->writeVarint64(-43); 503*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('D5FFFFFFFFFFFFFFFF01'), $output->getData()); 504*1b3f573fSAndroid Build Coastguard Worker } 505*1b3f573fSAndroid Build Coastguard Worker 506*1b3f573fSAndroid Build Coastguard Worker public function testWriteLittleEndian32() 507*1b3f573fSAndroid Build Coastguard Worker { 508*1b3f573fSAndroid Build Coastguard Worker $output = new CodedOutputStream(4); 509*1b3f573fSAndroid Build Coastguard Worker $output->writeLittleEndian32(46); 510*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('2E000000'), $output->getData()); 511*1b3f573fSAndroid Build Coastguard Worker } 512*1b3f573fSAndroid Build Coastguard Worker 513*1b3f573fSAndroid Build Coastguard Worker public function testWriteLittleEndian64() 514*1b3f573fSAndroid Build Coastguard Worker { 515*1b3f573fSAndroid Build Coastguard Worker $output = new CodedOutputStream(8); 516*1b3f573fSAndroid Build Coastguard Worker $output->writeLittleEndian64(47); 517*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(hex2bin('2F00000000000000'), $output->getData()); 518*1b3f573fSAndroid Build Coastguard Worker } 519*1b3f573fSAndroid Build Coastguard Worker 520*1b3f573fSAndroid Build Coastguard Worker public function testByteSize() 521*1b3f573fSAndroid Build Coastguard Worker { 522*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 523*1b3f573fSAndroid Build Coastguard Worker TestUtil::setTestMessage($m); 524*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(504, $m->byteSize()); 525*1b3f573fSAndroid Build Coastguard Worker } 526*1b3f573fSAndroid Build Coastguard Worker 527*1b3f573fSAndroid Build Coastguard Worker public function testPackedByteSize() 528*1b3f573fSAndroid Build Coastguard Worker { 529*1b3f573fSAndroid Build Coastguard Worker $m = new TestPackedMessage(); 530*1b3f573fSAndroid Build Coastguard Worker TestUtil::setTestPackedMessage($m); 531*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(166, $m->byteSize()); 532*1b3f573fSAndroid Build Coastguard Worker } 533*1b3f573fSAndroid Build Coastguard Worker 534*1b3f573fSAndroid Build Coastguard Worker public function testArrayConstructorJsonCaseThrowsException() 535*1b3f573fSAndroid Build Coastguard Worker { 536*1b3f573fSAndroid Build Coastguard Worker $this->expectException(UnexpectedValueException::class); 537*1b3f573fSAndroid Build Coastguard Worker $this->expectExceptionMessage( 538*1b3f573fSAndroid Build Coastguard Worker 'Invalid message property: optionalInt32'); 539*1b3f573fSAndroid Build Coastguard Worker 540*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage([ 541*1b3f573fSAndroid Build Coastguard Worker 'optionalInt32' => -42, 542*1b3f573fSAndroid Build Coastguard Worker ]); 543*1b3f573fSAndroid Build Coastguard Worker } 544*1b3f573fSAndroid Build Coastguard Worker 545*1b3f573fSAndroid Build Coastguard Worker public function testArraysForMessagesThrowsException() 546*1b3f573fSAndroid Build Coastguard Worker { 547*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 548*1b3f573fSAndroid Build Coastguard Worker $this->expectExceptionMessage( 549*1b3f573fSAndroid Build Coastguard Worker 'Expect Foo\TestMessage\Sub.'); 550*1b3f573fSAndroid Build Coastguard Worker 551*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage([ 552*1b3f573fSAndroid Build Coastguard Worker 'optional_message' => [ 553*1b3f573fSAndroid Build Coastguard Worker 'a' => 33 554*1b3f573fSAndroid Build Coastguard Worker ] 555*1b3f573fSAndroid Build Coastguard Worker ]); 556*1b3f573fSAndroid Build Coastguard Worker } 557*1b3f573fSAndroid Build Coastguard Worker 558*1b3f573fSAndroid Build Coastguard Worker public function testArrayConstructorWithNullValues() 559*1b3f573fSAndroid Build Coastguard Worker { 560*1b3f573fSAndroid Build Coastguard Worker $requestData = [ 561*1b3f573fSAndroid Build Coastguard Worker 'optional_bool' => null, 562*1b3f573fSAndroid Build Coastguard Worker 'optional_string' => null, 563*1b3f573fSAndroid Build Coastguard Worker 'optional_bytes' => null, 564*1b3f573fSAndroid Build Coastguard Worker 'optional_message' => null, 565*1b3f573fSAndroid Build Coastguard Worker ]; 566*1b3f573fSAndroid Build Coastguard Worker 567*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage($requestData); 568*1b3f573fSAndroid Build Coastguard Worker 569*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(false, $m->getOptionalBool()); 570*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('', $m->getOptionalString()); 571*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('', $m->getOptionalBytes()); 572*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(null, $m->getOptionalMessage()); 573*1b3f573fSAndroid Build Coastguard Worker } 574*1b3f573fSAndroid Build Coastguard Worker 575*1b3f573fSAndroid Build Coastguard Worker /** 576*1b3f573fSAndroid Build Coastguard Worker * @dataProvider provideArrayConstructorWithNullValuesThrowsException 577*1b3f573fSAndroid Build Coastguard Worker */ 578*1b3f573fSAndroid Build Coastguard Worker public function testArrayConstructorWithNullValuesThrowsException($requestData) 579*1b3f573fSAndroid Build Coastguard Worker { 580*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 581*1b3f573fSAndroid Build Coastguard Worker 582*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage($requestData); 583*1b3f573fSAndroid Build Coastguard Worker } 584*1b3f573fSAndroid Build Coastguard Worker 585*1b3f573fSAndroid Build Coastguard Worker public function provideArrayConstructorWithNullValuesThrowsException() 586*1b3f573fSAndroid Build Coastguard Worker { 587*1b3f573fSAndroid Build Coastguard Worker return [ 588*1b3f573fSAndroid Build Coastguard Worker [['optional_int32' => null]], 589*1b3f573fSAndroid Build Coastguard Worker [['optional_int64' => null]], 590*1b3f573fSAndroid Build Coastguard Worker [['optional_uint32' => null]], 591*1b3f573fSAndroid Build Coastguard Worker [['optional_uint64' => null]], 592*1b3f573fSAndroid Build Coastguard Worker [['optional_sint32' => null]], 593*1b3f573fSAndroid Build Coastguard Worker [['optional_sint64' => null]], 594*1b3f573fSAndroid Build Coastguard Worker [['optional_fixed32' => null]], 595*1b3f573fSAndroid Build Coastguard Worker [['optional_fixed64' => null]], 596*1b3f573fSAndroid Build Coastguard Worker [['optional_sfixed32' => null]], 597*1b3f573fSAndroid Build Coastguard Worker [['optional_sfixed64' => null]], 598*1b3f573fSAndroid Build Coastguard Worker [['optional_float' => null]], 599*1b3f573fSAndroid Build Coastguard Worker [['optional_double' => null]], 600*1b3f573fSAndroid Build Coastguard Worker [['optional_enum' => null]], 601*1b3f573fSAndroid Build Coastguard Worker [['repeated_int32' => null]], 602*1b3f573fSAndroid Build Coastguard Worker [['map_int32_int32' => null]], 603*1b3f573fSAndroid Build Coastguard Worker ]; 604*1b3f573fSAndroid Build Coastguard Worker } 605*1b3f573fSAndroid Build Coastguard Worker} 606