public function testAddMergeExtensions()
 {
     $animal1 = new Cat();
     $animal2 = new Cat();
     $callback = function () {
     };
     $extensions = new ExtensionFieldMap(Animal::CLASS);
     $extension = new ExtensionField(Animal::CLASS, 'animal', 100, $callback, $callback, $callback);
     $animal1->setDeclawed(true);
     $extensions->add($extension, $animal1);
     $this->assertSame($animal1, $extensions->offsetGet($extension));
     $animal2->setDeclawed(false);
     $extensions->add($extension, $animal2);
     $this->assertTrue($animal2->getDeclawed());
     $this->assertSame($animal2, $extensions->offsetGet($extension));
 }
 public function testWriteAnimalExtensionMessage()
 {
     $cat = new Extension\Cat();
     $animal = new Extension\Animal();
     $cat->setDeclawed(true);
     $animal->setType(Extension\Animal\Type::CAT());
     $animal->extensions()->put(Extension\Cat::animal(), $cat);
     $expected = $this->getProtoContent('extension-animal-cat.bin');
     $actual = $animal->toStream();
     $this->assertEquals($expected, (string) $actual);
     $this->assertSerializedMessageSize($expected, $animal);
 }