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

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: Added failure and test when asyncTestDone() is called for non-async tests. 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) {
368 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js")));
369 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
370 EXPECT_FATAL_FAILURE(RunJavascriptTestNoReturn("FAILS_BogusFunctionName"),
mmenke 2011/08/08 16:38:25 RunJavascriptAsyncTestNoReturn?
Sheridan Rawlins 2011/08/10 01:58:53 RunJavascriptTestNoReturn is not a framework metho
mmenke 2011/08/10 04:17:53 In that case, you aren't using "RunJavascriptAsync
Sheridan Rawlins 2011/08/10 05:41:06 Thanks. When I looked at this, I didn't realize th
371 "WebUITestHandler::Observe");
372 }
373
374 IN_PROC_BROWSER_TEST_F(WebUIBrowserExpectFailTest, TestFailsNonAsync) {
375 AddLibrary(FilePath(FILE_PATH_LITERAL("sample_downloads.js")));
376 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
377 EXPECT_NONFATAL_FAILURE(RunJavascriptTest("asyncTestDone"),
378 "WebUITestHandler::WaitForResult");
379 }
380
381 // Tests that the async framework works.
382 class WebUIBrowserAsyncTest : public WebUIBrowserTest {
383 public:
384 // Calls the asyncTestDone() function from test_api.js
385 void AsyncTestDone() {
386 RunJavascriptFunction("asyncTestDone");
387 }
388
389 // starts a failing test.
390 void RunTestFailsAssert() {
391 RunJavascriptFunction("runAsync",
392 *Value::CreateStringValue("testFailsAssert"));
393 }
394
395 // starts a passing test.
396 void RunTestPasses() {
397 RunJavascriptFunction("runAsync", *Value::CreateStringValue("testPasses"));
398 }
399
400 protected:
401
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(HandleTestPasses, void(const ListValue*));
413
414 private:
415 virtual void RegisterMessages() OVERRIDE {
416 web_ui_->RegisterMessageCallback("startAsyncTest", NewCallback(
417 this, &AsyncWebUIMessageHandler::HandleStartAsyncTest));
418 web_ui_->RegisterMessageCallback("testPasses", NewCallback(
419 this, &AsyncWebUIMessageHandler::HandleTestPasses));
420 web_ui_->RegisterMessageCallback("testContinues", NewCallback(
421 this, &AsyncWebUIMessageHandler::HandleTestContinues));
422 }
423
424 // Starts the test in |list_value|[0] with the runAsync wrapper.
425 void HandleStartAsyncTest(const ListValue* list_value) {
426 Value* test_name;
427 ASSERT_TRUE(list_value->Get(0, &test_name));
428 web_ui_->CallJavascriptFunction("runAsync", *test_name);
429 }
430
431 DISALLOW_COPY_AND_ASSIGN(AsyncWebUIMessageHandler);
432 };
433
434 // Handler for this object.
435 ::testing::StrictMock<AsyncWebUIMessageHandler> message_handler_;
436
437 private:
438 // Class to provide a ChromeWebUI for |kDummyURL|.
439 class MockWebUIProvider : public TestChromeWebUIFactory::WebUIProvider {
440 public:
441 MockWebUIProvider() {}
442
443 // Returns a new ChromeWebUI
444 WebUI* NewWebUI(TabContents* tab_contents, const GURL& url) OVERRIDE {
445 return new ChromeWebUI(tab_contents);
446 }
447 };
448
449 // Provide this object's handler.
450 virtual WebUIMessageHandler* GetMockMessageHandler() OVERRIDE {
451 return &message_handler_;
452 }
453
454 // Set up the kDummyURL to be a WebUI page.
455 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
456 WebUIBrowserTest::SetUpInProcessBrowserTestFixture();
457 TestChromeWebUIFactory::AddFactoryOverride(GURL(kDummyURL).host(),
458 &mock_provider_);
459 }
460
461 // Tear down the kDummyURL WebUI page.
462 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
463 WebUIBrowserTest::TearDownInProcessBrowserTestFixture();
464 TestChromeWebUIFactory::RemoveFactoryOverride(GURL(kDummyURL).host());
465 }
466
467 // Set up and browse to kDummyURL for all tests.
468 virtual void SetUpOnMainThread() OVERRIDE {
469 WebUIBrowserTest::SetUpOnMainThread();
470 AddLibrary(FilePath(FILE_PATH_LITERAL("async.js")));
471 ui_test_utils::NavigateToURL(browser(), GURL(kDummyURL));
472 }
473
474 // Provider for this object.
475 MockWebUIProvider mock_provider_;
476
477 DISALLOW_COPY_AND_ASSIGN(WebUIBrowserAsyncTest);
478 };
479
480 const char WebUIBrowserAsyncTest::kDummyURL[] = "chrome://Dummy";
481
482 // Test that assertions fail immediately without calling asyncTestDone().
483 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsAssert) {
484 ASSERT_FALSE(RunJavascriptAsyncTest(
485 "startAsyncTest", *Value::CreateStringValue("testFailsAssert")));
486 }
487
488 // Test that expectations continue the function, but fail the test without
489 // calling asyncTestDone().
490 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncFailsExpect) {
491 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
492 ASSERT_FALSE(RunJavascriptAsyncTest(
493 "startAsyncTest", *Value::CreateStringValue("testFailsExpect")));
494 }
495
496 // Test that test passes when this object's handler calls asyncTestDone().
497 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPasses) {
498 ::testing::InSequence s;
499 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
500 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
501 .WillOnce(::testing::InvokeWithoutArgs(
502 this, &WebUIBrowserAsyncTest::AsyncTestDone));
503 ASSERT_TRUE(RunJavascriptAsyncTest(
504 "startAsyncTest", *Value::CreateStringValue("testPasses")));
505 }
506
507 // Test that two tests pass
508 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassPass) {
509 ::testing::InSequence s;
510 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
511 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
512 .WillOnce(::testing::InvokeWithoutArgs(
513 this, &WebUIBrowserAsyncTest::RunTestPasses));
514 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
515 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
516 .WillOnce(::testing::InvokeWithoutArgs(
517 this, &WebUIBrowserAsyncTest::AsyncTestDone));
518 ASSERT_TRUE(RunJavascriptAsyncTest(
519 "startAsyncTest", *Value::CreateStringValue("testPasses")));
520 }
521
522 // Test that first test passes; second fails.
523 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassThenFail) {
524 ::testing::InSequence s;
525 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
526 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
527 .WillOnce(::testing::InvokeWithoutArgs(
528 this, &WebUIBrowserAsyncTest::RunTestFailsAssert));
529 ASSERT_FALSE(RunJavascriptAsyncTest(
530 "startAsyncTest", *Value::CreateStringValue("testPasses")));
531 }
532
533 // Test that calling asyncTestDone during RunJavascriptTest still completes when
534 // waiting for async result.
535 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncTestDoneEarly) {
536 ASSERT_TRUE(RunJavascriptAsyncTest("asyncTestDone"));
537 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698