Verified Commit 713b4933 authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Issue #3128389 by jungle, cliddell, john.oltman, clayfreeman, acbramley:...

Issue #3128389 by jungle, cliddell, john.oltman, clayfreeman, acbramley: LocaleTranslation is not serializable

(cherry picked from commit 82853ab9)
parent 264a36a6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\DependencySerializationTrait;
use Drupal\Core\DestructableInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
@@ -19,6 +20,8 @@
 */
class LocaleTranslation implements TranslatorInterface, DestructableInterface {

  use DependencySerializationTrait;

  /**
   * Storage for strings.
   *
+48 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\locale\Kernel;

use Drupal\locale\LocaleTranslation;
use Drupal\KernelTests\KernelTestBase;

/**
 * @coversDefaultClass \Drupal\locale\LocaleTranslation
 * @group locale
 */
class LocaleTranslationTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'locale',
  ];

  /**
   * Tests that \Drupal\locale\LocaleTranslation is serializable.
   */
  public function testSerializable() {
    $translation = $this->container->get('string_translator.locale.lookup');
    $this->assertInstanceOf(LocaleTranslation::class, $translation);

    // Prove that serialization and deserialization works without errors.
    $this->assertNotNull($translation);
    $unserialized = unserialize(serialize($translation));
    $this->assertInstanceOf(LocaleTranslation::class, $unserialized);

    // Ensure that all properties on the unserialized object match the original.
    $translation_reflection = new \ReflectionObject($translation);
    $unserialized_reflection = new \ReflectionObject($unserialized);
    // Ignore the '_serviceIds' property in the comparison.
    $properties = array_filter($translation_reflection->getProperties(), function ($value) {
      return $value->getName() !== '_serviceIds';
    });
    foreach ($properties as $value) {
      $value->setAccessible(TRUE);
      $unserialized_property = $unserialized_reflection->getProperty($value->getName());
      $unserialized_property->setAccessible(TRUE);
      $this->assertEquals($unserialized_property->getValue($unserialized), $value->getValue($translation));
    }
  }

}