summaryrefslogtreecommitdiffstats
path: root/mojo/edk/system/message_in_transit_queue_unittest.cc
blob: 7e715d22e14b2ea2cc56f182a5bf8497b7337a39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "mojo/edk/system/message_in_transit_queue.h"

#include "mojo/edk/system/message_in_transit_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace mojo {
namespace edk {
namespace {

TEST(MessageInTransitQueueTest, Basic) {
  MessageInTransitQueue queue;
  EXPECT_TRUE(queue.IsEmpty());

  queue.AddMessage(test::MakeTestMessage(1));
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(1u, queue.Size());

  test::VerifyTestMessage(queue.PeekMessage(), 1);
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(1u, queue.Size());

  queue.AddMessage(test::MakeTestMessage(2));
  queue.AddMessage(test::MakeTestMessage(3));
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(3u, queue.Size());

  test::VerifyTestMessage(queue.GetMessage().get(), 1);
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(2u, queue.Size());

  test::VerifyTestMessage(queue.PeekMessage(), 2);
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(2u, queue.Size());

  queue.DiscardMessage();
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(1u, queue.Size());

  test::VerifyTestMessage(queue.GetMessage().get(), 3);
  EXPECT_TRUE(queue.IsEmpty());
  EXPECT_EQ(0u, queue.Size());

  queue.AddMessage(test::MakeTestMessage(4));
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(1u, queue.Size());

  test::VerifyTestMessage(queue.PeekMessage(), 4);
  ASSERT_FALSE(queue.IsEmpty());
  EXPECT_EQ(1u, queue.Size());

  queue.Clear();
  EXPECT_TRUE(queue.IsEmpty());
  EXPECT_EQ(0u, queue.Size());
}

TEST(MessageInTransitQueueTest, Swap) {
  MessageInTransitQueue queue1;
  MessageInTransitQueue queue2;

  queue1.AddMessage(test::MakeTestMessage(1));
  queue1.AddMessage(test::MakeTestMessage(2));
  queue1.AddMessage(test::MakeTestMessage(3));
  EXPECT_EQ(3u, queue1.Size());

  queue2.AddMessage(test::MakeTestMessage(4));
  queue2.AddMessage(test::MakeTestMessage(5));
  EXPECT_EQ(2u, queue2.Size());

  queue1.Swap(&queue2);
  EXPECT_EQ(2u, queue1.Size());
  EXPECT_EQ(3u, queue2.Size());
  test::VerifyTestMessage(queue1.GetMessage().get(), 4);
  test::VerifyTestMessage(queue1.GetMessage().get(), 5);
  EXPECT_TRUE(queue1.IsEmpty());

  queue1.Swap(&queue2);
  EXPECT_TRUE(queue2.IsEmpty());

  test::VerifyTestMessage(queue1.GetMessage().get(), 1);
  test::VerifyTestMessage(queue1.GetMessage().get(), 2);
  test::VerifyTestMessage(queue1.GetMessage().get(), 3);
  EXPECT_TRUE(queue1.IsEmpty());
}

}  // namespace
}  // namespace edk
}  // namespace mojo