1a22dd221033bb6b4052544c4489934a4ba2a3416Jack He/****************************************************************************** 2a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * 3a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * Copyright (C) 2016 Google, Inc. 4a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * 5a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * Licensed under the Apache License, Version 2.0 (the "License"); 6a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * you may not use this file except in compliance with the License. 7a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * You may obtain a copy of the License at: 8a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * 9a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * http://www.apache.org/licenses/LICENSE-2.0 10a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * 11a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * Unless required by applicable law or agreed to in writing, software 12a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * distributed under the License is distributed on an "AS IS" BASIS, 13a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * See the License for the specific language governing permissions and 15a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * limitations under the License. 16a22dd221033bb6b4052544c4489934a4ba2a3416Jack He * 17a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ******************************************************************************/ 18a22dd221033bb6b4052544c4489934a4ba2a3416Jack He#include <gmock/gmock.h> 19a22dd221033bb6b4052544c4489934a4ba2a3416Jack He#include <gtest/gtest.h> 20a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 21a22dd221033bb6b4052544c4489934a4ba2a3416Jack He#include <base/logging.h> 22a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 23a22dd221033bb6b4052544c4489934a4ba2a3416Jack He#include "osi/include/leaky_bonded_queue.h" 24a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 25a22dd221033bb6b4052544c4489934a4ba2a3416Jack Henamespace testing { 26a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 27a22dd221033bb6b4052544c4489934a4ba2a3416Jack Heusing system_bt_osi::LeakyBondedQueue; 28a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 29a22dd221033bb6b4052544c4489934a4ba2a3416Jack He#define ITEM_EQ(a, b) \ 30a22dd221033bb6b4052544c4489934a4ba2a3416Jack He do { \ 31a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(a, b); \ 32a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(a->index, b->index); \ 33a22dd221033bb6b4052544c4489934a4ba2a3416Jack He } while (0) 34a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 35a22dd221033bb6b4052544c4489934a4ba2a3416Jack Heclass Item { 36a22dd221033bb6b4052544c4489934a4ba2a3416Jack He public: 37a22dd221033bb6b4052544c4489934a4ba2a3416Jack He Item(int i) { index = i; } 38a22dd221033bb6b4052544c4489934a4ba2a3416Jack He virtual ~Item() {} 39a22dd221033bb6b4052544c4489934a4ba2a3416Jack He int index; 40a22dd221033bb6b4052544c4489934a4ba2a3416Jack He}; 41a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 42a22dd221033bb6b4052544c4489934a4ba2a3416Jack Heclass MockItem : public Item { 43a22dd221033bb6b4052544c4489934a4ba2a3416Jack He public: 44a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem(int i) : Item(i) {} 45a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ~MockItem() { Destruct(); } 46a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MOCK_METHOD0(Destruct, void()); 47a22dd221033bb6b4052544c4489934a4ba2a3416Jack He}; 48a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 49a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestEnqueueDequeue) { 50a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = new MockItem(1); 51a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = new MockItem(2); 52a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3 = new MockItem(3); 53a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4 = new MockItem(4); 54a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(3); 55a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Capacity(), static_cast<size_t>(3)); 56a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 57a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 58a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 59a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 60a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 61a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item3); 62a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(3)); 63a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item1, Destruct()).Times(1); 64a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item4); 65a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(3)); 66a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2_2 = queue->Dequeue(); 67a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3_3 = queue->Dequeue(); 68a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4_4 = queue->Dequeue(); 69a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item2_2, NotNull()); 70a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item2_2, item2); 71a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item3_3, NotNull()); 72a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item3_3, item3); 73a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item4_4, NotNull()); 74a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item4_4, item4); 75a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LOG(INFO) << "All done release items"; 76a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item2_2, Destruct()).Times(1); 77a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item2_2; 78a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item3_3, Destruct()).Times(1); 79a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item3_3; 80a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item4_4, Destruct()).Times(1); 81a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item4_4; 82a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 83a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 84a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 85a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestEnqueueDequeue2) { 86a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = new MockItem(1); 87a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = new MockItem(2); 88a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3 = new MockItem(3); 89a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4 = new MockItem(4); 90a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 91a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Capacity(), static_cast<size_t>(2)); 92a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 93a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 94a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 95a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1 = queue->Dequeue(); 96a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1, item1_1); 97a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 98a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 99a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 100a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item3); 101a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 102a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item2, Destruct()).Times(1); 103a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item4); 104a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 105a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item3, Destruct()).Times(1); 106a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 107a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 108a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4_4_4 = queue->Dequeue(); 109a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1_1 = queue->Dequeue(); 110a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item4_4_4, item4); 111a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1_1_1, item1); 112a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item1_1_1, Destruct()).Times(1); 113a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item1_1_1; 114a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item4_4_4, Destruct()).Times(1); 115a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item4_4_4; 116a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 117a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 118a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 119a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestEnqueuePop) { 120a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = new MockItem(1); 121a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = new MockItem(2); 122a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3 = new MockItem(3); 123a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4 = new MockItem(4); 124a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 125a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Capacity(), static_cast<size_t>(2)); 126a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 127a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 128a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 129a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1 = queue->Dequeue(); 130a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1, item1_1); 131a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 132a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 133a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 134a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item3); 135a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 136a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2_2 = queue->EnqueueWithPop(item4); 137a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item2_2, NotNull()); 138a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item2_2, item2); 139a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item2, Destruct()).Times(1); 140a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item2_2; 141a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 142a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3_3 = queue->EnqueueWithPop(item1); 143a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item3_3, NotNull()); 144a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item3_3, item3); 145a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item3, Destruct()).Times(1); 146a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item3_3; 147a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 148a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4_4_4 = queue->Dequeue(); 149a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1_1 = queue->Dequeue(); 150a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item4_4_4, item4); 151a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1_1_1, item1); 152a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item1_1_1, Destruct()).Times(1); 153a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item1_1_1; 154a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item4_4_4, Destruct()).Times(1); 155a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete item4_4_4; 156a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 157a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 158a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 159a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestQueueClear) { 160a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = new MockItem(1); 161a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = new MockItem(2); 162a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3 = new MockItem(3); 163a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4 = new MockItem(4); 164a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 165a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Capacity(), static_cast<size_t>(2)); 166a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 167a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 168a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 169a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1 = queue->Dequeue(); 170a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1, item1_1); 171a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 172a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 173a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 174a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item3); 175a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 176a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item2, Destruct()).Times(1); 177a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item4); 178a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 179a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item3, Destruct()).Times(1); 180a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 181a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 182a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item1, Destruct()).Times(1); 183a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item4, Destruct()).Times(1); 184a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Clear(); 185a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 186a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 187a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 188a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestQueueFree) { 189a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = new MockItem(1); 190a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = new MockItem(2); 191a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item3 = new MockItem(3); 192a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item4 = new MockItem(4); 193a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 194a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Capacity(), static_cast<size_t>(2)); 195a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 196a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 197a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 198a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1 = queue->Dequeue(); 199a22dd221033bb6b4052544c4489934a4ba2a3416Jack He ITEM_EQ(item1, item1_1); 200a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(0)); 201a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 202a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(1)); 203a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item3); 204a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 205a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item2, Destruct()).Times(1); 206a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item4); 207a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 208a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item3, Destruct()).Times(1); 209a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 210a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_EQ(queue->Length(), static_cast<size_t>(2)); 211a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item1, Destruct()).Times(1); 212a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_CALL(*item4, Destruct()).Times(1); 213a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 214a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 215a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 216a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestPushNull) { 217a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = nullptr; 218a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 219a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 220a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1_1 = queue->Dequeue(); 221a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item1_1, IsNull()); 222a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 223a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 224a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestPushNullOverflowQueue) { 225a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = nullptr; 226a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = nullptr; 227a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(1); 228a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 229a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 230a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2_2 = queue->Dequeue(); 231a22dd221033bb6b4052544c4489934a4ba2a3416Jack He EXPECT_THAT(item2_2, IsNull()); 232a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 233a22dd221033bb6b4052544c4489934a4ba2a3416Jack He 234a22dd221033bb6b4052544c4489934a4ba2a3416Jack HeTEST(LeakyBondedQueueTest, TestPushNullDeleteQueue) { 235a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item1 = nullptr; 236a22dd221033bb6b4052544c4489934a4ba2a3416Jack He MockItem* item2 = nullptr; 237a22dd221033bb6b4052544c4489934a4ba2a3416Jack He LeakyBondedQueue<MockItem>* queue = new LeakyBondedQueue<MockItem>(2); 238a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item1); 239a22dd221033bb6b4052544c4489934a4ba2a3416Jack He queue->Enqueue(item2); 240a22dd221033bb6b4052544c4489934a4ba2a3416Jack He delete queue; 241a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 242a22dd221033bb6b4052544c4489934a4ba2a3416Jack He} 243