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..da0107ad973caa991c4a6c2aa92deb98edee74f3 |
--- /dev/null |
+++ b/base/containers/scoped_ptr_hash_map_unittest.cc |
@@ -0,0 +1,79 @@ |
+// 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 base { |
+ |
danakj
2015/04/24 17:22:04
can you wrap everything inside this namespace with
kcwu
2015/04/27 13:28:03
Done.
base::DefaultDeleter have to be specialized
danakj
2015/04/27 16:50:09
I meant wrap it all like:
namespace base {
namesp
kcwu
2015/04/27 17:48:17
Done.
That doesn't work for DefaultDeleter (compil
|
+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; |
+}; |
+ |
+template <> |
+struct DefaultDeleter<DeleteCounter> { |
+ public: |
+ inline void operator()(DeleteCounter* ptr) const { |
+ g_count++; |
+ delete ptr; |
+ } |
+ |
+ static int count() { return g_count; } |
+ static void ResetCounter() { g_count = 0; } |
+ |
+ private: |
+ static int g_count; |
danakj
2015/04/24 17:22:04
g_deleter_call_count?
kcwu
2015/04/27 13:28:03
Done.
|
+}; |
+ |
+int DeleteCounter::g_delete_count = 0; |
+int DefaultDeleter<DeleteCounter>::g_count = 0; |
+ |
+} // namespace |
danakj
2015/04/24 17:22:04
this isn't closing an anonymous namespace. i think
kcwu
2015/04/27 13:28:03
Done.
|
+ |
+TEST(ScopedPtrHashMapTest, CustomDeleter) { |
+ int key = 123; |
+ base::DeleteCounter::ResetCounter(); |
+ base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); |
+ { |
+ base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; |
+ map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); |
+ } |
+ EXPECT_EQ(1, base::DeleteCounter::delete_count()); |
+ EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); |
+ |
+ base::DeleteCounter::ResetCounter(); |
+ base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); |
+ { |
+ base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; |
+ map.erase( |
+ map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter))); |
+ EXPECT_EQ(1, base::DeleteCounter::delete_count()); |
+ EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); |
+ } |
+ EXPECT_EQ(1, base::DeleteCounter::delete_count()); |
+ EXPECT_EQ(1, base::DefaultDeleter<base::DeleteCounter>::count()); |
+ |
+ base::DeleteCounter::ResetCounter(); |
+ base::DefaultDeleter<base::DeleteCounter>::ResetCounter(); |
+ { |
+ base::ScopedPtrHashMap<int, scoped_ptr<base::DeleteCounter>> map; |
+ map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); |
+ map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); |
+ map.set(key, scoped_ptr<base::DeleteCounter>(new base::DeleteCounter)); |
+ EXPECT_EQ(2, base::DeleteCounter::delete_count()); |
+ EXPECT_EQ(2, base::DefaultDeleter<base::DeleteCounter>::count()); |
+ } |
+ EXPECT_EQ(3, base::DeleteCounter::delete_count()); |
+ EXPECT_EQ(3, base::DefaultDeleter<base::DeleteCounter>::count()); |
+} |
danakj
2015/04/24 17:22:04
can you test erase() too?
kcwu
2015/04/27 13:28:03
It is already tested in the second block.
|