| OLD | NEW |
| 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 Loading... |
| 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 } |
| OLD | NEW |