Files
oemcrypto/util/test/string_utils_unittest.cpp
2025-05-22 16:33:29 -07:00

1891 lines
64 KiB
C++

// Copyright 2024 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
#include "string_utils.h"
#include <string>
#include <vector>
#include <gtest/gtest.h>
namespace wvutil {
// std::vector<std::string> StringSplit(const std::string& s, char delim);
TEST(StringUtilsTest, StringSplit_CharDelim_EmptyText) {
const std::vector<std::string> kEmptyVec;
const std::string kEmptyString;
constexpr char kDelimiter = ',';
EXPECT_EQ(StringSplit(kEmptyString, kDelimiter), kEmptyVec);
}
TEST(StringUtilsTest, StringSplit_CharDelim_SingleCharacterText_NoMatch) {
const std::string kText = "a";
constexpr char kDelimiter = ',';
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_SingleCharacterText_Match) {
const std::string kText = "a";
constexpr char kDelimiter = 'a';
const std::vector<std::string> kExpected = {"", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_NoMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter = ',';
const std::vector<std::string> kExpected = {"abcdefg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_SingleMidMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter = 'd';
const std::vector<std::string> kExpected = {"abc", "efg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_SingleFrontMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter = 'a';
const std::vector<std::string> kExpected = {"", "bcdefg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_SingleBackMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter = 'g';
const std::vector<std::string> kExpected = {"abcdef", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_MultiInnerMatch) {
const std::string kText = "123.456.789";
constexpr char kDelimiter = '.';
const std::vector<std::string> kExpected = {"123", "456", "789"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_MultiEndsMatch) {
const std::string kText = ".123..456..789.";
constexpr char kDelimiter = '.';
const std::vector<std::string> kExpected = {"", "123", "", "456",
"", "789", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_LongText_AllMatch) {
const std::string kText = "aaaaa";
constexpr char kDelimiter = 'a';
const std::vector<std::string> kExpected = {"", "", "", "", "", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CharDelim_NullByte) {
using namespace std::string_literals;
// Ensure that split can handle null bytes within C++ strings.
const std::string kText = "Hello\0World!"s;
constexpr char kDelimiter = '\0';
const std::vector<std::string> kExpected = {"Hello", "World!"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
// std::vector<std::string> StringSplit(const std::string& s,
// const std::string& delim);
TEST(StringUtilsTest, StringSplit_StringDelim_EmptyText_EmptyDelim) {
const std::string kEmptyString;
const std::vector<std::string> kExpected = {};
EXPECT_EQ(StringSplit(kEmptyString, kEmptyString), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_EmptyText_NoMatch) {
const std::string kText = "";
const std::string kDelimiter = "a";
const std::vector<std::string> kExpected = {};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_SingleCharText_EmptyDelim) {
const std::string kText = "a";
const std::string kDelimiter = "";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_SingleCharText_NoMatch) {
const std::string kText = "a";
const std::string kDelimiter = ",";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_SingleCharText_NoMatch2) {
const std::string kText = "a";
const std::string kDelimiter = "bcd";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_SingleCharText_Match) {
const std::string kText = "a";
const std::string kDelimiter = "a";
const std::vector<std::string> kExpected = {"", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_EmptyDelim) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "";
const std::vector<std::string> kExpected = {"a", "b", "c", "d",
"e", "f", "g"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_NoMatch) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "edc";
const std::vector<std::string> kExpected = {kText};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleMidMatch) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "d";
const std::vector<std::string> kExpected = {"abc", "efg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleMidMatch2) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "cde";
const std::vector<std::string> kExpected = {"ab", "fg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleFrontMatch) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "a";
const std::vector<std::string> kExpected = {"", "bcdefg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleFrontMatch2) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "abc";
const std::vector<std::string> kExpected = {"", "defg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleBackMatch) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "g";
const std::vector<std::string> kExpected = {"abcdef", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_SingleBackMatch2) {
const std::string kText = "abcdefg";
const std::string kDelimiter = "efg";
const std::vector<std::string> kExpected = {"abcd", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_MultiInnerMatch) {
const std::string kText = "123.456.789";
const std::string kDelimiter = ".";
const std::vector<std::string> kExpected = {"123", "456", "789"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_MultiInnerMatch2) {
const std::string kText = "123, 456, 789";
const std::string kDelimiter = ", ";
const std::vector<std::string> kExpected = {"123", "456", "789"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_MultiEndsMatch) {
const std::string kText = ".123.456..789.";
const std::string kDelimiter = ".";
const std::vector<std::string> kExpected = {"", "123", "456", "", "789", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_MultiEndsMatch2) {
const std::string kText = ", 123, 456, 789, ";
const std::string kDelimiter = ", ";
const std::vector<std::string> kExpected = {"", "123", "456", "789", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_AllMatch) {
const std::string kText = "aaaaa";
const std::string kDelimiter = "a";
const std::vector<std::string> kExpected = {"", "", "", "", "", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_StringDelim_LongText_AllMatch2) {
const std::string kText = "123123123";
const std::string kDelimiter = "123";
const std::vector<std::string> kExpected = {"", "", "", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
// std::vector<std::string> StringSplit(const std::string& s,
// const char* delim);
TEST(StringUtilsTest, StringSplit_CStringDelim_NullDelim) {
const std::string kText = "a";
const std::vector<std::string> kExpected = {};
EXPECT_EQ(StringSplit(kText, nullptr), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_EmptyText_EmptyDelim) {
const std::string kText;
constexpr char kDelimiter[] = "";
const std::vector<std::string> kExpected = {};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_EmptyText_NoMatch) {
const std::string kText = "";
constexpr char kDelimiter[] = "a";
const std::vector<std::string> kExpected = {};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_SingleCharText_EmptyDelim) {
const std::string kText = "a";
constexpr char kDelimiter[] = "";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_SingleCharText_NoMatch) {
const std::string kText = "a";
constexpr char kDelimiter[] = ",";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_SingleCharText_NoMatch2) {
const std::string kText = "a";
constexpr char kDelimiter[] = "bcd";
const std::vector<std::string> kExpected = {"a"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_SingleCharText_Match) {
const std::string kText = "a";
constexpr char kDelimiter[] = "a";
const std::vector<std::string> kExpected = {"", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_EmptyDelim) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "";
const std::vector<std::string> kExpected = {"a", "b", "c", "d",
"e", "f", "g"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_NoMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "edc";
const std::vector<std::string> kExpected = {kText};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleMidMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "d";
const std::vector<std::string> kExpected = {"abc", "efg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleMidMatch2) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "cde";
const std::vector<std::string> kExpected = {"ab", "fg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleFrontMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "a";
const std::vector<std::string> kExpected = {"", "bcdefg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleFrontMatch2) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "abc";
const std::vector<std::string> kExpected = {"", "defg"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleBackMatch) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "g";
const std::vector<std::string> kExpected = {"abcdef", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_SingleBackMatch2) {
const std::string kText = "abcdefg";
constexpr char kDelimiter[] = "efg";
const std::vector<std::string> kExpected = {"abcd", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_MultiInnerMatch) {
const std::string kText = "123.456.789";
constexpr char kDelimiter[] = ".";
const std::vector<std::string> kExpected = {"123", "456", "789"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_MultiInnerMatch2) {
const std::string kText = "123, 456, 789";
constexpr char kDelimiter[] = ", ";
const std::vector<std::string> kExpected = {"123", "456", "789"};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_MultiEndsMatch) {
const std::string kText = ".123.456..789.";
constexpr char kDelimiter[] = ".";
const std::vector<std::string> kExpected = {"", "123", "456", "", "789", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_MultiEndsMatch2) {
const std::string kText = ", 123, 456, 789, ";
constexpr char kDelimiter[] = ", ";
const std::vector<std::string> kExpected = {"", "123", "456", "789", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_AllMatch) {
const std::string kText = "aaaaa";
constexpr char kDelimiter[] = "a";
const std::vector<std::string> kExpected = {"", "", "", "", "", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
TEST(StringUtilsTest, StringSplit_CStringDelim_LongText_AllMatch2) {
const std::string kText = "123123123";
constexpr char kDelimiter[] = "123";
const std::vector<std::string> kExpected = {"", "", "", ""};
EXPECT_EQ(StringSplit(kText, kDelimiter), kExpected);
}
// std::string StringJoin(const std::vector<std::string>& tokens, char glue);
TEST(StringUtilsTest, StringJoin_CharGlue_NoTokens) {
const std::vector<std::string> kTokens = {};
constexpr char kGlue = ',';
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CharGlue_SingleEmptyToken) {
const std::vector<std::string> kTokens = {""};
constexpr char kGlue = ',';
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CharGlue_SingleToken) {
const std::vector<std::string> kTokens = {"a"};
constexpr char kGlue = ',';
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CharGlue_SingleToken2) {
const std::vector<std::string> kTokens = {"abcdefg"};
constexpr char kGlue = ',';
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CharGlue_ManyEmptyTokens) {
const std::vector<std::string> kTokens = {"", "", ""};
constexpr char kGlue = ',';
const std::string kExpected = ",,";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CharGlue_ManyTokens) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
constexpr char kGlue = ',';
const std::string kExpected = "a,bcd,,efg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
// std::string StringJoin(const std::vector<std::string>& tokens,
// const std::string& glue = "");
TEST(StringUtilsTest, StringJoin_StringGlue_NoTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {};
const std::string kGlue = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleEmptyToken_EmptyGlue) {
const std::vector<std::string> kTokens = {""};
const std::string kGlue = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken_EmptyGlue) {
const std::vector<std::string> kTokens = {"a"};
const std::string kGlue = "";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken2_EmptyGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
const std::string kGlue = "";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyEmptyTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
const std::string kGlue = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
const std::string kGlue = "";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_NoTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {};
const std::string kGlue = ",";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleEmptyToken_SingleCharGlue) {
const std::vector<std::string> kTokens = {""};
const std::string kGlue = ",";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken_SingleCharGlue) {
const std::vector<std::string> kTokens = {"a"};
const std::string kGlue = ",";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken2_SingleCharGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
const std::string kGlue = ",";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyEmptyTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
const std::string kGlue = ",";
const std::string kExpected = ",,";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
const std::string kGlue = ",";
const std::string kExpected = "a,bcd,,efg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_NoTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {};
const std::string kGlue = ", ";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleEmptyToken_MultiCharGlue) {
const std::vector<std::string> kTokens = {""};
const std::string kGlue = ", ";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken_MultiCharGlue) {
const std::vector<std::string> kTokens = {"a"};
const std::string kGlue = ", ";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_SingleToken2_MultiCharGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
const std::string kGlue = ", ";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyEmptyTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
const std::string kGlue = ", ";
const std::string kExpected = ", , ";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_StringGlue_ManyTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
const std::string kGlue = ", ";
const std::string kExpected = "a, bcd, , efg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
// std::string StringJoin(const std::vector<std::string>& tokens,
// const char* glue);
TEST(StringUtilsTest, StringJoin_CStringGlue_NullGlue) {
const std::vector<std::string> kTokens = {"123", "456"};
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, nullptr), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_NoTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {};
constexpr char kGlue[] = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleEmptyToken_EmptyGlue) {
const std::vector<std::string> kTokens = {""};
constexpr char kGlue[] = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken_EmptyGlue) {
const std::vector<std::string> kTokens = {"a"};
constexpr char kGlue[] = "";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken2_EmptyGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
constexpr char kGlue[] = "";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyEmptyTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
constexpr char kGlue[] = "";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyTokens_EmptyGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
constexpr char kGlue[] = "";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_NoTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {};
constexpr char kGlue[] = ",";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleEmptyToken_SingleCharGlue) {
const std::vector<std::string> kTokens = {""};
constexpr char kGlue[] = ",";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken_SingleCharGlue) {
const std::vector<std::string> kTokens = {"a"};
constexpr char kGlue[] = ",";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken2_SingleCharGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
constexpr char kGlue[] = ",";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyEmptyTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
constexpr char kGlue[] = ",";
const std::string kExpected = ",,";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyTokens_SingleCharGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
constexpr char kGlue[] = ",";
const std::string kExpected = "a,bcd,,efg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_NoTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {};
constexpr char kGlue[] = ", ";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleEmptyToken_MultiCharGlue) {
const std::vector<std::string> kTokens = {""};
constexpr char kGlue[] = ", ";
const std::string kExpected = "";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken_MultiCharGlue) {
const std::vector<std::string> kTokens = {"a"};
constexpr char kGlue[] = ", ";
const std::string kExpected = "a";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_SingleToken2_MultiCharGlue) {
const std::vector<std::string> kTokens = {"abcdefg"};
constexpr char kGlue[] = ", ";
const std::string kExpected = "abcdefg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyEmptyTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {"", "", ""};
constexpr char kGlue[] = ", ";
const std::string kExpected = ", , ";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
TEST(StringUtilsTest, StringJoin_CStringGlue_ManyTokens_MultiCharGlue) {
const std::vector<std::string> kTokens = {"a", "bcd", "", "efg"};
constexpr char kGlue[] = ", ";
const std::string kExpected = "a, bcd, , efg";
EXPECT_EQ(StringJoin(kTokens, kGlue), kExpected);
}
// size_t StringCount(const std::string& haystack, char needle);
TEST(StringUtilsTest, StringCount_CharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle = '.';
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_SingleCharHaystack_NoMatch) {
const std::string kHaystack = "a";
constexpr char kNeedle = '.';
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_SingleCharHaystack_Match) {
const std::string kHaystack = "a";
constexpr char kNeedle = 'a';
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_LongHaystack_NoMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = '.';
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_LongHaystack_SingleMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'd';
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_LongHaystack_ManyMatch) {
const std::string kHaystack = "123.456.789";
constexpr char kNeedle = '.';
constexpr size_t kExpected = 2;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CharNeedle_LongHaystack_AllMatch) {
const std::string kHaystack = "aaaaa";
constexpr char kNeedle = 'a';
constexpr size_t kExpected = 5;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
// size_t StringCount(const std::string& haystack, const std::string& needle);
TEST(StringUtilsTest, StringCount_StringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = "";
constexpr size_t kExpected = 1; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_StringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const std::string kNeedle = "";
constexpr size_t kExpected = 2; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_StringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "1234567";
const std::string kNeedle = "";
constexpr size_t kExpected = 8; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_StringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_SingleCharHaystack_NoMatch) {
const std::string kHaystack = "a";
const std::string kNeedle = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_SingleCharHaystack_Match) {
const std::string kHaystack = "a";
const std::string kNeedle = "a";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_LongHaystack_NoMatch) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_LongHaystack_SingleMatch) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "d";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_LongHaystack_ManyMatch) {
const std::string kHaystack = "123.456.789";
const std::string kNeedle = ".";
constexpr size_t kExpected = 2;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_SingleCharNeedle_LongHaystack_AllMatch) {
const std::string kHaystack = "aaaaa";
const std::string kNeedle = "a";
constexpr size_t kExpected = 5;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_StringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = "123";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_SingleCharHaystack_NoMatch) {
const std::string kHaystack = "a";
const std::string kNeedle = "abc";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_LongHaystack_NoMatch) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "123";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "abcdefg";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_LongHaystack_SingleMatch) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "cde";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_LongHaystack_ManyMatch) {
const std::string kHaystack = "123.123.123";
const std::string kNeedle = "123";
constexpr size_t kExpected = 3;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_StringNeedle_MultiCharNeedle_LongHaystack_AllMatch) {
const std::string kHaystack = "aaaaaa";
const std::string kNeedle = "aa";
constexpr size_t kExpected = 3;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
// size_t StringCount(const std::string& haystack, const char* needle);
TEST(StringUtilsTest, StringCount_CStringNeedle_NullNeedle) {
const std::string kHaystack = "";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, nullptr), kExpected);
}
TEST(StringUtilsTest, StringCount_CStringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = "";
constexpr size_t kExpected = 1; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = "";
constexpr size_t kExpected = 2; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CStringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "1234567";
constexpr char kNeedle[] = "";
constexpr size_t kExpected = 8; // Special case
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_SingleCharHaystack_NoMatch) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_SingleCharHaystack_Match) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = "a";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_LongHaystack_NoMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = ".";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "abcdefg";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_LongHaystack_SingleMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "d";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_LongHaystack_ManyMatch) {
const std::string kHaystack = "123.456.789";
constexpr char kNeedle[] = ".";
constexpr size_t kExpected = 2;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_SingleCharNeedle_LongHaystack_AllMatch) {
const std::string kHaystack = "aaaaa";
constexpr char kNeedle[] = "a";
constexpr size_t kExpected = 5;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest, StringCount_CStringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = "123";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_SingleCharHaystack_NoMatch) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = "abc";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_LongHaystack_NoMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "123";
constexpr size_t kExpected = 0;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_LongHaystack_SingleMatch) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "cde";
constexpr size_t kExpected = 1;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_LongHaystack_ManyMatch) {
const std::string kHaystack = "123.123.123";
constexpr char kNeedle[] = "123";
constexpr size_t kExpected = 3;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
TEST(StringUtilsTest,
StringCount_CStringNeedle_MultiCharNeedle_LongHaystack_AllMatch) {
const std::string kHaystack = "aaaaaa";
constexpr char kNeedle[] = "aa";
constexpr size_t kExpected = 3;
EXPECT_EQ(StringCount(kHaystack, kNeedle), kExpected);
}
// bool StringContains(const std::string& haystack, char needle);
TEST(StringUtilsTest, StringContains_CharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
constexpr char kNeedle = 'a';
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_LongHaystack_FrontFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'a';
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_LongHaystack_BackFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'g';
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CharNeedle_LongHaystack_MidFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'd';
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
// bool StringContains(const std::string& haystack, const std::string& needle);
TEST(StringUtilsTest, StringContains_StringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_StringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const std::string kNeedle = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_SingleCharHaystack_Equal) {
const std::string kHaystack = "a";
const std::string kNeedle = "a";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_LongHaystack_FrontFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "a";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_LongHaystack_BackFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "g";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_SingleCharNeedle_LongHaystack_MidFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "d";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = "123";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const std::string kNeedle = "abc";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "123";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
const std::string kNeedle = "abc";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_LongHaystack_FrontFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "abc";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_LongHaystack_BackFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "efg";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_StringNeedle_MultiCharNeedle_LongHaystack_MidFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "cde";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
// bool StringContains(const std::string& haystack, const char* needle);
TEST(StringUtilsTest, StringContains_CStringNeedle_NullNeedle) {
const std::string kHaystack = "abcdefg";
EXPECT_FALSE(StringContains(kHaystack, nullptr));
}
TEST(StringUtilsTest, StringContains_CStringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringContains_CStringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_SingleCharHaystack_Equal) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = "a";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = ".";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_LongHaystack_FrontFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "a";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_LongHaystack_BackFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "g";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_SingleCharNeedle_LongHaystack_MidFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "d";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle[] = "123";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
constexpr char kNeedle[] = "abc";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "123";
EXPECT_FALSE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
constexpr char kNeedle[] = "abc";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_LongHaystack_FrontFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "abc";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_LongHaystack_BackFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "efg";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringContains_CStringNeedle_MultiCharNeedle_LongHaystack_MidFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle[] = "cde";
EXPECT_TRUE(StringContains(kHaystack, kNeedle));
}
// bool StringStartsWith(const std::string& haystack, char needle);
TEST(StringUtilsTest, StringStartsWith_CharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_CharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_CharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
constexpr char kNeedle = 'a';
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_CharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CharNeedle_LongHaystack_NotFoundAtStart) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'b';
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_CharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'a';
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
// bool StringStartsWith(const std::string& haystack,
// const std::string& needle);
TEST(StringUtilsTest, StringStartsWith_StringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_StringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const std::string kNeedle = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
const std::string kNeedle = "a";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_LongHaystack_NotFoundAtStart) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "b";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_SingleCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "a";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = "123";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const std::string kNeedle = "abc";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "123";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_LongHaystack_NotFoundAtStart) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "bcd";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
const std::string kNeedle = "abc";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_StringNeedle_MultiCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "abc";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
// bool StringStartsWith(const std::string& haystack, const char* needle);
TEST(StringUtilsTest, StringStartsWith_CStringNeedle_NullNeedle) {
const std::string kHaystack = "abcdefg";
EXPECT_FALSE(StringStartsWith(kHaystack, nullptr));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringStartsWith_CStringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const char kNeedle[] = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
const char kNeedle[] = "a";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = ".";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_LongHaystack_NotFoundAtStart) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "b";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_SingleCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "a";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = "123";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const char kNeedle[] = "abc";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "123";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_LongHaystack_NotFoundAtStart) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "bcd";
EXPECT_FALSE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
const char kNeedle[] = "abc";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringStartsWith_CStringNeedle_MultiCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "abc";
EXPECT_TRUE(StringStartsWith(kHaystack, kNeedle));
}
// bool StringEndsWith(const std::string& haystack, char needle);
TEST(StringUtilsTest, StringEndsWith_CharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
constexpr char kNeedle = 'a';
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = '.';
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CharNeedle_LongHaystack_NotFoundAtEnd) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'f';
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
constexpr char kNeedle = 'g';
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
// bool StringEndsWith(const std::string& haystack,
// const std::string& needle);
TEST(StringUtilsTest, StringEndsWith_StringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_StringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const std::string kNeedle = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
const std::string kNeedle = "a";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_LongHaystack_NotFoundAtEnd) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "f";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_SingleCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "g";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const std::string kNeedle = "123";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "c";
const std::string kNeedle = "abc";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "123";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_LongHaystack_NotFoundAtEnd) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "def";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
const std::string kNeedle = "abc";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_StringNeedle_MultiCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const std::string kNeedle = "efg";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
// bool StringEndsWith(const std::string& haystack, const char* needle);
TEST(StringUtilsTest, StringEndsWith_CStringNeedle_NullNeedle) {
const std::string kHaystack = "abcdefg";
EXPECT_FALSE(StringEndsWith(kHaystack, nullptr));
}
TEST(StringUtilsTest, StringEndsWith_CStringNeedle_EmptyNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_EmptyNeedle_SingleCharHaystack) {
const std::string kHaystack = "a";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringEndsWith_CStringNeedle_EmptyNeedle_LongHaystack) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = ""; // Special case
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(
StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const char kNeedle[] = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_SingleCharHaystack_Found) {
const std::string kHaystack = "a";
const char kNeedle[] = "a";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = ".";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_LongHaystack_NotFoundAtEnd) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "f";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_SingleCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "g";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_EmptyHaystack) {
const std::string kHaystack = "";
const char kNeedle[] = "123";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_SingleCharHaystack_NotFound) {
const std::string kHaystack = "a";
const char kNeedle[] = "abc";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_LongHaystack_NotFound) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "123";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_LongHaystack_NotFoundAtEnd) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "def";
EXPECT_FALSE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_LongHaystack_Equal) {
const std::string kHaystack = "abc";
const char kNeedle[] = "abc";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
TEST(StringUtilsTest,
StringEndsWith_CStringNeedle_MultiCharNeedle_LongHaystack_Found) {
const std::string kHaystack = "abcdefg";
const char kNeedle[] = "efg";
EXPECT_TRUE(StringEndsWith(kHaystack, kNeedle));
}
// std::string StringTrim(const std::string& s);
TEST(StringUtilsTest, StringTrim_Empty) { EXPECT_EQ(StringTrim(""), ""); }
TEST(StringUtilsTest, StringTrim_NoWhitespace) {
EXPECT_EQ(StringTrim("abcdefg"), "abcdefg");
}
TEST(StringUtilsTest, StringTrim_LeadingWhitespace) {
EXPECT_EQ(StringTrim("\t\n \rabcdefg"), "abcdefg");
}
TEST(StringUtilsTest, StringTrim_TrailingWhitespace) {
EXPECT_EQ(StringTrim("abcdefg\t\n \r"), "abcdefg");
}
TEST(StringUtilsTest, StringTrim_LeadingAndTrailingWhitespace) {
EXPECT_EQ(StringTrim("\t\n \rabcdefg\t\n \r"), "abcdefg");
}
TEST(StringUtilsTest, StringTrime_AllWhitespace) {
EXPECT_EQ(StringTrim("\t\n \r"), "");
}
// bool StringVecContains(const std::vector<std::string>& haystack,
// const std::string& needle);
TEST(StringUtilsTest, StringVecContains_EmptyHaystack) {
const std::vector<std::string> kHaystack = {};
const std::string kNeedle = "123";
EXPECT_FALSE(StringVecContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringVecContains_NotFound) {
const std::vector<std::string> kHaystack = {"456", "789"};
const std::string kNeedle = "123";
EXPECT_FALSE(StringVecContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringVecContains_FoundAtFront) {
const std::vector<std::string> kHaystack = {"123", "456", "789"};
const std::string kNeedle = "123";
EXPECT_TRUE(StringVecContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringVecContains_FoundAtBack) {
const std::vector<std::string> kHaystack = {"123", "456", "789"};
const std::string kNeedle = "789";
EXPECT_TRUE(StringVecContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringVecContains_FoundAtMid) {
const std::vector<std::string> kHaystack = {"123", "456", "789"};
const std::string kNeedle = "456";
EXPECT_TRUE(StringVecContains(kHaystack, kNeedle));
}
TEST(StringUtilsTest, StringVecContains_FoundEmpty) {
const std::vector<std::string> kHaystack = {"123", "", "789"};
const std::string kNeedle = "";
EXPECT_TRUE(StringVecContains(kHaystack, kNeedle));
}
} // namespace wvutil