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.
5 #include "base/supports_user_data.h"
8 #include "base/memory/ptr_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
14 struct TestSupportsUserData : public SupportsUserData {
15 // Make ClearAllUserData public so tests can access it.
16 using SupportsUserData::ClearAllUserData;
19 struct UsesItself : public SupportsUserData::Data {
20 UsesItself(SupportsUserData* supports_user_data, const void* key)
21 : supports_user_data_(supports_user_data),
25 ~UsesItself() override {
26 EXPECT_EQ(nullptr, supports_user_data_->GetUserData(key_));
29 SupportsUserData* supports_user_data_;
33 TEST(SupportsUserDataTest, ClearWorksRecursively) {
34 TestSupportsUserData supports_user_data;
36 supports_user_data.SetUserData(
37 &key, std::make_unique<UsesItself>(&supports_user_data, &key));
38 // Destruction of supports_user_data runs the actual test.
41 struct TestData : public SupportsUserData::Data {};
43 TEST(SupportsUserDataTest, Movable) {
44 TestSupportsUserData supports_user_data_1;
46 supports_user_data_1.SetUserData(&key1, std::make_unique<TestData>());
47 void* data_1_ptr = supports_user_data_1.GetUserData(&key1);
49 TestSupportsUserData supports_user_data_2;
51 supports_user_data_2.SetUserData(&key2, std::make_unique<TestData>());
53 supports_user_data_2 = std::move(supports_user_data_1);
55 EXPECT_EQ(data_1_ptr, supports_user_data_2.GetUserData(&key1));
56 EXPECT_EQ(nullptr, supports_user_data_2.GetUserData(&key2));
59 TEST(SupportsUserDataTest, ClearAllUserData) {
60 TestSupportsUserData supports_user_data;
62 supports_user_data.SetUserData(&key1, std::make_unique<TestData>());
64 supports_user_data.SetUserData(&key2, std::make_unique<TestData>());
66 EXPECT_TRUE(supports_user_data.GetUserData(&key1));
67 EXPECT_TRUE(supports_user_data.GetUserData(&key2));
69 supports_user_data.ClearAllUserData();
71 EXPECT_FALSE(supports_user_data.GetUserData(&key1));
72 EXPECT_FALSE(supports_user_data.GetUserData(&key2));