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 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 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 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 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 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 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 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 102 TEST(ParseWebViewsInfo, NonList) { 103 AssertFails("{\"id\": \"1\"}"); 104 } 105 106 TEST(ParseWebViewsInfo, NonDictionary) { 107 AssertFails("[1]"); 108 } 109 110 TEST(ParseWebViewsInfo, NoId) { 111 AssertFails( 112 "[{\"type\": \"page\", \"url\": \"http://page1\"," 113 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 114 } 115 116 TEST(ParseWebViewsInfo, InvalidId) { 117 AssertFails( 118 "[{\"type\": \"page\", \"id\": 1, \"url\": \"http://page1\"," 119 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 120 } 121 122 TEST(ParseWebViewsInfo, NoType) { 123 AssertFails( 124 "[{\"id\": \"1\", \"url\": \"http://page1\"," 125 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 126 } 127 128 TEST(ParseWebViewsInfo, InvalidType) { 129 AssertFails( 130 "[{\"type\": \"123\", \"id\": \"1\", \"url\": \"http://page1\"," 131 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 132 } 133 134 TEST(ParseWebViewsInfo, NoUrl) { 135 AssertFails( 136 "[{\"type\": \"page\", \"id\": \"1\"," 137 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 138 } 139 140 TEST(ParseWebViewsInfo, InvalidUrl) { 141 AssertFails( 142 "[{\"type\": \"page\", \"id\": \"1\", \"url\": 1," 143 " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); 144 } 145