From c82b107b6b9e80b9b0d7b08f360d0b54bd6900c5 Mon Sep 17 00:00:00 2001 From: Treeston Date: Mon, 31 Aug 2020 16:56:56 +0200 Subject: UnitTests: Add a first set of item hyperlink tests (cherry picked from commit 5394b2ef0f1c7b48e8886257b93698358abb575f) --- src/server/game/Chat/Hyperlinks.cpp | 14 +++++++++----- src/server/game/Chat/Hyperlinks.h | 2 +- src/server/game/Globals/ObjectMgr.h | 14 +++++++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index 387e723ce11..448ad0a4ea7 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -372,7 +372,7 @@ struct LinkValidator { for (LocaleConstant i = LOCALE_enUS; i < TOTAL_LOCALES; i = LocaleConstant(i + 1)) { - std::string name = itemTemplate->GetName(i); + std::string_view name = itemTemplate->GetName(i); if (name.empty()) continue; if (suffixStrings) @@ -449,16 +449,20 @@ struct LinkValidator { static bool IsTextValid(QuestLinkData const& data, std::string_view text) { + if (text == data.Quest->GetLogTitle()) + return true; + QuestTemplateLocale const* locale = sObjectMgr->GetQuestLocale(data.Quest->GetQuestId()); if (!locale) - return data.Quest->GetLogTitle().c_str() == text; + return false; for (uint8 i = 0; i < TOTAL_LOCALES; ++i) { - std::string const& name = (i == DEFAULT_LOCALE) ? data.Quest->GetLogTitle() : locale->LogTitle[i]; - if (name.empty()) + if (i == DEFAULT_LOCALE) continue; - if (text == name) + + std::string_view name = ObjectMgr::GetLocaleString(locale->LogTitle, i); + if (!name.empty() && (text == name)) return true; } diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index bbbe5eb9a7a..963262018d5 100644 --- a/src/server/game/Chat/Hyperlinks.h +++ b/src/server/game/Chat/Hyperlinks.h @@ -210,7 +210,7 @@ namespace Trinity::Hyperlinks |* - this method SHOULD be constexpr *| |* - returns identifier string for the link ("creature", "creature_entry", "item") *| |* - MUST expose static ::StoreTo method, (storage&, std::string_view) *| - |* - assign value_type& based on content of std::string_view *| + |* - assign storage& based on content of std::string_view *| |* - return value indicates success/failure *| |* - for integral/string types this can be achieved by extending base_tag *| \****************************************************************************************/ diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 65956b83e87..e157a84c539 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1059,6 +1059,7 @@ class PlayerDumpReader; class TC_GAME_API ObjectMgr { friend class PlayerDumpReader; + friend class UnitTestDataLoader; private: ObjectMgr(); @@ -1684,10 +1685,17 @@ class TC_GAME_API ObjectMgr GraveyardContainer GraveyardStore; static void AddLocaleString(std::string&& value, LocaleConstant localeConstant, std::vector& data); - static inline void GetLocaleString(std::vector const& data, LocaleConstant localeConstant, std::string& value) + static std::string_view GetLocaleString(std::vector const& data, size_t locale) { - if (data.size() > size_t(localeConstant) && !data[localeConstant].empty()) - value = data[localeConstant]; + if (locale < data.size()) + return data[locale]; + else + return {}; + } + static void GetLocaleString(std::vector const& data, LocaleConstant localeConstant, std::string& value) + { + if (std::string_view str = GetLocaleString(data, static_cast(localeConstant)); !str.empty()) + value.assign(str); } CharacterConversionMap FactionChangeAchievements; -- cgit v1.2.3