diff --git a/core/tests/Drupal/KernelTests/Core/Messenger/LegacyMessengerTest.php b/core/tests/Drupal/KernelTests/Core/Messenger/LegacyMessengerTest.php
index 13f10e9..92351bc 100644
--- a/core/tests/Drupal/KernelTests/Core/Messenger/LegacyMessengerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Messenger/LegacyMessengerTest.php
@@ -81,4 +81,25 @@ public function testMessages() {
     $this->assertContains('Cheetah', $messages[MessengerInterface::TYPE_WARNING]);
   }
 
+
+  public function testRepeatedMessages() {
+    // Add repeated messages of different types.
+    $messenger = \Drupal::messenger();
+
+    $messenger->addError('Foo', TRUE);
+    $messenger->addError('Foo', TRUE);
+
+    $messenger->addStatus('Bar', TRUE);
+    $messenger->addStatus('Bar', TRUE);
+
+    $messenger->addWarning('Fiz', TRUE);
+    $messenger->addWarning('Fiz', TRUE);
+
+    // Verify that all the messages are present and accounted for.
+    $messages = $messenger->all();
+    $this->assertCount(2, $messages[MessengerInterface::TYPE_STATUS]);
+    $this->assertCount(2, $messages[MessengerInterface::TYPE_WARNING]);
+    $this->assertCount(2, $messages[MessengerInterface::TYPE_ERROR]);
+  }
+
 }
diff --git a/core/tests/Drupal/Tests/Core/Messenger/MessengerTest.php b/core/tests/Drupal/Tests/Core/Messenger/MessengerTest.php
new file mode 100644
index 0000000..ead1db0
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/Messenger/MessengerTest.php
@@ -0,0 +1,112 @@
+<?php
+
+
+namespace Drupal\Tests\Core\Messenger;
+
+use Drupal\Core\Messenger\Messenger;
+use Drupal\Core\Messenger\MessengerInterface;
+use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
+
+/**
+ * @group Messenger
+ * @coversDefaultClass \Drupal\Core\Messenger\Messenger
+ */
+class MessengerTest extends UnitTestCase {
+
+  /**
+   * The messenger under test.
+   *
+   * @var \Drupal\Core\Messenger\Messenger
+   */
+  protected $messenger;
+
+  /**
+   * The mock killswitch.
+   *
+   * @var \PHPUnit_Framework_MockObject_MockObject|\Drupal\Core\PageCache\ResponsePolicy\KillSwitch
+   */
+  protected $killSwitch;
+
+  /**
+   * The mock flashbag.
+   *
+   * @var \PHPUnit_Framework_MockObject_MockObject|\Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface
+   */
+  protected $flashBag;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->flashBag = $this->createMock(FlashBagInterface::class);
+    $this->killSwitch = $this->createMock(KillSwitch::class);
+    $this->messenger = new Messenger($this->flashBag, $this->killSwitch);
+  }
+
+  /**
+   * @covers ::addMessage
+   * @covers ::addStatus
+   */
+  public function testAddMessage() {
+    $this->flashBag->expects($this->once())
+      ->method('peek')
+      ->with(MessengerInterface::TYPE_STATUS)
+      ->willReturn([]);
+
+    // When Repeat == FALSE we should only add once.
+    $this->flashBag->expects($this->once())
+      ->method('add')
+      ->with(MessengerInterface::TYPE_STATUS, "Foo bar baz");
+
+    $this->killSwitch->expects($this->once())
+      ->method('trigger');
+
+    $this->messenger->addStatus("Foo bar baz");
+
+  }
+
+  /**
+   * @covers ::addMessage
+   * @covers ::addWarning
+   */
+  public function testAddMessageNoRepeat() {
+    $this->flashBag->expects($this->once())
+      ->method('peek')
+      ->with(MessengerInterface::TYPE_WARNING)
+      ->willReturn(["Foo bar baz"]);
+
+    // When Repeat == FALSE we don't add.
+    $this->flashBag->expects($this->never())
+      ->method('add');
+
+    $this->killSwitch->expects($this->once())
+      ->method('trigger');
+
+    $this->messenger->addWarning("Foo bar baz");
+
+  }
+
+  /**
+   * @covers ::addMessage
+   * @covers ::addError
+   */
+  public function testAddMessageRepeat() {
+    $this->flashBag->expects($this->never())
+      ->method('peek');
+
+    // When Repeat == FALSE we don't add.
+    $this->flashBag->expects($this->once())
+      ->method('add')
+      ->with(MessengerInterface::TYPE_ERROR, "Foo bar baz");
+
+    $this->killSwitch->expects($this->once())
+      ->method('trigger');
+
+    $this->messenger->addError("Foo bar baz", TRUE);
+
+  }
+
+}
