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 11 namespace base { 12 namespace { 13 14 struct TestSupportsUserData : public SupportsUserData {}; 15 16 struct 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 30 TEST(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