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