Browse Source

Uncomment php tests (#3301)

Paul Yang 8 years ago
parent
commit
b9c4daadf7
2 changed files with 416 additions and 416 deletions
  1. 1 1
      php/ext/google/protobuf/encode_decode.c
  2. 415 415
      php/tests/encode_decode_test.php

+ 1 - 1
php/ext/google/protobuf/encode_decode.c

@@ -474,7 +474,7 @@ static void map_slot_init(void* memory, upb_fieldtype_t type, zval* cache) {
       *(zval***)memory = holder;
 #else
       *(zval**)memory = cache;
-      // PHP_PROTO_ZVAL_STRINGL(*(zval**)memory, "", 0, 1);
+      PHP_PROTO_ZVAL_STRINGL(*(zval**)memory, "", 0, 1);
 #endif
       break;
     }

+ 415 - 415
php/tests/encode_decode_test.php

@@ -14,432 +14,432 @@ use Foo\TestUnpackedMessage;
 class EncodeDecodeTest extends TestBase
 {
 
-#     public function testEncode()
-#     {
-#         $from = new TestMessage();
-#         $this->expectEmptyFields($from);
-#         $this->setFields($from);
-#         $this->expectFields($from);
-# 
-#         $data = $from->serializeToString();
-#         $this->assertSame(bin2hex(TestUtil::getGoldenTestMessage()),
-#                           bin2hex($data));
-#     }
-# 
-#     public function testDecode()
-#     {
-#         $to = new TestMessage();
-#         $to->mergeFromString(TestUtil::getGoldenTestMessage());
-#         $this->expectFields($to);
-#     }
-# 
-#     public function testEncodeDecode()
-#     {
-#         $from = new TestMessage();
-#         $this->expectEmptyFields($from);
-#         $this->setFields($from);
-#         $this->expectFields($from);
-# 
-#         $data = $from->serializeToString();
-# 
-#         $to = new TestMessage();
-#         $to->mergeFromString($data);
-#         $this->expectFields($to);
-#     }
-# 
-#     public function testEncodeDecodeEmpty()
-#     {
-#         $from = new TestMessage();
-#         $this->expectEmptyFields($from);
-# 
-#         $data = $from->serializeToString();
-# 
-#         $to = new TestMessage();
-#         $to->mergeFromString($data);
-#         $this->expectEmptyFields($to);
-#     }
+    public function testEncode()
+    {
+        $from = new TestMessage();
+        $this->expectEmptyFields($from);
+        $this->setFields($from);
+        $this->expectFields($from);
+
+        $data = $from->serializeToString();
+        $this->assertSame(bin2hex(TestUtil::getGoldenTestMessage()),
+                          bin2hex($data));
+    }
+
+    public function testDecode()
+    {
+        $to = new TestMessage();
+        $to->mergeFromString(TestUtil::getGoldenTestMessage());
+        $this->expectFields($to);
+    }
+
+    public function testEncodeDecode()
+    {
+        $from = new TestMessage();
+        $this->expectEmptyFields($from);
+        $this->setFields($from);
+        $this->expectFields($from);
+
+        $data = $from->serializeToString();
+
+        $to = new TestMessage();
+        $to->mergeFromString($data);
+        $this->expectFields($to);
+    }
+
+    public function testEncodeDecodeEmpty()
+    {
+        $from = new TestMessage();
+        $this->expectEmptyFields($from);
+
+        $data = $from->serializeToString();
+
+        $to = new TestMessage();
+        $to->mergeFromString($data);
+        $this->expectEmptyFields($to);
+    }
 
     public function testEncodeDecodeOneof()
     {
         $m = new TestMessage();
 
-#         $m->setOneofInt32(1);
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame(1, $n->getOneofInt32());
-# 
-#         $m->setOneofFloat(2.0);
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame(2.0, $n->getOneofFloat());
-# 
-#         $m->setOneofString('abc');
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame('abc', $n->getOneofString());
-# 
-#         $sub_m = new TestMessage_Sub();
-#         $sub_m->setA(1);
-#         $m->setOneofMessage($sub_m);
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame(1, $n->getOneofMessage()->getA());
+        $m->setOneofInt32(1);
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame(1, $n->getOneofInt32());
+
+        $m->setOneofFloat(2.0);
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame(2.0, $n->getOneofFloat());
+
+        $m->setOneofString('abc');
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame('abc', $n->getOneofString());
+
+        $sub_m = new TestMessage_Sub();
+        $sub_m->setA(1);
+        $m->setOneofMessage($sub_m);
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame(1, $n->getOneofMessage()->getA());
 
         // Encode default value
-#         $m->setOneofEnum(TestEnum::ZERO);
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame("oneof_enum", $n->getMyOneof());
-#         $this->assertSame(TestEnum::ZERO, $n->getOneofEnum());
+        $m->setOneofEnum(TestEnum::ZERO);
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame("oneof_enum", $n->getMyOneof());
+        $this->assertSame(TestEnum::ZERO, $n->getOneofEnum());
 
         $m->setOneofString("");
         $data = $m->serializeToString();
         $n = new TestMessage();
         $n->mergeFromString($data);
         $this->assertSame("oneof_string", $n->getMyOneof());
-         $this->assertSame("", $n->getOneofString());
-
-#         $sub_m = new TestMessage_Sub();
-#         $m->setOneofMessage($sub_m);
-#         $data = $m->serializeToString();
-#         $n = new TestMessage();
-#         $n->mergeFromString($data);
-#         $this->assertSame("oneof_message", $n->getMyOneof());
-#         $this->assertFalse(is_null($n->getOneofMessage()));
-
-    }
-
-#     public function testPackedEncode()
-#     {
-#         $from = new TestPackedMessage();
-#         TestUtil::setTestPackedMessage($from);
-#         $this->assertSame(TestUtil::getGoldenTestPackedMessage(),
-#                           $from->serializeToString());
-#     }
-# 
-#     public function testPackedDecodePacked()
-#     {
-#         $to = new TestPackedMessage();
-#         $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
-#         TestUtil::assertTestPackedMessage($to);
-#     }
-# 
-#     public function testPackedDecodeUnpacked()
-#     {
-#         $to = new TestPackedMessage();
-#         $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
-#         TestUtil::assertTestPackedMessage($to);
-#     }
-# 
-#     public function testUnpackedEncode()
-#     {
-#         $from = new TestUnpackedMessage();
-#         TestUtil::setTestPackedMessage($from);
-#         $this->assertSame(TestUtil::getGoldenTestUnpackedMessage(),
-#                           $from->serializeToString());
-#     }
-# 
-#     public function testUnpackedDecodePacked()
-#     {
-#         $to = new TestUnpackedMessage();
-#         $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
-#         TestUtil::assertTestPackedMessage($to);
-#     }
-# 
-#     public function testUnpackedDecodeUnpacked()
-#     {
-#         $to = new TestUnpackedMessage();
-#         $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
-#         TestUtil::assertTestPackedMessage($to);
-#     }
-# 
-#     public function testDecodeInt64()
-#     {
-#         // Read 64 testing
-#         $testVals = array(
-#             '10'                 => '100a',
-#             '100'                => '1064',
-#             '800'                => '10a006',
-#             '6400'               => '108032',
-#             '70400'              => '1080a604',
-#             '774400'             => '1080a22f',
-#             '9292800'            => '108098b704',
-#             '74342400'           => '1080c0b923',
-#             '743424000'          => '108080bfe202',
-#             '8177664000'         => '108080b5bb1e',
-#             '65421312000'        => '108080a8dbf301',
-#             '785055744000'       => '108080e0c7ec16',
-#             '9420668928000'      => '10808080dd969202',
-#             '103627358208000'    => '10808080fff9c717',
-#             '1139900940288000'   => '10808080f5bd978302',
-#             '13678811283456000'  => '10808080fce699a618',
-#             '109430490267648000' => '10808080e0b7ceb1c201',
-#             '984874412408832000' => '10808080e0f5c1bed50d',
-#         );
-# 
-#         $msg = new TestMessage();
-#         foreach ($testVals as $original => $encoded) {
-#             $msg->setOptionalInt64($original);
-#             $data = $msg->serializeToString();
-#             $this->assertSame($encoded, bin2hex($data));
-#             $msg->setOptionalInt64(0);
-#             $msg->mergeFromString($data);
-#             $this->assertEquals($original, $msg->getOptionalInt64());
-#         }
-#     }
-# 
-#     public function testDecodeToExistingMessage()
-#     {
-#         $m1 = new TestMessage();
-#         $this->setFields($m1);
-#         $this->expectFields($m1);
-# 
-#         $m2 = new TestMessage();
-#         $this->setFields2($m2);
-#         $data = $m2->serializeToString();
-# 
-#         $m1->mergeFromString($data);
-#         $this->expectFieldsMerged($m1);
-#     }
-# 
-#     public function testDecodeFieldNonExist()
-#     {
-#         $data = hex2bin('c80501');
-#         $m = new TestMessage();
-#         $m->mergeFromString($data);
-#     }
-# 
-#     public function testEncodeNegativeInt32()
-#     {
-#         $m = new TestMessage();
-#         $m->setOptionalInt32(-1);
-#         $data = $m->serializeToString();
-#         $this->assertSame("08ffffffffffffffffff01", bin2hex($data));
-#     }
-# 
-#     public function testDecodeNegativeInt32()
-#     {
-#         $m = new TestMessage();
-#         $this->assertEquals(0, $m->getOptionalInt32());
-#         $m->mergeFromString(hex2bin("08ffffffffffffffffff01"));
-#         $this->assertEquals(-1, $m->getOptionalInt32());
-# 
-#         $m = new TestMessage();
-#         $this->assertEquals(0, $m->getOptionalInt32());
-#         $m->mergeFromString(hex2bin("08ffffffff0f"));
-#         $this->assertEquals(-1, $m->getOptionalInt32());
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidInt32()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('08'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidSubMessage()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('9A010108'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidInt64()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('10'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidUInt32()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('18'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidUInt64()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('20'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidSInt32()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('28'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidSInt64()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('30'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidFixed32()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('3D'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidFixed64()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('41'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidSFixed32()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('4D'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidSFixed64()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('51'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidFloat()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('5D'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidDouble()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('61'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidBool()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('68'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidStringLengthMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('72'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidStringDataMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('7201'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidBytesLengthMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('7A'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidBytesDataMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('7A01'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidEnum()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('8001'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidMessageLengthMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('8A01'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidMessageDataMiss()
-#     {
-#         $m = new TestMessage();
-#         $m->mergeFromString(hex2bin('8A0101'));
-#     }
-# 
-#     /**
-#      * @expectedException Exception
-#      */
-#     public function testDecodeInvalidPackedMessageLength()
-#     {
-#         $m = new TestPackedMessage();
-#         $m->mergeFromString(hex2bin('D205'));
-#     }
-# 
-#     public function testJsonEncode()
-#     {
-#         $from = new TestMessage();
-#         $this->setFields($from);
-#         $data = $from->serializeToJsonString();
-#         $to = new TestMessage();
-#         $to->mergeFromJsonString($data);
-#         $this->expectFields($to);
-#     }
+        $this->assertSame("", $n->getOneofString());
+
+        $sub_m = new TestMessage_Sub();
+        $m->setOneofMessage($sub_m);
+        $data = $m->serializeToString();
+        $n = new TestMessage();
+        $n->mergeFromString($data);
+        $this->assertSame("oneof_message", $n->getMyOneof());
+        $this->assertFalse(is_null($n->getOneofMessage()));
+
+    }
+
+    public function testPackedEncode()
+    {
+        $from = new TestPackedMessage();
+        TestUtil::setTestPackedMessage($from);
+        $this->assertSame(TestUtil::getGoldenTestPackedMessage(),
+                          $from->serializeToString());
+    }
+
+    public function testPackedDecodePacked()
+    {
+        $to = new TestPackedMessage();
+        $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
+        TestUtil::assertTestPackedMessage($to);
+    }
+
+    public function testPackedDecodeUnpacked()
+    {
+        $to = new TestPackedMessage();
+        $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
+        TestUtil::assertTestPackedMessage($to);
+    }
+
+    public function testUnpackedEncode()
+    {
+        $from = new TestUnpackedMessage();
+        TestUtil::setTestPackedMessage($from);
+        $this->assertSame(TestUtil::getGoldenTestUnpackedMessage(),
+                          $from->serializeToString());
+    }
+
+    public function testUnpackedDecodePacked()
+    {
+        $to = new TestUnpackedMessage();
+        $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
+        TestUtil::assertTestPackedMessage($to);
+    }
+
+    public function testUnpackedDecodeUnpacked()
+    {
+        $to = new TestUnpackedMessage();
+        $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
+        TestUtil::assertTestPackedMessage($to);
+    }
+
+    public function testDecodeInt64()
+    {
+        // Read 64 testing
+        $testVals = array(
+            '10'                 => '100a',
+            '100'                => '1064',
+            '800'                => '10a006',
+            '6400'               => '108032',
+            '70400'              => '1080a604',
+            '774400'             => '1080a22f',
+            '9292800'            => '108098b704',
+            '74342400'           => '1080c0b923',
+            '743424000'          => '108080bfe202',
+            '8177664000'         => '108080b5bb1e',
+            '65421312000'        => '108080a8dbf301',
+            '785055744000'       => '108080e0c7ec16',
+            '9420668928000'      => '10808080dd969202',
+            '103627358208000'    => '10808080fff9c717',
+            '1139900940288000'   => '10808080f5bd978302',
+            '13678811283456000'  => '10808080fce699a618',
+            '109430490267648000' => '10808080e0b7ceb1c201',
+            '984874412408832000' => '10808080e0f5c1bed50d',
+        );
+
+        $msg = new TestMessage();
+        foreach ($testVals as $original => $encoded) {
+            $msg->setOptionalInt64($original);
+            $data = $msg->serializeToString();
+            $this->assertSame($encoded, bin2hex($data));
+            $msg->setOptionalInt64(0);
+            $msg->mergeFromString($data);
+            $this->assertEquals($original, $msg->getOptionalInt64());
+        }
+    }
+
+    public function testDecodeToExistingMessage()
+    {
+        $m1 = new TestMessage();
+        $this->setFields($m1);
+        $this->expectFields($m1);
+
+        $m2 = new TestMessage();
+        $this->setFields2($m2);
+        $data = $m2->serializeToString();
+
+        $m1->mergeFromString($data);
+        $this->expectFieldsMerged($m1);
+    }
+
+    public function testDecodeFieldNonExist()
+    {
+        $data = hex2bin('c80501');
+        $m = new TestMessage();
+        $m->mergeFromString($data);
+    }
+
+    public function testEncodeNegativeInt32()
+    {
+        $m = new TestMessage();
+        $m->setOptionalInt32(-1);
+        $data = $m->serializeToString();
+        $this->assertSame("08ffffffffffffffffff01", bin2hex($data));
+    }
+
+    public function testDecodeNegativeInt32()
+    {
+        $m = new TestMessage();
+        $this->assertEquals(0, $m->getOptionalInt32());
+        $m->mergeFromString(hex2bin("08ffffffffffffffffff01"));
+        $this->assertEquals(-1, $m->getOptionalInt32());
+
+        $m = new TestMessage();
+        $this->assertEquals(0, $m->getOptionalInt32());
+        $m->mergeFromString(hex2bin("08ffffffff0f"));
+        $this->assertEquals(-1, $m->getOptionalInt32());
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidInt32()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('08'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidSubMessage()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('9A010108'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidInt64()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('10'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidUInt32()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('18'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidUInt64()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('20'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidSInt32()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('28'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidSInt64()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('30'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidFixed32()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('3D'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidFixed64()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('41'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidSFixed32()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('4D'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidSFixed64()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('51'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidFloat()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('5D'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidDouble()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('61'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidBool()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('68'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidStringLengthMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('72'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidStringDataMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('7201'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidBytesLengthMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('7A'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidBytesDataMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('7A01'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidEnum()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('8001'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidMessageLengthMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('8A01'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidMessageDataMiss()
+    {
+        $m = new TestMessage();
+        $m->mergeFromString(hex2bin('8A0101'));
+    }
+
+    /**
+     * @expectedException Exception
+     */
+    public function testDecodeInvalidPackedMessageLength()
+    {
+        $m = new TestPackedMessage();
+        $m->mergeFromString(hex2bin('D205'));
+    }
+
+    public function testJsonEncode()
+    {
+        $from = new TestMessage();
+        $this->setFields($from);
+        $data = $from->serializeToJsonString();
+        $to = new TestMessage();
+        $to->mergeFromJsonString($data);
+        $this->expectFields($to);
+    }
 }