#include "str_utility.hpp"

#include <string>
#include <vector>

#include <gmock/gmock.h>  // IWYU pragma: keep
#include <gtest/gtest.h>  // IWYU pragma: keep
#include "boost/algorithm/string.hpp"  // NOLINT
#include "logging.hpp"
#include <nlohmann/json.hpp>

// IWYU pragma: no_include <gtest/gtest-message.h>
// IWYU pragma: no_include <gtest/gtest-test-part.h>
// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
// IWYU pragma: no_include <gmock/gmock-matchers.h>

namespace {

using ::testing::ElementsAre;

TEST(Split, PositiveTests) {
  std::vector<std::string> vec;
  bmcweb::split(vec, "xx-abc-xx-abb", '-');
  EXPECT_THAT(vec, ElementsAre("xx", "abc", "xx", "abb"));

  vec.clear();
  bmcweb::split(vec, "", '-');
  EXPECT_THAT(vec, ElementsAre(""));

  vec.clear();
  bmcweb::split(vec, "foo/", '/');
  EXPECT_THAT(vec, ElementsAre("foo", ""));

  vec.clear();
  bmcweb::split(vec, "/bar", '/');
  EXPECT_THAT(vec, ElementsAre("", "bar"));

  vec.clear();
  bmcweb::split(vec, "/", '/');
  EXPECT_THAT(vec, ElementsAre("", ""));
}

TEST(Split, Sensor) {
  std::vector<std::string> vec;
  bmcweb::split(vec, "/xyz/openbmc_project/sensors/unit/name", '/');
  EXPECT_THAT(vec, ElementsAre("", "xyz", "openbmc_project", "sensors", "unit",
                               "name"));
}

// boost version to keep in mind:
TEST(Split, BoostSplit) {
  std::vector<std::string> vec;
  boost::split(vec, "batman/superman/zebra", boost::is_any_of("/"));
  BMCWEB_LOG_DEBUG << "=> BoostSplit: vec: " << nlohmann::json(vec);
  EXPECT_THAT(vec, ElementsAre("batman", "superman", "zebra"));
}

TEST(JoinStrings, Two) {
  std::string ret;
  bmcweb::append_with_sep(ret, ':', "batman", "superman");
  EXPECT_EQ(ret, "batman:superman");
}

TEST(JoinStrings, One) {
  std::string ret;
  bmcweb::append_with_sep(ret, ':', "batman");
  EXPECT_EQ(ret, "batman");
}

}  // namespace
