Commit 102e201dc7edbc8bdf018d03f3ae92037ce49793
Committed by
GitHub
1 parent
34bd8097
fix: a failing test case for toml string_vector processing (#491)
Showing
2 changed files
with
30 additions
and
1 deletions
include/CLI/StringTools.hpp
| ... | ... | @@ -310,7 +310,12 @@ inline std::vector<std::string> split_up(std::string str, char delimiter = '\0') |
| 310 | 310 | } |
| 311 | 311 | if(end != std::string::npos) { |
| 312 | 312 | output.push_back(str.substr(1, end - 1)); |
| 313 | - str = str.substr(end + 1); | |
| 313 | + if(end + 2 < str.size()) { | |
| 314 | + str = str.substr(end + 2); | |
| 315 | + } else { | |
| 316 | + str.clear(); | |
| 317 | + } | |
| 318 | + | |
| 314 | 319 | } else { |
| 315 | 320 | output.push_back(str.substr(1)); |
| 316 | 321 | str = ""; | ... | ... |
tests/ConfigFileTest.cpp
| ... | ... | @@ -770,6 +770,30 @@ TEST_F(TApp, TOMLVectordirect) { |
| 770 | 770 | EXPECT_EQ(std::vector<int>({1, 2, 3}), three); |
| 771 | 771 | } |
| 772 | 772 | |
| 773 | +TEST_F(TApp, TOMLStringVector) { | |
| 774 | + | |
| 775 | + TempFile tmptoml{"TestTomlTmp.toml"}; | |
| 776 | + | |
| 777 | + app.set_config("--config", tmptoml); | |
| 778 | + | |
| 779 | + { | |
| 780 | + std::ofstream out{tmptoml}; | |
| 781 | + out << "#this is a comment line\n"; | |
| 782 | + out << "[default]\n"; | |
| 783 | + out << "two=[\"2\",\"3\"]\n"; | |
| 784 | + out << "three=[\"1\",\"2\",\"3\"]\n"; | |
| 785 | + } | |
| 786 | + | |
| 787 | + std::vector<std::string> two, three; | |
| 788 | + app.add_option("--two", two)->required(); | |
| 789 | + app.add_option("--three", three)->required(); | |
| 790 | + | |
| 791 | + run(); | |
| 792 | + | |
| 793 | + EXPECT_EQ(std::vector<std::string>({"2", "3"}), two); | |
| 794 | + EXPECT_EQ(std::vector<std::string>({"1", "2", "3"}), three); | |
| 795 | +} | |
| 796 | + | |
| 773 | 797 | TEST_F(TApp, IniVectorCsep) { |
| 774 | 798 | |
| 775 | 799 | TempFile tmpini{"TestIniTmp.ini"}; | ... | ... |