devtools_http_client_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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
13namespace {
14
15void 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
25TEST(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
39TEST(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
59TEST(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
71namespace {
72
73void AssertFails(const std::string& data) {
74  WebViewsInfo views_info;
75  Status status = internal::ParseWebViewsInfo(data, &views_info);
76  ASSERT_FALSE(status.IsOk());
77  ASSERT_EQ(0u, views_info.GetSize());
78}
79
80}  // namespace
81
82TEST(ParseWebViewsInfo, NonList) {
83  AssertFails("{\"id\": \"1\"}");
84}
85
86TEST(ParseWebViewsInfo, NonDictionary) {
87  AssertFails("[1]");
88}
89
90TEST(ParseWebViewsInfo, NoId) {
91  AssertFails(
92      "[{\"type\": \"page\", \"url\": \"http://page1\","
93      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
94}
95
96TEST(ParseWebViewsInfo, InvalidId) {
97  AssertFails(
98      "[{\"type\": \"page\", \"id\": 1, \"url\": \"http://page1\","
99      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
100}
101
102TEST(ParseWebViewsInfo, NoType) {
103  AssertFails(
104      "[{\"id\": \"1\", \"url\": \"http://page1\","
105      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
106}
107
108TEST(ParseWebViewsInfo, InvalidType) {
109  AssertFails(
110      "[{\"type\": \"123\", \"id\": \"1\", \"url\": \"http://page1\","
111      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
112}
113
114TEST(ParseWebViewsInfo, NoUrl) {
115  AssertFails(
116      "[{\"type\": \"page\", \"id\": \"1\","
117      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
118}
119
120TEST(ParseWebViewsInfo, InvalidUrl) {
121  AssertFails(
122      "[{\"type\": \"page\", \"id\": \"1\", \"url\": 1,"
123      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
124}
125
126namespace {
127
128void AssertVersionFails(const std::string& data) {
129  std::string version;
130  Status status = internal::ParseVersionInfo(data, &version);
131  ASSERT_TRUE(status.IsError());
132  ASSERT_TRUE(version.empty());
133}
134
135}  // namespace
136
137TEST(ParseVersionInfo, InvalidJSON) {
138  AssertVersionFails("[");
139}
140
141TEST(ParseVersionInfo, NonDict) {
142  AssertVersionFails("[]");
143}
144
145TEST(ParseVersionInfo, NoBrowserKey) {
146  AssertVersionFails("{}");
147}
148
149TEST(ParseVersionInfo, Valid) {
150  std::string version;
151  Status status = internal::ParseVersionInfo("{\"Browser\": \"1\"}", &version);
152  ASSERT_TRUE(status.IsOk());
153  ASSERT_EQ("1", version);
154}
155
156