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

Side by Side Diff: headless/lib/headless_devtools_client_browsertest.cc

Issue 2050143002: headless: Use HeadlessAsyncDevTooledBrowserTest in HeadlessDevToolsClient tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 <memory> 5 #include <memory>
6 6
7 #include "content/public/test/browser_test.h" 7 #include "content/public/test/browser_test.h"
8 #include "headless/public/domains/network.h" 8 #include "headless/public/domains/network.h"
9 #include "headless/public/domains/page.h" 9 #include "headless/public/domains/page.h"
10 #include "headless/public/domains/runtime.h" 10 #include "headless/public/domains/runtime.h"
11 #include "headless/public/headless_browser.h" 11 #include "headless/public/headless_browser.h"
12 #include "headless/public/headless_devtools_client.h" 12 #include "headless/public/headless_devtools_client.h"
13 #include "headless/public/headless_devtools_target.h"
14 #include "headless/public/headless_web_contents.h"
15 #include "headless/test/headless_browser_test.h" 13 #include "headless/test/headless_browser_test.h"
16 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gfx/geometry/size.h"
18 #include "url/gurl.h" 15 #include "url/gurl.h"
19 16
20 namespace headless { 17 namespace headless {
21 18
22 #define DEVTOOLS_CLIENT_TEST_F(TEST_FIXTURE_NAME) \ 19 class HeadlessDevToolsClientNavigationTest
23 IN_PROC_BROWSER_TEST_F(TEST_FIXTURE_NAME, RunAsyncTest) { RunTest(); } \ 20 : public HeadlessAsyncDevTooledBrowserTest,
24 class AsyncHeadlessBrowserTestNeedsSemicolon##TEST_FIXTURE_NAME {} 21 page::ExperimentalObserver {
25
26 // A test fixture which attaches a devtools client before starting the test.
27 // TODO(eseckler): Use the reusable HeadlessAsyncDevTooledTest and macro from
28 // headless_browser_test.h instead of this class.
29 class HeadlessDevToolsClientTest : public HeadlessBrowserTest,
30 public HeadlessWebContents::Observer {
31 public: 22 public:
32 HeadlessDevToolsClientTest() 23 void RunDevTooledTest() override {
33 : devtools_client_(HeadlessDevToolsClient::Create()) {}
34 ~HeadlessDevToolsClientTest() override {}
35
36 // HeadlessWebContentsObserver implementation:
37 void DevToolsTargetReady() override {
38 EXPECT_TRUE(web_contents_->GetDevToolsTarget());
39 web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
40 RunDevToolsClientTest();
41 }
42
43 virtual void RunDevToolsClientTest() = 0;
44
45 protected:
46 void RunTest() {
47 web_contents_ =
48 browser()->CreateWebContents(GURL("about:blank"), gfx::Size(800, 600));
49 web_contents_->AddObserver(this);
50
51 RunAsynchronousTest();
52
53 web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get());
54 web_contents_->RemoveObserver(this);
55 web_contents_->Close();
56 web_contents_ = nullptr;
57 }
58
59 HeadlessWebContents* web_contents_;
60 std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
61 };
62
63 class HeadlessDevToolsClientNavigationTest : public HeadlessDevToolsClientTest,
64 page::ExperimentalObserver {
65 public:
66 void RunDevToolsClientTest() override {
67 EXPECT_TRUE(embedded_test_server()->Start()); 24 EXPECT_TRUE(embedded_test_server()->Start());
68 std::unique_ptr<page::NavigateParams> params = 25 std::unique_ptr<page::NavigateParams> params =
69 page::NavigateParams::Builder() 26 page::NavigateParams::Builder()
70 .SetUrl(embedded_test_server()->GetURL("/hello.html").spec()) 27 .SetUrl(embedded_test_server()->GetURL("/hello.html").spec())
71 .Build(); 28 .Build();
72 devtools_client_->GetPage()->GetExperimental()->AddObserver(this); 29 devtools_client_->GetPage()->GetExperimental()->AddObserver(this);
73 devtools_client_->GetPage()->Enable(); 30 devtools_client_->GetPage()->Enable();
74 devtools_client_->GetPage()->Navigate(std::move(params)); 31 devtools_client_->GetPage()->Navigate(std::move(params));
75 } 32 }
76 33
77 void OnLoadEventFired(const page::LoadEventFiredParams& params) override { 34 void OnLoadEventFired(const page::LoadEventFiredParams& params) override {
78 devtools_client_->GetPage()->GetExperimental()->RemoveObserver(this); 35 devtools_client_->GetPage()->GetExperimental()->RemoveObserver(this);
79 FinishAsynchronousTest(); 36 FinishAsynchronousTest();
80 } 37 }
81 38
82 // Check that events with no parameters still get a parameters object. 39 // Check that events with no parameters still get a parameters object.
83 void OnFrameResized(const page::FrameResizedParams& params) override {} 40 void OnFrameResized(const page::FrameResizedParams& params) override {}
84 }; 41 };
85 42
86 DEVTOOLS_CLIENT_TEST_F(HeadlessDevToolsClientNavigationTest); 43 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientNavigationTest);
87 44
88 class HeadlessDevToolsClientEvalTest : public HeadlessDevToolsClientTest { 45 class HeadlessDevToolsClientEvalTest
46 : public HeadlessAsyncDevTooledBrowserTest {
89 public: 47 public:
90 void RunDevToolsClientTest() override { 48 void RunDevTooledTest() override {
91 std::unique_ptr<runtime::EvaluateParams> params = 49 std::unique_ptr<runtime::EvaluateParams> params =
92 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build(); 50 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build();
93 devtools_client_->GetRuntime()->Evaluate( 51 devtools_client_->GetRuntime()->Evaluate(
94 std::move(params), 52 std::move(params),
95 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult, 53 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult,
96 base::Unretained(this))); 54 base::Unretained(this)));
97 // Test the convenience overload which only takes the required command 55 // Test the convenience overload which only takes the required command
98 // parameters. 56 // parameters.
99 devtools_client_->GetRuntime()->Evaluate( 57 devtools_client_->GetRuntime()->Evaluate(
100 "24 * 7", base::Bind(&HeadlessDevToolsClientEvalTest::OnSecondResult, 58 "24 * 7", base::Bind(&HeadlessDevToolsClientEvalTest::OnSecondResult,
101 base::Unretained(this))); 59 base::Unretained(this)));
102 } 60 }
103 61
104 void OnFirstResult(std::unique_ptr<runtime::EvaluateResult> result) { 62 void OnFirstResult(std::unique_ptr<runtime::EvaluateResult> result) {
105 int value; 63 int value;
106 EXPECT_TRUE(result->GetResult()->HasValue()); 64 EXPECT_TRUE(result->GetResult()->HasValue());
107 EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value)); 65 EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value));
108 EXPECT_EQ(3, value); 66 EXPECT_EQ(3, value);
109 } 67 }
110 68
111 void OnSecondResult(std::unique_ptr<runtime::EvaluateResult> result) { 69 void OnSecondResult(std::unique_ptr<runtime::EvaluateResult> result) {
112 int value; 70 int value;
113 EXPECT_TRUE(result->GetResult()->HasValue()); 71 EXPECT_TRUE(result->GetResult()->HasValue());
114 EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value)); 72 EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value));
115 EXPECT_EQ(168, value); 73 EXPECT_EQ(168, value);
116 FinishAsynchronousTest(); 74 FinishAsynchronousTest();
117 } 75 }
118 }; 76 };
119 77
120 DEVTOOLS_CLIENT_TEST_F(HeadlessDevToolsClientEvalTest); 78 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientEvalTest);
121 79
122 class HeadlessDevToolsClientCallbackTest : public HeadlessDevToolsClientTest { 80 class HeadlessDevToolsClientCallbackTest
81 : public HeadlessAsyncDevTooledBrowserTest {
123 public: 82 public:
124 HeadlessDevToolsClientCallbackTest() : first_result_received_(false) {} 83 HeadlessDevToolsClientCallbackTest() : first_result_received_(false) {}
125 84
126 void RunDevToolsClientTest() override { 85 void RunDevTooledTest() override {
127 // Null callback without parameters. 86 // Null callback without parameters.
128 devtools_client_->GetPage()->Enable(); 87 devtools_client_->GetPage()->Enable();
129 // Null callback with parameters. 88 // Null callback with parameters.
130 devtools_client_->GetRuntime()->Evaluate("true"); 89 devtools_client_->GetRuntime()->Evaluate("true");
131 // Non-null callback without parameters. 90 // Non-null callback without parameters.
132 devtools_client_->GetPage()->Disable( 91 devtools_client_->GetPage()->Disable(
133 base::Bind(&HeadlessDevToolsClientCallbackTest::OnFirstResult, 92 base::Bind(&HeadlessDevToolsClientCallbackTest::OnFirstResult,
134 base::Unretained(this))); 93 base::Unretained(this)));
135 // Non-null callback with parameters. 94 // Non-null callback with parameters.
136 devtools_client_->GetRuntime()->Evaluate( 95 devtools_client_->GetRuntime()->Evaluate(
137 "true", base::Bind(&HeadlessDevToolsClientCallbackTest::OnSecondResult, 96 "true", base::Bind(&HeadlessDevToolsClientCallbackTest::OnSecondResult,
138 base::Unretained(this))); 97 base::Unretained(this)));
139 } 98 }
140 99
141 void OnFirstResult() { 100 void OnFirstResult() {
142 EXPECT_FALSE(first_result_received_); 101 EXPECT_FALSE(first_result_received_);
143 first_result_received_ = true; 102 first_result_received_ = true;
144 } 103 }
145 104
146 void OnSecondResult(std::unique_ptr<runtime::EvaluateResult> result) { 105 void OnSecondResult(std::unique_ptr<runtime::EvaluateResult> result) {
147 EXPECT_TRUE(first_result_received_); 106 EXPECT_TRUE(first_result_received_);
148 FinishAsynchronousTest(); 107 FinishAsynchronousTest();
149 } 108 }
150 109
151 private: 110 private:
152 bool first_result_received_; 111 bool first_result_received_;
153 }; 112 };
154 113
155 DEVTOOLS_CLIENT_TEST_F(HeadlessDevToolsClientCallbackTest); 114 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientCallbackTest);
156 115
157 class HeadlessDevToolsClientObserverTest : public HeadlessDevToolsClientTest, 116 class HeadlessDevToolsClientObserverTest
158 network::Observer { 117 : public HeadlessAsyncDevTooledBrowserTest,
118 network::Observer {
159 public: 119 public:
160 void RunDevToolsClientTest() override { 120 void RunDevTooledTest() override {
161 EXPECT_TRUE(embedded_test_server()->Start()); 121 EXPECT_TRUE(embedded_test_server()->Start());
162 devtools_client_->GetNetwork()->AddObserver(this); 122 devtools_client_->GetNetwork()->AddObserver(this);
163 devtools_client_->GetNetwork()->Enable(); 123 devtools_client_->GetNetwork()->Enable();
164 devtools_client_->GetPage()->Navigate( 124 devtools_client_->GetPage()->Navigate(
165 embedded_test_server()->GetURL("/hello.html").spec()); 125 embedded_test_server()->GetURL("/hello.html").spec());
166 } 126 }
167 127
168 void OnRequestWillBeSent( 128 void OnRequestWillBeSent(
169 const network::RequestWillBeSentParams& params) override { 129 const network::RequestWillBeSentParams& params) override {
170 EXPECT_EQ("GET", params.GetRequest()->GetMethod()); 130 EXPECT_EQ("GET", params.GetRequest()->GetMethod());
171 EXPECT_EQ(embedded_test_server()->GetURL("/hello.html").spec(), 131 EXPECT_EQ(embedded_test_server()->GetURL("/hello.html").spec(),
172 params.GetRequest()->GetUrl()); 132 params.GetRequest()->GetUrl());
173 } 133 }
174 134
175 void OnResponseReceived( 135 void OnResponseReceived(
176 const network::ResponseReceivedParams& params) override { 136 const network::ResponseReceivedParams& params) override {
177 EXPECT_EQ(200, params.GetResponse()->GetStatus()); 137 EXPECT_EQ(200, params.GetResponse()->GetStatus());
178 EXPECT_EQ("OK", params.GetResponse()->GetStatusText()); 138 EXPECT_EQ("OK", params.GetResponse()->GetStatusText());
179 std::string content_type; 139 std::string content_type;
180 EXPECT_TRUE(params.GetResponse()->GetHeaders()->GetString("Content-Type", 140 EXPECT_TRUE(params.GetResponse()->GetHeaders()->GetString("Content-Type",
181 &content_type)); 141 &content_type));
182 EXPECT_EQ("text/html", content_type); 142 EXPECT_EQ("text/html", content_type);
183 143
184 devtools_client_->GetNetwork()->RemoveObserver(this); 144 devtools_client_->GetNetwork()->RemoveObserver(this);
185 FinishAsynchronousTest(); 145 FinishAsynchronousTest();
186 } 146 }
187 }; 147 };
188 148
189 DEVTOOLS_CLIENT_TEST_F(HeadlessDevToolsClientObserverTest); 149 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientObserverTest);
190 150
191 class HeadlessDevToolsClientExperimentalTest 151 class HeadlessDevToolsClientExperimentalTest
192 : public HeadlessDevToolsClientTest, 152 : public HeadlessAsyncDevTooledBrowserTest,
193 page::ExperimentalObserver { 153 page::ExperimentalObserver {
194 public: 154 public:
195 void RunDevToolsClientTest() override { 155 void RunDevTooledTest() override {
196 EXPECT_TRUE(embedded_test_server()->Start()); 156 EXPECT_TRUE(embedded_test_server()->Start());
197 // Check that experimental commands require parameter objects. 157 // Check that experimental commands require parameter objects.
198 devtools_client_->GetRuntime()->GetExperimental()->Run( 158 devtools_client_->GetRuntime()->GetExperimental()->Run(
199 runtime::RunParams::Builder().Build()); 159 runtime::RunParams::Builder().Build());
200 160
201 devtools_client_->GetPage()->GetExperimental()->AddObserver(this); 161 devtools_client_->GetPage()->GetExperimental()->AddObserver(this);
202 devtools_client_->GetPage()->Enable(); 162 devtools_client_->GetPage()->Enable();
203 devtools_client_->GetPage()->Navigate( 163 devtools_client_->GetPage()->Navigate(
204 embedded_test_server()->GetURL("/hello.html").spec()); 164 embedded_test_server()->GetURL("/hello.html").spec());
205 } 165 }
206 166
207 void OnFrameStoppedLoading( 167 void OnFrameStoppedLoading(
208 const page::FrameStoppedLoadingParams& params) override { 168 const page::FrameStoppedLoadingParams& params) override {
209 FinishAsynchronousTest(); 169 FinishAsynchronousTest();
210 } 170 }
211 }; 171 };
212 172
213 DEVTOOLS_CLIENT_TEST_F(HeadlessDevToolsClientExperimentalTest); 173 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientExperimentalTest);
214 174
215 } // namespace headless 175 } // namespace headless
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698