Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: chrome/browser/ui/webui/web_ui_browsertest.cc

Issue 7576024: Provide ability for WebUIBrowserTests to run asynchronous tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comments, fixed chrome.send passthrough, fixed assertion tests to use runTestFunction. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/web_ui_browsertest.h ('k') | chrome/browser/ui/webui/web_ui_test_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698