// Copyright 2017 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 "base/strings/strcat.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace gurl_base {

TEST(StrCat, 8Bit) {
  EXPECT_EQ("", StrCat({""}));
  EXPECT_EQ("1", StrCat({"1"}));
  EXPECT_EQ("122", StrCat({"1", "22"}));
  EXPECT_EQ("122333", StrCat({"1", "22", "333"}));
  EXPECT_EQ("1223334444", StrCat({"1", "22", "333", "4444"}));
  EXPECT_EQ("122333444455555", StrCat({"1", "22", "333", "4444", "55555"}));
}

TEST(StrCat, 16Bit) {
  string16 arg1 = ASCIIToUTF16("1");
  string16 arg2 = ASCIIToUTF16("22");
  string16 arg3 = ASCIIToUTF16("333");

  EXPECT_EQ(ASCIIToUTF16(""), StrCat({string16()}));
  EXPECT_EQ(ASCIIToUTF16("1"), StrCat({arg1}));
  EXPECT_EQ(ASCIIToUTF16("122"), StrCat({arg1, arg2}));
  EXPECT_EQ(ASCIIToUTF16("122333"), StrCat({arg1, arg2, arg3}));
}

TEST(StrAppend, 8Bit) {
  std::string result;

  result = "foo";
  StrAppend(&result, {std::string()});
  EXPECT_EQ("foo", result);

  result = "foo";
  StrAppend(&result, {"1"});
  EXPECT_EQ("foo1", result);

  result = "foo";
  StrAppend(&result, {"1", "22", "333"});
  EXPECT_EQ("foo122333", result);
}

TEST(StrAppend, 16Bit) {
  string16 arg1 = ASCIIToUTF16("1");
  string16 arg2 = ASCIIToUTF16("22");
  string16 arg3 = ASCIIToUTF16("333");

  string16 result;

  result = ASCIIToUTF16("foo");
  StrAppend(&result, {string16()});
  EXPECT_EQ(ASCIIToUTF16("foo"), result);

  result = ASCIIToUTF16("foo");
  StrAppend(&result, {arg1});
  EXPECT_EQ(ASCIIToUTF16("foo1"), result);

  result = ASCIIToUTF16("foo");
  StrAppend(&result, {arg1, arg2, arg3});
  EXPECT_EQ(ASCIIToUTF16("foo122333"), result);
}

}  // namespace base
