| 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 |