root/chrome/test/chromedriver/chrome/devtools_http_client_unittest.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ExpectEqual
  2. TEST
  3. TEST
  4. TEST
  5. AssertTypeIsOk
  6. AssertFails
  7. TEST
  8. TEST
  9. TEST
  10. TEST
  11. TEST
  12. TEST
  13. TEST
  14. TEST
  15. TEST
  16. AssertVersionFails
  17. TEST
  18. TEST
  19. TEST
  20. TEST

// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <string>

#include "base/compiler_specific.h"
#include "base/values.h"
#include "chrome/test/chromedriver/chrome/devtools_http_client.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

void ExpectEqual(const WebViewInfo& info1,
                 const WebViewInfo& info2) {
  EXPECT_EQ(info1.id, info2.id);
  EXPECT_EQ(info1.type, info2.type);
  EXPECT_EQ(info1.url, info2.url);
  EXPECT_EQ(info1.debugger_url, info2.debugger_url);
}

}  // namespace

TEST(ParseWebViewsInfo, Normal) {
  WebViewsInfo views_info;
  Status status = internal::ParseWebViewsInfo(
      "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]",
      &views_info);
  ASSERT_TRUE(status.IsOk());
  ASSERT_EQ(1u, views_info.GetSize());
  ExpectEqual(
      WebViewInfo(
          "1", "ws://debugurl1", "http://page1", WebViewInfo::kPage),
      *views_info.GetForId("1"));
}

TEST(ParseWebViewsInfo, Multiple) {
  WebViewsInfo views_info;
  Status status = internal::ParseWebViewsInfo(
      "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"},"
      " {\"type\": \"other\", \"id\": \"2\", \"url\": \"http://page2\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl2\"}]",
      &views_info);
  ASSERT_TRUE(status.IsOk());
  ASSERT_EQ(2u, views_info.GetSize());
  ExpectEqual(
      WebViewInfo(
          "1", "ws://debugurl1", "http://page1", WebViewInfo::kPage),
      views_info.Get(0));
  ExpectEqual(
      WebViewInfo(
          "2", "ws://debugurl2", "http://page2", WebViewInfo::kOther),
      views_info.Get(1));
}

TEST(ParseWebViewsInfo, WithoutDebuggerUrl) {
  WebViewsInfo views_info;
  Status status = internal::ParseWebViewsInfo(
      "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\"}]",
      &views_info);
  ASSERT_TRUE(status.IsOk());
  ASSERT_EQ(1u, views_info.GetSize());
  ExpectEqual(
      WebViewInfo("1", std::string(), "http://page1", WebViewInfo::kPage),
      views_info.Get(0));
}

namespace {

void AssertTypeIsOk(const std::string& type_as_string, WebViewInfo::Type type) {
  WebViewsInfo views_info;
  std::string data = "[{\"type\": \"" + type_as_string
      + "\", \"id\": \"1\", \"url\": \"http://page1\"}]";
  Status status = internal::ParseWebViewsInfo(data, &views_info);
  ASSERT_TRUE(status.IsOk());
  ASSERT_EQ(1u, views_info.GetSize());
  ExpectEqual(WebViewInfo("1", std::string(), "http://page1", type),
              views_info.Get(0));
}

void AssertFails(const std::string& data) {
  WebViewsInfo views_info;
  Status status = internal::ParseWebViewsInfo(data, &views_info);
  ASSERT_FALSE(status.IsOk());
  ASSERT_EQ(0u, views_info.GetSize());
}

}  // namespace

TEST(ParseWebViewsInfo, Types) {
  AssertTypeIsOk("app", WebViewInfo::kApp);
  AssertTypeIsOk("background_page", WebViewInfo::kBackgroundPage);
  AssertTypeIsOk("page", WebViewInfo::kPage);
  AssertTypeIsOk("worker", WebViewInfo::kWorker);
  AssertTypeIsOk("other", WebViewInfo::kOther);
  AssertFails("[{\"type\": \"\", \"id\": \"1\", \"url\": \"http://page1\"}]");
}

TEST(ParseWebViewsInfo, NonList) {
  AssertFails("{\"id\": \"1\"}");
}

TEST(ParseWebViewsInfo, NonDictionary) {
  AssertFails("[1]");
}

TEST(ParseWebViewsInfo, NoId) {
  AssertFails(
      "[{\"type\": \"page\", \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

TEST(ParseWebViewsInfo, InvalidId) {
  AssertFails(
      "[{\"type\": \"page\", \"id\": 1, \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

TEST(ParseWebViewsInfo, NoType) {
  AssertFails(
      "[{\"id\": \"1\", \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

TEST(ParseWebViewsInfo, InvalidType) {
  AssertFails(
      "[{\"type\": \"123\", \"id\": \"1\", \"url\": \"http://page1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

TEST(ParseWebViewsInfo, NoUrl) {
  AssertFails(
      "[{\"type\": \"page\", \"id\": \"1\","
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

TEST(ParseWebViewsInfo, InvalidUrl) {
  AssertFails(
      "[{\"type\": \"page\", \"id\": \"1\", \"url\": 1,"
      "  \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]");
}

namespace {

void AssertVersionFails(const std::string& data) {
  std::string version;
  Status status = internal::ParseVersionInfo(data, &version);
  ASSERT_TRUE(status.IsError());
  ASSERT_TRUE(version.empty());
}

}  // namespace

TEST(ParseVersionInfo, InvalidJSON) {
  AssertVersionFails("[");
}

TEST(ParseVersionInfo, NonDict) {
  AssertVersionFails("[]");
}

TEST(ParseVersionInfo, NoBrowserKey) {
  AssertVersionFails("{}");
}

TEST(ParseVersionInfo, Valid) {
  std::string version;
  Status status = internal::ParseVersionInfo("{\"Browser\": \"1\"}", &version);
  ASSERT_TRUE(status.IsOk());
  ASSERT_EQ("1", version);
}


/* [<][>][^][v][top][bottom][index][help] */