1// Copyright 2014 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. 4 5#include "base/supports_user_data.h" 6 7#include <vector> 8 9#include "testing/gtest/include/gtest/gtest.h" 10 11namespace base { 12namespace { 13 14struct TestSupportsUserData : public SupportsUserData {}; 15 16struct UsesItself : public SupportsUserData::Data { 17 UsesItself(SupportsUserData* supports_user_data, const void* key) 18 : supports_user_data_(supports_user_data), 19 key_(key) { 20 } 21 22 virtual ~UsesItself() { 23 EXPECT_EQ(NULL, supports_user_data_->GetUserData(key_)); 24 } 25 26 SupportsUserData* supports_user_data_; 27 const void* key_; 28}; 29 30TEST(SupportsUserDataTest, ClearWorksRecursively) { 31 TestSupportsUserData supports_user_data; 32 char key = 0; 33 supports_user_data.SetUserData(&key, 34 new UsesItself(&supports_user_data, &key)); 35 // Destruction of supports_user_data runs the actual test. 36} 37 38} // namespace 39} // namespace base 40