Chromium Code Reviews| Index: base/containers/scoped_ptr_hash_map_unittest.cc |
| diff --git a/base/containers/scoped_ptr_hash_map_unittest.cc b/base/containers/scoped_ptr_hash_map_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9833e6ff1847640e18d1ceb1699e1dcf8baf203b |
| --- /dev/null |
| +++ b/base/containers/scoped_ptr_hash_map_unittest.cc |
| @@ -0,0 +1,83 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/containers/scoped_ptr_hash_map.h" |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
|
danakj
2015/04/27 17:52:00
sorry, but wrap this in namespace base { outside,
kcwu
2015/04/27 17:56:20
Done.
|
| + |
| +struct DeleteCounter { |
| + public: |
| + DeleteCounter() {} |
| + ~DeleteCounter() { g_delete_count++; } |
| + |
| + static void ResetCounter() { g_delete_count = 0; } |
| + static int delete_count() { return g_delete_count; } |
| + |
| + private: |
| + static int g_delete_count; |
| +}; |
| + |
| +int DeleteCounter::g_delete_count = 0; |
| + |
| +struct CountingDeleter { |
| + public: |
| + inline void operator()(DeleteCounter* ptr) const { |
| + g_deleter_call_count++; |
| + delete ptr; |
| + } |
| + |
| + static int count() { return g_deleter_call_count; } |
| + static void ResetCounter() { g_deleter_call_count = 0; } |
| + |
| + private: |
| + static int g_deleter_call_count; |
| +}; |
| + |
| +int CountingDeleter::g_deleter_call_count = 0; |
| + |
| +TEST(ScopedPtrHashMapTest, CustomDeleter) { |
| + int key = 123; |
| + |
| + // Test dtor. |
| + DeleteCounter::ResetCounter(); |
| + CountingDeleter::ResetCounter(); |
| + { |
| + base::ScopedPtrHashMap<int, scoped_ptr<DeleteCounter, CountingDeleter>> map; |
| + map.set(key, scoped_ptr<DeleteCounter, CountingDeleter>(new DeleteCounter)); |
| + } |
| + EXPECT_EQ(1, DeleteCounter::delete_count()); |
| + EXPECT_EQ(1, CountingDeleter::count()); |
| + |
| + // Test set and erase. |
| + DeleteCounter::ResetCounter(); |
| + CountingDeleter::ResetCounter(); |
| + { |
| + base::ScopedPtrHashMap<int, scoped_ptr<DeleteCounter, CountingDeleter>> map; |
| + map.erase(map.set( |
| + key, scoped_ptr<DeleteCounter, CountingDeleter>(new DeleteCounter))); |
| + EXPECT_EQ(1, DeleteCounter::delete_count()); |
| + EXPECT_EQ(1, CountingDeleter::count()); |
| + } |
| + EXPECT_EQ(1, DeleteCounter::delete_count()); |
| + EXPECT_EQ(1, CountingDeleter::count()); |
| + |
| + // Test set more than once. |
| + DeleteCounter::ResetCounter(); |
| + CountingDeleter::ResetCounter(); |
| + { |
| + base::ScopedPtrHashMap<int, scoped_ptr<DeleteCounter, CountingDeleter>> map; |
| + map.set(key, scoped_ptr<DeleteCounter, CountingDeleter>(new DeleteCounter)); |
| + map.set(key, scoped_ptr<DeleteCounter, CountingDeleter>(new DeleteCounter)); |
| + map.set(key, scoped_ptr<DeleteCounter, CountingDeleter>(new DeleteCounter)); |
| + EXPECT_EQ(2, DeleteCounter::delete_count()); |
| + EXPECT_EQ(2, CountingDeleter::count()); |
| + } |
| + EXPECT_EQ(3, DeleteCounter::delete_count()); |
| + EXPECT_EQ(3, CountingDeleter::count()); |
| +} |
| + |
| +} // namespace |