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

Side by Side Diff: chrome/test/chromedriver/chrome_impl_unittest.cc

Issue 12321057: [chromedriver] Implement reconnection to DevTools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix some nits and add one unit test. Created 7 years, 10 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <list> 5 #include <list>
6 #include <string> 6 #include <string>
7 7
8 #include "base/bind.h"
8 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/json/json_reader.h"
9 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
10 #include "base/values.h" 12 #include "base/values.h"
11 #include "chrome/test/chromedriver/chrome_impl.h" 13 #include "chrome/test/chromedriver/chrome_impl.h"
12 #include "chrome/test/chromedriver/devtools_client.h" 14 #include "chrome/test/chromedriver/devtools_client.h"
13 #include "chrome/test/chromedriver/status.h" 15 #include "chrome/test/chromedriver/status.h"
14 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
15 17
18 namespace {
19
20 Status ParseData(const std::string& data,
21 const base::Callback<Status(base::ListValue*)>& parser) {
22 scoped_ptr<base::Value> value(base::JSONReader::Read(data));
23 if (!value.get())
24 return Status(kUnknownError, "invalid JSON");
25 base::ListValue* list;
26 if (!value->GetAsList(&list))
27 return Status(kUnknownError, "input data should be a json list");
28 return parser.Run(list);
29 }
30
31 } // namespace
32
16 TEST(ParsePagesInfo, Normal) { 33 TEST(ParsePagesInfo, Normal) {
17 std::list<std::string> ids; 34 std::list<std::string> ids;
18 Status status = internal::ParsePagesInfo( 35 Status status = ParseData(
19 "[{\"type\": \"page\", \"id\":\"1\"," 36 "[{\"type\": \"page\", \"id\": \"1\","
20 " \"webSocketDebuggerUrl\": \"http://debugurl\"}]", 37 " \"webSocketDebuggerUrl\": \"http://debugurl\"}]",
21 &ids); 38 base::Bind(&internal::ParsePagesInfo, &ids));
22 ASSERT_TRUE(status.IsOk()); 39 ASSERT_TRUE(status.IsOk());
23 ASSERT_EQ(1u, ids.size()); 40 ASSERT_EQ(1u, ids.size());
24 ASSERT_EQ("1", ids.front()); 41 ASSERT_EQ("1", ids.front());
25 } 42 }
26 43
27 TEST(ParsePagesInfo, Multiple) { 44 TEST(ParsePagesInfo, Multiple) {
28 std::list<std::string> ids; 45 std::list<std::string> ids;
29 Status status = internal::ParsePagesInfo( 46 Status status = ParseData(
30 "[{\"type\": \"page\", \"id\":\"1\"," 47 "[{\"type\": \"page\", \"id\": \"1\","
31 " \"webSocketDebuggerUrl\": \"http://debugurl\"}," 48 " \"webSocketDebuggerUrl\": \"http://debugurl\"},"
32 " {\"type\": \"page\", \"id\":\"2\"," 49 " {\"type\": \"page\", \"id\": \"2\","
33 " \"webSocketDebuggerUrl\": \"http://debugurl2\"}]", 50 " \"webSocketDebuggerUrl\": \"http://debugurl2\"}]",
34 &ids); 51 base::Bind(&internal::ParsePagesInfo, &ids));
35 ASSERT_TRUE(status.IsOk()); 52 ASSERT_TRUE(status.IsOk());
36 ASSERT_EQ(2u, ids.size()); 53 ASSERT_EQ(2u, ids.size());
37 ASSERT_EQ("1", ids.front()); 54 ASSERT_EQ("1", ids.front());
38 ASSERT_EQ("2", ids.back()); 55 ASSERT_EQ("2", ids.back());
39 } 56 }
40 57
58 TEST(ParsePagesInfo, TypeNotPage) {
59 std::list<std::string> ids;
60 Status status = ParseData(
61 "[{\"type\": \"other\", \"id\": \"1\","
62 " \"webSocketDebuggerUrl\": \"http://debugurl\"},"
63 " {\"type\": \"page\", \"id\": \"2\","
64 " \"webSocketDebuggerUrl\": \"http://debugurl2\"}]",
65 base::Bind(&internal::ParsePagesInfo, &ids));
66 ASSERT_TRUE(status.IsOk());
67 ASSERT_EQ(1u, ids.size());
68 ASSERT_EQ("2", ids.front());
69 }
70
41 TEST(ParsePagesInfo, WithoutDebuggerUrl) { 71 TEST(ParsePagesInfo, WithoutDebuggerUrl) {
42 std::list<std::string> ids; 72 std::list<std::string> ids;
43 Status status = internal::ParsePagesInfo( 73 Status status = ParseData(
44 "[{\"type\": \"page\", \"id\":\"1\"," 74 "[{\"type\": \"page\", \"id\": \"1\","
45 " \"webSocketDebuggerUrl\": \"http://debugurl\"}," 75 " \"webSocketDebuggerUrl\": \"http://debugurl\"},"
46 " {\"type\": \"page\", \"id\":\"2\"}]", 76 " {\"type\": \"page\", \"id\": \"2\"}]",
47 &ids); 77 base::Bind(&internal::ParsePagesInfo, &ids));
48 ASSERT_TRUE(status.IsOk()); 78 ASSERT_TRUE(status.IsOk());
49 ASSERT_EQ(2u, ids.size()); 79 ASSERT_EQ(2u, ids.size());
50 ASSERT_EQ("1", ids.front()); 80 ASSERT_EQ("1", ids.front());
51 ASSERT_EQ("2", ids.back()); 81 ASSERT_EQ("2", ids.back());
52 } 82 }
53 83
54 namespace { 84 namespace {
55 85
56 void AssertFails(const std::string& data) { 86 void AssertParsePagesInfoFails(const std::string& data) {
57 std::list<std::string> urls; 87 std::list<std::string> ids;
58 Status status = internal::ParsePagesInfo(data, &urls); 88 Status status = ParseData(data, base::Bind(&internal::ParsePagesInfo, &ids));
59 ASSERT_FALSE(status.IsOk()); 89 ASSERT_FALSE(status.IsOk());
60 ASSERT_EQ(0u, urls.size()); 90 ASSERT_EQ(0u, ids.size());
61 } 91 }
62 92
63 } // namespace 93 } // namespace
64 94
65 TEST(ParsePagesInfo, InvalidJSON) { 95 TEST(ParsePagesInfo, NonDictionary) {
66 AssertFails("["); 96 AssertParsePagesInfoFails("[1]");
67 } 97 }
68 98
69 TEST(ParsePagesInfo, NonList) { 99 TEST(ParsePagesInfo, NoType) {
70 AssertFails("{}"); 100 AssertParsePagesInfoFails("[{\"id\": 1}]");
71 } 101 }
72 102
73 TEST(ParsePagesInfo, NonDictionary) { 103 TEST(ParsePagesInfo, InvalidType) {
74 AssertFails("[1]"); 104 AssertParsePagesInfoFails("[{\"type\": 1, \"id\": \"1\"}]");
75 } 105 }
76 106
77 TEST(ParsePagesInfo, NoDebuggerUrl) { 107 TEST(ParsePagesInfo, NoId) {
78 AssertFails("[{\"hi\": 1}]"); 108 AssertParsePagesInfoFails("[{\"type\": \"page\", \"hi\": 1}]");
79 } 109 }
80 110
81 TEST(ParsePagesInfo, InvalidDebuggerUrl) { 111 TEST(ParsePagesInfo, InvalidId) {
82 AssertFails("[{\"webSocketDebuggerUrl\": 1}]"); 112 AssertParsePagesInfoFails("[{\"type\": \"page\", \"id\": 1}]");
83 } 113 }
114
115 TEST(ParseDevToolsInfo, Normal) {
116 std::list<std::string> page_devtools_ids;
117 std::list<std::string> frontend_devtools_ids;
118 Status status = ParseData(
119 "[{\"type\": \"other\", \"id\": \"1\","
120 " \"url\": \"chrome-devtools://a\"}]",
121 base::Bind(&internal::ParseDevToolsInfo,
122 &page_devtools_ids, &frontend_devtools_ids));
123 ASSERT_TRUE(status.IsOk());
124 ASSERT_EQ(0u, page_devtools_ids.size());
125 ASSERT_EQ(1u, frontend_devtools_ids.size());
126 }
127
128 TEST(ParseDevToolsInfo, Multiple) {
129 std::list<std::string> page_devtools_ids;
130 std::list<std::string> frontend_devtools_ids;
131 Status status = ParseData(
132 "[{\"type\": \"other\", \"id\": \"1\","
133 " \"url\": \"chrome-devtools://a\"},"
134 " {\"type\": \"page\", \"id\": \"2\","
135 " \"url\": \"chrome-devtools://b\"}]",
136 base::Bind(&internal::ParseDevToolsInfo,
137 &page_devtools_ids, &frontend_devtools_ids));
138 ASSERT_TRUE(status.IsOk());
139 ASSERT_EQ(1u, page_devtools_ids.size());
140 ASSERT_EQ(1u, frontend_devtools_ids.size());
141 }
142
143 TEST(ParseDevToolsInfo, NoDevToolsFrontend) {
144 std::list<std::string> page_devtools_ids;
145 std::list<std::string> frontend_devtools_ids;
146 Status status = ParseData(
147 "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://abc\"}]",
148 base::Bind(&internal::ParseDevToolsInfo,
149 &page_devtools_ids, &frontend_devtools_ids));
150 ASSERT_TRUE(status.IsOk());
151 ASSERT_EQ(0u, page_devtools_ids.size());
152 ASSERT_EQ(0u, frontend_devtools_ids.size());
153 }
154
155 namespace {
156
157 void AssertParseDevToolsInfoFails(const std::string& data) {
158 std::list<std::string> page_devtools_ids;
159 std::list<std::string> frontend_devtools_ids;
160 Status status = ParseData(
161 data, base::Bind(&internal::ParseDevToolsInfo,
162 &page_devtools_ids, &frontend_devtools_ids));
163 ASSERT_FALSE(status.IsOk());
164 ASSERT_EQ(0u, page_devtools_ids.size());
165 ASSERT_EQ(0u, frontend_devtools_ids.size());
166 }
167
168 } // namespace
169
170 TEST(ParseDevToolsInfo, NonDictionary) {
171 AssertParsePagesInfoFails("[1]");
172 }
173
174 TEST(ParseDevToolsInfo, NoUrl) {
175 AssertParseDevToolsInfoFails("[{\"type\": \"page\", \"id\": \"1\"}]");
176 }
177
178 TEST(ParseDevToolsInfo, InvalidUrl) {
179 AssertParseDevToolsInfoFails(
180 "[{\"type\": \"page\", \"url\": [], \"id\": \"1\"}]");
181 }
182
183 TEST(ParseDevToolsInfo, NoId) {
184 AssertParseDevToolsInfoFails(
185 "[{\"type\": \"page\", \"url\": \"chrome-devtools://a\"}]");
186 }
187
188 TEST(ParseDevToolsInfo, InvalidId) {
189 AssertParseDevToolsInfoFails(
190 "[{\"type\": \"page\", \"id\": 1, \"url\": \"chrome-devtools://a\"}]");
191 }
192
193 TEST(ParseDevToolsInfo, NoType) {
194 AssertParseDevToolsInfoFails(
195 "[{\"url\": \"chrome-devtools://a\", \"id\": \"1\"}]");
196 }
197
198 TEST(ParseDevToolsInfo, InvalidType) {
199 AssertParseDevToolsInfoFails(
200 "[{\"type\": \"1\", \"id\": 1, \"url\": \"chrome-devtools://a\"}]");
201 }
202
203 TEST(CheckPageDebuggerUrl, NoDebuggerUrl) {
204 std::string page_id = "1";
205 bool has_debugger_url = true;
206 Status status = ParseData(
207 "[{\"id\": \"1\"}]",
208 base::Bind(&internal::CheckPageDebuggerUrl,
209 page_id, &has_debugger_url));
210 ASSERT_TRUE(status.IsOk());
211 ASSERT_FALSE(has_debugger_url);
212 }
213
214 TEST(CheckPageDebuggerUrl, HasDebuggerUrl) {
215 std::string page_id = "1";
216 bool has_debugger_url = false;
217 Status status = ParseData(
218 "[{\"id\": \"1\", \"webSocketDebuggerUrl\": \"ws://1\"}]",
219 base::Bind(&internal::CheckPageDebuggerUrl,
220 page_id, &has_debugger_url));
221 ASSERT_TRUE(status.IsOk());
222 ASSERT_TRUE(has_debugger_url);
223 }
224
225 namespace {
226
227 void AssertCheckPageDebuggerUrlFails(const std::string& data) {
228 std::string page_id = "1";
229 bool has_debugger_url = false;
230 Status status = ParseData(
231 data, base::Bind(&internal::CheckPageDebuggerUrl,
232 page_id, &has_debugger_url));
233 ASSERT_FALSE(status.IsOk());
234 ASSERT_FALSE(has_debugger_url);
235 }
236
237 } // namespace
238
239 TEST(CheckPageDebuggerUrl, NonDictionary) {
240 AssertCheckPageDebuggerUrlFails("[1]");
241 }
242
243 TEST(CheckPageDebuggerUrl, NoId) {
244 AssertCheckPageDebuggerUrlFails("[{\"webSocketDebuggerUrl\": \"http://1\"}]");
245 }
246
247 TEST(CheckPageDebuggerUrl, InvalidId) {
248 AssertCheckPageDebuggerUrlFails(
249 "[{\"id\": 1, \"webSocketDebuggerUrl\": \"http://1\"}]");
250 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698