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

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: Logic to handle multiple events coming on one RunMessageLoop() call. 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(
224 const std::string& function_name, 254 const std::string& function_name,
225 const WebUIBrowserTest::ConstValueVector& test_func_args) { 255 const WebUIBrowserTest::ConstValueVector& test_func_args) {
226 WebUIBrowserTest::ConstValueVector arguments; 256 WebUIBrowserTest::ConstValueVector arguments;
227 StringValue function_name_arg(function_name); 257 StringValue function_name_arg(function_name);
228 arguments.push_back(&function_name_arg); 258 arguments.push_back(&function_name_arg);
229 ListValue baked_argument_list; 259 ListValue baked_argument_list;
230 WebUIBrowserTest::ConstValueVector::const_iterator arguments_iterator; 260 WebUIBrowserTest::ConstValueVector::const_iterator arguments_iterator;
231 for (arguments_iterator = test_func_args.begin(); 261 for (arguments_iterator = test_func_args.begin();
232 arguments_iterator != test_func_args.end(); 262 arguments_iterator != test_func_args.end();
233 ++arguments_iterator) { 263 ++arguments_iterator) {
234 baked_argument_list.Append((Value *)*arguments_iterator); 264 baked_argument_list.Append((Value *)*arguments_iterator);
235 } 265 }
236 arguments.push_back(&baked_argument_list); 266 arguments.push_back(&baked_argument_list);
237 return WebUI::GetJavascriptCall(std::string("runTest"), arguments); 267 return WebUI::GetJavascriptCall(std::string("runTest"), arguments);
238 } 268 }
239 269
240 bool WebUIBrowserTest::RunJavascriptUsingHandler( 270 bool WebUIBrowserTest::RunJavascriptUsingHandler(
241 const std::string& function_name, 271 const std::string& function_name,
242 const ConstValueVector& function_arguments, 272 const ConstValueVector& function_arguments,
243 bool is_test, 273 bool is_test,
274 bool is_async,
244 RenderViewHost* preload_host) { 275 RenderViewHost* preload_host) {
245 276
246 string16 content; 277 string16 content;
247 if (!libraries_preloaded_) 278 if (!libraries_preloaded_)
248 BuildJavascriptLibraries(&content); 279 BuildJavascriptLibraries(&content);
249 280
250 if (!function_name.empty()) { 281 if (!function_name.empty()) {
251 string16 called_function; 282 string16 called_function;
252 if (is_test) { 283 if (is_test) {
253 called_function = BuildRunTestJSCall(function_name, function_arguments); 284 called_function = BuildRunTestJSCall(function_name, function_arguments);
254 } else { 285 } else {
255 called_function = WebUI::GetJavascriptCall(function_name, 286 called_function = WebUI::GetJavascriptCall(function_name,
256 function_arguments); 287 function_arguments);
257 } 288 }
258 content.append(called_function); 289 content.append(called_function);
259 } 290 }
260 291
261 if (!preload_host) 292 if (!preload_host)
262 SetupHandlers(); 293 SetupHandlers();
263 294
264 logging::SetLogMessageHandler(&LogHandler); 295 logging::SetLogMessageHandler(&LogHandler);
265 bool result = true; 296 bool result = true;
266 297
267 if (is_test) 298 if (is_test)
268 result = test_handler_->RunJavaScriptTestWithResult(content); 299 result = test_handler_->RunJavaScriptTestWithResult(content, is_async);
269 else if (preload_host) 300 else if (preload_host)
270 test_handler_->PreloadJavaScript(content, preload_host); 301 test_handler_->PreloadJavaScript(content, preload_host);
271 else 302 else
272 test_handler_->RunJavaScript(content); 303 test_handler_->RunJavaScript(content);
273 304
274 logging::SetLogMessageHandler(NULL); 305 logging::SetLogMessageHandler(NULL);
275 306
276 if (error_messages_.Get().size() > 0) { 307 if (error_messages_.Get().size() > 0) {
277 LOG(ERROR) << "Encountered javascript console error(s)"; 308 LOG(ERROR) << "Encountered javascript console error(s)";
278 result = false; 309 result = false;
(...skipping 29 matching lines...) Expand all
308 virtual ~WebUIBrowserExpectFailTest() { 339 virtual ~WebUIBrowserExpectFailTest() {
309 EXPECT_TRUE(s_test_); 340 EXPECT_TRUE(s_test_);
310 s_test_ = NULL; 341 s_test_ = NULL;
311 } 342 }
312 343
313 static void RunJavascriptTestNoReturn(const std::string& testname) { 344 static void RunJavascriptTestNoReturn(const std::string& testname) {
314 EXPECT_TRUE(s_test_); 345 EXPECT_TRUE(s_test_);
315 s_test_->RunJavascriptTest(testname); 346 s_test_->RunJavascriptTest(testname);
316 } 347 }
317 348
349 static void RunJavascriptAsyncTestNoReturn(const std::string& testname) {
350 EXPECT_TRUE(s_test_);
351 s_test_->RunJavascriptAsyncTest(testname);
352 }
353
318 private: 354 private:
319 static WebUIBrowserTest* s_test_; 355 static WebUIBrowserTest* s_test_;
320 }; 356 };
321 357
322 WebUIBrowserTest* WebUIBrowserExpectFailTest::s_test_ = NULL; 358 WebUIBrowserTest* WebUIBrowserExpectFailTest::s_test_ = NULL;
323 359
324 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsFast) { 360 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsFast) {
325 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js"))); 361 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js")));
326 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); 362 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
327 EXPECT_FATAL_FAILURE(RunJavascriptTestNoReturn("FAILS_BogusFunctionName"), 363 EXPECT_FATAL_FAILURE(RunJavascriptTestNoReturn("FAILS_BogusFunctionName"),
328 "WebUITestHandler::Observe"); 364 "WebUITestHandler::Observe");
329 } 365 }
366
367 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsAsyncFast) {
mmenke 2011/08/10 17:23:40 These tests should have brief descriptions.
Sheridan Rawlins 2011/08/11 01:58:44 Done.
368 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js")));
369 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
370 EXPECT_FATAL_FAILURE(
371 RunJavascriptAsyncTestNoReturn("FAILS_BogusFunctionName"),
372 "WebUITestHandler::Observe");
373 }
374
375 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsNonAsync) {
376 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js")));
377 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
378 EXPECT_NONFATAL_FAILURE(RunJavascriptTest("asyncTestDone"),
379 "WebUITestHandler::WaitForResult");
380 }
381
382 // Tests that the async framework works.
383 class WebUIBrowserAsyncTest : public WebUIBrowserTest {
384 public:
385 // Calls the asyncTestDone() function from test_api.js
386 void AsyncTestDone() {
387 RunJavascriptFunction("asyncTestDone");
388 }
389
390 // starts a failing test.
mmenke 2011/08/10 17:23:40 nit: Capitalize "Starts" here, and just below.
Sheridan Rawlins 2011/08/11 01:58:44 Done.
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
mmenke 2011/08/10 17:23:40 nit: Remove blank line.
Sheridan Rawlins 2011/08/11 01:58:44 Done.
403 WebUIBrowserAsyncTest() {}
404
405 static const char kDummyURL[];
406
407 // Class to synchronize asynchronous javascript activity with the tests.
408 class AsyncWebUIMessageHandler : public WebUIMessageHandler {
409 public:
410 AsyncWebUIMessageHandler() {}
411
412 MOCK_METHOD1(HandleTestContinues, void(const ListValue*));
413 MOCK_METHOD1(HandleTestFails, void(const ListValue*));
414 MOCK_METHOD1(HandleTestPasses, void(const ListValue*));
415
416 private:
417 virtual void RegisterMessages() OVERRIDE {
418 web_ui_->RegisterMessageCallback("startAsyncTest", NewCallback(
419 this, &AsyncWebUIMessageHandler::HandleStartAsyncTest));
420 web_ui_->RegisterMessageCallback("testContinues", NewCallback(
421 this, &AsyncWebUIMessageHandler::HandleTestContinues));
422 web_ui_->RegisterMessageCallback("testFails", NewCallback(
423 this, &AsyncWebUIMessageHandler::HandleTestFails));
424 web_ui_->RegisterMessageCallback("testPasses", NewCallback(
425 this, &AsyncWebUIMessageHandler::HandleTestPasses));
426 }
427
428 // Starts the test in |list_value|[0] with the runAsync wrapper.
429 void HandleStartAsyncTest(const ListValue* list_value) {
430 Value* test_name;
431 ASSERT_TRUE(list_value->Get(0, &test_name));
432 web_ui_->CallJavascriptFunction("runAsync", *test_name);
433 }
434
435 DISALLOW_COPY_AND_ASSIGN(AsyncWebUIMessageHandler);
436 };
437
438 // Handler for this object.
439 ::testing::StrictMock<AsyncWebUIMessageHandler> message_handler_;
440
441 private:
442 // Class to provide a ChromeWebUI for |kDummyURL|.
443 class MockWebUIProvider : public TestChromeWebUIFactory::WebUIProvider {
444 public:
445 MockWebUIProvider() {}
446
447 // Returns a new ChromeWebUI
448 WebUI* NewWebUI(TabContents* tab_contents, const GURL& url) OVERRIDE {
449 return new ChromeWebUI(tab_contents);
450 }
451 };
452
453 // Provide this object's handler.
454 virtual WebUIMessageHandler* GetMockMessageHandler() OVERRIDE {
455 return &message_handler_;
456 }
457
458 // Set up the kDummyURL to be a WebUI page.
459 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
460 WebUIBrowserTest::SetUpInProcessBrowserTestFixture();
461 TestChromeWebUIFactory::AddFactoryOverride(GURL(kDummyURL).host(),
462 &mock_provider_);
463 }
464
465 // Tear down the kDummyURL WebUI page.
466 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
467 WebUIBrowserTest::TearDownInProcessBrowserTestFixture();
468 TestChromeWebUIFactory::RemoveFactoryOverride(GURL(kDummyURL).host());
469 }
470
471 // Set up and browse to kDummyURL for all tests.
472 virtual void SetUpOnMainThread() OVERRIDE {
473 WebUIBrowserTest::SetUpOnMainThread();
474 AddLibrary(FilePath(FILE_PATH_LITERAL("async.js")));
475 ui_test_utils::NavigateToURL(browser(), GURL(kDummyURL));
476 }
477
478 // Provider for this object.
479 MockWebUIProvider mock_provider_;
480
481 DISALLOW_COPY_AND_ASSIGN(WebUIBrowserAsyncTest);
482 };
483
484 const char WebUIBrowserAsyncTest::kDummyURL[] = "chrome://Dummy";
485
486 // Test that assertions fail immediately without calling asyncTestDone().
mmenke 2011/08/10 17:23:40 asyncTestDone() is, in fact, called by runAsync.
Sheridan Rawlins 2011/08/11 01:58:44 Done.
487 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsAssert) {
488 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
489 ASSERT_FALSE(RunJavascriptAsyncTest(
490 "startAsyncTest", *Value::CreateStringValue("testFailsAssert")));
491 }
492
493 // Test that expectations continue the function, but fail the test without
494 // calling asyncTestDone().
495 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsExpect) {
496 ::testing::InSequence s;
497 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
498 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
499 ASSERT_FALSE(RunJavascriptAsyncTest(
500 "startAsyncTest", *Value::CreateStringValue("testFailsExpect")));
501 }
502
503 // Test that test passes when this object's handler calls asyncTestDone().
504 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPasses) {
505 ::testing::InSequence s;
506 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
507 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
508 .WillOnce(::testing::InvokeWithoutArgs(
509 this, &WebUIBrowserAsyncTest::AsyncTestDone));
510 ASSERT_TRUE(RunJavascriptAsyncTest(
511 "startAsyncTest", *Value::CreateStringValue("testPasses")));
512 }
513
514 // Test that two tests pass
515 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassPass) {
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::RunTestPasses));
521 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
522 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
523 .WillOnce(::testing::InvokeWithoutArgs(
524 this, &WebUIBrowserAsyncTest::AsyncTestDone));
525 ASSERT_TRUE(RunJavascriptAsyncTest(
526 "startAsyncTest", *Value::CreateStringValue("testPasses")));
527 }
528
529 // Test that first test passes; second fails.
530 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassThenFail) {
531 ::testing::InSequence s;
532 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
533 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
534 .WillOnce(::testing::InvokeWithoutArgs(
535 this, &WebUIBrowserAsyncTest::RunTestFailsAssert));
536 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
537 ASSERT_FALSE(RunJavascriptAsyncTest(
538 "startAsyncTest", *Value::CreateStringValue("testPasses")));
539 }
540
541 // Test that async fail first then sync pass still fails.
542 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncDoneFailFirstSyncPass) {
543 ::testing::InSequence s;
544 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
545 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
546 ASSERT_FALSE(RunJavascriptAsyncTest(
547 "runAsync", *Value::CreateStringValue("testAsyncDoneFailFirstSyncPass")));
548 }
549
550 // Test that calling asyncTestDone during RunJavascriptTest still completes when
551 // waiting for async result.
552 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncTestDoneEarly) {
553 ASSERT_TRUE(RunJavascriptAsyncTest("asyncTestDone"));
554 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698