From 37969cb5a1892a05abc84f087213c9903c2c654e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 12 Feb 2016 17:33:51 +0300 Subject: Fix code style. --- src/utils/paramerers.cpp | 125 --------------- src/utils/paramerers.h | 33 ---- src/utils/paramerers_unittest.cc | 327 --------------------------------------- src/utils/parameters.cpp | 120 ++++++++++++++ src/utils/parameters.h | 33 ++++ src/utils/parameters_unittest.cc | 327 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 480 insertions(+), 485 deletions(-) delete mode 100644 src/utils/paramerers.cpp delete mode 100644 src/utils/paramerers.h delete mode 100644 src/utils/paramerers_unittest.cc create mode 100644 src/utils/parameters.cpp create mode 100644 src/utils/parameters.h create mode 100644 src/utils/parameters_unittest.cc (limited to 'src/utils') diff --git a/src/utils/paramerers.cpp b/src/utils/paramerers.cpp deleted file mode 100644 index aa3ae350f..000000000 --- a/src/utils/paramerers.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "utils/paramerers.h" - -#include "logger.h" - -#include "utils/stringutils.h" - -#include - -#include "debug.h" - -static inline void addToken(StringVect &tokens, - std::string str) A_INLINE; -static inline void addToken(StringVect &tokens, - std::string str) -{ - std::string item = trim(str); - const size_t sz = item.size(); - if (sz > 1) - { - if (str[0] == '\"' && - str[sz - 1] == '\"' && - str[sz - 2] != '\\') - { - item = item.substr(1, sz - 2); - replaceAll(item, "\\\"", "\""); - tokens.push_back(item); - return; - } - } - replaceAll(item, "\\\"", "\""); - if (!item.empty()) - tokens.push_back(item); -} - -static inline size_t findNextQuote(const std::string &str, - const char quote, - const size_t pos) A_INLINE; -static inline size_t findNextQuote(const std::string &str, - const char quote, - const size_t pos) -{ - size_t idx = str.find(quote, pos); - while (idx > 0 && - idx != std::string::npos && - str[idx - 1] == '\\') - { - idx = str.find(quote, idx + 1); - } - return idx; -} - -static inline size_t findNextSplit(const std::string &str, - const std::string &separator, - const char quote) A_INLINE; -static inline size_t findNextSplit(const std::string &str, - const std::string &separator, - const char quote) -{ - size_t pos = 0; - size_t idx1 = 0; - while (true) - { - // search for next separator - idx1 = findAny(str, separator, pos); - // search for next open quote, skipping escaped quotes - size_t idx2 = findNextQuote(str, quote, pos); - if (idx2 == std::string::npos) // not quotes, return next separator - return idx1; - else if (idx1 == std::string::npos) // also no separators, return npos - return std::string::npos; - - if (idx2 < idx1) - { // first is quote and after separator: for example "test line", ... - idx2 = findNextQuote(str, quote, idx2 + 1); - if (idx2 == std::string::npos) - return std::string::npos; // no close quote, here error - // searching next - pos = idx2 + 1; - } - else - { - return idx1; - } - } - return idx1; -} - -bool splitParameters(StringVect &tokens, - std::string text, - const std::string &separator, - const char quote) -{ - size_t idx = findNextSplit(text, separator, quote); - - while (idx != std::string::npos) - { - std::string item = text.substr(0, idx); - addToken(tokens, item); - text = text.substr(idx + 1); - idx = findNextSplit(text, separator, quote); - } - - addToken(tokens, text); - return true; -} diff --git a/src/utils/paramerers.h b/src/utils/paramerers.h deleted file mode 100644 index d93f7a207..000000000 --- a/src/utils/paramerers.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef UTILS_PARAMETERS_H -#define UTILS_PARAMETERS_H - -#include "utils/stringvector.h" - -#include "localconsts.h" - -bool splitParameters(StringVect &tokens, - std::string text, - const std::string &separator, - const char quote); - -#endif // UTILS_PARAMETERS_H diff --git a/src/utils/paramerers_unittest.cc b/src/utils/paramerers_unittest.cc deleted file mode 100644 index fbccef0e1..000000000 --- a/src/utils/paramerers_unittest.cc +++ /dev/null @@ -1,327 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2012-2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "catch.hpp" - -#include "utils/paramerers.h" - -#include "debug.h" - -TEST_CASE("parameters basic 1") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "", ",", '\"') == true); - REQUIRE(pars.size() == 0); -} - -TEST_CASE("parameters basic 2") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "one,two, tree", ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "one"); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters basic 3") -{ - StringVect pars; - REQUIRE(splitParameters(pars, ", ,,,", ",", '\"') == true); - REQUIRE(pars.size() == 0); -} - -TEST_CASE("parameters basic 4") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "one,,two, tree", ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "one"); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters escape 1") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\\\"", ",", '\"') == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters escape 2") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\\\", test", ",", '\"') == true); - REQUIRE(pars.size() == 2); - REQUIRE(pars[0] == "\""); - REQUIRE(pars[1] == "test"); -} - -TEST_CASE("parameters escape 3") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "test,\\\"", ",", '\"') == true); - REQUIRE(pars.size() == 2); - REQUIRE(pars[0] == "test"); - REQUIRE(pars[1] == "\""); -} - -TEST_CASE("parameters quote 1") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one\",,two, tree", ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "one"); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 2") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\",,two, tree", ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == ""); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 3") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one test\",,two, tree", ",", '\"') == - true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "one test"); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 4") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\\\"one test\\\"\",,two, tree", ",", '\"') - == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "\"one test\""); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 5") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\\\"one \\\"test\\\"\",,two, tree", - ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "\"one \"test\""); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 6") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one, test\",,two, tree", ",", '\"') - == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "one, test"); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 7") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\\\"one, test\\\"\",,two, tree", - ",", '\"') == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "\"one, test\""); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 8") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\\\"\",,two, tree", ",", '\"') - == true); - REQUIRE(pars.size() == 3); - REQUIRE(pars[0] == "\""); - REQUIRE(pars[1] == "two"); - REQUIRE(pars[2] == "tree"); -} - -TEST_CASE("parameters quote 9") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"\\\",,two, tree", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\"\",,two, tree"); -} - -TEST_CASE("parameters quote 10") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters quote 11") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\\\"", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters quote 12") -{ - StringVect pars; - REQUIRE(splitParameters(pars, ",\"", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters quote 13") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\",", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\","); -} - -TEST_CASE("parameters quote 14") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\\\",", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters quote 15") -{ - StringVect pars; - REQUIRE(splitParameters(pars, ",\\\"", ",", '\"') - == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters quote 16") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one test\"", ",", '\"') == - true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "one test"); -} - -TEST_CASE("parameters quote 17") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one, test\"", ",", '\"') == - true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "one, test"); -} - -TEST_CASE("parameters quote 18") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one\\\" test\"", ",", '\"') == - true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "one\" test"); -} - -TEST_CASE("parameters quote 19") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one\\\" ,test\"", ",", '\"') == - true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "one\" ,test"); -} - -TEST_CASE("parameters quote 20") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"one\\\" test,\"", ",", '\"') == - true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "one\" test,"); -} - -TEST_CASE("parameters complex 1") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"test\" \"line\"", ",", '\"') == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "test\" \"line"); -} - -TEST_CASE("parameters complex 2") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"test\", \"line\"", ",", '\"') == true); - REQUIRE(pars.size() == 2); - REQUIRE(pars[0] == "test"); - REQUIRE(pars[1] == "line"); -} - -TEST_CASE("parameters complex 3") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"test,\" \"line\"", ",", '\"') == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "test,\" \"line"); -} - -TEST_CASE("parameters broken 1") -{ - StringVect pars; - REQUIRE(splitParameters(pars, "\"", ",", '\"') == true); - REQUIRE(pars.size() == 1); - REQUIRE(pars[0] == "\""); -} - -TEST_CASE("parameters broken 2") -{ - StringVect pars; - REQUIRE(splitParameters(pars, ",", ",", '\"') == true); - REQUIRE(pars.size() == 0); -} - -TEST_CASE("parameters broken 3") -{ - StringVect pars; - REQUIRE(splitParameters(pars, - ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",", '\"') == true); - REQUIRE(pars.size() == 0); -} diff --git a/src/utils/parameters.cpp b/src/utils/parameters.cpp new file mode 100644 index 000000000..467c31553 --- /dev/null +++ b/src/utils/parameters.cpp @@ -0,0 +1,120 @@ +/* + * The ManaPlus Client + * Copyright (C) 2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "utils/parameters.h" + +#include "utils/stringutils.h" + +#include "debug.h" + +static inline void addToken(StringVect &tokens, + std::string str) A_INLINE; +static inline void addToken(StringVect &tokens, + std::string str) +{ + std::string item = trim(str); + const size_t sz = item.size(); + if (sz > 1) + { + if (str[0] == '\"' && + str[sz - 1] == '\"' && + str[sz - 2] != '\\') + { + item = item.substr(1, sz - 2); + replaceAll(item, "\\\"", "\""); + tokens.push_back(item); + return; + } + } + replaceAll(item, "\\\"", "\""); + if (!item.empty()) + tokens.push_back(item); +} + +static inline size_t findNextQuote(const std::string &str, + const char quote, + const size_t pos) A_INLINE; +static inline size_t findNextQuote(const std::string &str, + const char quote, + const size_t pos) +{ + size_t idx = str.find(quote, pos); + while (idx > 0 && + idx != std::string::npos && + str[idx - 1] == '\\') + { + idx = str.find(quote, idx + 1); + } + return idx; +} + +static inline size_t findNextSplit(const std::string &str, + const std::string &separator, + const char quote) A_INLINE; +static inline size_t findNextSplit(const std::string &str, + const std::string &separator, + const char quote) +{ + size_t pos = 0; + size_t idx1 = 0; + while (true) + { + // search for next separator + idx1 = findAny(str, separator, pos); + // search for next open quote, skipping escaped quotes + size_t idx2 = findNextQuote(str, quote, pos); + if (idx2 == std::string::npos) // not quotes, return next separator + return idx1; + else if (idx1 == std::string::npos) // also no separators, return npos + return std::string::npos; + + if (idx2 < idx1) + { // first is quote and after separator: for example "test line", ... + idx2 = findNextQuote(str, quote, idx2 + 1); + if (idx2 == std::string::npos) + return std::string::npos; // no close quote, here error + // set position for next separator or quote + pos = idx2 + 1; + } + else + { + return idx1; + } + } +} + +bool splitParameters(StringVect &tokens, + std::string text, + const std::string &separator, + const char quote) +{ + size_t idx = findNextSplit(text, separator, quote); + + while (idx != std::string::npos) + { + std::string item = text.substr(0, idx); + addToken(tokens, item); + text = text.substr(idx + 1); + idx = findNextSplit(text, separator, quote); + } + + addToken(tokens, text); + return true; +} diff --git a/src/utils/parameters.h b/src/utils/parameters.h new file mode 100644 index 000000000..d93f7a207 --- /dev/null +++ b/src/utils/parameters.h @@ -0,0 +1,33 @@ +/* + * The ManaPlus Client + * Copyright (C) 2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UTILS_PARAMETERS_H +#define UTILS_PARAMETERS_H + +#include "utils/stringvector.h" + +#include "localconsts.h" + +bool splitParameters(StringVect &tokens, + std::string text, + const std::string &separator, + const char quote); + +#endif // UTILS_PARAMETERS_H diff --git a/src/utils/parameters_unittest.cc b/src/utils/parameters_unittest.cc new file mode 100644 index 000000000..f1c4557ee --- /dev/null +++ b/src/utils/parameters_unittest.cc @@ -0,0 +1,327 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "catch.hpp" + +#include "utils/parameters.h" + +#include "debug.h" + +TEST_CASE("parameters basic 1") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "", ",", '\"') == true); + REQUIRE(pars.size() == 0); +} + +TEST_CASE("parameters basic 2") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "one,two, tree", ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "one"); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters basic 3") +{ + StringVect pars; + REQUIRE(splitParameters(pars, ", ,,,", ",", '\"') == true); + REQUIRE(pars.size() == 0); +} + +TEST_CASE("parameters basic 4") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "one,,two, tree", ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "one"); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters escape 1") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\\\"", ",", '\"') == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters escape 2") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\\\", test", ",", '\"') == true); + REQUIRE(pars.size() == 2); + REQUIRE(pars[0] == "\""); + REQUIRE(pars[1] == "test"); +} + +TEST_CASE("parameters escape 3") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "test,\\\"", ",", '\"') == true); + REQUIRE(pars.size() == 2); + REQUIRE(pars[0] == "test"); + REQUIRE(pars[1] == "\""); +} + +TEST_CASE("parameters quote 1") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one\",,two, tree", ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "one"); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 2") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\",,two, tree", ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == ""); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 3") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one test\",,two, tree", ",", '\"') == + true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "one test"); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 4") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\\\"one test\\\"\",,two, tree", ",", '\"') + == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "\"one test\""); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 5") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\\\"one \\\"test\\\"\",,two, tree", + ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "\"one \"test\""); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 6") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one, test\",,two, tree", ",", '\"') + == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "one, test"); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 7") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\\\"one, test\\\"\",,two, tree", + ",", '\"') == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "\"one, test\""); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 8") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\\\"\",,two, tree", ",", '\"') + == true); + REQUIRE(pars.size() == 3); + REQUIRE(pars[0] == "\""); + REQUIRE(pars[1] == "two"); + REQUIRE(pars[2] == "tree"); +} + +TEST_CASE("parameters quote 9") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"\\\",,two, tree", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\"\",,two, tree"); +} + +TEST_CASE("parameters quote 10") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters quote 11") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\\\"", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters quote 12") +{ + StringVect pars; + REQUIRE(splitParameters(pars, ",\"", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters quote 13") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\",", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\","); +} + +TEST_CASE("parameters quote 14") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\\\",", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters quote 15") +{ + StringVect pars; + REQUIRE(splitParameters(pars, ",\\\"", ",", '\"') + == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters quote 16") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one test\"", ",", '\"') == + true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "one test"); +} + +TEST_CASE("parameters quote 17") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one, test\"", ",", '\"') == + true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "one, test"); +} + +TEST_CASE("parameters quote 18") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one\\\" test\"", ",", '\"') == + true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "one\" test"); +} + +TEST_CASE("parameters quote 19") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one\\\" ,test\"", ",", '\"') == + true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "one\" ,test"); +} + +TEST_CASE("parameters quote 20") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"one\\\" test,\"", ",", '\"') == + true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "one\" test,"); +} + +TEST_CASE("parameters complex 1") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"test\" \"line\"", ",", '\"') == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "test\" \"line"); +} + +TEST_CASE("parameters complex 2") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"test\", \"line\"", ",", '\"') == true); + REQUIRE(pars.size() == 2); + REQUIRE(pars[0] == "test"); + REQUIRE(pars[1] == "line"); +} + +TEST_CASE("parameters complex 3") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"test,\" \"line\"", ",", '\"') == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "test,\" \"line"); +} + +TEST_CASE("parameters broken 1") +{ + StringVect pars; + REQUIRE(splitParameters(pars, "\"", ",", '\"') == true); + REQUIRE(pars.size() == 1); + REQUIRE(pars[0] == "\""); +} + +TEST_CASE("parameters broken 2") +{ + StringVect pars; + REQUIRE(splitParameters(pars, ",", ",", '\"') == true); + REQUIRE(pars.size() == 0); +} + +TEST_CASE("parameters broken 3") +{ + StringVect pars; + REQUIRE(splitParameters(pars, + ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",", '\"') == true); + REQUIRE(pars.size() == 0); +} -- cgit v1.2.3-70-g09d2