| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/browser/ui/webui/web_ui_browsertest.h" | 4 #include "chrome/browser/ui/webui/web_ui_browsertest.h" |
| 5 | 5 |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| 11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/browser_navigator.h" | 14 #include "chrome/browser/ui/browser_navigator.h" |
| 15 #include "chrome/browser/ui/webui/chrome_web_ui.h" | 15 #include "chrome/browser/ui/webui/chrome_web_ui.h" |
| 16 #include "chrome/browser/ui/webui/test_chrome_web_ui_factory.h" |
| 16 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 17 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 17 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" |
| 18 #include "chrome/common/url_constants.h" | 19 #include "chrome/common/url_constants.h" |
| 19 #include "chrome/test/base/test_tab_strip_model_observer.h" | 20 #include "chrome/test/base/test_tab_strip_model_observer.h" |
| 20 #include "chrome/test/base/ui_test_utils.h" | 21 #include "chrome/test/base/ui_test_utils.h" |
| 21 #include "content/browser/tab_contents/tab_contents.h" | 22 #include "content/browser/tab_contents/tab_contents.h" |
| 23 #include "testing/gmock/include/gmock/gmock.h" |
| 22 #include "testing/gtest/include/gtest/gtest-spi.h" | 24 #include "testing/gtest/include/gtest/gtest-spi.h" |
| 23 #include "ui/base/resource/resource_bundle.h" | 25 #include "ui/base/resource/resource_bundle.h" |
| 24 | 26 |
| 25 namespace { | 27 namespace { |
| 26 | 28 |
| 27 const FilePath::CharType kMockJS[] = FILE_PATH_LITERAL("mock4js.js"); | 29 const FilePath::CharType kMockJS[] = FILE_PATH_LITERAL("mock4js.js"); |
| 28 const FilePath::CharType kWebUILibraryJS[] = FILE_PATH_LITERAL("test_api.js"); | 30 const FilePath::CharType kWebUILibraryJS[] = FILE_PATH_LITERAL("test_api.js"); |
| 29 const FilePath::CharType kWebUITestFolder[] = FILE_PATH_LITERAL("webui"); | 31 const FilePath::CharType kWebUITestFolder[] = FILE_PATH_LITERAL("webui"); |
| 30 base::LazyInstance<std::vector<std::string> > error_messages_( | 32 base::LazyInstance<std::vector<std::string> > error_messages_( |
| 31 base::LINKER_INITIALIZED); | 33 base::LINKER_INITIALIZED); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 ConstValueVector args; | 69 ConstValueVector args; |
| 68 args.push_back(&arg1); | 70 args.push_back(&arg1); |
| 69 args.push_back(&arg2); | 71 args.push_back(&arg2); |
| 70 return RunJavascriptFunction(function_name, args); | 72 return RunJavascriptFunction(function_name, args); |
| 71 } | 73 } |
| 72 | 74 |
| 73 bool WebUIBrowserTest::RunJavascriptFunction( | 75 bool WebUIBrowserTest::RunJavascriptFunction( |
| 74 const std::string& function_name, | 76 const std::string& function_name, |
| 75 const ConstValueVector& function_arguments) { | 77 const ConstValueVector& function_arguments) { |
| 76 return RunJavascriptUsingHandler( | 78 return RunJavascriptUsingHandler( |
| 77 function_name, function_arguments, false, NULL); | 79 function_name, function_arguments, false, false, NULL); |
| 78 } | 80 } |
| 79 | 81 |
| 80 bool WebUIBrowserTest::RunJavascriptTestF(const std::string& test_fixture, | 82 bool WebUIBrowserTest::RunJavascriptTestF(const std::string& test_fixture, |
| 81 const std::string& test_name) { | 83 const std::string& test_name) { |
| 82 ConstValueVector args; | 84 ConstValueVector args; |
| 83 args.push_back(Value::CreateStringValue(test_fixture)); | 85 args.push_back(Value::CreateStringValue(test_fixture)); |
| 84 args.push_back(Value::CreateStringValue(test_name)); | 86 args.push_back(Value::CreateStringValue(test_name)); |
| 85 return RunJavascriptTest("RUN_TEST_F", args); | 87 return RunJavascriptTest("RUN_TEST_F", args); |
| 86 } | 88 } |
| 87 | 89 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 101 const Value& arg2) { | 103 const Value& arg2) { |
| 102 ConstValueVector args; | 104 ConstValueVector args; |
| 103 args.push_back(&arg1); | 105 args.push_back(&arg1); |
| 104 args.push_back(&arg2); | 106 args.push_back(&arg2); |
| 105 return RunJavascriptTest(test_name, args); | 107 return RunJavascriptTest(test_name, args); |
| 106 } | 108 } |
| 107 | 109 |
| 108 bool WebUIBrowserTest::RunJavascriptTest( | 110 bool WebUIBrowserTest::RunJavascriptTest( |
| 109 const std::string& test_name, | 111 const std::string& test_name, |
| 110 const ConstValueVector& test_arguments) { | 112 const ConstValueVector& test_arguments) { |
| 111 return RunJavascriptUsingHandler(test_name, test_arguments, true, NULL); | 113 return RunJavascriptUsingHandler( |
| 114 test_name, test_arguments, true, false, NULL); |
| 115 } |
| 116 |
| 117 bool WebUIBrowserTest::RunJavascriptAsyncTest(const std::string& test_name) { |
| 118 return RunJavascriptAsyncTest(test_name, ConstValueVector()); |
| 119 } |
| 120 |
| 121 bool WebUIBrowserTest::RunJavascriptAsyncTest(const std::string& test_name, |
| 122 const Value& arg) { |
| 123 ConstValueVector args; |
| 124 args.push_back(&arg); |
| 125 return RunJavascriptAsyncTest(test_name, args); |
| 126 } |
| 127 |
| 128 bool WebUIBrowserTest::RunJavascriptAsyncTest(const std::string& test_name, |
| 129 const Value& arg1, |
| 130 const Value& arg2) { |
| 131 ConstValueVector args; |
| 132 args.push_back(&arg1); |
| 133 args.push_back(&arg2); |
| 134 return RunJavascriptAsyncTest(test_name, args); |
| 135 } |
| 136 |
| 137 bool WebUIBrowserTest::RunJavascriptAsyncTest( |
| 138 const std::string& test_name, |
| 139 const ConstValueVector& test_arguments) { |
| 140 return RunJavascriptUsingHandler(test_name, test_arguments, true, true, NULL); |
| 112 } | 141 } |
| 113 | 142 |
| 114 void WebUIBrowserTest::PreLoadJavascriptLibraries( | 143 void WebUIBrowserTest::PreLoadJavascriptLibraries( |
| 115 const std::string& preload_test_fixture, | 144 const std::string& preload_test_fixture, |
| 116 const std::string& preload_test_name, | 145 const std::string& preload_test_name, |
| 117 RenderViewHost* preload_host) { | 146 RenderViewHost* preload_host) { |
| 118 ASSERT_FALSE(libraries_preloaded_); | 147 ASSERT_FALSE(libraries_preloaded_); |
| 119 ConstValueVector args; | 148 ConstValueVector args; |
| 120 args.push_back(Value::CreateStringValue(preload_test_fixture)); | 149 args.push_back(Value::CreateStringValue(preload_test_fixture)); |
| 121 args.push_back(Value::CreateStringValue(preload_test_name)); | 150 args.push_back(Value::CreateStringValue(preload_test_name)); |
| 122 RunJavascriptUsingHandler( | 151 RunJavascriptUsingHandler( |
| 123 "preloadJavascriptLibraries", args, false, preload_host); | 152 "preloadJavascriptLibraries", args, false, false, preload_host); |
| 124 libraries_preloaded_ = true; | 153 libraries_preloaded_ = true; |
| 125 } | 154 } |
| 126 | 155 |
| 127 void WebUIBrowserTest::BrowsePreload(const GURL& browse_to, | 156 void WebUIBrowserTest::BrowsePreload(const GURL& browse_to, |
| 128 const std::string& preload_test_fixture, | 157 const std::string& preload_test_fixture, |
| 129 const std::string& preload_test_name) { | 158 const std::string& preload_test_name) { |
| 130 // Remember for callback OnJsInjectionReady(). | 159 // Remember for callback OnJsInjectionReady(). |
| 131 preload_test_fixture_ = preload_test_fixture; | 160 preload_test_fixture_ = preload_test_fixture; |
| 132 preload_test_name_ = preload_test_name; | 161 preload_test_name_ = preload_test_name; |
| 133 | 162 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 void WebUIBrowserTest::BuildJavascriptLibraries(string16* content) { | 230 void WebUIBrowserTest::BuildJavascriptLibraries(string16* content) { |
| 202 ASSERT_TRUE(content != NULL); | 231 ASSERT_TRUE(content != NULL); |
| 203 std::string utf8_content; | 232 std::string utf8_content; |
| 204 std::vector<FilePath>::iterator user_libraries_iterator; | 233 std::vector<FilePath>::iterator user_libraries_iterator; |
| 205 for (user_libraries_iterator = user_libraries_.begin(); | 234 for (user_libraries_iterator = user_libraries_.begin(); |
| 206 user_libraries_iterator != user_libraries_.end(); | 235 user_libraries_iterator != user_libraries_.end(); |
| 207 ++user_libraries_iterator) { | 236 ++user_libraries_iterator) { |
| 208 std::string library_content; | 237 std::string library_content; |
| 209 if (user_libraries_iterator->IsAbsolute()) { | 238 if (user_libraries_iterator->IsAbsolute()) { |
| 210 ASSERT_TRUE(file_util::ReadFileToString(*user_libraries_iterator, | 239 ASSERT_TRUE(file_util::ReadFileToString(*user_libraries_iterator, |
| 211 &library_content)); | 240 &library_content)) |
| 241 << user_libraries_iterator->value(); |
| 212 } else { | 242 } else { |
| 213 ASSERT_TRUE(file_util::ReadFileToString( | 243 ASSERT_TRUE(file_util::ReadFileToString( |
| 214 test_data_directory_.Append(*user_libraries_iterator), | 244 test_data_directory_.Append(*user_libraries_iterator), |
| 215 &library_content)); | 245 &library_content)) << user_libraries_iterator->value(); |
| 216 } | 246 } |
| 217 utf8_content.append(library_content); | 247 utf8_content.append(library_content); |
| 218 utf8_content.append(";\n"); | 248 utf8_content.append(";\n"); |
| 219 } | 249 } |
| 220 content->append(UTF8ToUTF16(utf8_content)); | 250 content->append(UTF8ToUTF16(utf8_content)); |
| 221 } | 251 } |
| 222 | 252 |
| 223 string16 WebUIBrowserTest::BuildRunTestJSCall( | 253 string16 WebUIBrowserTest::BuildRunTestJSCall( |
| 254 bool is_async, |
| 224 const std::string& function_name, | 255 const std::string& function_name, |
| 225 const WebUIBrowserTest::ConstValueVector& test_func_args) { | 256 const WebUIBrowserTest::ConstValueVector& test_func_args) { |
| 226 WebUIBrowserTest::ConstValueVector arguments; | 257 WebUIBrowserTest::ConstValueVector arguments; |
| 258 base::FundamentalValue is_async_arg(is_async); |
| 259 arguments.push_back(&is_async_arg); |
| 227 StringValue function_name_arg(function_name); | 260 StringValue function_name_arg(function_name); |
| 228 arguments.push_back(&function_name_arg); | 261 arguments.push_back(&function_name_arg); |
| 229 ListValue baked_argument_list; | 262 ListValue baked_argument_list; |
| 230 WebUIBrowserTest::ConstValueVector::const_iterator arguments_iterator; | 263 WebUIBrowserTest::ConstValueVector::const_iterator arguments_iterator; |
| 231 for (arguments_iterator = test_func_args.begin(); | 264 for (arguments_iterator = test_func_args.begin(); |
| 232 arguments_iterator != test_func_args.end(); | 265 arguments_iterator != test_func_args.end(); |
| 233 ++arguments_iterator) { | 266 ++arguments_iterator) { |
| 234 baked_argument_list.Append((Value *)*arguments_iterator); | 267 baked_argument_list.Append((Value *)*arguments_iterator); |
| 235 } | 268 } |
| 236 arguments.push_back(&baked_argument_list); | 269 arguments.push_back(&baked_argument_list); |
| 237 return WebUI::GetJavascriptCall(std::string("runTest"), arguments); | 270 return WebUI::GetJavascriptCall(std::string("runTest"), arguments); |
| 238 } | 271 } |
| 239 | 272 |
| 240 bool WebUIBrowserTest::RunJavascriptUsingHandler( | 273 bool WebUIBrowserTest::RunJavascriptUsingHandler( |
| 241 const std::string& function_name, | 274 const std::string& function_name, |
| 242 const ConstValueVector& function_arguments, | 275 const ConstValueVector& function_arguments, |
| 243 bool is_test, | 276 bool is_test, |
| 277 bool is_async, |
| 244 RenderViewHost* preload_host) { | 278 RenderViewHost* preload_host) { |
| 245 | 279 |
| 246 string16 content; | 280 string16 content; |
| 247 if (!libraries_preloaded_) | 281 if (!libraries_preloaded_) |
| 248 BuildJavascriptLibraries(&content); | 282 BuildJavascriptLibraries(&content); |
| 249 | 283 |
| 250 if (!function_name.empty()) { | 284 if (!function_name.empty()) { |
| 251 string16 called_function; | 285 string16 called_function; |
| 252 if (is_test) { | 286 if (is_test) { |
| 253 called_function = BuildRunTestJSCall(function_name, function_arguments); | 287 called_function = BuildRunTestJSCall( |
| 288 is_async, function_name, function_arguments); |
| 254 } else { | 289 } else { |
| 255 called_function = WebUI::GetJavascriptCall(function_name, | 290 called_function = WebUI::GetJavascriptCall(function_name, |
| 256 function_arguments); | 291 function_arguments); |
| 257 } | 292 } |
| 258 content.append(called_function); | 293 content.append(called_function); |
| 259 } | 294 } |
| 260 | 295 |
| 261 if (!preload_host) | 296 if (!preload_host) |
| 262 SetupHandlers(); | 297 SetupHandlers(); |
| 263 | 298 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 virtual ~WebUIBrowserExpectFailTest() { | 343 virtual ~WebUIBrowserExpectFailTest() { |
| 309 EXPECT_TRUE(s_test_); | 344 EXPECT_TRUE(s_test_); |
| 310 s_test_ = NULL; | 345 s_test_ = NULL; |
| 311 } | 346 } |
| 312 | 347 |
| 313 static void RunJavascriptTestNoReturn(const std::string& testname) { | 348 static void RunJavascriptTestNoReturn(const std::string& testname) { |
| 314 EXPECT_TRUE(s_test_); | 349 EXPECT_TRUE(s_test_); |
| 315 s_test_->RunJavascriptTest(testname); | 350 s_test_->RunJavascriptTest(testname); |
| 316 } | 351 } |
| 317 | 352 |
| 353 static void RunJavascriptAsyncTestNoReturn(const std::string& testname) { |
| 354 EXPECT_TRUE(s_test_); |
| 355 s_test_->RunJavascriptAsyncTest(testname); |
| 356 } |
| 357 |
| 318 private: | 358 private: |
| 319 static WebUIBrowserTest* s_test_; | 359 static WebUIBrowserTest* s_test_; |
| 320 }; | 360 }; |
| 321 | 361 |
| 322 WebUIBrowserTest* WebUIBrowserExpectFailTest::s_test_ = NULL; | 362 WebUIBrowserTest* WebUIBrowserExpectFailTest::s_test_ = NULL; |
| 323 | 363 |
| 364 // Test that bogus javascript fails fast - no timeout waiting for result. |
| 324 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsFast) { | 365 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsFast) { |
| 325 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js"))); | 366 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js"))); |
| 326 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); | 367 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); |
| 327 EXPECT_FATAL_FAILURE(RunJavascriptTestNoReturn("FAILS_BogusFunctionName"), | 368 EXPECT_FATAL_FAILURE(RunJavascriptTestNoReturn("FAILS_BogusFunctionName"), |
| 328 "WebUITestHandler::Observe"); | 369 "WebUITestHandler::Observe"); |
| 329 } | 370 } |
| 371 |
| 372 // Test that bogus javascript fails async test fast as well - no timeout waiting |
| 373 // for result. |
| 374 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsAsyncFast) { |
| 375 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js"))); |
| 376 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); |
| 377 EXPECT_FATAL_FAILURE( |
| 378 RunJavascriptAsyncTestNoReturn("FAILS_BogusFunctionName"), |
| 379 "WebUITestHandler::Observe"); |
| 380 } |
| 381 |
| 382 // Tests that the async framework works. |
| 383 class WebUIBrowserAsyncTest : public WebUIBrowserTest { |
| 384 public: |
| 385 // Calls the testDone() function from test_api.js |
| 386 void TestDone() { |
| 387 RunJavascriptFunction("testDone"); |
| 388 } |
| 389 |
| 390 // Starts a failing test. |
| 391 void RunTestFailsAssert() { |
| 392 RunJavascriptFunction("runAsync", |
| 393 *Value::CreateStringValue("testFailsAssert")); |
| 394 } |
| 395 |
| 396 // Starts a passing test. |
| 397 void RunTestPasses() { |
| 398 RunJavascriptFunction("runAsync", *Value::CreateStringValue("testPasses")); |
| 399 } |
| 400 |
| 401 protected: |
| 402 WebUIBrowserAsyncTest() {} |
| 403 |
| 404 static const char kDummyURL[]; |
| 405 |
| 406 // Class to synchronize asynchronous javascript activity with the tests. |
| 407 class AsyncWebUIMessageHandler : public WebUIMessageHandler { |
| 408 public: |
| 409 AsyncWebUIMessageHandler() {} |
| 410 |
| 411 MOCK_METHOD1(HandleTestContinues, void(const ListValue*)); |
| 412 MOCK_METHOD1(HandleTestFails, void(const ListValue*)); |
| 413 MOCK_METHOD1(HandleTestPasses, void(const ListValue*)); |
| 414 |
| 415 private: |
| 416 virtual void RegisterMessages() OVERRIDE { |
| 417 web_ui_->RegisterMessageCallback("startAsyncTest", NewCallback( |
| 418 this, &AsyncWebUIMessageHandler::HandleStartAsyncTest)); |
| 419 web_ui_->RegisterMessageCallback("testContinues", NewCallback( |
| 420 this, &AsyncWebUIMessageHandler::HandleTestContinues)); |
| 421 web_ui_->RegisterMessageCallback("testFails", NewCallback( |
| 422 this, &AsyncWebUIMessageHandler::HandleTestFails)); |
| 423 web_ui_->RegisterMessageCallback("testPasses", NewCallback( |
| 424 this, &AsyncWebUIMessageHandler::HandleTestPasses)); |
| 425 } |
| 426 |
| 427 // Starts the test in |list_value|[0] with the runAsync wrapper. |
| 428 void HandleStartAsyncTest(const ListValue* list_value) { |
| 429 Value* test_name; |
| 430 ASSERT_TRUE(list_value->Get(0, &test_name)); |
| 431 web_ui_->CallJavascriptFunction("runAsync", *test_name); |
| 432 } |
| 433 |
| 434 DISALLOW_COPY_AND_ASSIGN(AsyncWebUIMessageHandler); |
| 435 }; |
| 436 |
| 437 // Handler for this object. |
| 438 ::testing::StrictMock<AsyncWebUIMessageHandler> message_handler_; |
| 439 |
| 440 private: |
| 441 // Class to provide a ChromeWebUI for |kDummyURL|. |
| 442 class MockWebUIProvider : public TestChromeWebUIFactory::WebUIProvider { |
| 443 public: |
| 444 MockWebUIProvider() {} |
| 445 |
| 446 // Returns a new ChromeWebUI |
| 447 WebUI* NewWebUI(TabContents* tab_contents, const GURL& url) OVERRIDE { |
| 448 return new ChromeWebUI(tab_contents); |
| 449 } |
| 450 }; |
| 451 |
| 452 // Provide this object's handler. |
| 453 virtual WebUIMessageHandler* GetMockMessageHandler() OVERRIDE { |
| 454 return &message_handler_; |
| 455 } |
| 456 |
| 457 // Set up the kDummyURL to be a WebUI page. |
| 458 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| 459 WebUIBrowserTest::SetUpInProcessBrowserTestFixture(); |
| 460 TestChromeWebUIFactory::AddFactoryOverride(GURL(kDummyURL).host(), |
| 461 &mock_provider_); |
| 462 } |
| 463 |
| 464 // Tear down the kDummyURL WebUI page. |
| 465 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { |
| 466 WebUIBrowserTest::TearDownInProcessBrowserTestFixture(); |
| 467 TestChromeWebUIFactory::RemoveFactoryOverride(GURL(kDummyURL).host()); |
| 468 } |
| 469 |
| 470 // Set up and browse to kDummyURL for all tests. |
| 471 virtual void SetUpOnMainThread() OVERRIDE { |
| 472 WebUIBrowserTest::SetUpOnMainThread(); |
| 473 AddLibrary(FilePath(FILE_PATH_LITERAL("async.js"))); |
| 474 ui_test_utils::NavigateToURL(browser(), GURL(kDummyURL)); |
| 475 } |
| 476 |
| 477 // Provider for this object. |
| 478 MockWebUIProvider mock_provider_; |
| 479 |
| 480 DISALLOW_COPY_AND_ASSIGN(WebUIBrowserAsyncTest); |
| 481 }; |
| 482 |
| 483 const char WebUIBrowserAsyncTest::kDummyURL[] = "chrome://Dummy"; |
| 484 |
| 485 // Test that assertions fail immediately after assertion fails (no testContinues |
| 486 // message). (Sync version). |
| 487 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestSyncOkTestFail) { |
| 488 ASSERT_FALSE(RunJavascriptTest("testFailsAssert")); |
| 489 } |
| 490 |
| 491 // Test that assertions fail immediately after assertion fails (no testContinues |
| 492 // message). (Async version). |
| 493 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsAssert) { |
| 494 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); |
| 495 ASSERT_FALSE(RunJavascriptAsyncTest( |
| 496 "startAsyncTest", *Value::CreateStringValue("testFailsAssert"))); |
| 497 } |
| 498 |
| 499 // Test that expectations continue the function, but fail the test. |
| 500 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsExpect) { |
| 501 ::testing::InSequence s; |
| 502 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 503 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); |
| 504 ASSERT_FALSE(RunJavascriptAsyncTest( |
| 505 "startAsyncTest", *Value::CreateStringValue("testFailsExpect"))); |
| 506 } |
| 507 |
| 508 // Test that test continues and passes. (Sync version). |
| 509 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestSyncPasses) { |
| 510 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 511 ASSERT_TRUE(RunJavascriptTest("testPasses")); |
| 512 } |
| 513 |
| 514 // Test that test continues and passes. (Async version). |
| 515 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPasses) { |
| 516 ::testing::InSequence s; |
| 517 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 518 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) |
| 519 .WillOnce(::testing::InvokeWithoutArgs( |
| 520 this, &WebUIBrowserAsyncTest::TestDone)); |
| 521 ASSERT_TRUE(RunJavascriptAsyncTest( |
| 522 "startAsyncTest", *Value::CreateStringValue("testPasses"))); |
| 523 } |
| 524 |
| 525 // Test that two tests pass. |
| 526 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassPass) { |
| 527 ::testing::InSequence s; |
| 528 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 529 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) |
| 530 .WillOnce(::testing::InvokeWithoutArgs( |
| 531 this, &WebUIBrowserAsyncTest::RunTestPasses)); |
| 532 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 533 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) |
| 534 .WillOnce(::testing::InvokeWithoutArgs( |
| 535 this, &WebUIBrowserAsyncTest::TestDone)); |
| 536 ASSERT_TRUE(RunJavascriptAsyncTest( |
| 537 "startAsyncTest", *Value::CreateStringValue("testPasses"))); |
| 538 } |
| 539 |
| 540 // Test that first test passes; second fails. |
| 541 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassThenFail) { |
| 542 ::testing::InSequence s; |
| 543 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 544 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) |
| 545 .WillOnce(::testing::InvokeWithoutArgs( |
| 546 this, &WebUIBrowserAsyncTest::RunTestFailsAssert)); |
| 547 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); |
| 548 ASSERT_FALSE(RunJavascriptAsyncTest( |
| 549 "startAsyncTest", *Value::CreateStringValue("testPasses"))); |
| 550 } |
| 551 |
| 552 // Test that testDone() with failure first then sync pass still fails. |
| 553 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncDoneFailFirstSyncPass) { |
| 554 ::testing::InSequence s; |
| 555 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); |
| 556 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); |
| 557 |
| 558 // Call runAsync directly instead of deferring through startAsyncTest. It will |
| 559 // call testDone() on failure, then return. |
| 560 ASSERT_FALSE(RunJavascriptAsyncTest( |
| 561 "runAsync", *Value::CreateStringValue("testAsyncDoneFailFirstSyncPass"))); |
| 562 } |
| 563 |
| 564 // Test that calling testDone during RunJavascriptAsyncTest still completes |
| 565 // when waiting for async result. This is similar to the previous test, but call |
| 566 // testDone directly and expect pass result. |
| 567 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPassesAsync) { |
| 568 ASSERT_TRUE(RunJavascriptAsyncTest("testDone")); |
| 569 } |
| 570 |
| 571 // Test that calling testDone during RunJavascriptTest still completes when |
| 572 // waiting for async result. |
| 573 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPasses) { |
| 574 ASSERT_TRUE(RunJavascriptTest("testDone")); |
| 575 } |
| OLD | NEW |