1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "fake_resource_manager.h"
6 #include "gtest/gtest.h"
7 #include "sdk_util/auto_lock.h"
9 FakeResourceManager::FakeResourceManager() : next_handle_(1) {}
11 FakeResourceManager::~FakeResourceManager() {
12 // The ref counts for all resources should be zero.
13 for (ResourceMap::iterator iter = resource_map_.begin();
14 iter != resource_map_.end();
16 const FakeResourceTracker* resource_tracker = iter->second;
17 EXPECT_EQ(0, resource_tracker->ref_count()) << "Leaked resource "
18 << resource_tracker->classname()
21 << resource_tracker->file()
23 << resource_tracker->line();
27 PP_Resource FakeResourceManager::Create(FakeResource* resource,
28 const char* classname,
32 PP_Resource handle = next_handle_++;
33 FakeResourceTracker* resource_tracker =
34 new FakeResourceTracker(resource, classname, file, line);
35 std::pair<ResourceMap::iterator, bool> result =
36 resource_map_.insert(ResourceMap::value_type(handle, resource_tracker));
37 EXPECT_TRUE(result.second);
38 result.first->second->AddRef();
42 void FakeResourceManager::AddRef(PP_Resource handle) {
44 ResourceMap::iterator iter = resource_map_.find(handle);
45 ASSERT_NE(resource_map_.end(), iter) << "AddRefing unknown resource "
48 FakeResourceTracker* resource_tracker = iter->second;
49 EXPECT_LT(0, resource_tracker->ref_count()) << "AddRefing freed resource "
50 << resource_tracker->classname()
53 << resource_tracker->file() << ":"
54 << resource_tracker->line();
55 resource_tracker->AddRef();
58 void FakeResourceManager::Release(PP_Resource handle) {
60 ResourceMap::iterator iter = resource_map_.find(handle);
61 ASSERT_NE(resource_map_.end(), iter) << "Releasing unknown resource "
64 FakeResourceTracker* resource_tracker = iter->second;
65 EXPECT_LT(0, resource_tracker->ref_count()) << "Releasing freed resource "
66 << resource_tracker->classname()
69 << resource_tracker->file() << ":"
70 << resource_tracker->line();
71 resource_tracker->Release();
74 FakeResourceTracker* FakeResourceManager::Get(PP_Resource handle) {
76 ResourceMap::iterator iter = resource_map_.find(handle);
77 if (iter == resource_map_.end()) {
78 // Can't use FAIL() because it tries to return void.
79 EXPECT_TRUE(false) << "Trying to get resource " << handle
80 << " that doesn't exist!";
84 FakeResourceTracker* resource_tracker = iter->second;
85 EXPECT_LT(0, resource_tracker->ref_count()) << "Accessing freed resource "
86 << resource_tracker->classname()
89 << resource_tracker->file() << ":"
90 << resource_tracker->line();
95 FakeResourceTracker::FakeResourceTracker(FakeResource* resource,
96 const char* classname,
99 : resource_(resource),
100 classname_(classname),
105 FakeResourceTracker::~FakeResourceTracker() { delete resource_; }
107 bool FakeResourceTracker::CheckType(const char* other_classname) const {
108 if (strcmp(other_classname, classname_) != 0) {
109 // Repeat the expectation, just to print out a nice error message before we
111 EXPECT_STREQ(classname_, other_classname);