// Copyright (c) 2011 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/memory/scoped_ptr.h"
#include "base/string_number_conversions.h"
#include "chrome/browser/debugger/devtools_remote.h"
#include "chrome/browser/debugger/devtools_remote_message.h"
#include "testing/gtest/include/gtest/gtest.h"

class DevToolsRemoteMessageTest : public testing::Test {
 public:
  DevToolsRemoteMessageTest() : testing::Test() {}

 protected:
  virtual void SetUp() {
    testing::Test::SetUp();
  }
};

TEST_F(DevToolsRemoteMessageTest, ConstructInstanceManually) {
  DevToolsRemoteMessage::HeaderMap headers;
  std::string content = "{\"command\":\"ping\"}";
  headers[DevToolsRemoteMessageHeaders::kTool] = "DevToolsService";
  headers[DevToolsRemoteMessageHeaders::kContentLength] =
      base::IntToString(content.size());

  DevToolsRemoteMessage message(headers, content);
  ASSERT_STREQ("DevToolsService",
               message.GetHeaderWithEmptyDefault(
                   DevToolsRemoteMessageHeaders::kTool).c_str());
  ASSERT_STREQ("DevToolsService", message.tool().c_str());
  ASSERT_STREQ(content.c_str(), message.content().c_str());
  ASSERT_EQ(content.size(),
            static_cast<std::string::size_type>(message.content_length()));
  ASSERT_EQ(static_cast<DevToolsRemoteMessage::HeaderMap::size_type>(2),
            message.headers().size());
}

TEST_F(DevToolsRemoteMessageTest, ConstructWithBuilder) {
  std::string content = "Responsecontent";
  scoped_ptr<DevToolsRemoteMessage> message(
      DevToolsRemoteMessageBuilder::instance().Create(
          "V8Debugger",  // tool
          "2",           // destination
          content));     // content

  ASSERT_EQ(static_cast<DevToolsRemoteMessage::HeaderMap::size_type>(3),
            message->headers().size());
  ASSERT_STREQ(
      "V8Debugger",
      message->GetHeaderWithEmptyDefault(
          DevToolsRemoteMessageHeaders::kTool).c_str());
  ASSERT_STREQ(
      "V8Debugger",
      message->tool().c_str());
  ASSERT_STREQ(
      "2",
      message->GetHeaderWithEmptyDefault(
          DevToolsRemoteMessageHeaders::kDestination).c_str());
  ASSERT_STREQ(
      "2",
      message->destination().c_str());
  ASSERT_EQ(content.size(),
      static_cast<DevToolsRemoteMessage::HeaderMap::size_type>(
          message->content_length()));
  ASSERT_STREQ(content.c_str(), message->content().c_str());
}