Home | History | Annotate | Download | only in chrome
      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