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/CMakeLists.txt | 4 +- src/Makefile.am | 6 +- src/actormanager.cpp | 5 +- src/gui/fonts/textchunksmall.cpp | 3 +- src/gui/fonts/textchunksmall.h | 3 +- src/gui/windows/inventorywindow.cpp | 7 +- src/net/serverinfo.h | 3 +- src/net/tmwa/buyingstorehandler.cpp | 3 +- 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 ++++++++++++++++++++++++++++++++++++ src/vector.h | 3 +- 15 files changed, 505 insertions(+), 497 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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fe622c0c0..22d0cbdbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -790,8 +790,8 @@ SET(SRCS utils/langs.cpp utils/langs.h utils/mathutils.h - utils/paramerers.cpp - utils/paramerers.h + utils/parameters.cpp + utils/parameters.h utils/paths.cpp utils/paths.h utils/perfomance.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 756e695a8..a3a47de58 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -441,8 +441,8 @@ SRC += events/actionevent.h \ utils/mathutils.h \ utils/mkdir.cpp \ utils/mkdir.h \ - utils/paramerers.cpp \ - utils/paramerers.h \ + utils/parameters.cpp \ + utils/parameters.h \ utils/paths.cpp \ utils/paths.h \ utils/perfomance.cpp \ @@ -1732,7 +1732,7 @@ manaplustests_SOURCES = ${manaplus_SOURCES} \ utils/mathutils_unittest.cc \ utils/files_unittest.cc \ utils/stringutils_unittest.cc \ - utils/paramerers_unittest.cc \ + utils/parameters_unittest.cc \ resources/mstack_unittest.cc \ utils/translation/poparser_unittest.cc \ resources/sprite/animatedsprite_unittest.cc \ diff --git a/src/actormanager.cpp b/src/actormanager.cpp index d851864a3..7755edbc3 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -1610,8 +1610,11 @@ void ActorManager::getMobNames(StringVect &names) const } const Being *const being = static_cast(*it); - if (being->getType() == ActorType::Monster && !being->getName().empty()) + if (being->getType() == ActorType::Monster && + !being->getName().empty()) + { names.push_back(being->getName()); + } } } diff --git a/src/gui/fonts/textchunksmall.cpp b/src/gui/fonts/textchunksmall.cpp index f8c84fdb8..a8012522e 100644 --- a/src/gui/fonts/textchunksmall.cpp +++ b/src/gui/fonts/textchunksmall.cpp @@ -40,11 +40,12 @@ TextChunkSmall::TextChunkSmall(const TextChunkSmall &old) : { } -void TextChunkSmall::operator=(const TextChunkSmall &chunk) +TextChunkSmall &TextChunkSmall::operator=(const TextChunkSmall &chunk) { text = chunk.text; color = chunk.color; color2 = chunk.color2; + return *this; } bool TextChunkSmall::operator==(const TextChunkSmall &chunk) const diff --git a/src/gui/fonts/textchunksmall.h b/src/gui/fonts/textchunksmall.h index 75c4e6dd7..64a265da4 100644 --- a/src/gui/fonts/textchunksmall.h +++ b/src/gui/fonts/textchunksmall.h @@ -38,7 +38,8 @@ class TextChunkSmall final bool operator==(const TextChunkSmall &restrict chunk) const restrict2; bool operator<(const TextChunkSmall &restrict chunk) const restrict2; - void operator=(const TextChunkSmall &restrict chunk) restrict2; + TextChunkSmall &operator=(const TextChunkSmall &restrict chunk) + restrict2; std::string text; Color color; Color color2; diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index 5c6ae3faa..881e10c1a 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -588,7 +588,12 @@ void InventoryWindow::mouseClicked(MouseEvent &event) const int my = event.getY() + getY(); if (popupMenu) - popupMenu->showPopup(this, mx, my, item, mInventory->getType()); + { + popupMenu->showPopup(this, + mx, my, + item, + mInventory->getType()); + } } } else diff --git a/src/net/serverinfo.h b/src/net/serverinfo.h index 7df9e0066..efbdf015a 100644 --- a/src/net/serverinfo.h +++ b/src/net/serverinfo.h @@ -89,7 +89,7 @@ class ServerInfo final version.second = info.version.second; } - void operator=(const ServerInfo &info) + ServerInfo &operator=(const ServerInfo &info) { type = info.type; name = info.name; @@ -105,6 +105,7 @@ class ServerInfo final persistentIp = info.persistentIp; version.first = info.version.first; version.second = info.version.second; + return *this; } bool isValid() const A_WARN_UNUSED diff --git a/src/net/tmwa/buyingstorehandler.cpp b/src/net/tmwa/buyingstorehandler.cpp index 882206761..c31bf5989 100644 --- a/src/net/tmwa/buyingstorehandler.cpp +++ b/src/net/tmwa/buyingstorehandler.cpp @@ -35,7 +35,8 @@ BuyingStoreHandler::BuyingStoreHandler() void BuyingStoreHandler::create(const std::string &name A_UNUSED, const int maxMoney A_UNUSED, const bool flag A_UNUSED, - const std::vector &items A_UNUSED) const + const std::vector &items A_UNUSED) + const { } 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); +} diff --git a/src/vector.h b/src/vector.h index 9f3ca47c0..d24e91e9b 100644 --- a/src/vector.h +++ b/src/vector.h @@ -72,11 +72,12 @@ class Vector final return x == 0.0F && y == 0.0F && z == 0.0F; } - void operator=(const Vector &v) + Vector &operator=(const Vector &v) { x = v.x; y = v.y; z = v.z; + return *this; } /** -- cgit v1.2.3-60-g2f50