diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:08:42 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:08:42 +0000 |
commit | a13f122545304dc92550ddf4cf5bed6053d41f4b (patch) | |
tree | db832f9bf947b405d5a2922522302ba1198f096e /base/memory | |
parent | d53cbc05cbb75d40e8a088a9eb641c3d3ff6674c (diff) | |
download | chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.zip chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.tar.gz chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.tar.bz2 |
Fix ScopedVector<T> passing via base::Bind()
The original implementation neglected to define the necessary
CallbackParamTraits and CallbackForward implementations for ScopedVector.
Fix scoped_ptr_malloc and scoped_array while I'm at it. Awesome.
BUG=NONE
TEST=scoped_vector_unittest.cc
Review URL: http://codereview.chromium.org/9827003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128350 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/memory')
-rw-r--r-- | base/memory/scoped_vector_unittest.cc | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/base/memory/scoped_vector_unittest.cc b/base/memory/scoped_vector_unittest.cc index cda1e4b..e10cb83 100644 --- a/base/memory/scoped_vector_unittest.cc +++ b/base/memory/scoped_vector_unittest.cc @@ -2,8 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" + +#include "base/bind.h" +#include "base/callback.h" +#include "base/memory/scoped_ptr.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -161,6 +164,43 @@ TEST(ScopedVectorTest, MoveAssign) { EXPECT_EQ(LC_DESTROYED, watcher.life_cycle_state()); } +class DeleteCounter { + public: + explicit DeleteCounter(int* deletes) + : deletes_(deletes) { + } + + ~DeleteCounter() { + (*deletes_)++; + } + + void VoidMethod0() {} + + private: + int* const deletes_; + + DISALLOW_COPY_AND_ASSIGN(DeleteCounter); +}; + +template <typename T> +ScopedVector<T> PassThru(ScopedVector<T> scoper) { + return scoper.Pass(); +} + +TEST(ScopedVectorTest, Passed) { + int deletes = 0; + ScopedVector<DeleteCounter> deleter_vector; + deleter_vector.push_back(new DeleteCounter(&deletes)); + EXPECT_EQ(0, deletes); + base::Callback<ScopedVector<DeleteCounter>(void)> callback = + base::Bind(&PassThru<DeleteCounter>, base::Passed(&deleter_vector)); + EXPECT_EQ(0, deletes); + ScopedVector<DeleteCounter> result = callback.Run(); + EXPECT_EQ(0, deletes); + result.reset(); + EXPECT_EQ(1, deletes); +}; + TEST(ScopedVectorTest, InsertRange) { LifeCycleWatcher watchers[5]; |