OLD | NEW |
| (Empty) |
1 // Copyright 2010 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 | |
16 #include "omaha/base/error.h" | |
17 #include "omaha/client/bundle_installer.h" | |
18 #include "omaha/client/resource.h" | |
19 #include "omaha/testing/unit_test.h" | |
20 | |
21 namespace omaha { | |
22 | |
23 using internal::BuildAppNameList; | |
24 | |
25 class BuildAppNameListTest : public testing::Test { | |
26 public: | |
27 protected: | |
28 std::vector<CString> app_names_; | |
29 }; | |
30 | |
31 TEST_F(BuildAppNameListTest, OneApp) { | |
32 app_names_.push_back(_T("Test App1")); | |
33 EXPECT_STREQ(_T("Test App1"), BuildAppNameList(app_names_)); | |
34 } | |
35 | |
36 TEST_F(BuildAppNameListTest, TwoApps) { | |
37 app_names_.push_back(_T("Test App1")); | |
38 app_names_.push_back(_T("Next App2")); | |
39 EXPECT_STREQ(_T("Test App1, Next App2"), BuildAppNameList(app_names_)); | |
40 } | |
41 | |
42 TEST_F(BuildAppNameListTest, ManyApps) { | |
43 app_names_.push_back(_T("Test App1")); | |
44 app_names_.push_back(_T("Next App2")); | |
45 app_names_.push_back(_T("My App3")); | |
46 app_names_.push_back(_T("Your App4")); | |
47 app_names_.push_back(_T("Other App5")); | |
48 EXPECT_STREQ(_T("Test App1, Next App2, My App3, Your App4, Other App5"), | |
49 BuildAppNameList(app_names_)); | |
50 } | |
51 | |
52 // TODO(omaha): Load "ar" resources and enable after we get translations. | |
53 TEST_F(BuildAppNameListTest, DISABLED_ManyApps_Bidi) { | |
54 app_names_.push_back(_T("Test App1")); | |
55 app_names_.push_back(_T("Next App2")); | |
56 app_names_.push_back(_T("My App3")); | |
57 app_names_.push_back(_T("Your App4")); | |
58 app_names_.push_back(_T("Other App5")); | |
59 EXPECT_STREQ(_T("Other App5, Your App4, My App3, Next App2, Test App1"), | |
60 BuildAppNameList(app_names_)); | |
61 } | |
62 | |
63 class GetBundleCompletionMessageTest : public testing::Test { | |
64 public: | |
65 protected: | |
66 void AddSucceededAppInfo(int id) { | |
67 AppCompletionInfo app_info; | |
68 app_info.display_name.Format(_T("AppSucceeded%d"), id); | |
69 app_info.app_id.Format(_T("app_id_s_%d"), id); | |
70 app_info.error_code = 0; | |
71 app_info.extra_code1 = 0; | |
72 app_info.completion_message = kSuccessAppCompletionMessage; | |
73 app_info.installer_result_code = 0; | |
74 app_info.is_canceled = false; | |
75 apps_info_.push_back(app_info); | |
76 } | |
77 | |
78 void AddFailedAppInfo(int id, bool make_error_info_unique) { | |
79 AppCompletionInfo app_info; | |
80 app_info.display_name.Format(_T("AppFailed%d"), id); | |
81 app_info.app_id.Format(_T("app_id_f_%d"), id); | |
82 app_info.error_code = 0x80070001; | |
83 app_info.extra_code1 = 123; | |
84 app_info.completion_message = kFailedAppCompletionMessage; | |
85 app_info.installer_result_code = 111; | |
86 app_info.is_canceled = false; | |
87 if (make_error_info_unique) { | |
88 app_info.error_code += id; | |
89 app_info.completion_message.AppendFormat(_T(" AppName:%s."), | |
90 app_info.display_name); | |
91 app_info.extra_code1 += id; | |
92 app_info.installer_result_code += id; | |
93 } | |
94 | |
95 apps_info_.push_back(app_info); | |
96 } | |
97 | |
98 void AddCanceledAppInfo(int id) { | |
99 AppCompletionInfo app_info; | |
100 app_info.display_name.Format(_T("AppCanceled%d"), id); | |
101 app_info.app_id.Format(_T("app_id_f_%d"), id); | |
102 app_info.error_code = GOOPDATE_E_CANCELLED; | |
103 app_info.extra_code1 = 0; | |
104 app_info.completion_message = kCanceledAppCompletionMessage; | |
105 app_info.installer_result_code = 0; | |
106 app_info.is_canceled = true; | |
107 | |
108 apps_info_.push_back(app_info); | |
109 } | |
110 | |
111 static const TCHAR* kBundleDisplayName; | |
112 static const TCHAR* kSuccessAppCompletionMessage; | |
113 static const TCHAR* kFailedAppCompletionMessage; | |
114 static const TCHAR* kCanceledAppCompletionMessage; | |
115 std::vector<AppCompletionInfo> apps_info_; | |
116 }; | |
117 | |
118 const TCHAR* GetBundleCompletionMessageTest::kBundleDisplayName = | |
119 _T("TestBundle"); | |
120 const TCHAR* GetBundleCompletionMessageTest::kSuccessAppCompletionMessage = | |
121 _T("App is installed successfully and is ready to use."); | |
122 const TCHAR* GetBundleCompletionMessageTest::kFailedAppCompletionMessage = | |
123 _T("Failed to install the app."); | |
124 const TCHAR* GetBundleCompletionMessageTest::kCanceledAppCompletionMessage = | |
125 _T("Installation is canceled by user."); | |
126 | |
127 TEST_F(GetBundleCompletionMessageTest, SingleAppSucceeded) { | |
128 AddSucceededAppInfo(1); | |
129 | |
130 CString bundle_message = internal::GetBundleCompletionMessage( | |
131 kBundleDisplayName, | |
132 apps_info_, | |
133 false, // is_only_no_update | |
134 false); // is_canceled | |
135 // Bundle install succeeded, the completion message should be based on | |
136 // IDS_BUNDLE_INSTALLED_SUCCESSFULLY. | |
137 CString expected_message; | |
138 expected_message.Format(_T("Thanks for installing %s."), kBundleDisplayName); | |
139 | |
140 EXPECT_STREQ(expected_message, bundle_message); | |
141 } | |
142 | |
143 TEST_F(GetBundleCompletionMessageTest, MultipleAppsSucceeded) { | |
144 AddSucceededAppInfo(1); | |
145 AddSucceededAppInfo(2); | |
146 AddSucceededAppInfo(3); | |
147 | |
148 CString bundle_message = internal::GetBundleCompletionMessage( | |
149 kBundleDisplayName, | |
150 apps_info_, | |
151 false, // is_only_no_update | |
152 false); // is_canceled | |
153 // Bundle install succeeded, the completion message should be based on | |
154 // IDS_BUNDLE_INSTALLED_SUCCESSFULLY. | |
155 CString expected_message; | |
156 expected_message.Format(_T("Thanks for installing %s."), kBundleDisplayName); | |
157 | |
158 EXPECT_STREQ(expected_message, bundle_message); | |
159 } | |
160 | |
161 TEST_F(GetBundleCompletionMessageTest, OneFailedAppWithSuccessApps) { | |
162 AddSucceededAppInfo(1); | |
163 AddFailedAppInfo(2, false); | |
164 AddSucceededAppInfo(3); | |
165 | |
166 CString bundle_message = internal::GetBundleCompletionMessage( | |
167 kBundleDisplayName, | |
168 apps_info_, | |
169 false, // is_only_no_update | |
170 false); // is_canceled | |
171 | |
172 CString expected_message = | |
173 _T("An application failed to install.\n\n") | |
174 _T("<b>Succeeded:</b> AppSucceeded1, AppSucceeded3\n") | |
175 _T("<b>Failed:</b> AppFailed2"); | |
176 EXPECT_STREQ(expected_message, bundle_message); | |
177 } | |
178 | |
179 TEST_F(GetBundleCompletionMessageTest, MulitpleFailedAppsWithSuccessApps) { | |
180 AddSucceededAppInfo(1); | |
181 AddFailedAppInfo(2, false); | |
182 AddSucceededAppInfo(3); | |
183 AddFailedAppInfo(4, false); | |
184 AddFailedAppInfo(5, false); | |
185 | |
186 CString bundle_message = internal::GetBundleCompletionMessage( | |
187 kBundleDisplayName, | |
188 apps_info_, | |
189 false, // is_only_no_update | |
190 false); // is_canceled | |
191 | |
192 CString expected_message = | |
193 _T("Some applications failed to install.\n\n") | |
194 _T("<b>Succeeded:</b> AppSucceeded1, AppSucceeded3\n") | |
195 _T("<b>Failed:</b> AppFailed2, AppFailed4, AppFailed5"); | |
196 EXPECT_STREQ(expected_message, bundle_message); | |
197 } | |
198 | |
199 TEST_F(GetBundleCompletionMessageTest, OneFailedAppOnly) { | |
200 AddFailedAppInfo(1, false); | |
201 | |
202 CString bundle_message = internal::GetBundleCompletionMessage( | |
203 kBundleDisplayName, | |
204 apps_info_, | |
205 false, // is_only_no_update | |
206 false); // is_canceled | |
207 | |
208 EXPECT_STREQ(kFailedAppCompletionMessage, bundle_message); | |
209 } | |
210 | |
211 TEST_F(GetBundleCompletionMessageTest, AllAppsFailWithSameError) { | |
212 AddFailedAppInfo(1, false); | |
213 AddFailedAppInfo(2, false); | |
214 AddFailedAppInfo(3, false); | |
215 | |
216 CString bundle_message = internal::GetBundleCompletionMessage( | |
217 kBundleDisplayName, | |
218 apps_info_, | |
219 false, // is_only_no_update | |
220 false); // is_canceled | |
221 | |
222 EXPECT_STREQ(kFailedAppCompletionMessage, bundle_message); | |
223 } | |
224 | |
225 | |
226 TEST_F(GetBundleCompletionMessageTest, AllAppsFailWithUniqueError) { | |
227 AddFailedAppInfo(1, true); | |
228 AddFailedAppInfo(2, true); | |
229 AddFailedAppInfo(3, true); | |
230 | |
231 CString bundle_message = internal::GetBundleCompletionMessage( | |
232 kBundleDisplayName, | |
233 apps_info_, | |
234 false, // is_only_no_update | |
235 false); // is_canceled | |
236 | |
237 CString expected_message = kFailedAppCompletionMessage; | |
238 expected_message.AppendFormat(_T(" AppName:%s."), apps_info_[0].display_name); | |
239 EXPECT_STREQ(expected_message, bundle_message); | |
240 } | |
241 | |
242 TEST_F(GetBundleCompletionMessageTest, BundleCanceled) { | |
243 AddCanceledAppInfo(1); | |
244 AddCanceledAppInfo(4); | |
245 AddCanceledAppInfo(7); | |
246 | |
247 CString bundle_message = internal::GetBundleCompletionMessage( | |
248 kBundleDisplayName, | |
249 apps_info_, | |
250 false, // is_only_no_update | |
251 true); // is_canceled | |
252 | |
253 CString expected_message; | |
254 EXPECT_TRUE(expected_message.LoadString(IDS_CANCELED)); | |
255 EXPECT_STREQ(expected_message, bundle_message); | |
256 } | |
257 | |
258 TEST_F(GetBundleCompletionMessageTest, AppSucceededAfterCancel) { | |
259 AddSucceededAppInfo(1); | |
260 | |
261 CString bundle_message = internal::GetBundleCompletionMessage( | |
262 kBundleDisplayName, | |
263 apps_info_, | |
264 false, // is_only_no_update | |
265 true); // is_canceled | |
266 | |
267 EXPECT_STREQ(_T("Installation completed before it could be canceled."), | |
268 bundle_message); | |
269 } | |
270 | |
271 TEST_F(GetBundleCompletionMessageTest, AppCanceledWithSuccesses) { | |
272 AddSucceededAppInfo(1); | |
273 AddSucceededAppInfo(2); | |
274 AddSucceededAppInfo(3); | |
275 AddCanceledAppInfo(4); | |
276 AddCanceledAppInfo(5); | |
277 | |
278 CString bundle_message = internal::GetBundleCompletionMessage( | |
279 kBundleDisplayName, | |
280 apps_info_, | |
281 false, // is_only_no_update | |
282 true); // is_canceled | |
283 | |
284 CString expected_message = | |
285 _T("Installation completed before it could be canceled.\n\n") | |
286 _T("<b>Succeeded:</b> AppSucceeded1, AppSucceeded2, AppSucceeded3\n") | |
287 _T("<b>Canceled:</b> AppCanceled4, AppCanceled5"); | |
288 EXPECT_STREQ(expected_message, bundle_message); | |
289 } | |
290 | |
291 TEST_F(GetBundleCompletionMessageTest, AppsCanceledWithSuccessesAndOneFailure) { | |
292 AddSucceededAppInfo(1); | |
293 AddSucceededAppInfo(2); | |
294 AddFailedAppInfo(3, false); | |
295 AddCanceledAppInfo(4); | |
296 AddCanceledAppInfo(5); | |
297 AddCanceledAppInfo(6); | |
298 | |
299 CString bundle_message = internal::GetBundleCompletionMessage( | |
300 kBundleDisplayName, | |
301 apps_info_, | |
302 false, // is_only_no_update | |
303 true); // is_canceled | |
304 CString expected_message = | |
305 _T("An application failed to install.\n\n") | |
306 _T("<b>Succeeded:</b> AppSucceeded1, AppSucceeded2\n") | |
307 _T("<b>Failed:</b> AppFailed3\n") | |
308 _T("<b>Canceled:</b> AppCanceled4, AppCanceled5, AppCanceled6"); | |
309 EXPECT_STREQ(expected_message, bundle_message); | |
310 } | |
311 | |
312 TEST_F(GetBundleCompletionMessageTest, | |
313 AppsCanceledWithSuccessesAndMultipleFailures) { | |
314 AddSucceededAppInfo(1); | |
315 AddSucceededAppInfo(2); | |
316 AddFailedAppInfo(3, false); | |
317 AddFailedAppInfo(4, false); | |
318 AddCanceledAppInfo(5); | |
319 AddCanceledAppInfo(6); | |
320 | |
321 CString bundle_message = internal::GetBundleCompletionMessage( | |
322 kBundleDisplayName, | |
323 apps_info_, | |
324 false, // is_only_no_update | |
325 true); // is_canceled | |
326 | |
327 CString expected_message = | |
328 _T("Some applications failed to install.\n\n") | |
329 _T("<b>Succeeded:</b> AppSucceeded1, AppSucceeded2\n") | |
330 _T("<b>Failed:</b> AppFailed3, AppFailed4\n") | |
331 _T("<b>Canceled:</b> AppCanceled5, AppCanceled6"); | |
332 EXPECT_STREQ(expected_message, bundle_message); | |
333 } | |
334 | |
335 TEST_F(GetBundleCompletionMessageTest, AppsCanceledWithOneFailure) { | |
336 AddFailedAppInfo(1, false); | |
337 AddCanceledAppInfo(2); | |
338 AddCanceledAppInfo(3); | |
339 | |
340 CString bundle_message = internal::GetBundleCompletionMessage( | |
341 kBundleDisplayName, | |
342 apps_info_, | |
343 false, // is_only_no_update | |
344 true); // is_canceled | |
345 | |
346 CString expected_message = | |
347 _T("An application failed to install.\n\n") | |
348 _T("<b>Failed:</b> AppFailed1\n") | |
349 _T("<b>Canceled:</b> AppCanceled2, AppCanceled3"); | |
350 EXPECT_STREQ(expected_message, bundle_message); | |
351 } | |
352 | |
353 TEST_F(GetBundleCompletionMessageTest, AppFailedAfterCancel) { | |
354 AddFailedAppInfo(1, false); | |
355 | |
356 CString bundle_message = internal::GetBundleCompletionMessage( | |
357 kBundleDisplayName, | |
358 apps_info_, | |
359 false, // is_only_no_update | |
360 true); // is_canceled | |
361 | |
362 EXPECT_STREQ(kFailedAppCompletionMessage, bundle_message); | |
363 } | |
364 | |
365 TEST_F(GetBundleCompletionMessageTest, AppsCanceledWithMultipleFailures) { | |
366 AddFailedAppInfo(1, false); | |
367 AddFailedAppInfo(2, false); | |
368 AddFailedAppInfo(3, false); | |
369 AddCanceledAppInfo(4); | |
370 AddCanceledAppInfo(5); | |
371 AddCanceledAppInfo(6); | |
372 | |
373 CString bundle_message = internal::GetBundleCompletionMessage( | |
374 kBundleDisplayName, | |
375 apps_info_, | |
376 false, // is_only_no_update | |
377 true); // is_canceled | |
378 | |
379 CString expected_message = | |
380 _T("Some applications failed to install.\n\n") | |
381 _T("<b>Failed:</b> AppFailed1, AppFailed2, AppFailed3\n") | |
382 _T("<b>Canceled:</b> AppCanceled4, AppCanceled5, AppCanceled6"); | |
383 EXPECT_STREQ(expected_message, bundle_message); | |
384 } | |
385 | |
386 } // namespace omaha | |
OLD | NEW |