From f4e81e05063da2bbaf0c2fcc75ffe57f13f127b5 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Tue, 7 Aug 2018 14:49:42 +0100 Subject: [PATCH] Issue #2893029 by phenaproxima, Sam152, tim.plunkett, dawehner, a.dmitriiev, Berdir: StringTranslationTrait consumers cannot be reliably serialized without DependencySerializationTrait --- core/lib/Drupal/Core/Entity/EntityType.php | 2 ++ .../Tests/Core/Entity/EntityTypeTest.php | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php index e28fdb0da43..c6f320fd6e6 100644 --- a/core/lib/Drupal/Core/Entity/EntityType.php +++ b/core/lib/Drupal/Core/Entity/EntityType.php @@ -3,6 +3,7 @@ namespace Drupal\Core\Entity; use Drupal\Component\Plugin\Definition\PluginDefinition; +use Drupal\Core\DependencyInjection\DependencySerializationTrait; use Drupal\Core\Entity\Exception\EntityTypeIdLengthException; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslatableMarkup; @@ -14,6 +15,7 @@ use Drupal\Core\StringTranslation\TranslatableMarkup; */ class EntityType extends PluginDefinition implements EntityTypeInterface { + use DependencySerializationTrait; use StringTranslationTrait; /** diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php index b28a72c617f..ab02902db45 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\Core\Entity; use Drupal\Core\Entity\EntityType; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\Core\StringTranslation\TranslationInterface; use Drupal\Tests\UnitTestCase; /** @@ -476,4 +477,22 @@ class EntityTypeTest extends UnitTestCase { $this->assertEmpty($reflection->getProperties(\ReflectionProperty::IS_PUBLIC)); } + /** + * Test the EntityType object it serializable. + */ + public function testIsSerializable() { + $entity_type = $this->setUpEntityType([]); + + $translation = $this->prophesize(TranslationInterface::class); + $translation->willImplement(\Serializable::class); + $translation->serialize()->willThrow(\Exception::class); + $translation_service = $translation->reveal(); + $translation_service->_serviceId = 'string_translation'; + + $entity_type->setStringTranslation($translation_service); + $entity_type = unserialize(serialize($entity_type)); + + $this->assertEquals('example_entity_type', $entity_type->id()); + } + }