Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: chrome/browser/ui/global_error/global_error_service_unittest.cc

Issue 2409443002: Make GlobalErrorService's ownership model slightly less insane. (Closed)
Patch Set: commentary Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/global_error/global_error_service.h" 5 #include "chrome/browser/ui/global_error/global_error_service.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h"
11 #include "chrome/browser/ui/global_error/global_error.h" 12 #include "chrome/browser/ui/global_error/global_error.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace { 15 namespace {
15 16
16 // Error base class that keeps track of the number of errors that exist. 17 // Error base class that keeps track of the number of errors that exist.
17 class BaseError : public GlobalError { 18 class BaseError : public GlobalError {
18 public: 19 public:
19 BaseError() { ++count_; } 20 BaseError() { ++count_; }
20 ~BaseError() override { --count_; } 21 ~BaseError() override { --count_; }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 }; 70 };
70 71
71 } // namespace 72 } // namespace
72 73
73 // Test adding errors to the global error service. 74 // Test adding errors to the global error service.
74 TEST(GlobalErrorServiceTest, AddError) { 75 TEST(GlobalErrorServiceTest, AddError) {
75 std::unique_ptr<GlobalErrorService> service(new GlobalErrorService(NULL)); 76 std::unique_ptr<GlobalErrorService> service(new GlobalErrorService(NULL));
76 EXPECT_EQ(0u, service->errors().size()); 77 EXPECT_EQ(0u, service->errors().size());
77 78
78 BaseError* error1 = new BaseError; 79 BaseError* error1 = new BaseError;
79 service->AddGlobalError(error1); 80 service->AddGlobalError(base::WrapUnique(error1));
80 EXPECT_EQ(1u, service->errors().size()); 81 EXPECT_EQ(1u, service->errors().size());
81 EXPECT_EQ(error1, service->errors()[0]); 82 EXPECT_EQ(error1, service->errors()[0]);
82 83
83 BaseError* error2 = new BaseError; 84 BaseError* error2 = new BaseError;
84 service->AddGlobalError(error2); 85 service->AddGlobalError(base::WrapUnique(error2));
85 EXPECT_EQ(2u, service->errors().size()); 86 EXPECT_EQ(2u, service->errors().size());
86 EXPECT_EQ(error1, service->errors()[0]); 87 EXPECT_EQ(error1, service->errors()[0]);
87 EXPECT_EQ(error2, service->errors()[1]); 88 EXPECT_EQ(error2, service->errors()[1]);
88 89
89 // Ensure that deleting the service deletes the error objects. 90 // Ensure that deleting the service deletes the error objects.
90 EXPECT_EQ(2, BaseError::count()); 91 EXPECT_EQ(2, BaseError::count());
91 service.reset(); 92 service.reset();
92 EXPECT_EQ(0, BaseError::count()); 93 EXPECT_EQ(0, BaseError::count());
93 } 94 }
94 95
95 // Test removing errors from the global error service. 96 // Test removing errors from the global error service.
96 TEST(GlobalErrorServiceTest, RemoveError) { 97 TEST(GlobalErrorServiceTest, RemoveError) {
97 std::unique_ptr<GlobalErrorService> service(new GlobalErrorService(NULL)); 98 std::unique_ptr<GlobalErrorService> service(new GlobalErrorService(NULL));
98 BaseError error1; 99 BaseError error1;
99 service->AddGlobalError(&error1); 100 service->AddUnownedGlobalError(&error1);
100 BaseError error2; 101 BaseError error2;
101 service->AddGlobalError(&error2); 102 service->AddUnownedGlobalError(&error2);
102 103
103 EXPECT_EQ(2u, service->errors().size()); 104 EXPECT_EQ(2u, service->errors().size());
104 service->RemoveGlobalError(&error1); 105 service->RemoveUnownedGlobalError(&error1);
105 EXPECT_EQ(1u, service->errors().size()); 106 EXPECT_EQ(1u, service->errors().size());
106 EXPECT_EQ(&error2, service->errors()[0]); 107 EXPECT_EQ(&error2, service->errors()[0]);
107 service->RemoveGlobalError(&error2); 108 service->RemoveUnownedGlobalError(&error2);
108 EXPECT_EQ(0u, service->errors().size()); 109 EXPECT_EQ(0u, service->errors().size());
109 110
110 // Ensure that deleting the service does not delete the error objects. 111 // Ensure that deleting the service does not delete the error objects.
112 //
113 // NB: If the service _does_ delete the error objects, then it called the
114 // delete operator on a stack-allocated object, which is undefined behavior,
115 // which we can't really use to prove anything. :(
111 EXPECT_EQ(2, BaseError::count()); 116 EXPECT_EQ(2, BaseError::count());
112 service.reset(); 117 service.reset();
113 EXPECT_EQ(2, BaseError::count()); 118 EXPECT_EQ(2, BaseError::count());
114 } 119 }
115 120
116 // Test finding errors by their menu item command ID. 121 // Test finding errors by their menu item command ID.
117 TEST(GlobalErrorServiceTest, GetMenuItem) { 122 TEST(GlobalErrorServiceTest, GetMenuItem) {
118 MenuError* error1 = new MenuError(1, GlobalError::SEVERITY_LOW); 123 MenuError* error1 = new MenuError(1, GlobalError::SEVERITY_LOW);
119 MenuError* error2 = new MenuError(2, GlobalError::SEVERITY_MEDIUM); 124 MenuError* error2 = new MenuError(2, GlobalError::SEVERITY_MEDIUM);
120 MenuError* error3 = new MenuError(3, GlobalError::SEVERITY_HIGH); 125 MenuError* error3 = new MenuError(3, GlobalError::SEVERITY_HIGH);
121 126
122 GlobalErrorService service(NULL); 127 GlobalErrorService service(NULL);
123 service.AddGlobalError(error1); 128 service.AddGlobalError(base::WrapUnique(error1));
124 service.AddGlobalError(error2); 129 service.AddGlobalError(base::WrapUnique(error2));
125 service.AddGlobalError(error3); 130 service.AddGlobalError(base::WrapUnique(error3));
126 131
127 EXPECT_EQ(error2, service.GetGlobalErrorByMenuItemCommandID(2)); 132 EXPECT_EQ(error2, service.GetGlobalErrorByMenuItemCommandID(2));
128 EXPECT_EQ(error3, service.GetGlobalErrorByMenuItemCommandID(3)); 133 EXPECT_EQ(error3, service.GetGlobalErrorByMenuItemCommandID(3));
129 EXPECT_EQ(NULL, service.GetGlobalErrorByMenuItemCommandID(4)); 134 EXPECT_EQ(NULL, service.GetGlobalErrorByMenuItemCommandID(4));
130 } 135 }
131 136
132 // Test getting the error with the higest severity. 137 // Test getting the error with the highest severity.
133 TEST(GlobalErrorServiceTest, HighestSeverity) { 138 TEST(GlobalErrorServiceTest, HighestSeverity) {
134 MenuError* error1 = new MenuError(1, GlobalError::SEVERITY_LOW); 139 MenuError* error1 = new MenuError(1, GlobalError::SEVERITY_LOW);
135 MenuError* error2 = new MenuError(2, GlobalError::SEVERITY_MEDIUM); 140 MenuError* error2 = new MenuError(2, GlobalError::SEVERITY_MEDIUM);
136 MenuError* error3 = new MenuError(3, GlobalError::SEVERITY_HIGH); 141 MenuError* error3 = new MenuError(3, GlobalError::SEVERITY_HIGH);
137 142
138 GlobalErrorService service(NULL); 143 GlobalErrorService service(NULL);
139 EXPECT_EQ(NULL, service.GetHighestSeverityGlobalErrorWithAppMenuItem()); 144 EXPECT_EQ(NULL, service.GetHighestSeverityGlobalErrorWithAppMenuItem());
140 145
141 service.AddGlobalError(error1); 146 service.AddGlobalError(base::WrapUnique(error1));
142 EXPECT_EQ(error1, service.GetHighestSeverityGlobalErrorWithAppMenuItem()); 147 EXPECT_EQ(error1, service.GetHighestSeverityGlobalErrorWithAppMenuItem());
143 148
144 service.AddGlobalError(error2); 149 service.AddGlobalError(base::WrapUnique(error2));
145 EXPECT_EQ(error2, service.GetHighestSeverityGlobalErrorWithAppMenuItem()); 150 EXPECT_EQ(error2, service.GetHighestSeverityGlobalErrorWithAppMenuItem());
146 151
147 service.AddGlobalError(error3); 152 service.AddGlobalError(base::WrapUnique(error3));
148 EXPECT_EQ(error3, service.GetHighestSeverityGlobalErrorWithAppMenuItem()); 153 EXPECT_EQ(error3, service.GetHighestSeverityGlobalErrorWithAppMenuItem());
149 154
150 // Remove the highest-severity error. 155 // Remove the highest-severity error.
151 service.RemoveGlobalError(error3); 156 service.RemoveGlobalError(error3);
152 delete error3;
153 157
154 // Now error2 should be the next highest severity error. 158 // Now error2 should be the next highest severity error.
155 EXPECT_EQ(error2, service.GetHighestSeverityGlobalErrorWithAppMenuItem()); 159 EXPECT_EQ(error2, service.GetHighestSeverityGlobalErrorWithAppMenuItem());
156 } 160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698