1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/gunit.h" 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/referencecountedsingletonfactory.h" 13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc { 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass MyExistenceWatcher { 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public: 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher() { create_called_ = true; } 19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ~MyExistenceWatcher() { delete_called_ = true; } 20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static bool create_called_; 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static bool delete_called_; 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool MyExistenceWatcher::create_called_ = false; 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool MyExistenceWatcher::delete_called_ = false; 27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass TestReferenceCountedSingletonFactory : 29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public ReferenceCountedSingletonFactory<MyExistenceWatcher> { 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org protected: 31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual bool SetupInstance() { 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org instance_.reset(new MyExistenceWatcher()); 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual void CleanupInstance() { 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org instance_.reset(); 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstatic void DoCreateAndGoOutOfScope( 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ReferenceCountedSingletonFactory<MyExistenceWatcher> *factory) { 43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> ptr(factory); 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ptr.get(); 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // and now ptr should go out of scope. 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, ZeroReferenceCountCausesDeletion) { 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::delete_called_ = false; 51f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org DoCreateAndGoOutOfScope(&factory); 52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::delete_called_); 53f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 55f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, NonZeroReferenceCountDoesNotDelete) { 56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> ptr(&factory); 58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ptr.get(); 59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::delete_called_ = false; 60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org DoCreateAndGoOutOfScope(&factory); 61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_FALSE(MyExistenceWatcher::delete_called_); 62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, ReturnedPointersReferToSameThing) { 65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory), two(&factory); 67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(one.get(), two.get()); 69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, Release) { 72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory); 75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::delete_called_ = false; 78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::delete_called_); 80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, GetWithoutRelease) { 83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory); 85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::create_called_ = false; 88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_FALSE(MyExistenceWatcher::create_called_); 90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, GetAfterRelease) { 93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory); 95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::create_called_ = false; 97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::create_called_); 100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, MultipleReleases) { 103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory), two(&factory); 105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::create_called_ = false; 107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::delete_called_ = false; 108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_FALSE(MyExistenceWatcher::delete_called_); 110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_FALSE(MyExistenceWatcher::delete_called_); 112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_FALSE(MyExistenceWatcher::delete_called_); 114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::create_called_); 116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 117f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 118f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(ReferenceCountedSingletonFactory, Existentialism) { 119f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestReferenceCountedSingletonFactory factory; 120f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 121f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org rcsf_ptr<MyExistenceWatcher> one(&factory); 122f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 123f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::create_called_ = false; 124f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org MyExistenceWatcher::delete_called_ = false; 125f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 126f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.get(); 127f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::create_called_); 128f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org one.release(); 129f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(MyExistenceWatcher::delete_called_); 130f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 131f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 132f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // namespace rtc 133