OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/chromeos/printing/printers_manager.h" | 5 #include "chrome/browser/chromeos/printing/printers_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
79 private: | 79 private: |
80 base::Optional<Printer> last_added_; | 80 base::Optional<Printer> last_added_; |
81 base::Optional<Printer> last_updated_; | 81 base::Optional<Printer> last_updated_; |
82 base::Optional<Printer> last_removed_; | 82 base::Optional<Printer> last_removed_; |
83 }; | 83 }; |
84 | 84 |
85 } // namespace | 85 } // namespace |
86 | 86 |
87 class PrintersManagerTest : public testing::Test { | 87 class PrintersManagerTest : public testing::Test { |
88 protected: | 88 protected: |
89 PrintersManagerTest() : profile_(base::MakeUnique<TestingProfile>()) { | 89 PrintersManagerTest() |
90 thread_bundle_ = base::MakeUnique<content::TestBrowserThreadBundle>(); | 90 : manager_( |
skau
2017/05/31 19:22:09
Can you note that member initialization happens be
gab
2017/05/31 21:19:25
This is not what's happening, members are initiali
| |
91 | 91 &profile_, |
92 auto sync_bridge = base::MakeUnique<PrintersSyncBridge>( | 92 base::MakeUnique<PrintersSyncBridge>( |
93 base::Bind(&syncer::ModelTypeStore::CreateInMemoryStoreForTest, | 93 base::Bind(&syncer::ModelTypeStore::CreateInMemoryStoreForTest, |
94 syncer::PRINTERS), | 94 syncer::PRINTERS), |
95 base::BindRepeating( | 95 base::BindRepeating( |
96 base::IgnoreResult(&base::debug::DumpWithoutCrashing))); | 96 base::IgnoreResult(&base::debug::DumpWithoutCrashing)))) { |
97 | |
98 manager_ = base::MakeUnique<PrintersManager>(profile_.get(), | |
99 std::move(sync_bridge)); | |
100 | |
101 base::RunLoop().RunUntilIdle(); | 97 base::RunLoop().RunUntilIdle(); |
102 } | 98 } |
103 | 99 |
104 ~PrintersManagerTest() override { | 100 // Must be first to be alive throughout |profile_|'s lifetime. |
Lei Zhang
2017/05/31 19:14:23
Just say "Must outlive |profile_|" ?
gab
2017/05/31 21:19:25
Done.
| |
105 manager_.reset(); | 101 content::TestBrowserThreadBundle thread_bundle_; |
106 | 102 |
107 // Explicitly release the profile before the thread_bundle. Otherwise, the | 103 TestingProfile profile_; |
Lei Zhang
2017/05/31 19:14:23
Add a comment to say this must outlive |manager_|
gab
2017/05/31 21:19:25
Done.
| |
108 // profile destructor throws an error. | 104 PrintersManager manager_; |
109 profile_.reset(); | |
110 thread_bundle_.reset(); | |
111 } | |
112 | |
113 std::unique_ptr<TestingProfile> profile_; | |
114 std::unique_ptr<PrintersManager> manager_; | |
115 | |
116 private: | |
117 std::unique_ptr<content::TestBrowserThreadBundle> thread_bundle_; | |
118 }; | 105 }; |
119 | 106 |
120 TEST_F(PrintersManagerTest, AddPrinter) { | 107 TEST_F(PrintersManagerTest, AddPrinter) { |
121 LoggingObserver observer; | 108 LoggingObserver observer; |
122 manager_->AddObserver(&observer); | 109 manager_.AddObserver(&observer); |
123 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 110 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
124 | 111 |
125 auto printers = manager_->GetPrinters(); | 112 auto printers = manager_.GetPrinters(); |
126 ASSERT_EQ(1U, printers.size()); | 113 ASSERT_EQ(1U, printers.size()); |
127 EXPECT_EQ(kPrinterId, printers[0]->id()); | 114 EXPECT_EQ(kPrinterId, printers[0]->id()); |
128 EXPECT_EQ(Printer::Source::SRC_USER_PREFS, printers[0]->source()); | 115 EXPECT_EQ(Printer::Source::SRC_USER_PREFS, printers[0]->source()); |
129 | 116 |
130 EXPECT_TRUE(observer.AddCalled()); | 117 EXPECT_TRUE(observer.AddCalled()); |
131 EXPECT_FALSE(observer.UpdateCalled()); | 118 EXPECT_FALSE(observer.UpdateCalled()); |
132 } | 119 } |
133 | 120 |
134 TEST_F(PrintersManagerTest, UpdatePrinterAssignsId) { | 121 TEST_F(PrintersManagerTest, UpdatePrinterAssignsId) { |
135 manager_->RegisterPrinter(base::MakeUnique<Printer>()); | 122 manager_.RegisterPrinter(base::MakeUnique<Printer>()); |
136 | 123 |
137 auto printers = manager_->GetPrinters(); | 124 auto printers = manager_.GetPrinters(); |
138 ASSERT_EQ(1U, printers.size()); | 125 ASSERT_EQ(1U, printers.size()); |
139 EXPECT_FALSE(printers[0]->id().empty()); | 126 EXPECT_FALSE(printers[0]->id().empty()); |
140 } | 127 } |
141 | 128 |
142 TEST_F(PrintersManagerTest, UpdatePrinter) { | 129 TEST_F(PrintersManagerTest, UpdatePrinter) { |
143 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 130 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
144 auto updated_printer = base::MakeUnique<Printer>(kPrinterId); | 131 auto updated_printer = base::MakeUnique<Printer>(kPrinterId); |
145 updated_printer->set_uri(kUri); | 132 updated_printer->set_uri(kUri); |
146 | 133 |
147 // Register observer so it only receives the update event. | 134 // Register observer so it only receives the update event. |
148 LoggingObserver observer; | 135 LoggingObserver observer; |
149 manager_->AddObserver(&observer); | 136 manager_.AddObserver(&observer); |
150 | 137 |
151 manager_->RegisterPrinter(std::move(updated_printer)); | 138 manager_.RegisterPrinter(std::move(updated_printer)); |
152 | 139 |
153 auto printers = manager_->GetPrinters(); | 140 auto printers = manager_.GetPrinters(); |
154 ASSERT_EQ(1U, printers.size()); | 141 ASSERT_EQ(1U, printers.size()); |
155 EXPECT_EQ(kUri, printers[0]->uri()); | 142 EXPECT_EQ(kUri, printers[0]->uri()); |
156 | 143 |
157 EXPECT_TRUE(observer.UpdateCalled()); | 144 EXPECT_TRUE(observer.UpdateCalled()); |
158 EXPECT_FALSE(observer.AddCalled()); | 145 EXPECT_FALSE(observer.AddCalled()); |
159 } | 146 } |
160 | 147 |
161 TEST_F(PrintersManagerTest, RemovePrinter) { | 148 TEST_F(PrintersManagerTest, RemovePrinter) { |
162 manager_->RegisterPrinter(base::MakeUnique<Printer>("OtherUUID")); | 149 manager_.RegisterPrinter(base::MakeUnique<Printer>("OtherUUID")); |
163 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 150 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
164 manager_->RegisterPrinter(base::MakeUnique<Printer>()); | 151 manager_.RegisterPrinter(base::MakeUnique<Printer>()); |
165 | 152 |
166 manager_->RemovePrinter(kPrinterId); | 153 manager_.RemovePrinter(kPrinterId); |
167 | 154 |
168 auto printers = manager_->GetPrinters(); | 155 auto printers = manager_.GetPrinters(); |
169 ASSERT_EQ(2U, printers.size()); | 156 ASSERT_EQ(2U, printers.size()); |
170 EXPECT_NE(kPrinterId, printers.at(0)->id()); | 157 EXPECT_NE(kPrinterId, printers.at(0)->id()); |
171 EXPECT_NE(kPrinterId, printers.at(1)->id()); | 158 EXPECT_NE(kPrinterId, printers.at(1)->id()); |
172 } | 159 } |
173 | 160 |
174 // Tests for policy printers | 161 // Tests for policy printers |
175 | 162 |
176 TEST_F(PrintersManagerTest, RecommendedPrinters) { | 163 TEST_F(PrintersManagerTest, RecommendedPrinters) { |
177 std::string first_printer = | 164 std::string first_printer = |
178 R"json({ | 165 R"json({ |
179 "display_name": "Color Laser", | 166 "display_name": "Color Laser", |
180 "description": "The printer next to the water cooler.", | 167 "description": "The printer next to the water cooler.", |
181 "manufacturer": "Printer Manufacturer", | 168 "manufacturer": "Printer Manufacturer", |
182 "model":"Color Laser 2004", | 169 "model":"Color Laser 2004", |
183 "uri":"ipps://print-server.intranet.example.com:443/ipp/cl2k4", | 170 "uri":"ipps://print-server.intranet.example.com:443/ipp/cl2k4", |
184 "uuid":"1c395fdb-5d93-4904-b246-b2c046e79d12", | 171 "uuid":"1c395fdb-5d93-4904-b246-b2c046e79d12", |
185 "ppd_resource":{ | 172 "ppd_resource":{ |
186 "effective_manufacturer": "MakesPrinters", | 173 "effective_manufacturer": "MakesPrinters", |
187 "effective_model":"ColorLaser2k4" | 174 "effective_model":"ColorLaser2k4" |
188 } | 175 } |
189 })json"; | 176 })json"; |
190 | 177 |
191 std::string second_printer = kLexJson; | 178 std::string second_printer = kLexJson; |
192 | 179 |
193 auto value = base::MakeUnique<base::ListValue>(); | 180 auto value = base::MakeUnique<base::ListValue>(); |
194 value->AppendString(first_printer); | 181 value->AppendString(first_printer); |
195 value->AppendString(second_printer); | 182 value->AppendString(second_printer); |
196 | 183 |
197 sync_preferences::TestingPrefServiceSyncable* prefs = | 184 sync_preferences::TestingPrefServiceSyncable* prefs = |
198 profile_->GetTestingPrefService(); | 185 profile_.GetTestingPrefService(); |
199 // TestingPrefSyncableService assumes ownership of |value|. | 186 // TestingPrefSyncableService assumes ownership of |value|. |
200 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); | 187 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); |
201 | 188 |
202 auto printers = manager_->GetRecommendedPrinters(); | 189 auto printers = manager_.GetRecommendedPrinters(); |
203 ASSERT_EQ(2U, printers.size()); | 190 ASSERT_EQ(2U, printers.size()); |
204 EXPECT_EQ("Color Laser", printers[0]->display_name()); | 191 EXPECT_EQ("Color Laser", printers[0]->display_name()); |
205 EXPECT_EQ("ipp://192.168.1.5", printers[1]->uri()); | 192 EXPECT_EQ("ipp://192.168.1.5", printers[1]->uri()); |
206 EXPECT_EQ(Printer::Source::SRC_POLICY, printers[1]->source()); | 193 EXPECT_EQ(Printer::Source::SRC_POLICY, printers[1]->source()); |
207 } | 194 } |
208 | 195 |
209 TEST_F(PrintersManagerTest, GetRecommendedPrinter) { | 196 TEST_F(PrintersManagerTest, GetRecommendedPrinter) { |
210 std::string printer = kLexJson; | 197 std::string printer = kLexJson; |
211 auto value = base::MakeUnique<base::ListValue>(); | 198 auto value = base::MakeUnique<base::ListValue>(); |
212 value->AppendString(printer); | 199 value->AppendString(printer); |
213 | 200 |
214 sync_preferences::TestingPrefServiceSyncable* prefs = | 201 sync_preferences::TestingPrefServiceSyncable* prefs = |
215 profile_->GetTestingPrefService(); | 202 profile_.GetTestingPrefService(); |
216 // TestingPrefSyncableService assumes ownership of |value|. | 203 // TestingPrefSyncableService assumes ownership of |value|. |
217 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); | 204 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); |
218 | 205 |
219 auto printers = manager_->GetRecommendedPrinters(); | 206 auto printers = manager_.GetRecommendedPrinters(); |
220 | 207 |
221 const Printer& from_list = *(printers.front()); | 208 const Printer& from_list = *(printers.front()); |
222 std::unique_ptr<Printer> retrieved = manager_->GetPrinter(from_list.id()); | 209 std::unique_ptr<Printer> retrieved = manager_.GetPrinter(from_list.id()); |
223 | 210 |
224 EXPECT_EQ(from_list.id(), retrieved->id()); | 211 EXPECT_EQ(from_list.id(), retrieved->id()); |
225 EXPECT_EQ("LexaPrint", from_list.display_name()); | 212 EXPECT_EQ("LexaPrint", from_list.display_name()); |
226 EXPECT_EQ(Printer::Source::SRC_POLICY, from_list.source()); | 213 EXPECT_EQ(Printer::Source::SRC_POLICY, from_list.source()); |
227 } | 214 } |
228 | 215 |
229 TEST_F(PrintersManagerTest, PrinterNotInstalled) { | 216 TEST_F(PrintersManagerTest, PrinterNotInstalled) { |
230 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 217 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
231 EXPECT_FALSE(manager_->IsConfigurationCurrent(printer)); | 218 EXPECT_FALSE(manager_.IsConfigurationCurrent(printer)); |
232 } | 219 } |
233 | 220 |
234 TEST_F(PrintersManagerTest, PrinterIsInstalled) { | 221 TEST_F(PrintersManagerTest, PrinterIsInstalled) { |
235 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 222 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
236 manager_->PrinterInstalled(printer); | 223 manager_.PrinterInstalled(printer); |
237 EXPECT_TRUE(manager_->IsConfigurationCurrent(printer)); | 224 EXPECT_TRUE(manager_.IsConfigurationCurrent(printer)); |
238 } | 225 } |
239 | 226 |
240 TEST_F(PrintersManagerTest, UpdatedPrinterConfiguration) { | 227 TEST_F(PrintersManagerTest, UpdatedPrinterConfiguration) { |
241 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 228 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
242 manager_->PrinterInstalled(printer); | 229 manager_.PrinterInstalled(printer); |
243 | 230 |
244 Printer updated_printer(kPrinterId, base::Time::FromInternalValue(2000)); | 231 Printer updated_printer(kPrinterId, base::Time::FromInternalValue(2000)); |
245 EXPECT_FALSE(manager_->IsConfigurationCurrent(updated_printer)); | 232 EXPECT_FALSE(manager_.IsConfigurationCurrent(updated_printer)); |
246 } | 233 } |
247 | 234 |
248 } // namespace chromeos | 235 } // namespace chromeos |
OLD | NEW |