[M94 Dev][Tizen] Fix for errors for generating ninja files
[platform/framework/web/chromium-efl.git] / base / supports_user_data_unittest.cc
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
8 #include "base/memory/ptr_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace base {
12 namespace {
13
14 struct TestSupportsUserData : public SupportsUserData {
15   // Make ClearAllUserData public so tests can access it.
16   using SupportsUserData::ClearAllUserData;
17 };
18
19 struct UsesItself : public SupportsUserData::Data {
20   UsesItself(SupportsUserData* supports_user_data, const void* key)
21       : supports_user_data_(supports_user_data),
22         key_(key) {
23   }
24
25   ~UsesItself() override {
26     EXPECT_EQ(nullptr, supports_user_data_->GetUserData(key_));
27   }
28
29   SupportsUserData* supports_user_data_;
30   const void* key_;
31 };
32
33 TEST(SupportsUserDataTest, ClearWorksRecursively) {
34   TestSupportsUserData supports_user_data;
35   char key = 0;
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.
39 }
40
41 struct TestData : public SupportsUserData::Data {};
42
43 TEST(SupportsUserDataTest, Movable) {
44   TestSupportsUserData supports_user_data_1;
45   char key1 = 0;
46   supports_user_data_1.SetUserData(&key1, std::make_unique<TestData>());
47   void* data_1_ptr = supports_user_data_1.GetUserData(&key1);
48
49   TestSupportsUserData supports_user_data_2;
50   char key2 = 0;
51   supports_user_data_2.SetUserData(&key2, std::make_unique<TestData>());
52
53   supports_user_data_2 = std::move(supports_user_data_1);
54
55   EXPECT_EQ(data_1_ptr, supports_user_data_2.GetUserData(&key1));
56   EXPECT_EQ(nullptr, supports_user_data_2.GetUserData(&key2));
57 }
58
59 TEST(SupportsUserDataTest, ClearAllUserData) {
60   TestSupportsUserData supports_user_data;
61   char key1 = 0;
62   supports_user_data.SetUserData(&key1, std::make_unique<TestData>());
63   char key2 = 0;
64   supports_user_data.SetUserData(&key2, std::make_unique<TestData>());
65
66   EXPECT_TRUE(supports_user_data.GetUserData(&key1));
67   EXPECT_TRUE(supports_user_data.GetUserData(&key2));
68
69   supports_user_data.ClearAllUserData();
70
71   EXPECT_FALSE(supports_user_data.GetUserData(&key1));
72   EXPECT_FALSE(supports_user_data.GetUserData(&key2));
73 }
74
75 }  // namespace
76 }  // namespace base