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