Home | History | Annotate | Download | only in base
      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