diff --git a/core/tests/Drupal/Tests/Core/TypedData/AnyTypedDataNormalizeTest.php b/core/tests/Drupal/Tests/Core/TypedData/AnyTypedDataNormalizeTest.php
new file mode 100644
index 0000000000..a79d92bdcd
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/TypedData/AnyTypedDataNormalizeTest.php
@@ -0,0 +1,184 @@
+<?php
+
+namespace Drupal\Tests\Core\TypedData;
+
+use Drupal\Core\TypedData\DataDefinition;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests the normalization of 'any' typed data on many different situations.
+ *
+ * @coversDefaultClass \Drupal\Tests\Core\TypedData\AnyTypedDataNormalizeTest
+ * @group typedData
+ */
+class AnyTypedDataNormalizeTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['system', 'serialization'];
+
+  /**
+   * The serializer type.
+   *
+   * @var \Symfony\Component\Serializer\Serializer
+   */
+  protected $serializer;
+
+  /**
+   * The typeDataManager.
+   *
+   * @var \Drupal\Core\TypedData\TypedDataManagerInterface
+   */
+  protected $typedDataManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->serializer = \Drupal::service('serializer');
+    $this->typedDataManager = \Drupal::typedDataManager();
+  }
+
+  /**
+   * Tests the normalization of 'any' typed data.
+   *
+   * With basic string stored.
+   */
+  public function testNormalizeBase() {
+    $typed_data = $this->buildDataBasicString();
+    $this->assertSame('test', $this->serializer->normalize($typed_data, 'json'));
+  }
+
+  /**
+   * Tests the normalization of 'any' typed data.
+   *
+   * With an object which instanceof traversable stored.
+   */
+  public function testNormalizeWithObjectTraversable() {
+    $typed_data = $this->buildDataWithObjectTraversable();
+    $this->assertSame([
+      'property1' => 'value1',
+      'property2' => 'value2',
+    ], $this->serializer->normalize($typed_data));
+  }
+
+  /**
+   * Tests the normalization of 'any' typed data.
+   *
+   * With typed data stored.
+   */
+  public function testNormalizeWithTypedData() {
+    $typed_data = $this->buildDataWithTypedData();
+    $this->assertSame('test', $this->serializer->normalize($typed_data));
+  }
+
+  /**
+   * Tests the normalization of 'any' typed data.
+   *
+   * With more complex situation.
+   */
+  public function testNormalizeComplex() {
+    $typed_data = $this->buildDataComplex();
+    $this->assertSame([
+      'key1' => 'test1',
+      'key2' => 'test2',
+      'key3' => [
+        'property1' => 'value1',
+        'property2' => 'value2',
+      ],
+    ], $this->serializer->normalize($typed_data));
+  }
+
+  /**
+   * Builds example 'any' typed data.
+   *
+   * With basic string stored.
+   */
+  protected function buildDataBasicString() {
+    $typed_data = $this->typedDataManager->create(
+      DataDefinition::create('any'),
+      'test',
+      'test name'
+    );
+    return $typed_data;
+  }
+
+  /**
+   * Builds example 'any' typed data.
+   *
+   * With an object which instanceof Traversable stored.
+   */
+  protected function buildDataWithObjectTraversable() {
+    $typed_data = $this->typedDataManager->create(
+      DataDefinition::create('any'),
+      new ObjectTraversable(),
+      'test name'
+    );
+    return $typed_data;
+  }
+
+  /**
+   * Builds example 'any' typed data.
+   *
+   * With typed data stored.
+   */
+  protected function buildDataWithTypedData() {
+    $typed_data_string = $this->typedDataManager->create(
+      DataDefinition::create('string'),
+      'test',
+      'typed data string'
+    );
+    $typed_data_any = $this->typedDataManager->create(
+      DataDefinition::create('any'),
+      $typed_data_string,
+      'typed data any'
+    );
+    return $typed_data_any;
+  }
+
+  /**
+   * Builds example 'any' typed data.
+   *
+   * With more complex data stored.
+   */
+  protected function buildDataComplex() {
+    $typed_data_string = $this->typedDataManager->create(
+      DataDefinition::create('string'),
+      'test2',
+      'typed data string'
+    );
+    $objectTraversable = new ObjectTraversable();
+    $value = [
+      'key1' => 'test1',
+      'key2' => $typed_data_string,
+      'key3' => $objectTraversable,
+    ];
+    $typed_data_any = $this->typedDataManager->create(
+      DataDefinition::create('any'),
+      $value,
+      'typed data any'
+    );
+    return $typed_data_any;
+  }
+
+}
+
+/**
+ * Build an object which instanceof Traversable.
+ */
+class ObjectTraversable implements \IteratorAggregate {
+
+  public $property1 = "value1";
+
+  public $property2 = "value2";
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIterator() {
+    return new \ArrayIterator($this);
+  }
+
+}
