OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "platform/graphics/ContiguousContainer.h" | 5 #include "platform/graphics/ContiguousContainer.h" |
6 | 6 |
7 #include "platform/wtf/TypeTraits.h" | 7 #include "platform/wtf/TypeTraits.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); | 73 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); |
74 EXPECT_EQ(&destructible, &list.First()); | 74 EXPECT_EQ(&destructible, &list.First()); |
75 EXPECT_CALL(destructible, Destruct()); | 75 EXPECT_CALL(destructible, Destruct()); |
76 } | 76 } |
77 | 77 |
78 TEST(ContiguousContainerTest, DestructorCalledOnceWhenClear) { | 78 TEST(ContiguousContainerTest, DestructorCalledOnceWhenClear) { |
79 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible)); | 79 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible)); |
80 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); | 80 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); |
81 EXPECT_EQ(&destructible, &list.First()); | 81 EXPECT_EQ(&destructible, &list.First()); |
82 | 82 |
83 testing::MockFunction<void()> separator; | 83 ::testing::MockFunction<void()> separator; |
84 { | 84 { |
85 testing::InSequence s; | 85 ::testing::InSequence s; |
86 EXPECT_CALL(destructible, Destruct()); | 86 EXPECT_CALL(destructible, Destruct()); |
87 EXPECT_CALL(separator, Call()); | 87 EXPECT_CALL(separator, Call()); |
88 EXPECT_CALL(destructible, Destruct()).Times(0); | 88 EXPECT_CALL(destructible, Destruct()).Times(0); |
89 } | 89 } |
90 | 90 |
91 list.Clear(); | 91 list.Clear(); |
92 separator.Call(); | 92 separator.Call(); |
93 } | 93 } |
94 | 94 |
95 TEST(ContiguousContainerTest, DestructorCalledOnceWhenRemoveLast) { | 95 TEST(ContiguousContainerTest, DestructorCalledOnceWhenRemoveLast) { |
96 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible)); | 96 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible)); |
97 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); | 97 auto& destructible = list.AllocateAndConstruct<MockDestructible>(); |
98 EXPECT_EQ(&destructible, &list.First()); | 98 EXPECT_EQ(&destructible, &list.First()); |
99 | 99 |
100 testing::MockFunction<void()> separator; | 100 ::testing::MockFunction<void()> separator; |
101 { | 101 { |
102 testing::InSequence s; | 102 ::testing::InSequence s; |
103 EXPECT_CALL(destructible, Destruct()); | 103 EXPECT_CALL(destructible, Destruct()); |
104 EXPECT_CALL(separator, Call()); | 104 EXPECT_CALL(separator, Call()); |
105 EXPECT_CALL(destructible, Destruct()).Times(0); | 105 EXPECT_CALL(destructible, Destruct()).Times(0); |
106 } | 106 } |
107 | 107 |
108 list.RemoveLast(); | 108 list.RemoveLast(); |
109 separator.Call(); | 109 separator.Call(); |
110 } | 110 } |
111 | 111 |
112 TEST(ContiguousContainerTest, DestructorCalledWithMultipleRemoveLastCalls) { | 112 TEST(ContiguousContainerTest, DestructorCalledWithMultipleRemoveLastCalls) { |
113 // This container only requests space for one, but the implementation is | 113 // This container only requests space for one, but the implementation is |
114 // free to use more space if the allocator provides it. | 114 // free to use more space if the allocator provides it. |
115 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible), | 115 ContiguousContainer<MockDestructible> list(sizeof(MockDestructible), |
116 1 * sizeof(MockDestructible)); | 116 1 * sizeof(MockDestructible)); |
117 testing::MockFunction<void()> separator; | 117 ::testing::MockFunction<void()> separator; |
118 | 118 |
119 // We should be okay to allocate and remove a single one, like before. | 119 // We should be okay to allocate and remove a single one, like before. |
120 list.AllocateAndConstruct<MockDestructible>(); | 120 list.AllocateAndConstruct<MockDestructible>(); |
121 EXPECT_EQ(1u, list.size()); | 121 EXPECT_EQ(1u, list.size()); |
122 { | 122 { |
123 testing::InSequence s; | 123 ::testing::InSequence s; |
124 EXPECT_CALL(list[0], Destruct()); | 124 EXPECT_CALL(list[0], Destruct()); |
125 EXPECT_CALL(separator, Call()); | 125 EXPECT_CALL(separator, Call()); |
126 EXPECT_CALL(list[0], Destruct()).Times(0); | 126 EXPECT_CALL(list[0], Destruct()).Times(0); |
127 } | 127 } |
128 list.RemoveLast(); | 128 list.RemoveLast(); |
129 separator.Call(); | 129 separator.Call(); |
130 EXPECT_EQ(0u, list.size()); | 130 EXPECT_EQ(0u, list.size()); |
131 | 131 |
132 testing::Mock::VerifyAndClearExpectations(&separator); | 132 ::testing::Mock::VerifyAndClearExpectations(&separator); |
133 | 133 |
134 // We should also be okay to allocate and remove multiple. | 134 // We should also be okay to allocate and remove multiple. |
135 list.AllocateAndConstruct<MockDestructible>(); | 135 list.AllocateAndConstruct<MockDestructible>(); |
136 list.AllocateAndConstruct<MockDestructible>(); | 136 list.AllocateAndConstruct<MockDestructible>(); |
137 list.AllocateAndConstruct<MockDestructible>(); | 137 list.AllocateAndConstruct<MockDestructible>(); |
138 list.AllocateAndConstruct<MockDestructible>(); | 138 list.AllocateAndConstruct<MockDestructible>(); |
139 list.AllocateAndConstruct<MockDestructible>(); | 139 list.AllocateAndConstruct<MockDestructible>(); |
140 list.AllocateAndConstruct<MockDestructible>(); | 140 list.AllocateAndConstruct<MockDestructible>(); |
141 EXPECT_EQ(6u, list.size()); | 141 EXPECT_EQ(6u, list.size()); |
142 { | 142 { |
143 // The last three should be destroyed by removeLast. | 143 // The last three should be destroyed by removeLast. |
144 testing::InSequence s; | 144 ::testing::InSequence s; |
145 EXPECT_CALL(list[5], Destruct()); | 145 EXPECT_CALL(list[5], Destruct()); |
146 EXPECT_CALL(separator, Call()); | 146 EXPECT_CALL(separator, Call()); |
147 EXPECT_CALL(list[5], Destruct()).Times(0); | 147 EXPECT_CALL(list[5], Destruct()).Times(0); |
148 EXPECT_CALL(list[4], Destruct()); | 148 EXPECT_CALL(list[4], Destruct()); |
149 EXPECT_CALL(separator, Call()); | 149 EXPECT_CALL(separator, Call()); |
150 EXPECT_CALL(list[4], Destruct()).Times(0); | 150 EXPECT_CALL(list[4], Destruct()).Times(0); |
151 EXPECT_CALL(list[3], Destruct()); | 151 EXPECT_CALL(list[3], Destruct()); |
152 EXPECT_CALL(separator, Call()); | 152 EXPECT_CALL(separator, Call()); |
153 EXPECT_CALL(list[3], Destruct()).Times(0); | 153 EXPECT_CALL(list[3], Destruct()).Times(0); |
154 } | 154 } |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 list.AppendByMoving(list[2], sizeof(Point3D)); | 533 list.AppendByMoving(list[2], sizeof(Point3D)); |
534 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); | 534 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); |
535 list.AppendByMoving(list[3], sizeof(Point3D)); | 535 list.AppendByMoving(list[3], sizeof(Point3D)); |
536 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); | 536 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); |
537 list.AppendByMoving(list[4], sizeof(Point2D)); | 537 list.AppendByMoving(list[4], sizeof(Point2D)); |
538 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); | 538 EXPECT_EQ(0u, reinterpret_cast<intptr_t>(&list.Last()) & (kMaxAlign - 1)); |
539 } | 539 } |
540 | 540 |
541 } // namespace | 541 } // namespace |
542 } // namespace blink | 542 } // namespace blink |
OLD | NEW |