1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "base/compiler_specific.h"
8 #include "base/values.h"
9 #include "chrome/test/chromedriver/chrome/devtools_http_client.h"
10 #include "chrome/test/chromedriver/chrome/status.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace {
14
ExpectEqual(const WebViewInfo & info1,const WebViewInfo & info2)15 void ExpectEqual(const WebViewInfo& info1,
16 const WebViewInfo& info2) {
17 EXPECT_EQ(info1.id, info2.id);
18 EXPECT_EQ(info1.type, info2.type);
19 EXPECT_EQ(info1.url, info2.url);
20 EXPECT_EQ(info1.debugger_url, info2.debugger_url);
21 }
22
23 } // namespace
24
TEST(ParseWebViewsInfo,Normal)25 TEST(ParseWebViewsInfo, Normal) {
26 WebViewsInfo views_info;
27 Status status = internal::ParseWebViewsInfo(
28 "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\","
29 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]",
30 &views_info);
31 ASSERT_TRUE(status.IsOk());
32 ASSERT_EQ(1u, views_info.GetSize());
33 ExpectEqual(
34 WebViewInfo(
35 "1", "ws://debugurl1", "http://page1", WebViewInfo::kPage),
36 *views_info.GetForId("1"));
37 }
38
TEST(ParseWebViewsInfo,Multiple)39 TEST(ParseWebViewsInfo, Multiple) {
40 WebViewsInfo views_info;
41 Status status = internal::ParseWebViewsInfo(
42 "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\","
43 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"},"
44 " {\"type\": \"other\", \"id\": \"2\", \"url\": \"http://page2\","
45 " \"webSocketDebuggerUrl\": \"ws://debugurl2\"}]",
46 &views_info);
47 ASSERT_TRUE(status.IsOk());
48 ASSERT_EQ(2u, views_info.GetSize());
49 ExpectEqual(
50 WebViewInfo(
51 "1", "ws://debugurl1", "http://page1", WebViewInfo::kPage),
52 views_info.Get(0));
53 ExpectEqual(
54 WebViewInfo(
55 "2", "ws://debugurl2", "http://page2", WebViewInfo::kOther),
56 views_info.Get(1));
57 }
58
TEST(ParseWebViewsInfo,WithoutDebuggerUrl)59 TEST(ParseWebViewsInfo, WithoutDebuggerUrl) {
60 WebViewsInfo views_info;
61 Status status = internal::ParseWebViewsInfo(
62 "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\"}]",
63 &views_info);
64 ASSERT_TRUE(status.IsOk());
65 ASSERT_EQ(1u, views_info.GetSize());
66 ExpectEqual(
67 WebViewInfo("1", std::string(), "http://page1", WebViewInfo::kPage),
68 views_info.Get(0));
69 }
70
71 namespace {
72
AssertTypeIsOk(const std::string & type_as_string,WebViewInfo::Type type)73 void AssertTypeIsOk(const std::string& type_as_string, WebViewInfo::Type type) {
74 WebViewsInfo views_info;
75 std::string data = "[{\"type\": \"" + type_as_string
76 + "\", \"id\": \"1\", \"url\": \"http://page1\"}]";
77 Status status = internal::ParseWebViewsInfo(data, &views_info);
78 ASSERT_TRUE(status.IsOk());
79 ASSERT_EQ(1u, views_info.GetSize());
80 ExpectEqual(WebViewInfo("1", std::string(), "http://page1", type),
81 views_info.Get(0));
82 }
83
AssertFails(const std::string & data)84 void AssertFails(const std::string& data) {
85 WebViewsInfo views_info;
86 Status status = internal::ParseWebViewsInfo(data, &views_info);
87 ASSERT_FALSE(status.IsOk());
88 ASSERT_EQ(0u, views_info.GetSize());
89 }
90
91 } // namespace
92
TEST(ParseWebViewsInfo,Types)93 TEST(ParseWebViewsInfo, Types) {
94 AssertTypeIsOk("app", WebViewInfo::kApp);
95 AssertTypeIsOk("background_page", WebViewInfo::kBackgroundPage);
96 AssertTypeIsOk("page", WebViewInfo::kPage);
97 AssertTypeIsOk("worker", WebViewInfo::kWorker);
98 AssertTypeIsOk("other", WebViewInfo::kOther);
99 AssertFails("[{\"type\": \"\", \"id\": \"1\", \"url\": \"http://page1\"}]");
100 }
101
TEST(ParseWebViewsInfo,NonList)102 TEST(ParseWebViewsInfo, NonList) {
103 AssertFails("{\"id\": \"1\"}");
104 }
105
TEST(ParseWebViewsInfo,NonDictionary)106 TEST(ParseWebViewsInfo, NonDictionary) {
107 AssertFails("[1]");
108 }
109
TEST(ParseWebViewsInfo,NoId)110 TEST(ParseWebViewsInfo, NoId) {
111 AssertFails(
112 "[{\"type\": \"page\", \"url\": \"http://page1\","
113 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
114 }
115
TEST(ParseWebViewsInfo,InvalidId)116 TEST(ParseWebViewsInfo, InvalidId) {
117 AssertFails(
118 "[{\"type\": \"page\", \"id\": 1, \"url\": \"http://page1\","
119 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
120 }
121
TEST(ParseWebViewsInfo,NoType)122 TEST(ParseWebViewsInfo, NoType) {
123 AssertFails(
124 "[{\"id\": \"1\", \"url\": \"http://page1\","
125 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
126 }
127
TEST(ParseWebViewsInfo,InvalidType)128 TEST(ParseWebViewsInfo, InvalidType) {
129 AssertFails(
130 "[{\"type\": \"123\", \"id\": \"1\", \"url\": \"http://page1\","
131 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
132 }
133
TEST(ParseWebViewsInfo,NoUrl)134 TEST(ParseWebViewsInfo, NoUrl) {
135 AssertFails(
136 "[{\"type\": \"page\", \"id\": \"1\","
137 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
138 }
139
TEST(ParseWebViewsInfo,InvalidUrl)140 TEST(ParseWebViewsInfo, InvalidUrl) {
141 AssertFails(
142 "[{\"type\": \"page\", \"id\": \"1\", \"url\": 1,"
143 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
144 }
145
146 namespace {
147
AssertVersionFails(const std::string & data)148 void AssertVersionFails(const std::string& data) {
149 std::string version;
150 std::string blink_version;
151 Status status = internal::ParseVersionInfo(data, &version, &blink_version);
152 ASSERT_TRUE(status.IsError());
153 ASSERT_TRUE(version.empty());
154 ASSERT_TRUE(blink_version.empty());
155 }
156
157 } // namespace
158
TEST(ParseVersionInfo,InvalidJSON)159 TEST(ParseVersionInfo, InvalidJSON) {
160 AssertVersionFails("[");
161 }
162
TEST(ParseVersionInfo,NonDict)163 TEST(ParseVersionInfo, NonDict) {
164 AssertVersionFails("[]");
165 }
166
TEST(ParseVersionInfo,NoBrowserKey)167 TEST(ParseVersionInfo, NoBrowserKey) {
168 AssertVersionFails("{}");
169 }
170
TEST(ParseVersionInfo,Valid)171 TEST(ParseVersionInfo, Valid) {
172 std::string data = "{\"Browser\": \"1\", \"WebKit-Version\": \"2\"}";
173 std::string version;
174 std::string blink_version;
175 Status status = internal::ParseVersionInfo(data, &version, &blink_version);
176 ASSERT_TRUE(status.IsOk());
177 ASSERT_EQ("1", version);
178 ASSERT_EQ("2", blink_version);
179 }
180
181