| 853 | |
| 854 | template <class StringType> |
| 855 | void TestJoinVec() { |
| 856 | struct TestCase { |
| 857 | std::string name; |
| 858 | |
| 859 | std::vector<StringType> vec; |
| 860 | std::string_view sep; |
| 861 | |
| 862 | std::string want_result; |
| 863 | }; |
| 864 | std::vector<TestCase> test_cases; |
| 865 | |
| 866 | test_cases.emplace_back( |
| 867 | TestCase{ |
| 868 | .name = "case 1", |
| 869 | .vec = {"v1", "v2", "v3", "v4"}, |
| 870 | .sep = "|", |
| 871 | .want_result = "v1|v2|v3|v4"}); |
| 872 | test_cases.emplace_back( |
| 873 | TestCase{ |
| 874 | .name = "case 2", |
| 875 | .vec = {"v1", "v2", "v3", "v4"}, |
| 876 | .sep = "", |
| 877 | .want_result = "v1v2v3v4"}); |
| 878 | test_cases.emplace_back( |
| 879 | TestCase{ |
| 880 | .name = "case 3", |
| 881 | .vec = {"", "", "", "v4"}, |
| 882 | .sep = "", |
| 883 | .want_result = "v4"}); |
| 884 | test_cases.emplace_back( |
| 885 | TestCase{ |
| 886 | .name = "case 4", |
| 887 | .vec = {"", "", "", ""}, |
| 888 | .sep = "", |
| 889 | .want_result = ""}); |
| 890 | test_cases.emplace_back( |
| 891 | TestCase{ |
| 892 | .name = "case 5", |
| 893 | .vec = {"", "", "", "v4"}, |
| 894 | .sep = ",", |
| 895 | .want_result = ",,,v4"}); |
| 896 | test_cases.emplace_back( |
| 897 | TestCase{ |
| 898 | .name = "case 6", |
| 899 | .vec = {"", "v2", "", "v4"}, |
| 900 | .sep = ",", |
| 901 | .want_result = ",v2,,v4"}); |
| 902 | |
| 903 | for (size_t ii = 0; ii < test_cases.size(); ++ii) { |
| 904 | TestCase& cur_test_case = test_cases[ii]; |
| 905 | auto ret = JoinVec(cur_test_case.vec, cur_test_case.sep); |
| 906 | EXPECT_STREQ(ret.c_str(), cur_test_case.want_result.c_str()) |
| 907 | << "Test " << cur_test_case.name << " failed, index " << ii; |
| 908 | } |
| 909 | } |
| 910 | |
| 911 | TEST(STRING_UTIL_TEST, JoinVec_test) { |
| 912 | TestJoinVec<std::string>(); |