1 /* 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "webrtc/base/scopedptrcollection.h" 12 #include "webrtc/base/gunit.h" 13 14 namespace rtc { 15 16 namespace { 17 18 class InstanceCounter { 19 public: 20 explicit InstanceCounter(int* num_instances) 21 : num_instances_(num_instances) { 22 ++(*num_instances_); 23 } 24 ~InstanceCounter() { 25 --(*num_instances_); 26 } 27 28 private: 29 int* num_instances_; 30 31 DISALLOW_COPY_AND_ASSIGN(InstanceCounter); 32 }; 33 34 } // namespace 35 36 class ScopedPtrCollectionTest : public testing::Test { 37 protected: 38 ScopedPtrCollectionTest() 39 : num_instances_(0), 40 collection_(new ScopedPtrCollection<InstanceCounter>()) { 41 } 42 43 int num_instances_; 44 scoped_ptr<ScopedPtrCollection<InstanceCounter> > collection_; 45 }; 46 47 TEST_F(ScopedPtrCollectionTest, PushBack) { 48 EXPECT_EQ(0u, collection_->collection().size()); 49 EXPECT_EQ(0, num_instances_); 50 const int kNum = 100; 51 for (int i = 0; i < kNum; ++i) { 52 collection_->PushBack(new InstanceCounter(&num_instances_)); 53 } 54 EXPECT_EQ(static_cast<size_t>(kNum), collection_->collection().size()); 55 EXPECT_EQ(kNum, num_instances_); 56 collection_.reset(); 57 EXPECT_EQ(0, num_instances_); 58 } 59 60 TEST_F(ScopedPtrCollectionTest, Remove) { 61 InstanceCounter* ic = new InstanceCounter(&num_instances_); 62 collection_->PushBack(ic); 63 EXPECT_EQ(1u, collection_->collection().size()); 64 collection_->Remove(ic); 65 EXPECT_EQ(1, num_instances_); 66 collection_.reset(); 67 EXPECT_EQ(1, num_instances_); 68 delete ic; 69 EXPECT_EQ(0, num_instances_); 70 } 71 72 73 } // namespace rtc 74