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\RepeatedField; 7*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\GPBType; 8*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestInt32Value; 9*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestInt64Value; 10*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestUInt32Value; 11*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestUInt64Value; 12*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestBoolValue; 13*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestStringValue; 14*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestBytesValue; 15*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestAny; 16*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestEnum; 17*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestLargeFieldNumber; 18*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage; 19*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage\Sub; 20*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestPackedMessage; 21*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestRandomFieldOrder; 22*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestUnpackedMessage; 23*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Any; 24*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\DoubleValue; 25*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\FieldMask; 26*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\FloatValue; 27*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Int32Value; 28*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\UInt32Value; 29*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Int64Value; 30*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\UInt64Value; 31*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\BoolValue; 32*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\StringValue; 33*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\BytesValue; 34*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Value; 35*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\ListValue; 36*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Struct; 37*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\GPBEmpty; 38*1b3f573fSAndroid Build Coastguard Worker 39*1b3f573fSAndroid Build Coastguard Workerclass EncodeDecodeTest extends TestBase 40*1b3f573fSAndroid Build Coastguard Worker{ 41*1b3f573fSAndroid Build Coastguard Worker public function testDecodeJsonSimple() 42*1b3f573fSAndroid Build Coastguard Worker { 43*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 44*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"optionalInt32\":1}"); 45*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getOptionalInt32()); 46*1b3f573fSAndroid Build Coastguard Worker } 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker public function testDecodeJsonUnknown() 49*1b3f573fSAndroid Build Coastguard Worker { 50*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 51*1b3f573fSAndroid Build Coastguard Worker 52*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 53*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":1}"); 54*1b3f573fSAndroid Build Coastguard Worker } 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Worker public function testDecodeJsonIgnoreUnknown() 57*1b3f573fSAndroid Build Coastguard Worker { 58*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 59*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":1}", true); 60*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("{}", $m->serializeToJsonString()); 61*1b3f573fSAndroid Build Coastguard Worker } 62*1b3f573fSAndroid Build Coastguard Worker 63*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelBoolValue() 64*1b3f573fSAndroid Build Coastguard Worker { 65*1b3f573fSAndroid Build Coastguard Worker $m = new BoolValue(); 66*1b3f573fSAndroid Build Coastguard Worker 67*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("true"); 68*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(true, $m->getValue()); 69*1b3f573fSAndroid Build Coastguard Worker 70*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("false"); 71*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(false, $m->getValue()); 72*1b3f573fSAndroid Build Coastguard Worker } 73*1b3f573fSAndroid Build Coastguard Worker 74*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelBoolValue() 75*1b3f573fSAndroid Build Coastguard Worker { 76*1b3f573fSAndroid Build Coastguard Worker $m = new BoolValue(); 77*1b3f573fSAndroid Build Coastguard Worker $m->setValue(true); 78*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("true", $m->serializeToJsonString()); 79*1b3f573fSAndroid Build Coastguard Worker } 80*1b3f573fSAndroid Build Coastguard Worker 81*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelDoubleValue() 82*1b3f573fSAndroid Build Coastguard Worker { 83*1b3f573fSAndroid Build Coastguard Worker $m = new DoubleValue(); 84*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1.5"); 85*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1.5, $m->getValue()); 86*1b3f573fSAndroid Build Coastguard Worker } 87*1b3f573fSAndroid Build Coastguard Worker 88*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelDoubleValue() 89*1b3f573fSAndroid Build Coastguard Worker { 90*1b3f573fSAndroid Build Coastguard Worker $m = new DoubleValue(); 91*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1.5); 92*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("1.5", $m->serializeToJsonString()); 93*1b3f573fSAndroid Build Coastguard Worker } 94*1b3f573fSAndroid Build Coastguard Worker 95*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelFloatValue() 96*1b3f573fSAndroid Build Coastguard Worker { 97*1b3f573fSAndroid Build Coastguard Worker $m = new FloatValue(); 98*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1.5"); 99*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1.5, $m->getValue()); 100*1b3f573fSAndroid Build Coastguard Worker } 101*1b3f573fSAndroid Build Coastguard Worker 102*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelFloatValue() 103*1b3f573fSAndroid Build Coastguard Worker { 104*1b3f573fSAndroid Build Coastguard Worker $m = new FloatValue(); 105*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1.5); 106*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("1.5", $m->serializeToJsonString()); 107*1b3f573fSAndroid Build Coastguard Worker } 108*1b3f573fSAndroid Build Coastguard Worker 109*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelInt32Value() 110*1b3f573fSAndroid Build Coastguard Worker { 111*1b3f573fSAndroid Build Coastguard Worker $m = new Int32Value(); 112*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1"); 113*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 114*1b3f573fSAndroid Build Coastguard Worker } 115*1b3f573fSAndroid Build Coastguard Worker 116*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelInt32Value() 117*1b3f573fSAndroid Build Coastguard Worker { 118*1b3f573fSAndroid Build Coastguard Worker $m = new Int32Value(); 119*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1); 120*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("1", $m->serializeToJsonString()); 121*1b3f573fSAndroid Build Coastguard Worker } 122*1b3f573fSAndroid Build Coastguard Worker 123*1b3f573fSAndroid Build Coastguard Worker public function testDecodeRepeatedInt32Value() 124*1b3f573fSAndroid Build Coastguard Worker { 125*1b3f573fSAndroid Build Coastguard Worker $m = new TestInt32Value(); 126*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"repeated_field\":[12345]}"); 127*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(12345, $m->getRepeatedField()[0]->getValue()); 128*1b3f573fSAndroid Build Coastguard Worker } 129*1b3f573fSAndroid Build Coastguard Worker 130*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelUInt32Value() 131*1b3f573fSAndroid Build Coastguard Worker { 132*1b3f573fSAndroid Build Coastguard Worker $m = new UInt32Value(); 133*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1"); 134*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 135*1b3f573fSAndroid Build Coastguard Worker } 136*1b3f573fSAndroid Build Coastguard Worker 137*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelUInt32Value() 138*1b3f573fSAndroid Build Coastguard Worker { 139*1b3f573fSAndroid Build Coastguard Worker $m = new UInt32Value(); 140*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1); 141*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("1", $m->serializeToJsonString()); 142*1b3f573fSAndroid Build Coastguard Worker } 143*1b3f573fSAndroid Build Coastguard Worker 144*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelInt64Value() 145*1b3f573fSAndroid Build Coastguard Worker { 146*1b3f573fSAndroid Build Coastguard Worker $m = new Int64Value(); 147*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1"); 148*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 149*1b3f573fSAndroid Build Coastguard Worker } 150*1b3f573fSAndroid Build Coastguard Worker 151*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelInt64ValueAsString() 152*1b3f573fSAndroid Build Coastguard Worker { 153*1b3f573fSAndroid Build Coastguard Worker $m = new Int64Value(); 154*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"1\""); 155*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 156*1b3f573fSAndroid Build Coastguard Worker } 157*1b3f573fSAndroid Build Coastguard Worker 158*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelInt64Value() 159*1b3f573fSAndroid Build Coastguard Worker { 160*1b3f573fSAndroid Build Coastguard Worker $m = new Int64Value(); 161*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1); 162*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"1\"", $m->serializeToJsonString()); 163*1b3f573fSAndroid Build Coastguard Worker } 164*1b3f573fSAndroid Build Coastguard Worker 165*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelUInt64Value() 166*1b3f573fSAndroid Build Coastguard Worker { 167*1b3f573fSAndroid Build Coastguard Worker $m = new UInt64Value(); 168*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1"); 169*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 170*1b3f573fSAndroid Build Coastguard Worker } 171*1b3f573fSAndroid Build Coastguard Worker 172*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelUInt64ValueAsString() 173*1b3f573fSAndroid Build Coastguard Worker { 174*1b3f573fSAndroid Build Coastguard Worker $m = new UInt64Value(); 175*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"1\""); 176*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, $m->getValue()); 177*1b3f573fSAndroid Build Coastguard Worker } 178*1b3f573fSAndroid Build Coastguard Worker 179*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelUInt64Value() 180*1b3f573fSAndroid Build Coastguard Worker { 181*1b3f573fSAndroid Build Coastguard Worker $m = new UInt64Value(); 182*1b3f573fSAndroid Build Coastguard Worker $m->setValue(1); 183*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"1\"", $m->serializeToJsonString()); 184*1b3f573fSAndroid Build Coastguard Worker } 185*1b3f573fSAndroid Build Coastguard Worker 186*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelStringValue() 187*1b3f573fSAndroid Build Coastguard Worker { 188*1b3f573fSAndroid Build Coastguard Worker $m = new StringValue(); 189*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"a\""); 190*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $m->getValue()); 191*1b3f573fSAndroid Build Coastguard Worker } 192*1b3f573fSAndroid Build Coastguard Worker 193*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelStringValue() 194*1b3f573fSAndroid Build Coastguard Worker { 195*1b3f573fSAndroid Build Coastguard Worker $m = new StringValue(); 196*1b3f573fSAndroid Build Coastguard Worker $m->setValue("a"); 197*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"a\"", $m->serializeToJsonString()); 198*1b3f573fSAndroid Build Coastguard Worker } 199*1b3f573fSAndroid Build Coastguard Worker 200*1b3f573fSAndroid Build Coastguard Worker public function testDecodeRepeatedStringValue() 201*1b3f573fSAndroid Build Coastguard Worker { 202*1b3f573fSAndroid Build Coastguard Worker $m = new TestStringValue(); 203*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"repeated_field\":[\"a\"]}"); 204*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $m->getRepeatedField()[0]->getValue()); 205*1b3f573fSAndroid Build Coastguard Worker } 206*1b3f573fSAndroid Build Coastguard Worker 207*1b3f573fSAndroid Build Coastguard Worker public function testDecodeMapStringValue() 208*1b3f573fSAndroid Build Coastguard Worker { 209*1b3f573fSAndroid Build Coastguard Worker $m = new TestStringValue(); 210*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"map_field\":{\"1\": \"a\"}}"); 211*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $m->getMapField()[1]->getValue()); 212*1b3f573fSAndroid Build Coastguard Worker } 213*1b3f573fSAndroid Build Coastguard Worker 214*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelBytesValue() 215*1b3f573fSAndroid Build Coastguard Worker { 216*1b3f573fSAndroid Build Coastguard Worker $m = new BytesValue(); 217*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"YQ==\""); 218*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $m->getValue()); 219*1b3f573fSAndroid Build Coastguard Worker } 220*1b3f573fSAndroid Build Coastguard Worker 221*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelBytesValue() 222*1b3f573fSAndroid Build Coastguard Worker { 223*1b3f573fSAndroid Build Coastguard Worker $m = new BytesValue(); 224*1b3f573fSAndroid Build Coastguard Worker $m->setValue("a"); 225*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"YQ==\"", $m->serializeToJsonString()); 226*1b3f573fSAndroid Build Coastguard Worker } 227*1b3f573fSAndroid Build Coastguard Worker 228*1b3f573fSAndroid Build Coastguard Worker public function generateRandomString($length = 10) { 229*1b3f573fSAndroid Build Coastguard Worker $randomString = str_repeat("+", $length); 230*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < $length; $i++) { 231*1b3f573fSAndroid Build Coastguard Worker $randomString[$i] = chr(rand(0, 255)); 232*1b3f573fSAndroid Build Coastguard Worker } 233*1b3f573fSAndroid Build Coastguard Worker return $randomString; 234*1b3f573fSAndroid Build Coastguard Worker } 235*1b3f573fSAndroid Build Coastguard Worker 236*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelLongBytesValue() 237*1b3f573fSAndroid Build Coastguard Worker { 238*1b3f573fSAndroid Build Coastguard Worker $m = new BytesValue(); 239*1b3f573fSAndroid Build Coastguard Worker $data = $this->generateRandomString(12007); 240*1b3f573fSAndroid Build Coastguard Worker $m->setValue($data); 241*1b3f573fSAndroid Build Coastguard Worker $expected = "\"" . base64_encode($data) . "\""; 242*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(strlen($expected), strlen($m->serializeToJsonString())); 243*1b3f573fSAndroid Build Coastguard Worker } 244*1b3f573fSAndroid Build Coastguard Worker 245*1b3f573fSAndroid Build Coastguard Worker public function testEncode() 246*1b3f573fSAndroid Build Coastguard Worker { 247*1b3f573fSAndroid Build Coastguard Worker $from = new TestMessage(); 248*1b3f573fSAndroid Build Coastguard Worker $this->expectEmptyFields($from); 249*1b3f573fSAndroid Build Coastguard Worker $this->setFields($from); 250*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($from); 251*1b3f573fSAndroid Build Coastguard Worker 252*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToString(); 253*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(bin2hex(TestUtil::getGoldenTestMessage()), 254*1b3f573fSAndroid Build Coastguard Worker bin2hex($data)); 255*1b3f573fSAndroid Build Coastguard Worker } 256*1b3f573fSAndroid Build Coastguard Worker 257*1b3f573fSAndroid Build Coastguard Worker public function testDecode() 258*1b3f573fSAndroid Build Coastguard Worker { 259*1b3f573fSAndroid Build Coastguard Worker $to = new TestMessage(); 260*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString(TestUtil::getGoldenTestMessage()); 261*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($to); 262*1b3f573fSAndroid Build Coastguard Worker } 263*1b3f573fSAndroid Build Coastguard Worker 264*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDecode() 265*1b3f573fSAndroid Build Coastguard Worker { 266*1b3f573fSAndroid Build Coastguard Worker $from = new TestMessage(); 267*1b3f573fSAndroid Build Coastguard Worker $this->expectEmptyFields($from); 268*1b3f573fSAndroid Build Coastguard Worker $this->setFields($from); 269*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($from); 270*1b3f573fSAndroid Build Coastguard Worker 271*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToString(); 272*1b3f573fSAndroid Build Coastguard Worker 273*1b3f573fSAndroid Build Coastguard Worker $to = new TestMessage(); 274*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString($data); 275*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($to); 276*1b3f573fSAndroid Build Coastguard Worker } 277*1b3f573fSAndroid Build Coastguard Worker 278*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDecodeEmpty() 279*1b3f573fSAndroid Build Coastguard Worker { 280*1b3f573fSAndroid Build Coastguard Worker $from = new TestMessage(); 281*1b3f573fSAndroid Build Coastguard Worker $this->expectEmptyFields($from); 282*1b3f573fSAndroid Build Coastguard Worker 283*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToString(); 284*1b3f573fSAndroid Build Coastguard Worker 285*1b3f573fSAndroid Build Coastguard Worker $to = new TestMessage(); 286*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString($data); 287*1b3f573fSAndroid Build Coastguard Worker $this->expectEmptyFields($to); 288*1b3f573fSAndroid Build Coastguard Worker } 289*1b3f573fSAndroid Build Coastguard Worker 290*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDecodeOneof() 291*1b3f573fSAndroid Build Coastguard Worker { 292*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 293*1b3f573fSAndroid Build Coastguard Worker 294*1b3f573fSAndroid Build Coastguard Worker $m->setOneofInt32(1); 295*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 296*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 297*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 298*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $n->getOneofInt32()); 299*1b3f573fSAndroid Build Coastguard Worker 300*1b3f573fSAndroid Build Coastguard Worker $m->setOneofFloat(2.0); 301*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 302*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 303*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 304*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2.0, $n->getOneofFloat()); 305*1b3f573fSAndroid Build Coastguard Worker 306*1b3f573fSAndroid Build Coastguard Worker $m->setOneofString('abc'); 307*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 308*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 309*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 310*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('abc', $n->getOneofString()); 311*1b3f573fSAndroid Build Coastguard Worker 312*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 313*1b3f573fSAndroid Build Coastguard Worker $sub_m->setA(1); 314*1b3f573fSAndroid Build Coastguard Worker $m->setOneofMessage($sub_m); 315*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 316*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 317*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 318*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $n->getOneofMessage()->getA()); 319*1b3f573fSAndroid Build Coastguard Worker 320*1b3f573fSAndroid Build Coastguard Worker // Encode default value 321*1b3f573fSAndroid Build Coastguard Worker $m->setOneofEnum(TestEnum::ZERO); 322*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 323*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 324*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 325*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_enum", $n->getMyOneof()); 326*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(TestEnum::ZERO, $n->getOneofEnum()); 327*1b3f573fSAndroid Build Coastguard Worker 328*1b3f573fSAndroid Build Coastguard Worker $m->setOneofString(""); 329*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 330*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 331*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 332*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_string", $n->getMyOneof()); 333*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("", $n->getOneofString()); 334*1b3f573fSAndroid Build Coastguard Worker 335*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 336*1b3f573fSAndroid Build Coastguard Worker $m->setOneofMessage($sub_m); 337*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 338*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 339*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromString($data); 340*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_message", $n->getMyOneof()); 341*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse(is_null($n->getOneofMessage())); 342*1b3f573fSAndroid Build Coastguard Worker 343*1b3f573fSAndroid Build Coastguard Worker } 344*1b3f573fSAndroid Build Coastguard Worker 345*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDecodeOptional() 346*1b3f573fSAndroid Build Coastguard Worker { 347*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 348*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($m->hasTrueOptionalInt32()); 349*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 350*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("", $data); 351*1b3f573fSAndroid Build Coastguard Worker 352*1b3f573fSAndroid Build Coastguard Worker $m->setTrueOptionalInt32(0); 353*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($m->hasTrueOptionalInt32()); 354*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 355*1b3f573fSAndroid Build Coastguard Worker $this->assertNotSame("", $data); 356*1b3f573fSAndroid Build Coastguard Worker 357*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestMessage(); 358*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromString($data); 359*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($m2->hasTrueOptionalInt32()); 360*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $m2->getTrueOptionalInt32()); 361*1b3f573fSAndroid Build Coastguard Worker } 362*1b3f573fSAndroid Build Coastguard Worker 363*1b3f573fSAndroid Build Coastguard Worker public function testJsonEncodeDecodeOptional() 364*1b3f573fSAndroid Build Coastguard Worker { 365*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 366*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($m->hasTrueOptionalInt32()); 367*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 368*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("{}", $data); 369*1b3f573fSAndroid Build Coastguard Worker 370*1b3f573fSAndroid Build Coastguard Worker $m->setTrueOptionalInt32(0); 371*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($m->hasTrueOptionalInt32()); 372*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 373*1b3f573fSAndroid Build Coastguard Worker $this->assertNotSame("{}", $data); 374*1b3f573fSAndroid Build Coastguard Worker 375*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestMessage(); 376*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromJsonString($data); 377*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($m2->hasTrueOptionalInt32()); 378*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $m2->getTrueOptionalInt32()); 379*1b3f573fSAndroid Build Coastguard Worker } 380*1b3f573fSAndroid Build Coastguard Worker 381*1b3f573fSAndroid Build Coastguard Worker public function testJsonEncodeDecodeOneof() 382*1b3f573fSAndroid Build Coastguard Worker { 383*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 384*1b3f573fSAndroid Build Coastguard Worker 385*1b3f573fSAndroid Build Coastguard Worker $m->setOneofEnum(TestEnum::ONE); 386*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 387*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 388*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data); 389*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_enum", $n->getMyOneof()); 390*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(TestEnum::ONE, $n->getOneofEnum()); 391*1b3f573fSAndroid Build Coastguard Worker 392*1b3f573fSAndroid Build Coastguard Worker $m->setOneofString("a"); 393*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 394*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 395*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data); 396*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_string", $n->getMyOneof()); 397*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $n->getOneofString()); 398*1b3f573fSAndroid Build Coastguard Worker 399*1b3f573fSAndroid Build Coastguard Worker $m->setOneofBytes("bbbb"); 400*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 401*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 402*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data); 403*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_bytes", $n->getMyOneof()); 404*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("bbbb", $n->getOneofBytes()); 405*1b3f573fSAndroid Build Coastguard Worker 406*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 407*1b3f573fSAndroid Build Coastguard Worker $m->setOneofMessage($sub_m); 408*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 409*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 410*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data); 411*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("oneof_message", $n->getMyOneof()); 412*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse(is_null($n->getOneofMessage())); 413*1b3f573fSAndroid Build Coastguard Worker } 414*1b3f573fSAndroid Build Coastguard Worker 415*1b3f573fSAndroid Build Coastguard Worker public function testPackedEncode() 416*1b3f573fSAndroid Build Coastguard Worker { 417*1b3f573fSAndroid Build Coastguard Worker $from = new TestPackedMessage(); 418*1b3f573fSAndroid Build Coastguard Worker TestUtil::setTestPackedMessage($from); 419*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(TestUtil::getGoldenTestPackedMessage(), 420*1b3f573fSAndroid Build Coastguard Worker $from->serializeToString()); 421*1b3f573fSAndroid Build Coastguard Worker } 422*1b3f573fSAndroid Build Coastguard Worker 423*1b3f573fSAndroid Build Coastguard Worker public function testPackedDecodePacked() 424*1b3f573fSAndroid Build Coastguard Worker { 425*1b3f573fSAndroid Build Coastguard Worker $to = new TestPackedMessage(); 426*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString(TestUtil::getGoldenTestPackedMessage()); 427*1b3f573fSAndroid Build Coastguard Worker TestUtil::assertTestPackedMessage($to); 428*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 429*1b3f573fSAndroid Build Coastguard Worker } 430*1b3f573fSAndroid Build Coastguard Worker 431*1b3f573fSAndroid Build Coastguard Worker public function testPackedDecodeUnpacked() 432*1b3f573fSAndroid Build Coastguard Worker { 433*1b3f573fSAndroid Build Coastguard Worker $to = new TestPackedMessage(); 434*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage()); 435*1b3f573fSAndroid Build Coastguard Worker TestUtil::assertTestPackedMessage($to); 436*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 437*1b3f573fSAndroid Build Coastguard Worker } 438*1b3f573fSAndroid Build Coastguard Worker 439*1b3f573fSAndroid Build Coastguard Worker public function testUnpackedEncode() 440*1b3f573fSAndroid Build Coastguard Worker { 441*1b3f573fSAndroid Build Coastguard Worker $from = new TestUnpackedMessage(); 442*1b3f573fSAndroid Build Coastguard Worker TestUtil::setTestPackedMessage($from); 443*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(TestUtil::getGoldenTestUnpackedMessage(), 444*1b3f573fSAndroid Build Coastguard Worker $from->serializeToString()); 445*1b3f573fSAndroid Build Coastguard Worker } 446*1b3f573fSAndroid Build Coastguard Worker 447*1b3f573fSAndroid Build Coastguard Worker public function testUnpackedDecodePacked() 448*1b3f573fSAndroid Build Coastguard Worker { 449*1b3f573fSAndroid Build Coastguard Worker $to = new TestUnpackedMessage(); 450*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString(TestUtil::getGoldenTestPackedMessage()); 451*1b3f573fSAndroid Build Coastguard Worker TestUtil::assertTestPackedMessage($to); 452*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 453*1b3f573fSAndroid Build Coastguard Worker } 454*1b3f573fSAndroid Build Coastguard Worker 455*1b3f573fSAndroid Build Coastguard Worker public function testUnpackedDecodeUnpacked() 456*1b3f573fSAndroid Build Coastguard Worker { 457*1b3f573fSAndroid Build Coastguard Worker $to = new TestUnpackedMessage(); 458*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage()); 459*1b3f573fSAndroid Build Coastguard Worker TestUtil::assertTestPackedMessage($to); 460*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 461*1b3f573fSAndroid Build Coastguard Worker } 462*1b3f573fSAndroid Build Coastguard Worker 463*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInt64() 464*1b3f573fSAndroid Build Coastguard Worker { 465*1b3f573fSAndroid Build Coastguard Worker // Read 64 testing 466*1b3f573fSAndroid Build Coastguard Worker $testVals = array( 467*1b3f573fSAndroid Build Coastguard Worker '10' => '100a', 468*1b3f573fSAndroid Build Coastguard Worker '100' => '1064', 469*1b3f573fSAndroid Build Coastguard Worker '800' => '10a006', 470*1b3f573fSAndroid Build Coastguard Worker '6400' => '108032', 471*1b3f573fSAndroid Build Coastguard Worker '70400' => '1080a604', 472*1b3f573fSAndroid Build Coastguard Worker '774400' => '1080a22f', 473*1b3f573fSAndroid Build Coastguard Worker '9292800' => '108098b704', 474*1b3f573fSAndroid Build Coastguard Worker '74342400' => '1080c0b923', 475*1b3f573fSAndroid Build Coastguard Worker '743424000' => '108080bfe202', 476*1b3f573fSAndroid Build Coastguard Worker '8177664000' => '108080b5bb1e', 477*1b3f573fSAndroid Build Coastguard Worker '65421312000' => '108080a8dbf301', 478*1b3f573fSAndroid Build Coastguard Worker '785055744000' => '108080e0c7ec16', 479*1b3f573fSAndroid Build Coastguard Worker '9420668928000' => '10808080dd969202', 480*1b3f573fSAndroid Build Coastguard Worker '103627358208000' => '10808080fff9c717', 481*1b3f573fSAndroid Build Coastguard Worker '1139900940288000' => '10808080f5bd978302', 482*1b3f573fSAndroid Build Coastguard Worker '13678811283456000' => '10808080fce699a618', 483*1b3f573fSAndroid Build Coastguard Worker '109430490267648000' => '10808080e0b7ceb1c201', 484*1b3f573fSAndroid Build Coastguard Worker '984874412408832000' => '10808080e0f5c1bed50d', 485*1b3f573fSAndroid Build Coastguard Worker ); 486*1b3f573fSAndroid Build Coastguard Worker 487*1b3f573fSAndroid Build Coastguard Worker $msg = new TestMessage(); 488*1b3f573fSAndroid Build Coastguard Worker foreach ($testVals as $original => $encoded) { 489*1b3f573fSAndroid Build Coastguard Worker $msg->setOptionalInt64($original); 490*1b3f573fSAndroid Build Coastguard Worker $data = $msg->serializeToString(); 491*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($encoded, bin2hex($data)); 492*1b3f573fSAndroid Build Coastguard Worker $msg->setOptionalInt64(0); 493*1b3f573fSAndroid Build Coastguard Worker $msg->mergeFromString($data); 494*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($original, $msg->getOptionalInt64()); 495*1b3f573fSAndroid Build Coastguard Worker } 496*1b3f573fSAndroid Build Coastguard Worker } 497*1b3f573fSAndroid Build Coastguard Worker 498*1b3f573fSAndroid Build Coastguard Worker public function testDecodeToExistingMessage() 499*1b3f573fSAndroid Build Coastguard Worker { 500*1b3f573fSAndroid Build Coastguard Worker $m1 = new TestMessage(); 501*1b3f573fSAndroid Build Coastguard Worker $this->setFields($m1); 502*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($m1); 503*1b3f573fSAndroid Build Coastguard Worker 504*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestMessage(); 505*1b3f573fSAndroid Build Coastguard Worker $this->setFields2($m2); 506*1b3f573fSAndroid Build Coastguard Worker $data = $m2->serializeToString(); 507*1b3f573fSAndroid Build Coastguard Worker 508*1b3f573fSAndroid Build Coastguard Worker $m1->mergeFromString($data); 509*1b3f573fSAndroid Build Coastguard Worker $this->expectFieldsMerged($m1); 510*1b3f573fSAndroid Build Coastguard Worker } 511*1b3f573fSAndroid Build Coastguard Worker 512*1b3f573fSAndroid Build Coastguard Worker public function testDecodeFieldNonExist() 513*1b3f573fSAndroid Build Coastguard Worker { 514*1b3f573fSAndroid Build Coastguard Worker $data = hex2bin('c80501'); 515*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 516*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($data); 517*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 518*1b3f573fSAndroid Build Coastguard Worker } 519*1b3f573fSAndroid Build Coastguard Worker 520*1b3f573fSAndroid Build Coastguard Worker public function testEncodeNegativeInt32() 521*1b3f573fSAndroid Build Coastguard Worker { 522*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 523*1b3f573fSAndroid Build Coastguard Worker $m->setOptionalInt32(-1); 524*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 525*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("08ffffffffffffffffff01", bin2hex($data)); 526*1b3f573fSAndroid Build Coastguard Worker } 527*1b3f573fSAndroid Build Coastguard Worker 528*1b3f573fSAndroid Build Coastguard Worker public function testDecodeNegativeInt32() 529*1b3f573fSAndroid Build Coastguard Worker { 530*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 531*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getOptionalInt32()); 532*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("08ffffffffffffffffff01")); 533*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $m->getOptionalInt32()); 534*1b3f573fSAndroid Build Coastguard Worker 535*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 536*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getOptionalInt32()); 537*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("08ffffffff0f")); 538*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(-1, $m->getOptionalInt32()); 539*1b3f573fSAndroid Build Coastguard Worker } 540*1b3f573fSAndroid Build Coastguard Worker 541*1b3f573fSAndroid Build Coastguard Worker public function testRandomFieldOrder() 542*1b3f573fSAndroid Build Coastguard Worker { 543*1b3f573fSAndroid Build Coastguard Worker $m = new TestRandomFieldOrder(); 544*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 545*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("", $data); 546*1b3f573fSAndroid Build Coastguard Worker } 547*1b3f573fSAndroid Build Coastguard Worker 548*1b3f573fSAndroid Build Coastguard Worker public function testLargeFieldNumber() 549*1b3f573fSAndroid Build Coastguard Worker { 550*1b3f573fSAndroid Build Coastguard Worker $m = new TestLargeFieldNumber(['large_field_number' => 5]); 551*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToString(); 552*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestLargeFieldNumber(); 553*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromString($data); 554*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(5, $m2->getLargeFieldNumber()); 555*1b3f573fSAndroid Build Coastguard Worker } 556*1b3f573fSAndroid Build Coastguard Worker 557*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidInt32() 558*1b3f573fSAndroid Build Coastguard Worker { 559*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 560*1b3f573fSAndroid Build Coastguard Worker 561*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 562*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('08')); 563*1b3f573fSAndroid Build Coastguard Worker } 564*1b3f573fSAndroid Build Coastguard Worker 565*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidSubMessage() 566*1b3f573fSAndroid Build Coastguard Worker { 567*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 568*1b3f573fSAndroid Build Coastguard Worker 569*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 570*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('9A010108')); 571*1b3f573fSAndroid Build Coastguard Worker } 572*1b3f573fSAndroid Build Coastguard Worker 573*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidInt64() 574*1b3f573fSAndroid Build Coastguard Worker { 575*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 576*1b3f573fSAndroid Build Coastguard Worker 577*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 578*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('10')); 579*1b3f573fSAndroid Build Coastguard Worker } 580*1b3f573fSAndroid Build Coastguard Worker 581*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidUInt32() 582*1b3f573fSAndroid Build Coastguard Worker { 583*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 584*1b3f573fSAndroid Build Coastguard Worker 585*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 586*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('18')); 587*1b3f573fSAndroid Build Coastguard Worker } 588*1b3f573fSAndroid Build Coastguard Worker 589*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidUInt64() 590*1b3f573fSAndroid Build Coastguard Worker { 591*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 592*1b3f573fSAndroid Build Coastguard Worker 593*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 594*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('20')); 595*1b3f573fSAndroid Build Coastguard Worker } 596*1b3f573fSAndroid Build Coastguard Worker 597*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidSInt32() 598*1b3f573fSAndroid Build Coastguard Worker { 599*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 600*1b3f573fSAndroid Build Coastguard Worker 601*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 602*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('28')); 603*1b3f573fSAndroid Build Coastguard Worker } 604*1b3f573fSAndroid Build Coastguard Worker 605*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidSInt64() 606*1b3f573fSAndroid Build Coastguard Worker { 607*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 608*1b3f573fSAndroid Build Coastguard Worker 609*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 610*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('30')); 611*1b3f573fSAndroid Build Coastguard Worker } 612*1b3f573fSAndroid Build Coastguard Worker 613*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidFixed32() 614*1b3f573fSAndroid Build Coastguard Worker { 615*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 616*1b3f573fSAndroid Build Coastguard Worker 617*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 618*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('3D')); 619*1b3f573fSAndroid Build Coastguard Worker } 620*1b3f573fSAndroid Build Coastguard Worker 621*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidFixed64() 622*1b3f573fSAndroid Build Coastguard Worker { 623*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 624*1b3f573fSAndroid Build Coastguard Worker 625*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 626*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('41')); 627*1b3f573fSAndroid Build Coastguard Worker } 628*1b3f573fSAndroid Build Coastguard Worker 629*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidSFixed32() 630*1b3f573fSAndroid Build Coastguard Worker { 631*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 632*1b3f573fSAndroid Build Coastguard Worker 633*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 634*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('4D')); 635*1b3f573fSAndroid Build Coastguard Worker } 636*1b3f573fSAndroid Build Coastguard Worker 637*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidSFixed64() 638*1b3f573fSAndroid Build Coastguard Worker { 639*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 640*1b3f573fSAndroid Build Coastguard Worker 641*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 642*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('51')); 643*1b3f573fSAndroid Build Coastguard Worker } 644*1b3f573fSAndroid Build Coastguard Worker 645*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidFloat() 646*1b3f573fSAndroid Build Coastguard Worker { 647*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 648*1b3f573fSAndroid Build Coastguard Worker 649*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 650*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('5D')); 651*1b3f573fSAndroid Build Coastguard Worker } 652*1b3f573fSAndroid Build Coastguard Worker 653*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidDouble() 654*1b3f573fSAndroid Build Coastguard Worker { 655*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 656*1b3f573fSAndroid Build Coastguard Worker 657*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 658*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('61')); 659*1b3f573fSAndroid Build Coastguard Worker } 660*1b3f573fSAndroid Build Coastguard Worker 661*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidBool() 662*1b3f573fSAndroid Build Coastguard Worker { 663*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 664*1b3f573fSAndroid Build Coastguard Worker 665*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 666*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('68')); 667*1b3f573fSAndroid Build Coastguard Worker } 668*1b3f573fSAndroid Build Coastguard Worker 669*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidStringLengthMiss() 670*1b3f573fSAndroid Build Coastguard Worker { 671*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 672*1b3f573fSAndroid Build Coastguard Worker 673*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 674*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('72')); 675*1b3f573fSAndroid Build Coastguard Worker } 676*1b3f573fSAndroid Build Coastguard Worker 677*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidStringDataMiss() 678*1b3f573fSAndroid Build Coastguard Worker { 679*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 680*1b3f573fSAndroid Build Coastguard Worker 681*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 682*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('7201')); 683*1b3f573fSAndroid Build Coastguard Worker } 684*1b3f573fSAndroid Build Coastguard Worker 685*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidBytesLengthMiss() 686*1b3f573fSAndroid Build Coastguard Worker { 687*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 688*1b3f573fSAndroid Build Coastguard Worker 689*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 690*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('7A')); 691*1b3f573fSAndroid Build Coastguard Worker } 692*1b3f573fSAndroid Build Coastguard Worker 693*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidBytesDataMiss() 694*1b3f573fSAndroid Build Coastguard Worker { 695*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 696*1b3f573fSAndroid Build Coastguard Worker 697*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 698*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('7A01')); 699*1b3f573fSAndroid Build Coastguard Worker } 700*1b3f573fSAndroid Build Coastguard Worker 701*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDecodeValidUtf8() 702*1b3f573fSAndroid Build Coastguard Worker { 703*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 704*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"optionalString\":\"\\u1000\"}"); 705*1b3f573fSAndroid Build Coastguard Worker $serialized = $m->serializeToString(); 706*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestMessage(); 707*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromString($serialized); 708*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($m->getOptionalString(), $m2->getOptionalString()); 709*1b3f573fSAndroid Build Coastguard Worker } 710*1b3f573fSAndroid Build Coastguard Worker 711*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidEnum() 712*1b3f573fSAndroid Build Coastguard Worker { 713*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 714*1b3f573fSAndroid Build Coastguard Worker 715*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 716*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('8001')); 717*1b3f573fSAndroid Build Coastguard Worker } 718*1b3f573fSAndroid Build Coastguard Worker 719*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidMessageLengthMiss() 720*1b3f573fSAndroid Build Coastguard Worker { 721*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 722*1b3f573fSAndroid Build Coastguard Worker 723*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 724*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('8A01')); 725*1b3f573fSAndroid Build Coastguard Worker } 726*1b3f573fSAndroid Build Coastguard Worker 727*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidMessageDataMiss() 728*1b3f573fSAndroid Build Coastguard Worker { 729*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 730*1b3f573fSAndroid Build Coastguard Worker 731*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 732*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('8A0101')); 733*1b3f573fSAndroid Build Coastguard Worker } 734*1b3f573fSAndroid Build Coastguard Worker 735*1b3f573fSAndroid Build Coastguard Worker public function testDecodeInvalidPackedMessageLength() 736*1b3f573fSAndroid Build Coastguard Worker { 737*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 738*1b3f573fSAndroid Build Coastguard Worker 739*1b3f573fSAndroid Build Coastguard Worker $m = new TestPackedMessage(); 740*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin('D205')); 741*1b3f573fSAndroid Build Coastguard Worker } 742*1b3f573fSAndroid Build Coastguard Worker 743*1b3f573fSAndroid Build Coastguard Worker public function testUnknown() 744*1b3f573fSAndroid Build Coastguard Worker { 745*1b3f573fSAndroid Build Coastguard Worker // Test preserve unknown for varint. 746*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 747*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('F80601'); // TODO(teboring): Add a util to encode 748*1b3f573fSAndroid Build Coastguard Worker // varint for better readability 749*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 750*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 751*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(bin2hex($from), bin2hex($to)); 752*1b3f573fSAndroid Build Coastguard Worker 753*1b3f573fSAndroid Build Coastguard Worker // Test preserve unknown for 64-bit. 754*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 755*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('F9060000000000000000'); 756*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 757*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 758*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(bin2hex($from), bin2hex($to)); 759*1b3f573fSAndroid Build Coastguard Worker 760*1b3f573fSAndroid Build Coastguard Worker // Test preserve unknown for length delimited. 761*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 762*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('FA0600'); 763*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 764*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 765*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(bin2hex($from), bin2hex($to)); 766*1b3f573fSAndroid Build Coastguard Worker 767*1b3f573fSAndroid Build Coastguard Worker // Test preserve unknown for 32-bit. 768*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 769*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('FD0600000000'); 770*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 771*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 772*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(bin2hex($from), bin2hex($to)); 773*1b3f573fSAndroid Build Coastguard Worker 774*1b3f573fSAndroid Build Coastguard Worker // Test discard unknown in message. 775*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 776*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('F80601'); 777*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 778*1b3f573fSAndroid Build Coastguard Worker $m->discardUnknownFields(); 779*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 780*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("", bin2hex($to)); 781*1b3f573fSAndroid Build Coastguard Worker 782*1b3f573fSAndroid Build Coastguard Worker // Test discard unknown for singular message field. 783*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 784*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('8A0103F80601'); 785*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 786*1b3f573fSAndroid Build Coastguard Worker $m->discardUnknownFields(); 787*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 788*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("8a0100", bin2hex($to)); 789*1b3f573fSAndroid Build Coastguard Worker 790*1b3f573fSAndroid Build Coastguard Worker // Test discard unknown for repeated message field. 791*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 792*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('FA0203F80601'); 793*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 794*1b3f573fSAndroid Build Coastguard Worker $m->discardUnknownFields(); 795*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 796*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("fa0200", bin2hex($to)); 797*1b3f573fSAndroid Build Coastguard Worker 798*1b3f573fSAndroid Build Coastguard Worker // Test discard unknown for map message value field. 799*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 800*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin("BA050708011203F80601"); 801*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 802*1b3f573fSAndroid Build Coastguard Worker $m->discardUnknownFields(); 803*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 804*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("ba050408011200", bin2hex($to)); 805*1b3f573fSAndroid Build Coastguard Worker 806*1b3f573fSAndroid Build Coastguard Worker // Test discard unknown for singular message field. 807*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 808*1b3f573fSAndroid Build Coastguard Worker $from = hex2bin('9A0403F80601'); 809*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString($from); 810*1b3f573fSAndroid Build Coastguard Worker $m->discardUnknownFields(); 811*1b3f573fSAndroid Build Coastguard Worker $to = $m->serializeToString(); 812*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("9a0400", bin2hex($to)); 813*1b3f573fSAndroid Build Coastguard Worker } 814*1b3f573fSAndroid Build Coastguard Worker 815*1b3f573fSAndroid Build Coastguard Worker public function testJsonUnknown() 816*1b3f573fSAndroid Build Coastguard Worker { 817*1b3f573fSAndroid Build Coastguard Worker // Test unknown number 818*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 819*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":1, 820*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 821*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 822*1b3f573fSAndroid Build Coastguard Worker 823*1b3f573fSAndroid Build Coastguard Worker // Test unknown bool 824*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 825*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":true, 826*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 827*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 828*1b3f573fSAndroid Build Coastguard Worker 829*1b3f573fSAndroid Build Coastguard Worker // Test unknown string 830*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 831*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":\"abc\", 832*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 833*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 834*1b3f573fSAndroid Build Coastguard Worker 835*1b3f573fSAndroid Build Coastguard Worker // Test unknown null 836*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 837*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":null, 838*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 839*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 840*1b3f573fSAndroid Build Coastguard Worker 841*1b3f573fSAndroid Build Coastguard Worker // Test unknown array 842*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 843*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[], 844*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 845*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 846*1b3f573fSAndroid Build Coastguard Worker 847*1b3f573fSAndroid Build Coastguard Worker // Test unknown number array 848*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 849*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[1], 850*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 851*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 852*1b3f573fSAndroid Build Coastguard Worker 853*1b3f573fSAndroid Build Coastguard Worker // Test unknown bool array 854*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 855*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[true], 856*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 857*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 858*1b3f573fSAndroid Build Coastguard Worker 859*1b3f573fSAndroid Build Coastguard Worker // Test unknown string array 860*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 861*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[\"a\"], 862*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 863*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 864*1b3f573fSAndroid Build Coastguard Worker 865*1b3f573fSAndroid Build Coastguard Worker // Test unknown null array 866*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 867*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[null], 868*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 869*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 870*1b3f573fSAndroid Build Coastguard Worker 871*1b3f573fSAndroid Build Coastguard Worker // Test unknown array array 872*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 873*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[[]], 874*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 875*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 876*1b3f573fSAndroid Build Coastguard Worker 877*1b3f573fSAndroid Build Coastguard Worker // Test unknown object array 878*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 879*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[{}], 880*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 881*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 882*1b3f573fSAndroid Build Coastguard Worker 883*1b3f573fSAndroid Build Coastguard Worker // Test unknown double value array 884*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 885*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":[1, 2], 886*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 887*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 888*1b3f573fSAndroid Build Coastguard Worker 889*1b3f573fSAndroid Build Coastguard Worker // Test unknown object 890*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 891*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{}, 892*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 893*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 894*1b3f573fSAndroid Build Coastguard Worker 895*1b3f573fSAndroid Build Coastguard Worker // Test unknown number object 896*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 897*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":1}, 898*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 899*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 900*1b3f573fSAndroid Build Coastguard Worker 901*1b3f573fSAndroid Build Coastguard Worker // Test unknown bool object 902*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 903*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":true}, 904*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 905*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 906*1b3f573fSAndroid Build Coastguard Worker 907*1b3f573fSAndroid Build Coastguard Worker // Test unknown string object 908*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 909*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":\"a\"}, 910*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 911*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 912*1b3f573fSAndroid Build Coastguard Worker 913*1b3f573fSAndroid Build Coastguard Worker // Test unknown null object 914*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 915*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":null}, 916*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 917*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 918*1b3f573fSAndroid Build Coastguard Worker 919*1b3f573fSAndroid Build Coastguard Worker // Test unknown array object 920*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 921*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":[]}, 922*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 923*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 924*1b3f573fSAndroid Build Coastguard Worker 925*1b3f573fSAndroid Build Coastguard Worker // Test unknown object object 926*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 927*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":{}}, 928*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 929*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 930*1b3f573fSAndroid Build Coastguard Worker 931*1b3f573fSAndroid Build Coastguard Worker // Test unknown double value object 932*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 933*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"unknown\":{\"a\":1, \"b\":1}, 934*1b3f573fSAndroid Build Coastguard Worker \"optionalInt32\":1}", true); 935*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $m->getOptionalInt32()); 936*1b3f573fSAndroid Build Coastguard Worker 937*1b3f573fSAndroid Build Coastguard Worker // Test unknown enum value 938*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 939*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"optionalEnum\":\"UNKNOWN\"}", true); 940*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $m->getOptionalEnum()); 941*1b3f573fSAndroid Build Coastguard Worker } 942*1b3f573fSAndroid Build Coastguard Worker 943*1b3f573fSAndroid Build Coastguard Worker public function testJsonEncode() 944*1b3f573fSAndroid Build Coastguard Worker { 945*1b3f573fSAndroid Build Coastguard Worker $from = new TestMessage(); 946*1b3f573fSAndroid Build Coastguard Worker $this->setFields($from); 947*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 948*1b3f573fSAndroid Build Coastguard Worker $to = new TestMessage(); 949*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 950*1b3f573fSAndroid Build Coastguard Worker $this->expectFields($to); 951*1b3f573fSAndroid Build Coastguard Worker } 952*1b3f573fSAndroid Build Coastguard Worker 953*1b3f573fSAndroid Build Coastguard Worker public function testJsonEncodeNullSubMessage() 954*1b3f573fSAndroid Build Coastguard Worker { 955*1b3f573fSAndroid Build Coastguard Worker $from = new TestMessage(); 956*1b3f573fSAndroid Build Coastguard Worker $from->setOptionalMessage(null); 957*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 958*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("{}", $data); 959*1b3f573fSAndroid Build Coastguard Worker } 960*1b3f573fSAndroid Build Coastguard Worker 961*1b3f573fSAndroid Build Coastguard Worker public function testDecodeDuration() 962*1b3f573fSAndroid Build Coastguard Worker { 963*1b3f573fSAndroid Build Coastguard Worker $m = new Google\Protobuf\Duration(); 964*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"1234.5678s\""); 965*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1234, $m->getSeconds()); 966*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(567800000, $m->getNanos()); 967*1b3f573fSAndroid Build Coastguard Worker } 968*1b3f573fSAndroid Build Coastguard Worker 969*1b3f573fSAndroid Build Coastguard Worker public function testEncodeDuration() 970*1b3f573fSAndroid Build Coastguard Worker { 971*1b3f573fSAndroid Build Coastguard Worker $m = new Google\Protobuf\Duration(); 972*1b3f573fSAndroid Build Coastguard Worker $m->setSeconds(1234); 973*1b3f573fSAndroid Build Coastguard Worker $m->setNanos(999999999); 974*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("\"1234.999999999s\"", $m->serializeToJsonString()); 975*1b3f573fSAndroid Build Coastguard Worker } 976*1b3f573fSAndroid Build Coastguard Worker 977*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTimestamp() 978*1b3f573fSAndroid Build Coastguard Worker { 979*1b3f573fSAndroid Build Coastguard Worker $m = new Google\Protobuf\Timestamp(); 980*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"2000-01-01T00:00:00.123456789Z\""); 981*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(946684800, $m->getSeconds()); 982*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(123456789, $m->getNanos()); 983*1b3f573fSAndroid Build Coastguard Worker } 984*1b3f573fSAndroid Build Coastguard Worker 985*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTimestamp() 986*1b3f573fSAndroid Build Coastguard Worker { 987*1b3f573fSAndroid Build Coastguard Worker $m = new Google\Protobuf\Timestamp(); 988*1b3f573fSAndroid Build Coastguard Worker $m->setSeconds(946684800); 989*1b3f573fSAndroid Build Coastguard Worker $m->setNanos(123456789); 990*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("\"2000-01-01T00:00:00.123456789Z\"", 991*1b3f573fSAndroid Build Coastguard Worker $m->serializeToJsonString()); 992*1b3f573fSAndroid Build Coastguard Worker } 993*1b3f573fSAndroid Build Coastguard Worker 994*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelValue() 995*1b3f573fSAndroid Build Coastguard Worker { 996*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 997*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"a\""); 998*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("a", $m->getStringValue()); 999*1b3f573fSAndroid Build Coastguard Worker 1000*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1001*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("1.5"); 1002*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1.5, $m->getNumberValue()); 1003*1b3f573fSAndroid Build Coastguard Worker 1004*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1005*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("true"); 1006*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $m->getBoolValue()); 1007*1b3f573fSAndroid Build Coastguard Worker 1008*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1009*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("null"); 1010*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("null_value", $m->getKind()); 1011*1b3f573fSAndroid Build Coastguard Worker 1012*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1013*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("[1]"); 1014*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("list_value", $m->getKind()); 1015*1b3f573fSAndroid Build Coastguard Worker 1016*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1017*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"a\":1}"); 1018*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("struct_value", $m->getKind()); 1019*1b3f573fSAndroid Build Coastguard Worker } 1020*1b3f573fSAndroid Build Coastguard Worker 1021*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelValue() 1022*1b3f573fSAndroid Build Coastguard Worker { 1023*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1024*1b3f573fSAndroid Build Coastguard Worker $m->setStringValue("a"); 1025*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"a\"", $m->serializeToJsonString()); 1026*1b3f573fSAndroid Build Coastguard Worker 1027*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1028*1b3f573fSAndroid Build Coastguard Worker $m->setNumberValue(1.5); 1029*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("1.5", $m->serializeToJsonString()); 1030*1b3f573fSAndroid Build Coastguard Worker 1031*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1032*1b3f573fSAndroid Build Coastguard Worker $m->setBoolValue(true); 1033*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("true", $m->serializeToJsonString()); 1034*1b3f573fSAndroid Build Coastguard Worker 1035*1b3f573fSAndroid Build Coastguard Worker $m = new Value(); 1036*1b3f573fSAndroid Build Coastguard Worker $m->setNullValue(0); 1037*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("null", $m->serializeToJsonString()); 1038*1b3f573fSAndroid Build Coastguard Worker } 1039*1b3f573fSAndroid Build Coastguard Worker 1040*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelListValue() 1041*1b3f573fSAndroid Build Coastguard Worker { 1042*1b3f573fSAndroid Build Coastguard Worker $m = new ListValue(); 1043*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("[1]"); 1044*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1.0, $m->getValues()[0]->getNumberValue()); 1045*1b3f573fSAndroid Build Coastguard Worker } 1046*1b3f573fSAndroid Build Coastguard Worker 1047*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelListValue() 1048*1b3f573fSAndroid Build Coastguard Worker { 1049*1b3f573fSAndroid Build Coastguard Worker $m = new ListValue(); 1050*1b3f573fSAndroid Build Coastguard Worker $arr = $m->getValues(); 1051*1b3f573fSAndroid Build Coastguard Worker $sub = new Value(); 1052*1b3f573fSAndroid Build Coastguard Worker $sub->setNumberValue(1.5); 1053*1b3f573fSAndroid Build Coastguard Worker $arr[] = $sub; 1054*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("[1.5]", $m->serializeToJsonString()); 1055*1b3f573fSAndroid Build Coastguard Worker } 1056*1b3f573fSAndroid Build Coastguard Worker 1057*1b3f573fSAndroid Build Coastguard Worker public function testEncodeEmptyListValue() 1058*1b3f573fSAndroid Build Coastguard Worker { 1059*1b3f573fSAndroid Build Coastguard Worker $m = new Struct(); 1060*1b3f573fSAndroid Build Coastguard Worker $m->setFields(['test' => (new Value())->setListValue(new ListValue())]); 1061*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('{"test":[]}', $m->serializeToJsonString()); 1062*1b3f573fSAndroid Build Coastguard Worker } 1063*1b3f573fSAndroid Build Coastguard Worker 1064*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelStruct() 1065*1b3f573fSAndroid Build Coastguard Worker { 1066*1b3f573fSAndroid Build Coastguard Worker $m = new Struct(); 1067*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"a\":{\"b\":1}}"); 1068*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1.0, $m->getFields()["a"] 1069*1b3f573fSAndroid Build Coastguard Worker ->getStructValue() 1070*1b3f573fSAndroid Build Coastguard Worker ->getFields()["b"]->getNumberValue()); 1071*1b3f573fSAndroid Build Coastguard Worker } 1072*1b3f573fSAndroid Build Coastguard Worker 1073*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelStruct() 1074*1b3f573fSAndroid Build Coastguard Worker { 1075*1b3f573fSAndroid Build Coastguard Worker $m = new Struct(); 1076*1b3f573fSAndroid Build Coastguard Worker $map = $m->getFields(); 1077*1b3f573fSAndroid Build Coastguard Worker $sub = new Value(); 1078*1b3f573fSAndroid Build Coastguard Worker $sub->setNumberValue(1.5); 1079*1b3f573fSAndroid Build Coastguard Worker $map["a"] = $sub; 1080*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("{\"a\":1.5}", $m->serializeToJsonString()); 1081*1b3f573fSAndroid Build Coastguard Worker } 1082*1b3f573fSAndroid Build Coastguard Worker 1083*1b3f573fSAndroid Build Coastguard Worker public function testEncodeEmptyStruct() 1084*1b3f573fSAndroid Build Coastguard Worker { 1085*1b3f573fSAndroid Build Coastguard Worker $m = new Struct(); 1086*1b3f573fSAndroid Build Coastguard Worker $m->setFields(['test' => (new Value())->setStructValue(new Struct())]); 1087*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('{"test":{}}', $m->serializeToJsonString()); 1088*1b3f573fSAndroid Build Coastguard Worker } 1089*1b3f573fSAndroid Build Coastguard Worker 1090*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelAny() 1091*1b3f573fSAndroid Build Coastguard Worker { 1092*1b3f573fSAndroid Build Coastguard Worker // Make sure packed message has been created at least once. 1093*1b3f573fSAndroid Build Coastguard Worker $packed = new TestMessage(); 1094*1b3f573fSAndroid Build Coastguard Worker 1095*1b3f573fSAndroid Build Coastguard Worker $m1 = new Any(); 1096*1b3f573fSAndroid Build Coastguard Worker $m1->mergeFromJsonString( 1097*1b3f573fSAndroid Build Coastguard Worker "{\"optionalInt32\": 1, " . 1098*1b3f573fSAndroid Build Coastguard Worker "\"@type\":\"type.googleapis.com/foo.TestMessage\"}"); 1099*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1100*1b3f573fSAndroid Build Coastguard Worker $m1->getTypeUrl()); 1101*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("0801", bin2hex($m1->getValue())); 1102*1b3f573fSAndroid Build Coastguard Worker 1103*1b3f573fSAndroid Build Coastguard Worker $m2 = new Any(); 1104*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromJsonString( 1105*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/foo.TestMessage\", " . 1106*1b3f573fSAndroid Build Coastguard Worker "\"optionalInt32\": 1}"); 1107*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1108*1b3f573fSAndroid Build Coastguard Worker $m2->getTypeUrl()); 1109*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("0801", bin2hex($m2->getValue())); 1110*1b3f573fSAndroid Build Coastguard Worker 1111*1b3f573fSAndroid Build Coastguard Worker $m3 = new Any(); 1112*1b3f573fSAndroid Build Coastguard Worker $m3->mergeFromJsonString( 1113*1b3f573fSAndroid Build Coastguard Worker "{\"optionalInt32\": 1, " . 1114*1b3f573fSAndroid Build Coastguard Worker "\"@type\":\"type.googleapis.com/foo.TestMessage\", " . 1115*1b3f573fSAndroid Build Coastguard Worker "\"optionalInt64\": 2}"); 1116*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1117*1b3f573fSAndroid Build Coastguard Worker $m3->getTypeUrl()); 1118*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("08011002", bin2hex($m3->getValue())); 1119*1b3f573fSAndroid Build Coastguard Worker } 1120*1b3f573fSAndroid Build Coastguard Worker 1121*1b3f573fSAndroid Build Coastguard Worker public function testDecodeAny() 1122*1b3f573fSAndroid Build Coastguard Worker { 1123*1b3f573fSAndroid Build Coastguard Worker // Make sure packed message has been created at least once. 1124*1b3f573fSAndroid Build Coastguard Worker $packed = new TestMessage(); 1125*1b3f573fSAndroid Build Coastguard Worker 1126*1b3f573fSAndroid Build Coastguard Worker $m1 = new TestAny(); 1127*1b3f573fSAndroid Build Coastguard Worker $m1->mergeFromJsonString( 1128*1b3f573fSAndroid Build Coastguard Worker "{\"any\": {\"optionalInt32\": 1, " . 1129*1b3f573fSAndroid Build Coastguard Worker "\"@type\":\"type.googleapis.com/foo.TestMessage\"}}"); 1130*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1131*1b3f573fSAndroid Build Coastguard Worker $m1->getAny()->getTypeUrl()); 1132*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("0801", bin2hex($m1->getAny()->getValue())); 1133*1b3f573fSAndroid Build Coastguard Worker 1134*1b3f573fSAndroid Build Coastguard Worker $m2 = new TestAny(); 1135*1b3f573fSAndroid Build Coastguard Worker $m2->mergeFromJsonString( 1136*1b3f573fSAndroid Build Coastguard Worker "{\"any\":{\"@type\":\"type.googleapis.com/foo.TestMessage\", " . 1137*1b3f573fSAndroid Build Coastguard Worker "\"optionalInt32\": 1}}"); 1138*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1139*1b3f573fSAndroid Build Coastguard Worker $m2->getAny()->getTypeUrl()); 1140*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("0801", bin2hex($m2->getAny()->getValue())); 1141*1b3f573fSAndroid Build Coastguard Worker 1142*1b3f573fSAndroid Build Coastguard Worker $m3 = new TestAny(); 1143*1b3f573fSAndroid Build Coastguard Worker $m3->mergeFromJsonString( 1144*1b3f573fSAndroid Build Coastguard Worker "{\"any\":{\"optionalInt32\": 1, " . 1145*1b3f573fSAndroid Build Coastguard Worker "\"@type\":\"type.googleapis.com/foo.TestMessage\", " . 1146*1b3f573fSAndroid Build Coastguard Worker "\"optionalInt64\": 2}}"); 1147*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/foo.TestMessage", 1148*1b3f573fSAndroid Build Coastguard Worker $m3->getAny()->getTypeUrl()); 1149*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("08011002", bin2hex($m3->getAny()->getValue())); 1150*1b3f573fSAndroid Build Coastguard Worker } 1151*1b3f573fSAndroid Build Coastguard Worker 1152*1b3f573fSAndroid Build Coastguard Worker public function testDecodeAnyWithWellKnownPacked() 1153*1b3f573fSAndroid Build Coastguard Worker { 1154*1b3f573fSAndroid Build Coastguard Worker // Make sure packed message has been created at least once. 1155*1b3f573fSAndroid Build Coastguard Worker $packed = new Int32Value(); 1156*1b3f573fSAndroid Build Coastguard Worker 1157*1b3f573fSAndroid Build Coastguard Worker $m1 = new TestAny(); 1158*1b3f573fSAndroid Build Coastguard Worker $m1->mergeFromJsonString( 1159*1b3f573fSAndroid Build Coastguard Worker "{\"any\":" . 1160*1b3f573fSAndroid Build Coastguard Worker " {\"@type\":\"type.googleapis.com/google.protobuf.Int32Value\"," . 1161*1b3f573fSAndroid Build Coastguard Worker " \"value\":1}}"); 1162*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("type.googleapis.com/google.protobuf.Int32Value", 1163*1b3f573fSAndroid Build Coastguard Worker $m1->getAny()->getTypeUrl()); 1164*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("0801", bin2hex($m1->getAny()->getValue())); 1165*1b3f573fSAndroid Build Coastguard Worker } 1166*1b3f573fSAndroid Build Coastguard Worker 1167*1b3f573fSAndroid Build Coastguard Worker public function testDecodeAnyWithUnknownPacked() 1168*1b3f573fSAndroid Build Coastguard Worker { 1169*1b3f573fSAndroid Build Coastguard Worker $this->expectException(Exception::class); 1170*1b3f573fSAndroid Build Coastguard Worker 1171*1b3f573fSAndroid Build Coastguard Worker $m = new TestAny(); 1172*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString( 1173*1b3f573fSAndroid Build Coastguard Worker "{\"any\":" . 1174*1b3f573fSAndroid Build Coastguard Worker " {\"@type\":\"type.googleapis.com/unknown\"," . 1175*1b3f573fSAndroid Build Coastguard Worker " \"value\":1}}"); 1176*1b3f573fSAndroid Build Coastguard Worker } 1177*1b3f573fSAndroid Build Coastguard Worker 1178*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelAny() 1179*1b3f573fSAndroid Build Coastguard Worker { 1180*1b3f573fSAndroid Build Coastguard Worker // Test a normal message. 1181*1b3f573fSAndroid Build Coastguard Worker $packed = new TestMessage(); 1182*1b3f573fSAndroid Build Coastguard Worker $packed->setOptionalInt32(123); 1183*1b3f573fSAndroid Build Coastguard Worker $packed->setOptionalString("abc"); 1184*1b3f573fSAndroid Build Coastguard Worker 1185*1b3f573fSAndroid Build Coastguard Worker $m = new Any(); 1186*1b3f573fSAndroid Build Coastguard Worker $m->pack($packed); 1187*1b3f573fSAndroid Build Coastguard Worker $expected1 = 1188*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/foo.TestMessage\"," . 1189*1b3f573fSAndroid Build Coastguard Worker "\"optional_int32\":123,\"optional_string\":\"abc\"}"; 1190*1b3f573fSAndroid Build Coastguard Worker $expected2 = 1191*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/foo.TestMessage\"," . 1192*1b3f573fSAndroid Build Coastguard Worker "\"optionalInt32\":123,\"optionalString\":\"abc\"}"; 1193*1b3f573fSAndroid Build Coastguard Worker $result = $m->serializeToJsonString(); 1194*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($expected1 === $result || $expected2 === $result); 1195*1b3f573fSAndroid Build Coastguard Worker 1196*1b3f573fSAndroid Build Coastguard Worker // Test a well known message. 1197*1b3f573fSAndroid Build Coastguard Worker $packed = new Int32Value(); 1198*1b3f573fSAndroid Build Coastguard Worker $packed->setValue(123); 1199*1b3f573fSAndroid Build Coastguard Worker 1200*1b3f573fSAndroid Build Coastguard Worker $m = new Any(); 1201*1b3f573fSAndroid Build Coastguard Worker $m->pack($packed); 1202*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 1203*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/google.protobuf.Int32Value\"," . 1204*1b3f573fSAndroid Build Coastguard Worker "\"value\":123}", 1205*1b3f573fSAndroid Build Coastguard Worker $m->serializeToJsonString()); 1206*1b3f573fSAndroid Build Coastguard Worker 1207*1b3f573fSAndroid Build Coastguard Worker // Test an Any message. 1208*1b3f573fSAndroid Build Coastguard Worker $outer = new Any(); 1209*1b3f573fSAndroid Build Coastguard Worker $outer->pack($m); 1210*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 1211*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/google.protobuf.Any\"," . 1212*1b3f573fSAndroid Build Coastguard Worker "\"value\":{\"@type\":\"type.googleapis.com/google.protobuf.Int32Value\"," . 1213*1b3f573fSAndroid Build Coastguard Worker "\"value\":123}}", 1214*1b3f573fSAndroid Build Coastguard Worker $outer->serializeToJsonString()); 1215*1b3f573fSAndroid Build Coastguard Worker 1216*1b3f573fSAndroid Build Coastguard Worker // Test a Timestamp message. 1217*1b3f573fSAndroid Build Coastguard Worker $packed = new Google\Protobuf\Timestamp(); 1218*1b3f573fSAndroid Build Coastguard Worker $packed->setSeconds(946684800); 1219*1b3f573fSAndroid Build Coastguard Worker $packed->setNanos(123456789); 1220*1b3f573fSAndroid Build Coastguard Worker $m = new Any(); 1221*1b3f573fSAndroid Build Coastguard Worker $m->pack($packed); 1222*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 1223*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/google.protobuf.Timestamp\"," . 1224*1b3f573fSAndroid Build Coastguard Worker "\"value\":\"2000-01-01T00:00:00.123456789Z\"}", 1225*1b3f573fSAndroid Build Coastguard Worker $m->serializeToJsonString()); 1226*1b3f573fSAndroid Build Coastguard Worker } 1227*1b3f573fSAndroid Build Coastguard Worker 1228*1b3f573fSAndroid Build Coastguard Worker public function testEncodeAnyWithDefaultWrapperMessagePacked() 1229*1b3f573fSAndroid Build Coastguard Worker { 1230*1b3f573fSAndroid Build Coastguard Worker $any = new Any(); 1231*1b3f573fSAndroid Build Coastguard Worker $any->pack(new TestInt32Value([ 1232*1b3f573fSAndroid Build Coastguard Worker 'field' => new Int32Value(['value' => 0]), 1233*1b3f573fSAndroid Build Coastguard Worker ])); 1234*1b3f573fSAndroid Build Coastguard Worker $this->assertSame( 1235*1b3f573fSAndroid Build Coastguard Worker "{\"@type\":\"type.googleapis.com/foo.TestInt32Value\"," . 1236*1b3f573fSAndroid Build Coastguard Worker "\"field\":0}", 1237*1b3f573fSAndroid Build Coastguard Worker $any->serializeToJsonString()); 1238*1b3f573fSAndroid Build Coastguard Worker } 1239*1b3f573fSAndroid Build Coastguard Worker 1240*1b3f573fSAndroid Build Coastguard Worker public function testDecodeTopLevelFieldMask() 1241*1b3f573fSAndroid Build Coastguard Worker { 1242*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1243*1b3f573fSAndroid Build Coastguard Worker $m->setMapStringString(['a'=>'abcdefg']); 1244*1b3f573fSAndroid Build Coastguard Worker $data1 = $m->serializeToJsonString(); 1245*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 1246*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data1); 1247*1b3f573fSAndroid Build Coastguard Worker $data2 = $n->serializeToJsonString(); 1248*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($data1, $data2); 1249*1b3f573fSAndroid Build Coastguard Worker 1250*1b3f573fSAndroid Build Coastguard Worker $m = new FieldMask(); 1251*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"foo.barBaz,qux\""); 1252*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("foo.bar_baz", $m->getPaths()[0]); 1253*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("qux", $m->getPaths()[1]); 1254*1b3f573fSAndroid Build Coastguard Worker } 1255*1b3f573fSAndroid Build Coastguard Worker 1256*1b3f573fSAndroid Build Coastguard Worker public function testEncodeTopLevelFieldMask() 1257*1b3f573fSAndroid Build Coastguard Worker { 1258*1b3f573fSAndroid Build Coastguard Worker $m = new FieldMask(); 1259*1b3f573fSAndroid Build Coastguard Worker $m->setPaths(["foo.bar_baz", "qux"]); 1260*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("\"foo.barBaz,qux\"", $m->serializeToJsonString()); 1261*1b3f573fSAndroid Build Coastguard Worker } 1262*1b3f573fSAndroid Build Coastguard Worker 1263*1b3f573fSAndroid Build Coastguard Worker public function testDecodeEmptyFieldMask() 1264*1b3f573fSAndroid Build Coastguard Worker { 1265*1b3f573fSAndroid Build Coastguard Worker $m = new FieldMask(); 1266*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("\"\""); 1267*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("", $m->serializeToString()); 1268*1b3f573fSAndroid Build Coastguard Worker } 1269*1b3f573fSAndroid Build Coastguard Worker 1270*1b3f573fSAndroid Build Coastguard Worker public function testJsonDecodeMapWithDefaultValueKey() 1271*1b3f573fSAndroid Build Coastguard Worker { 1272*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1273*1b3f573fSAndroid Build Coastguard Worker $m->getMapInt32Int32()[0] = 0; 1274*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("{\"mapInt32Int32\":{\"0\":0}}", 1275*1b3f573fSAndroid Build Coastguard Worker $m->serializeToJsonString()); 1276*1b3f573fSAndroid Build Coastguard Worker 1277*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1278*1b3f573fSAndroid Build Coastguard Worker $m->getMapStringString()[""] = ""; 1279*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("{\"mapStringString\":{\"\":\"\"}}", 1280*1b3f573fSAndroid Build Coastguard Worker $m->serializeToJsonString()); 1281*1b3f573fSAndroid Build Coastguard Worker } 1282*1b3f573fSAndroid Build Coastguard Worker 1283*1b3f573fSAndroid Build Coastguard Worker public function testJsonDecodeNumericStringMapKey() 1284*1b3f573fSAndroid Build Coastguard Worker { 1285*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1286*1b3f573fSAndroid Build Coastguard Worker $m->getMapStringString()["1"] = "1"; 1287*1b3f573fSAndroid Build Coastguard Worker $data = $m->serializeToJsonString(); 1288*1b3f573fSAndroid Build Coastguard Worker $this->assertSame("{\"mapStringString\":{\"1\":\"1\"}}", $data); 1289*1b3f573fSAndroid Build Coastguard Worker $n = new TestMessage(); 1290*1b3f573fSAndroid Build Coastguard Worker $n->mergeFromJsonString($data); 1291*1b3f573fSAndroid Build Coastguard Worker } 1292*1b3f573fSAndroid Build Coastguard Worker 1293*1b3f573fSAndroid Build Coastguard Worker public function testMessageMapNoValue() 1294*1b3f573fSAndroid Build Coastguard Worker { 1295*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1296*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("CA0700")); 1297*1b3f573fSAndroid Build Coastguard Worker $m->serializeToString(); 1298*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 1299*1b3f573fSAndroid Build Coastguard Worker } 1300*1b3f573fSAndroid Build Coastguard Worker 1301*1b3f573fSAndroid Build Coastguard Worker public function testAnyMapNoValue() 1302*1b3f573fSAndroid Build Coastguard Worker { 1303*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1304*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("D20700")); 1305*1b3f573fSAndroid Build Coastguard Worker $m->serializeToString(); 1306*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 1307*1b3f573fSAndroid Build Coastguard Worker } 1308*1b3f573fSAndroid Build Coastguard Worker 1309*1b3f573fSAndroid Build Coastguard Worker public function testListValueMapNoValue() 1310*1b3f573fSAndroid Build Coastguard Worker { 1311*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1312*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("DA0700")); 1313*1b3f573fSAndroid Build Coastguard Worker $m->serializeToString(); 1314*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 1315*1b3f573fSAndroid Build Coastguard Worker } 1316*1b3f573fSAndroid Build Coastguard Worker 1317*1b3f573fSAndroid Build Coastguard Worker public function testStructMapNoValue() 1318*1b3f573fSAndroid Build Coastguard Worker { 1319*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 1320*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromString(hex2bin("E20700")); 1321*1b3f573fSAndroid Build Coastguard Worker $m->serializeToString(); 1322*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 1323*1b3f573fSAndroid Build Coastguard Worker } 1324*1b3f573fSAndroid Build Coastguard Worker 1325*1b3f573fSAndroid Build Coastguard Worker /** 1326*1b3f573fSAndroid Build Coastguard Worker * @dataProvider wrappersDataProvider 1327*1b3f573fSAndroid Build Coastguard Worker */ 1328*1b3f573fSAndroid Build Coastguard Worker public function testWrapperJsonDecodeAndGet( 1329*1b3f573fSAndroid Build Coastguard Worker $class, 1330*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValue, 1331*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValueData, 1332*1b3f573fSAndroid Build Coastguard Worker $defaultValue, 1333*1b3f573fSAndroid Build Coastguard Worker $defaultValueData 1334*1b3f573fSAndroid Build Coastguard Worker ) 1335*1b3f573fSAndroid Build Coastguard Worker { 1336*1b3f573fSAndroid Build Coastguard Worker // Singular with non-default 1337*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1338*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"field\":" . $nonDefaultValueData . "}"); 1339*1b3f573fSAndroid Build Coastguard Worker $wrapper = $m->getField(); 1340*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $wrapper->getValue()); 1341*1b3f573fSAndroid Build Coastguard Worker 1342*1b3f573fSAndroid Build Coastguard Worker // Singular with default 1343*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1344*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"field\":" . $defaultValueData . "}"); 1345*1b3f573fSAndroid Build Coastguard Worker $wrapper = $m->getField(); 1346*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $wrapper->getValue()); 1347*1b3f573fSAndroid Build Coastguard Worker 1348*1b3f573fSAndroid Build Coastguard Worker // Repeated with empty 1349*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1350*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"repeated_field\":[]}"); 1351*1b3f573fSAndroid Build Coastguard Worker $repeatedWrapper = $m->getRepeatedField(); 1352*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, count($repeatedWrapper)); 1353*1b3f573fSAndroid Build Coastguard Worker 1354*1b3f573fSAndroid Build Coastguard Worker // Repeated with non-default 1355*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1356*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"repeated_field\":[" . $defaultValueData . "]}"); 1357*1b3f573fSAndroid Build Coastguard Worker $repeatedWrapper = $m->getRepeatedField(); 1358*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, count($repeatedWrapper)); 1359*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $repeatedWrapper[0]->getValue()); 1360*1b3f573fSAndroid Build Coastguard Worker 1361*1b3f573fSAndroid Build Coastguard Worker // Repeated with default 1362*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1363*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"repeated_field\":[" . $defaultValueData . "]}"); 1364*1b3f573fSAndroid Build Coastguard Worker $repeatedWrapper = $m->getRepeatedField(); 1365*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, count($repeatedWrapper)); 1366*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $repeatedWrapper[0]->getValue()); 1367*1b3f573fSAndroid Build Coastguard Worker 1368*1b3f573fSAndroid Build Coastguard Worker // Oneof with non-default 1369*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1370*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"oneof_field\":" . $nonDefaultValueData . "}"); 1371*1b3f573fSAndroid Build Coastguard Worker $wrapper = $m->getOneofField(); 1372*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $wrapper->getValue()); 1373*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("oneof_field", $m->getOneofFields()); 1374*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getInt32Field()); 1375*1b3f573fSAndroid Build Coastguard Worker 1376*1b3f573fSAndroid Build Coastguard Worker // Oneof with default 1377*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1378*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"oneof_field\":" . $defaultValueData . "}"); 1379*1b3f573fSAndroid Build Coastguard Worker $wrapper = $m->getOneofField(); 1380*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $wrapper->getValue()); 1381*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("oneof_field", $m->getOneofFields()); 1382*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getInt32Field()); 1383*1b3f573fSAndroid Build Coastguard Worker } 1384*1b3f573fSAndroid Build Coastguard Worker 1385*1b3f573fSAndroid Build Coastguard Worker /** 1386*1b3f573fSAndroid Build Coastguard Worker * @dataProvider wrappersDataProvider 1387*1b3f573fSAndroid Build Coastguard Worker */ 1388*1b3f573fSAndroid Build Coastguard Worker public function testWrapperJsonDecodeAndGetUnwrapped( 1389*1b3f573fSAndroid Build Coastguard Worker $class, 1390*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValue, 1391*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValueData, 1392*1b3f573fSAndroid Build Coastguard Worker $defaultValue, 1393*1b3f573fSAndroid Build Coastguard Worker $defaultValueData 1394*1b3f573fSAndroid Build Coastguard Worker ) 1395*1b3f573fSAndroid Build Coastguard Worker { 1396*1b3f573fSAndroid Build Coastguard Worker // Singular with non-default 1397*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1398*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"field\":" . $nonDefaultValueData . "}"); 1399*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $m->getFieldUnwrapped()); 1400*1b3f573fSAndroid Build Coastguard Worker 1401*1b3f573fSAndroid Build Coastguard Worker // Singular with default 1402*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1403*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"field\":" . $defaultValueData . "}"); 1404*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $m->getFieldUnwrapped()); 1405*1b3f573fSAndroid Build Coastguard Worker 1406*1b3f573fSAndroid Build Coastguard Worker // Oneof with non-default 1407*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1408*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"oneof_field\":" . $nonDefaultValueData . "}"); 1409*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $m->getOneofFieldUnwrapped()); 1410*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("oneof_field", $m->getOneofFields()); 1411*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getInt32Field()); 1412*1b3f573fSAndroid Build Coastguard Worker 1413*1b3f573fSAndroid Build Coastguard Worker // Oneof with default 1414*1b3f573fSAndroid Build Coastguard Worker $m = new $class(); 1415*1b3f573fSAndroid Build Coastguard Worker $m->mergeFromJsonString("{\"oneof_field\":" . $defaultValueData . "}"); 1416*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $m->getOneofFieldUnwrapped()); 1417*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals("oneof_field", $m->getOneofFields()); 1418*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, $m->getInt32Field()); 1419*1b3f573fSAndroid Build Coastguard Worker } 1420*1b3f573fSAndroid Build Coastguard Worker 1421*1b3f573fSAndroid Build Coastguard Worker /** 1422*1b3f573fSAndroid Build Coastguard Worker * @dataProvider wrappersDataProvider 1423*1b3f573fSAndroid Build Coastguard Worker */ 1424*1b3f573fSAndroid Build Coastguard Worker public function testWrapperJsonDecodeEncode( 1425*1b3f573fSAndroid Build Coastguard Worker $class, 1426*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValue, 1427*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValueData, 1428*1b3f573fSAndroid Build Coastguard Worker $defaultValue, 1429*1b3f573fSAndroid Build Coastguard Worker $defaultValueData 1430*1b3f573fSAndroid Build Coastguard Worker ) 1431*1b3f573fSAndroid Build Coastguard Worker { 1432*1b3f573fSAndroid Build Coastguard Worker // Singular with non-default 1433*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1434*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1435*1b3f573fSAndroid Build Coastguard Worker $from->mergeFromJsonString("{\"field\":" . $nonDefaultValueData . "}"); 1436*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1437*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1438*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $to->getFieldUnwrapped()); 1439*1b3f573fSAndroid Build Coastguard Worker 1440*1b3f573fSAndroid Build Coastguard Worker // Singular with default 1441*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1442*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1443*1b3f573fSAndroid Build Coastguard Worker $from->mergeFromJsonString("{\"field\":" . $defaultValueData . "}"); 1444*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1445*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1446*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $to->getFieldUnwrapped()); 1447*1b3f573fSAndroid Build Coastguard Worker 1448*1b3f573fSAndroid Build Coastguard Worker // Oneof with non-default 1449*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1450*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1451*1b3f573fSAndroid Build Coastguard Worker $from->mergeFromJsonString("{\"oneof_field\":" . $nonDefaultValueData . "}"); 1452*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1453*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1454*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $to->getOneofFieldUnwrapped()); 1455*1b3f573fSAndroid Build Coastguard Worker 1456*1b3f573fSAndroid Build Coastguard Worker // Oneof with default 1457*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1458*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1459*1b3f573fSAndroid Build Coastguard Worker $from->mergeFromJsonString("{\"oneof_field\":" . $defaultValueData . "}"); 1460*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1461*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1462*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $to->getOneofFieldUnwrapped()); 1463*1b3f573fSAndroid Build Coastguard Worker } 1464*1b3f573fSAndroid Build Coastguard Worker 1465*1b3f573fSAndroid Build Coastguard Worker /** 1466*1b3f573fSAndroid Build Coastguard Worker * @dataProvider wrappersDataProvider 1467*1b3f573fSAndroid Build Coastguard Worker */ 1468*1b3f573fSAndroid Build Coastguard Worker public function testWrapperSetUnwrappedJsonEncode( 1469*1b3f573fSAndroid Build Coastguard Worker $class, 1470*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValue, 1471*1b3f573fSAndroid Build Coastguard Worker $nonDefaultValueData, 1472*1b3f573fSAndroid Build Coastguard Worker $defaultValue, 1473*1b3f573fSAndroid Build Coastguard Worker $defaultValueData 1474*1b3f573fSAndroid Build Coastguard Worker ) 1475*1b3f573fSAndroid Build Coastguard Worker { 1476*1b3f573fSAndroid Build Coastguard Worker // Singular with non-default 1477*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1478*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1479*1b3f573fSAndroid Build Coastguard Worker $from->setFieldUnwrapped($nonDefaultValue); 1480*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1481*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1482*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $to->getFieldUnwrapped()); 1483*1b3f573fSAndroid Build Coastguard Worker 1484*1b3f573fSAndroid Build Coastguard Worker // Singular with default 1485*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1486*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1487*1b3f573fSAndroid Build Coastguard Worker $from->setFieldUnwrapped($defaultValue); 1488*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1489*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1490*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $to->getFieldUnwrapped()); 1491*1b3f573fSAndroid Build Coastguard Worker 1492*1b3f573fSAndroid Build Coastguard Worker // Oneof with non-default 1493*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1494*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1495*1b3f573fSAndroid Build Coastguard Worker $from->setOneofFieldUnwrapped($nonDefaultValue); 1496*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1497*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1498*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($nonDefaultValue, $to->getOneofFieldUnwrapped()); 1499*1b3f573fSAndroid Build Coastguard Worker 1500*1b3f573fSAndroid Build Coastguard Worker // Oneof with default 1501*1b3f573fSAndroid Build Coastguard Worker $from = new $class(); 1502*1b3f573fSAndroid Build Coastguard Worker $to = new $class(); 1503*1b3f573fSAndroid Build Coastguard Worker $from->setOneofFieldUnwrapped($defaultValue); 1504*1b3f573fSAndroid Build Coastguard Worker $data = $from->serializeToJsonString(); 1505*1b3f573fSAndroid Build Coastguard Worker $to->mergeFromJsonString($data); 1506*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals($defaultValue, $to->getOneofFieldUnwrapped()); 1507*1b3f573fSAndroid Build Coastguard Worker } 1508*1b3f573fSAndroid Build Coastguard Worker 1509*1b3f573fSAndroid Build Coastguard Worker public function wrappersDataProvider() 1510*1b3f573fSAndroid Build Coastguard Worker { 1511*1b3f573fSAndroid Build Coastguard Worker return [ 1512*1b3f573fSAndroid Build Coastguard Worker [TestInt32Value::class, 1, "1", 0, "0"], 1513*1b3f573fSAndroid Build Coastguard Worker [TestStringValue::class, "a", "\"a\"", "", "\"\""], 1514*1b3f573fSAndroid Build Coastguard Worker ]; 1515*1b3f573fSAndroid Build Coastguard Worker } 1516*1b3f573fSAndroid Build Coastguard Worker} 1517