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 "config.h" | 5 #include "config.h" |
6 #include "platform/graphics/ListContainer.h" | 6 #include "platform/graphics/ListContainer.h" |
7 | 7 |
8 #include "wtf/OwnPtr.h" | 8 #include "wtf/OwnPtr.h" |
9 #include "wtf/PassOwnPtr.h" | 9 #include "wtf/PassOwnPtr.h" |
10 #include "wtf/RefPtr.h" | 10 #include "wtf/RefPtr.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 SimpleDerivedElementConstructMagicNumberTwo* derivedElement2 = list.allocate
AndConstruct<SimpleDerivedElementConstructMagicNumberTwo>(); | 146 SimpleDerivedElementConstructMagicNumberTwo* derivedElement2 = list.allocate
AndConstruct<SimpleDerivedElementConstructMagicNumberTwo>(); |
147 | 147 |
148 EXPECT_EQ(size, list.size()); | 148 EXPECT_EQ(size, list.size()); |
149 EXPECT_EQ(derivedElement1, list.front()); | 149 EXPECT_EQ(derivedElement1, list.front()); |
150 EXPECT_EQ(derivedElement2, list.back()); | 150 EXPECT_EQ(derivedElement2, list.back()); |
151 | 151 |
152 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, derivedElement1->getV
alue()); | 152 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, derivedElement1->getV
alue()); |
153 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, derivedElement2->getV
alue()); | 153 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, derivedElement2->getV
alue()); |
154 } | 154 } |
155 | 155 |
| 156 TEST(ListContainerTest, AllocateAndConstructWithArguments) |
| 157 { |
| 158 // Create a new OwnPtr<SimpleDerivedElement> by passing in a new SimpleDeriv
edElement. |
| 159 ListContainer<OwnPtr<SimpleDerivedElement>> list1(kCurrentLargestDerivedElem
entSize); |
| 160 auto* sdeOwnPtr1 = list1.allocateAndConstruct<OwnPtr<SimpleDerivedElement>>(
adoptPtr(new SimpleDerivedElementConstructMagicNumberOne())); |
| 161 EXPECT_EQ(1u, list1.size()); |
| 162 EXPECT_EQ(sdeOwnPtr1, list1.back()); |
| 163 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, (*sdeOwnPtr1)->getVal
ue()); |
| 164 (*sdeOwnPtr1)->setValue(kMagicNumberToUseForSimpleDerivedElementTwo); |
| 165 |
| 166 // Transfer an OwnPtr<SimpleDerivedElement> to another list. |
| 167 ListContainer<OwnPtr<SimpleDerivedElement>> list2(kCurrentLargestDerivedElem
entSize); |
| 168 auto* sdeOwnPtr2 = list2.allocateAndConstruct<OwnPtr<SimpleDerivedElement>>(
sdeOwnPtr1->release()); |
| 169 EXPECT_EQ(1u, list2.size()); |
| 170 EXPECT_EQ(sdeOwnPtr2, list2.back()); |
| 171 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, (*sdeOwnPtr2)->getVal
ue()); |
| 172 |
| 173 // Verify the first OwnPtr is null after moving. |
| 174 EXPECT_EQ(nullptr, list1.back()->get()); |
| 175 } |
| 176 |
156 TEST(ListContainerTest, DestructorCalled) | 177 TEST(ListContainerTest, DestructorCalled) |
157 { | 178 { |
158 ListContainer<DerivedElement> list(kCurrentLargestDerivedElementSize); | 179 ListContainer<DerivedElement> list(kCurrentLargestDerivedElementSize); |
159 | 180 |
160 size_t size = 1; | 181 size_t size = 1; |
161 MockDerivedElement* derivedElement1 = list.allocateAndConstruct<MockDerivedE
lement>(); | 182 MockDerivedElement* derivedElement1 = list.allocateAndConstruct<MockDerivedE
lement>(); |
162 | 183 |
163 EXPECT_CALL(*derivedElement1, Destruct()); | 184 EXPECT_CALL(*derivedElement1, Destruct()); |
164 EXPECT_EQ(size, list.size()); | 185 EXPECT_EQ(size, list.size()); |
165 EXPECT_EQ(derivedElement1, list.front()); | 186 EXPECT_EQ(derivedElement1, list.front()); |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 MockDerivedElement* mde1 = list1.allocateAndConstruct<MockDerivedElement>(); | 867 MockDerivedElement* mde1 = list1.allocateAndConstruct<MockDerivedElement>(); |
847 | 868 |
848 // Make sure destructor isn't called during AppendByMoving. | 869 // Make sure destructor isn't called during AppendByMoving. |
849 list2.appendByMoving(mde1); | 870 list2.appendByMoving(mde1); |
850 EXPECT_CALL(*mde1, Destruct()).Times(0); | 871 EXPECT_CALL(*mde1, Destruct()).Times(0); |
851 testing::Mock::VerifyAndClearExpectations(mde1); | 872 testing::Mock::VerifyAndClearExpectations(mde1); |
852 mde1 = static_cast<MockDerivedElement*>(list2.back()); | 873 mde1 = static_cast<MockDerivedElement*>(list2.back()); |
853 EXPECT_CALL(*mde1, Destruct()); | 874 EXPECT_CALL(*mde1, Destruct()); |
854 } | 875 } |
855 | 876 |
| 877 TEST(ListContainerTest, AppendByMovingReturnsMovedPointer) |
| 878 { |
| 879 ListContainer<SimpleDerivedElement> list1(kCurrentLargestDerivedElementSize)
; |
| 880 ListContainer<SimpleDerivedElement> list2(kCurrentLargestDerivedElementSize)
; |
| 881 SimpleDerivedElement* simpleElement = list1.allocateAndConstruct<SimpleDeriv
edElement>(); |
| 882 |
| 883 SimpleDerivedElement* movedElement1 = list2.appendByMoving(simpleElement); |
| 884 EXPECT_EQ(list2.back(), movedElement1); |
| 885 |
| 886 SimpleDerivedElement* movedElement2 = list1.appendByMoving(movedElement1); |
| 887 EXPECT_EQ(list1.back(), movedElement2); |
| 888 EXPECT_NE(movedElement1, movedElement2); |
| 889 } |
| 890 |
856 TEST(ListContainerTest, AppendByMovingReplacesSourceWithNewDerivedElement) | 891 TEST(ListContainerTest, AppendByMovingReplacesSourceWithNewDerivedElement) |
857 { | 892 { |
858 ListContainer<SimpleDerivedElementConstructMagicNumberOne> list1(kCurrentLar
gestDerivedElementSize); | 893 ListContainer<SimpleDerivedElementConstructMagicNumberOne> list1(kCurrentLar
gestDerivedElementSize); |
859 ListContainer<SimpleDerivedElementConstructMagicNumberTwo> list2(kCurrentLar
gestDerivedElementSize); | 894 ListContainer<SimpleDerivedElementConstructMagicNumberTwo> list2(kCurrentLar
gestDerivedElementSize); |
860 | 895 |
861 list1.allocateAndConstruct<SimpleDerivedElementConstructMagicNumberOne>(); | 896 list1.allocateAndConstruct<SimpleDerivedElementConstructMagicNumberOne>(); |
862 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, | 897 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, |
863 list1.front()->getValue()); | 898 list1.front()->getValue()); |
864 | 899 |
865 list2.appendByMoving(list1.front()); | 900 list2.appendByMoving(list1.front()); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 EXPECT_EQ(2u, list1.size()); | 1005 EXPECT_EQ(2u, list1.size()); |
971 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, list2.front()->getVal
ue()); | 1006 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, list2.front()->getVal
ue()); |
972 EXPECT_EQ(1u, list2.size()); | 1007 EXPECT_EQ(1u, list2.size()); |
973 | 1008 |
974 // Ensure pointers are still valid after swapping. | 1009 // Ensure pointers are still valid after swapping. |
975 EXPECT_EQ(preSwapList1Front, list2.front()); | 1010 EXPECT_EQ(preSwapList1Front, list2.front()); |
976 } | 1011 } |
977 | 1012 |
978 } // namespace | 1013 } // namespace |
979 } // namespace blink | 1014 } // namespace blink |
OLD | NEW |