diff --git a/core/tests/Drupal/Tests/Core/TypedData/MapDataNormalizeTest.php b/core/tests/Drupal/Tests/Core/TypedData/MapDataNormalizeTest.php
new file mode 100644
index 0000000000..cc61134e08
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/TypedData/MapDataNormalizeTest.php
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\TypedData\MapDataNormalizeTest.
+ */
+
+namespace Drupal\Tests\Core\TypedData;
+
+use Drupal\Core\Cache\NullBackend;
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\TypedData\MapDataDefinition;
+use Drupal\Core\TypedData\TypedDataManager;
+use Drupal\Core\Validation\ConstraintManager;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Serializer\Serializer;
+
+/**
+ * @group typedData
+ */
+class MapDataNormalizeTest extends UnitTestCase {
+
+  /**
+   * The type data manager.
+   *
+   * @var \Drupal\Core\TypedData\TypedDataManager
+   */
+  protected $typedDataManager;
+
+  /**
+   * The serializer type.
+   */
+  protected $serializer;
+
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $cache_backend = new NullBackend('cache');
+    $namespaces = new \ArrayObject([
+      'Drupal\\Core\\TypedData' => $this->root . '/core/lib/Drupal/Core/TypedData',
+      'Drupal\\Core\\Validation' => $this->root . '/core/lib/Drupal/Core/Validation',
+    ]);
+    $module_handler = $this->getMockBuilder('Drupal\Core\Extension\ModuleHandlerInterface')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $class_resolver = $this->getMockBuilder('Drupal\Core\DependencyInjection\ClassResolverInterface')
+      ->disableOriginalConstructor()
+      ->getMock();
+
+    $this->typedDataManager = new TypedDataManager($namespaces, $cache_backend, $module_handler, $class_resolver);
+    $this->typedDataManager->setValidationConstraintManager(
+      new ConstraintManager($namespaces, $cache_backend, $module_handler)
+    );
+    $this->serializer = new Serializer();
+    // Typed data definitions access the manager in the container.
+    $container = new ContainerBuilder();
+    $container->set('typed_data_manager', $this->typedDataManager);
+    $container->set('serializer', $this->serializer);
+    \Drupal::setContainer($container);
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function tearDown() {
+    unset($this->serializer);
+  }
+
+  /**
+   * Test whether map data can be normalized
+   */
+  public function testBasicValidateWithConstraint() {
+    $typed_data = $this->buildExampleTypedDataWithProperties();
+    $data = $this->serializer->normalize($typed_data, 'json');
+    $expect_value = [
+      'key1' => 'value1',
+      'key2' => 'value2',
+    ];
+    $this->assertEquals($expect_value, $data);
+  }
+
+
+  /**
+   * Builds some example type data object.
+   *
+   * @return \Drupal\Core\TypedData\TypedDataInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected function buildExampleTypedDataWithProperties() {
+    $tree = [
+      'key1' => 'value1',
+      'key2' => 'value2',
+    ];
+    $map_data_definition = MapDataDefinition::create();
+    $typed_data = $this->typedDataManager->create(
+      $map_data_definition,
+      $tree,
+      'test name'
+    );
+    return $typed_data;
+  }
+}
\ No newline at end of file
