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

Side by Side Diff: chrome/test/base/web_ui_browser_test_browsertest.cc

Issue 320753002: Support javascript gtests in an extension background page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: WS Created 6 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/common/url_constants.h" 10 #include "chrome/common/url_constants.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL)); 74 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
75 EXPECT_FATAL_FAILURE( 75 EXPECT_FATAL_FAILURE(
76 RunJavascriptAsyncTestNoReturn("DISABLED_BogusFunctionName"), 76 RunJavascriptAsyncTestNoReturn("DISABLED_BogusFunctionName"),
77 "WebUITestHandler::JavaScriptComplete"); 77 "WebUITestHandler::JavaScriptComplete");
78 } 78 }
79 79
80 // Tests that the async framework works. 80 // Tests that the async framework works.
81 class WebUIBrowserAsyncTest : public WebUIBrowserTest { 81 class WebUIBrowserAsyncTest : public WebUIBrowserTest {
82 public: 82 public:
83 // Calls the testDone() function from test_api.js 83 // Calls the testDone() function from test_api.js
84 void TestDone() { 84 void TestDone() { RunJavascriptFunction("testDone"); }
Peter Lundblad 2014/06/08 23:27:22 Is this file *just* git cl format or is there any
David Tseng 2014/06/10 05:35:22 reverted file.
85 RunJavascriptFunction("testDone");
86 }
87 85
88 // Starts a failing test. 86 // Starts a failing test.
89 void RunTestFailsAssert() { 87 void RunTestFailsAssert() {
90 RunJavascriptFunction("runAsync", new base::StringValue("testFailsAssert")); 88 RunJavascriptFunction("runAsync", new base::StringValue("testFailsAssert"));
91 } 89 }
92 90
93 // Starts a passing test. 91 // Starts a passing test.
94 void RunTestPasses() { 92 void RunTestPasses() {
95 RunJavascriptFunction("runAsync", new base::StringValue("testPasses")); 93 RunJavascriptFunction("runAsync", new base::StringValue("testPasses"));
96 } 94 }
97 95
98 protected: 96 protected:
99 WebUIBrowserAsyncTest() {} 97 WebUIBrowserAsyncTest() {}
100 98
101 // Class to synchronize asynchronous javascript activity with the tests. 99 // Class to synchronize asynchronous javascript activity with the tests.
102 class AsyncWebUIMessageHandler : public WebUIMessageHandler { 100 class AsyncWebUIMessageHandler : public WebUIMessageHandler {
103 public: 101 public:
104 AsyncWebUIMessageHandler() {} 102 AsyncWebUIMessageHandler() {}
105 103
106 MOCK_METHOD1(HandleTestContinues, void(const base::ListValue*)); 104 MOCK_METHOD1(HandleTestContinues, void(const base::ListValue*));
107 MOCK_METHOD1(HandleTestFails, void(const base::ListValue*)); 105 MOCK_METHOD1(HandleTestFails, void(const base::ListValue*));
108 MOCK_METHOD1(HandleTestPasses, void(const base::ListValue*)); 106 MOCK_METHOD1(HandleTestPasses, void(const base::ListValue*));
109 107
110 private: 108 private:
111 virtual void RegisterMessages() OVERRIDE { 109 virtual void RegisterMessages() OVERRIDE {
112 web_ui()->RegisterMessageCallback("startAsyncTest", 110 web_ui()->RegisterMessageCallback(
111 "startAsyncTest",
113 base::Bind(&AsyncWebUIMessageHandler::HandleStartAsyncTest, 112 base::Bind(&AsyncWebUIMessageHandler::HandleStartAsyncTest,
114 base::Unretained(this))); 113 base::Unretained(this)));
115 web_ui()->RegisterMessageCallback("testContinues", 114 web_ui()->RegisterMessageCallback(
115 "testContinues",
116 base::Bind(&AsyncWebUIMessageHandler::HandleTestContinues, 116 base::Bind(&AsyncWebUIMessageHandler::HandleTestContinues,
117 base::Unretained(this))); 117 base::Unretained(this)));
118 web_ui()->RegisterMessageCallback("testFails", 118 web_ui()->RegisterMessageCallback(
119 "testFails",
119 base::Bind(&AsyncWebUIMessageHandler::HandleTestFails, 120 base::Bind(&AsyncWebUIMessageHandler::HandleTestFails,
120 base::Unretained(this))); 121 base::Unretained(this)));
121 web_ui()->RegisterMessageCallback("testPasses", 122 web_ui()->RegisterMessageCallback(
123 "testPasses",
122 base::Bind(&AsyncWebUIMessageHandler::HandleTestPasses, 124 base::Bind(&AsyncWebUIMessageHandler::HandleTestPasses,
123 base::Unretained(this))); 125 base::Unretained(this)));
124 } 126 }
125 127
126 // Starts the test in |list_value|[0] with the runAsync wrapper. 128 // Starts the test in |list_value|[0] with the runAsync wrapper.
127 void HandleStartAsyncTest(const base::ListValue* list_value) { 129 void HandleStartAsyncTest(const base::ListValue* list_value) {
128 const base::Value* test_name; 130 const base::Value* test_name;
129 ASSERT_TRUE(list_value->Get(0, &test_name)); 131 ASSERT_TRUE(list_value->Get(0, &test_name));
130 web_ui()->CallJavascriptFunction("runAsync", *test_name); 132 web_ui()->CallJavascriptFunction("runAsync", *test_name);
131 } 133 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 // Test that test continues and passes. (Sync version). 180 // Test that test continues and passes. (Sync version).
179 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestSyncPasses) { 181 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestSyncPasses) {
180 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 182 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
181 ASSERT_TRUE(RunJavascriptTest("testPasses")); 183 ASSERT_TRUE(RunJavascriptTest("testPasses"));
182 } 184 }
183 185
184 // Test that test continues and passes. (Async version). 186 // Test that test continues and passes. (Async version).
185 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPasses) { 187 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPasses) {
186 ::testing::InSequence s; 188 ::testing::InSequence s;
187 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 189 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
188 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) 190 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)).WillOnce(
189 .WillOnce(::testing::InvokeWithoutArgs( 191 ::testing::InvokeWithoutArgs(this, &WebUIBrowserAsyncTest::TestDone));
190 this, &WebUIBrowserAsyncTest::TestDone)); 192 ASSERT_TRUE(RunJavascriptAsyncTest("startAsyncTest",
191 ASSERT_TRUE(RunJavascriptAsyncTest( 193 new base::StringValue("testPasses")));
192 "startAsyncTest", new base::StringValue("testPasses")));
193 } 194 }
194 195
195 // Test that two tests pass. 196 // Test that two tests pass.
196 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassPass) { 197 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassPass) {
197 ::testing::InSequence s; 198 ::testing::InSequence s;
198 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 199 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
199 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) 200 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
200 .WillOnce(::testing::InvokeWithoutArgs( 201 .WillOnce(::testing::InvokeWithoutArgs(
201 this, &WebUIBrowserAsyncTest::RunTestPasses)); 202 this, &WebUIBrowserAsyncTest::RunTestPasses));
202 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 203 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
203 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) 204 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)).WillOnce(
204 .WillOnce(::testing::InvokeWithoutArgs( 205 ::testing::InvokeWithoutArgs(this, &WebUIBrowserAsyncTest::TestDone));
205 this, &WebUIBrowserAsyncTest::TestDone)); 206 ASSERT_TRUE(RunJavascriptAsyncTest("startAsyncTest",
206 ASSERT_TRUE(RunJavascriptAsyncTest( 207 new base::StringValue("testPasses")));
207 "startAsyncTest", new base::StringValue("testPasses")));
208 } 208 }
209 209
210 // Test that first test passes; second fails. 210 // Test that first test passes; second fails.
211 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassThenFail) { 211 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncPassThenFail) {
212 ::testing::InSequence s; 212 ::testing::InSequence s;
213 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 213 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
214 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_)) 214 EXPECT_CALL(message_handler_, HandleTestPasses(::testing::_))
215 .WillOnce(::testing::InvokeWithoutArgs( 215 .WillOnce(::testing::InvokeWithoutArgs(
216 this, &WebUIBrowserAsyncTest::RunTestFailsAssert)); 216 this, &WebUIBrowserAsyncTest::RunTestFailsAssert));
217 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); 217 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
218 ASSERT_FALSE(RunJavascriptAsyncTest( 218 ASSERT_FALSE(RunJavascriptAsyncTest("startAsyncTest",
219 "startAsyncTest", new base::StringValue("testPasses"))); 219 new base::StringValue("testPasses")));
220 } 220 }
221 221
222 // Test that testDone() with failure first then sync pass still fails. 222 // Test that testDone() with failure first then sync pass still fails.
223 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncDoneFailFirstSyncPass) { 223 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestAsyncDoneFailFirstSyncPass) {
224 ::testing::InSequence s; 224 ::testing::InSequence s;
225 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_)); 225 EXPECT_CALL(message_handler_, HandleTestContinues(::testing::_));
226 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_)); 226 EXPECT_CALL(message_handler_, HandleTestFails(::testing::_));
227 227
228 // Call runAsync directly instead of deferring through startAsyncTest. It will 228 // Call runAsync directly instead of deferring through startAsyncTest. It will
229 // call testDone() on failure, then return. 229 // call testDone() on failure, then return.
230 ASSERT_FALSE(RunJavascriptAsyncTest( 230 ASSERT_FALSE(RunJavascriptAsyncTest(
231 "runAsync", new base::StringValue("testAsyncDoneFailFirstSyncPass"))); 231 "runAsync", new base::StringValue("testAsyncDoneFailFirstSyncPass")));
232 } 232 }
233 233
234 // Test that calling testDone during RunJavascriptAsyncTest still completes 234 // Test that calling testDone during RunJavascriptAsyncTest still completes
235 // when waiting for async result. This is similar to the previous test, but call 235 // when waiting for async result. This is similar to the previous test, but call
236 // testDone directly and expect pass result. 236 // testDone directly and expect pass result.
237 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPassesAsync) { 237 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPassesAsync) {
238 ASSERT_TRUE(RunJavascriptAsyncTest("testDone")); 238 ASSERT_TRUE(RunJavascriptAsyncTest("testDone"));
239 } 239 }
240 240
241 // Test that calling testDone during RunJavascriptTest still completes when 241 // Test that calling testDone during RunJavascriptTest still completes when
242 // waiting for async result. 242 // waiting for async result.
243 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPasses) { 243 IN_PROC_BROWSER_TEST_F(WebUIBrowserAsyncTest, TestTestDoneEarlyPasses) {
244 ASSERT_TRUE(RunJavascriptTest("testDone")); 244 ASSERT_TRUE(RunJavascriptTest("testDone"));
245 } 245 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698