| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 | 
							- <?php
 
- require_once('generated/Descriptors/TestDescriptorsEnum.php');
 
- require_once('generated/Descriptors/TestDescriptorsMessage.php');
 
- require_once('test_base.php');
 
- require_once('test_util.php');
 
- use Google\Protobuf\DescriptorPool;
 
- use Google\Protobuf\Internal\RepeatedField;
 
- use Google\Protobuf\Internal\MapField;
 
- use Descriptors\TestDescriptorsEnum;
 
- use Descriptors\TestDescriptorsMessage;
 
- use Descriptors\TestDescriptorsMessage\Sub;
 
- use Foo\TestMessage;
 
- use Bar\TestInclude;
 
- class DescriptorsTest extends TestBase
 
- {
 
-     // Redefine these here for compatibility with c extension
 
-     const GPBLABEL_OPTIONAL = 1;
 
-     const GPBLABEL_REQUIRED = 2;
 
-     const GPBLABEL_REPEATED = 3;
 
-     const GPBTYPE_DOUBLE   =  1;
 
-     const GPBTYPE_FLOAT    =  2;
 
-     const GPBTYPE_INT64    =  3;
 
-     const GPBTYPE_UINT64   =  4;
 
-     const GPBTYPE_INT32    =  5;
 
-     const GPBTYPE_FIXED64  =  6;
 
-     const GPBTYPE_FIXED32  =  7;
 
-     const GPBTYPE_BOOL     =  8;
 
-     const GPBTYPE_STRING   =  9;
 
-     const GPBTYPE_GROUP    = 10;
 
-     const GPBTYPE_MESSAGE  = 11;
 
-     const GPBTYPE_BYTES    = 12;
 
-     const GPBTYPE_UINT32   = 13;
 
-     const GPBTYPE_ENUM     = 14;
 
-     const GPBTYPE_SFIXED32 = 15;
 
-     const GPBTYPE_SFIXED64 = 16;
 
-     const GPBTYPE_SINT32   = 17;
 
-     const GPBTYPE_SINT64   = 18;
 
-     #########################################################
 
-     # Test descriptor pool.
 
-     #########################################################
 
-     public function testDescriptorPool()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $this->assertInstanceOf('\Google\Protobuf\Descriptor', $desc);
 
-         $enumDesc = $pool->getEnumDescriptorByClassName(get_class(new TestDescriptorsEnum()));
 
-         $this->assertInstanceOf('\Google\Protobuf\EnumDescriptor', $enumDesc);
 
-     }
 
-     public function testDescriptorPoolIncorrectArgs()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName('NotAClass');
 
-         $this->assertNull($desc);
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsEnum()));
 
-         $this->assertNull($desc);
 
-         $enumDesc = $pool->getEnumDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $this->assertNull($enumDesc);
 
-     }
 
-     #########################################################
 
-     # Test descriptor.
 
-     #########################################################
 
-     public function testDescriptor()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $class = get_class(new TestDescriptorsMessage());
 
-         $this->assertSame('Descriptors\TestDescriptorsMessage', $class);
 
-         $desc = $pool->getDescriptorByClassName($class);
 
-         $this->assertSame('descriptors.TestDescriptorsMessage', $desc->getFullName());
 
-         $this->assertSame($class, $desc->getClass());
 
-         $this->assertInstanceOf('\Google\Protobuf\FieldDescriptor', $desc->getField(0));
 
-         $this->assertSame(7, $desc->getFieldCount());
 
-         $this->assertInstanceOf('\Google\Protobuf\OneofDescriptor', $desc->getOneofDecl(0));
 
-         $this->assertSame(1, $desc->getOneofDeclCount());
 
-     }
 
-     public function testDescriptorForIncludedMessage()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $class = get_class(new TestMessage());
 
-         $this->assertSame('Foo\TestMessage', $class);
 
-         $desc = $pool->getDescriptorByClassName($class);
 
-         $fielddesc = $desc->getField(17);
 
-         $subdesc = $fielddesc->getMessageType();
 
-         $this->assertSame('Bar\TestInclude', $subdesc->getClass());
 
-     }
 
-     #########################################################
 
-     # Test enum descriptor.
 
-     #########################################################
 
-     public function testEnumDescriptor()
 
-     {
 
-         // WARNINIG - we need to do this so that TestDescriptorsEnum is registered!!?
 
-         new TestDescriptorsMessage();
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $enumDesc = $pool->getEnumDescriptorByClassName(get_class(new TestDescriptorsEnum()));
 
-         // Build map of enum values
 
-         $enumDescMap = [];
 
-         for ($i = 0; $i < $enumDesc->getValueCount(); $i++) {
 
-             $enumValueDesc = $enumDesc->getValue($i);
 
-             $this->assertInstanceOf('\Google\Protobuf\EnumValueDescriptor', $enumValueDesc);
 
-             $enumDescMap[$enumValueDesc->getNumber()] = $enumValueDesc->getName();
 
-         }
 
-         $this->assertSame('ZERO', $enumDescMap[0]);
 
-         $this->assertSame('ONE', $enumDescMap[1]);
 
-         $this->assertSame(2, $enumDesc->getValueCount());
 
-     }
 
-     #########################################################
 
-     # Test field descriptor.
 
-     #########################################################
 
-     public function testFieldDescriptor()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $fieldDescMap = $this->buildFieldMap($desc);
 
-         // Optional int field
 
-         $fieldDesc = $fieldDescMap[1];
 
-         $this->assertSame('optional_int32', $fieldDesc->getName());
 
-         $this->assertSame(1, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_OPTIONAL, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_INT32, $fieldDesc->getType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Optional enum field
 
-         $fieldDesc = $fieldDescMap[16];
 
-         $this->assertSame('optional_enum', $fieldDesc->getName());
 
-         $this->assertSame(16, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_OPTIONAL, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_ENUM, $fieldDesc->getType());
 
-         $this->assertInstanceOf('\Google\Protobuf\EnumDescriptor', $fieldDesc->getEnumType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Optional message field
 
-         $fieldDesc = $fieldDescMap[17];
 
-         $this->assertSame('optional_message', $fieldDesc->getName());
 
-         $this->assertSame(17, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_OPTIONAL, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_MESSAGE, $fieldDesc->getType());
 
-         $this->assertInstanceOf('\Google\Protobuf\Descriptor', $fieldDesc->getMessageType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Repeated int field
 
-         $fieldDesc = $fieldDescMap[31];
 
-         $this->assertSame('repeated_int32', $fieldDesc->getName());
 
-         $this->assertSame(31, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_REPEATED, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_INT32, $fieldDesc->getType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Repeated message field
 
-         $fieldDesc = $fieldDescMap[47];
 
-         $this->assertSame('repeated_message', $fieldDesc->getName());
 
-         $this->assertSame(47, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_REPEATED, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_MESSAGE, $fieldDesc->getType());
 
-         $this->assertInstanceOf('\Google\Protobuf\Descriptor', $fieldDesc->getMessageType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Oneof int field
 
-         // Tested further in testOneofDescriptor()
 
-         $fieldDesc = $fieldDescMap[51];
 
-         $this->assertSame('oneof_int32', $fieldDesc->getName());
 
-         $this->assertSame(51, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_OPTIONAL, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_INT32, $fieldDesc->getType());
 
-         $this->assertFalse($fieldDesc->isMap());
 
-         // Map int-enum field
 
-         $fieldDesc = $fieldDescMap[71];
 
-         $this->assertSame('map_int32_enum', $fieldDesc->getName());
 
-         $this->assertSame(71, $fieldDesc->getNumber());
 
-         $this->assertSame(self::GPBLABEL_REPEATED, $fieldDesc->getLabel());
 
-         $this->assertSame(self::GPBTYPE_MESSAGE, $fieldDesc->getType());
 
-         $this->assertTrue($fieldDesc->isMap());
 
-         $mapDesc = $fieldDesc->getMessageType();
 
-         $this->assertSame('descriptors.TestDescriptorsMessage.MapInt32EnumEntry', $mapDesc->getFullName());
 
-         $this->assertSame(self::GPBTYPE_INT32, $mapDesc->getField(0)->getType());
 
-         $this->assertSame(self::GPBTYPE_ENUM, $mapDesc->getField(1)->getType());
 
-     }
 
-     /**
 
-      * @expectedException \Exception
 
-      */
 
-     public function testFieldDescriptorEnumException()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $fieldDesc = $desc->getField(0);
 
-         $fieldDesc->getEnumType();
 
-     }
 
-     /**
 
-      * @expectedException \Exception
 
-      */
 
-     public function testFieldDescriptorMessageException()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $fieldDesc = $desc->getField(0);
 
-         $fieldDesc->getMessageType();
 
-     }
 
-     #########################################################
 
-     # Test oneof descriptor.
 
-     #########################################################
 
-     public function testOneofDescriptor()
 
-     {
 
-         $pool = DescriptorPool::getGeneratedPool();
 
-         $desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
 
-         $fieldDescMap = $this->buildFieldMap($desc);
 
-         $fieldDesc = $fieldDescMap[51];
 
-         $oneofDesc = $desc->getOneofDecl(0);
 
-         $this->assertSame('my_oneof', $oneofDesc->getName());
 
-         $fieldDescFromOneof = $oneofDesc->getField(0);
 
-         $this->assertSame($fieldDesc, $fieldDescFromOneof);
 
-         $this->assertSame(1, $oneofDesc->getFieldCount());
 
-     }
 
-     private function buildFieldMap($desc)
 
-     {
 
-         $fieldDescMap = [];
 
-         for ($i = 0; $i < $desc->getFieldCount(); $i++) {
 
-             $fieldDesc = $desc->getField($i);
 
-             $fieldDescMap[$fieldDesc->getNumber()] = $fieldDesc;
 
-         }
 
-         return $fieldDescMap;
 
-     }
 
- }
 
 
  |