From 4ffd784d87556ae5bca54ff4a3c4c7833780fafc Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sun, 12 Feb 2017 10:08:37 +0000 Subject: [PATCH] Remove Language and LanguageCode structures Use ISO language codes directly instead, which has the advantage that new languages can be used in metadata without having up update the API to support them. Closes #5. --- CMakeLists.txt | 4 - CONTRIBUTING.md | 8 -- docs/api/miscellaneous.rst | 5 + docs/api/reference.rst | 5 - .../data_structures/localised_content.rst | 10 +- include/loot/database_interface.h | 1 - include/loot/enum/language_code.h | 56 --------- include/loot/language.h | 92 --------------- include/loot/metadata/message.h | 5 +- include/loot/metadata/message_content.h | 19 +++- include/loot/metadata/plugin_cleaning_data.h | 4 +- include/loot/metadata/plugin_metadata.h | 2 +- include/loot/struct/simple_message.h | 2 +- include/loot/yaml/message.h | 4 +- include/loot/yaml/message_content.h | 6 +- include/loot/yaml/plugin_cleaning_data.h | 4 +- src/api/helpers/language.cpp | 107 ------------------ src/api/metadata/message.cpp | 11 +- src/api/metadata/message_content.cpp | 14 +-- src/api/metadata/plugin_cleaning_data.cpp | 2 +- src/api/metadata/plugin_metadata.cpp | 2 +- .../api/internals/helpers/language_test.h | 93 --------------- src/tests/api/internals/main.cpp | 1 - .../metadata/condition_evaluator_test.h | 8 +- .../internals/metadata/message_content_test.h | 36 +++--- .../api/internals/metadata/message_test.h | 78 +++++++------ .../metadata/plugin_cleaning_data_test.h | 24 ++-- .../internals/metadata/plugin_metadata_test.h | 12 +- src/tests/common_game_test_fixture.h | 5 + 29 files changed, 134 insertions(+), 486 deletions(-) delete mode 100644 include/loot/enum/language_code.h delete mode 100644 include/loot/language.h delete mode 100644 src/api/helpers/language.cpp delete mode 100644 src/tests/api/internals/helpers/language_test.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e2824e1d..4c89bba9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,6 @@ set (LOOT_API_SRC "${CMAKE_BINARY_DIR}/generated/loot_version.cpp" "${CMAKE_SOURCE_DIR}/src/api/plugin/plugin_sorter.cpp" "${CMAKE_SOURCE_DIR}/src/api/helpers/crc.cpp" "${CMAKE_SOURCE_DIR}/src/api/helpers/git_helper.cpp" - "${CMAKE_SOURCE_DIR}/src/api/helpers/language.cpp" "${CMAKE_SOURCE_DIR}/src/api/helpers/version.cpp" "${CMAKE_SOURCE_DIR}/src/api/resource.rc") @@ -164,12 +163,10 @@ set (LOOT_API_HEADERS "${CMAKE_SOURCE_DIR}/include/loot/api.h" "${CMAKE_SOURCE_DIR}/include/loot/exception/file_access_error.h" "${CMAKE_SOURCE_DIR}/include/loot/exception/git_state_error.h" "${CMAKE_SOURCE_DIR}/include/loot/enum/game_type.h" - "${CMAKE_SOURCE_DIR}/include/loot/enum/language_code.h" "${CMAKE_SOURCE_DIR}/include/loot/enum/log_verbosity.h" "${CMAKE_SOURCE_DIR}/include/loot/enum/message_type.h" "${CMAKE_SOURCE_DIR}/include/loot/enum/plugin_cleanliness.h" "${CMAKE_SOURCE_DIR}/include/loot/game_interface.h" - "${CMAKE_SOURCE_DIR}/include/loot/language.h" "${CMAKE_SOURCE_DIR}/include/loot/loot_version.h" "${CMAKE_SOURCE_DIR}/include/loot/metadata/conditional_metadata.h" "${CMAKE_SOURCE_DIR}/include/loot/metadata/file.h" @@ -213,7 +210,6 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/api/internals/game/game_t "${CMAKE_SOURCE_DIR}/src/tests/api/internals/game/load_order_handler_test.h" "${CMAKE_SOURCE_DIR}/src/tests/api/internals/helpers/git_helper_test.h" "${CMAKE_SOURCE_DIR}/src/tests/api/internals/helpers/crc_test.h" - "${CMAKE_SOURCE_DIR}/src/tests/api/internals/helpers/language_test.h" "${CMAKE_SOURCE_DIR}/src/tests/api/internals/helpers/version_test.h" "${CMAKE_SOURCE_DIR}/src/tests/api/internals/helpers/yaml_set_helpers_test.h" "${CMAKE_SOURCE_DIR}/src/tests/api/internals/metadata/condition_evaluator_test.h" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ed52a543..81051413 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,14 +19,6 @@ Surprise pull requests aren't recommended because everything you touched may hav When you do make a pull request, please do so from a branch which doesn't have the same name as they branch you're requesting your changes to be merged into. It's a lot easier to keep track of what pull request branches do when they're named something like `you:specific-cool-feature` rather than `you:master`. -### Adding Support For A New Language - -If you're adding support for a new language, the LOOT API's source code must be updated to recognise it. The files and functions which must be updated are given below. - -* In [language_code.h](include/loot/enum/language_code.h), append a value for the language to the `LanguageCode` enum. -* In [language.cpp](src/api/helpers/language.cpp), define the value for the constant you added, and update `Language::Language(LanguageCode code)` and `Language::codes({...})` to include lines for your language. -* In [localised_content.rst](docs/metadata/data_structures/localised_content.rst), add a row for your language to the Language Codes table. - ## Code Style LOOT's JavaScript uses a slightly tweaked version of the Airbnb style, and can be automatically linted by ESLint, so isn't covered here. diff --git a/docs/api/miscellaneous.rst b/docs/api/miscellaneous.rst index 4ae71c9d..34e4b315 100644 --- a/docs/api/miscellaneous.rst +++ b/docs/api/miscellaneous.rst @@ -12,6 +12,11 @@ String Encoding * File paths are case-sensitive if and only if the underlying file system is case-sensitive. +Language Codes +============== + +All language strings in the API are codes of the form ``ll`` or ``ll_CC``, where ``ll`` is an ISO 639-1 language code and ``CC`` is an ISO 3166 country code. For example, the default language for metadata message content is English, identified by the code ``en``, and Brazilian Portuguese is ``pt_BR``. + Errors ====== diff --git a/docs/api/reference.rst b/docs/api/reference.rst index f83c95e9..a032e998 100644 --- a/docs/api/reference.rst +++ b/docs/api/reference.rst @@ -9,8 +9,6 @@ Enumerations .. doxygenenum:: loot::GameType -.. doxygenenum:: loot::LanguageCode - .. doxygenenum:: loot::LogVerbosity .. doxygenenum:: loot::MessageType @@ -58,9 +56,6 @@ Classes .. doxygenclass:: loot::File :members: -.. doxygenclass:: loot::Language - :members: - .. doxygenclass:: loot::Location :members: diff --git a/docs/metadata/data_structures/localised_content.rst b/docs/metadata/data_structures/localised_content.rst index 444eeb7e..253a2c8f 100644 --- a/docs/metadata/data_structures/localised_content.rst +++ b/docs/metadata/data_structures/localised_content.rst @@ -9,11 +9,11 @@ The localised content data structure is a key-value string map. .. describe:: lang - **Required.** The language that ``text`` is written in, given as a POSIX language code. LOOT supports the following languages and language codes: + **Required.** The language that ``text`` is written in, given as a code of the form ``ll`` or ``ll_CC``, where ``ll`` is an ISO 639-1 language code and ``CC`` is an ISO 3166 country code. For example, - ==================== ========== - Language POSIX Code - ==================== ========== + ==================== ===== + Language Code + ==================== ===== Brazilian Portuguese pt_BR Chinese zh_CN Danish da @@ -26,4 +26,4 @@ The localised content data structure is a key-value string map. Russian ru Spanish es Swedish sv - ==================== ========== + ==================== ===== diff --git a/include/loot/database_interface.h b/include/loot/database_interface.h index f88190a0..3843f17c 100644 --- a/include/loot/database_interface.h +++ b/include/loot/database_interface.h @@ -27,7 +27,6 @@ #include #include -#include "loot/enum/language_code.h" #include "loot/enum/plugin_cleanliness.h" #include "loot/metadata/message.h" #include "loot/metadata/plugin_metadata.h" diff --git a/include/loot/enum/language_code.h b/include/loot/enum/language_code.h deleted file mode 100644 index a99e42ee..00000000 --- a/include/loot/enum/language_code.h +++ /dev/null @@ -1,56 +0,0 @@ -/* LOOT - -A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and -Fallout: New Vegas. - -Copyright (C) 2012-2016 WrinklyNinja - -This file is part of LOOT. - -LOOT 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 3 of -the License, or (at your option) any later version. - -LOOT 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 LOOT. If not, see -. -*/ - -#ifndef LOOT_LANGUAGE_CODE -#define LOOT_LANGUAGE_CODE - -/** - * The namespace used by the LOOT API. - */ -namespace loot { -/** - * @brief Codes used to specify the preferred language for messages. - * @details If a message is not available in the preferred language, its English - * string will be used. Note that messages with only one language - * string are assumed to be written in English, but this cannot be - * guaranteed (any violations should be reported as bugs so that they - * can be fixed). - */ -enum struct LanguageCode : unsigned int { - english, - spanish, - russian, - french, - chinese, - polish, - brazilian_portuguese, - finnish, - german, - danish, - korean, - swedish -}; -} - -#endif diff --git a/include/loot/language.h b/include/loot/language.h deleted file mode 100644 index e1e44ca4..00000000 --- a/include/loot/language.h +++ /dev/null @@ -1,92 +0,0 @@ -/* LOOT - - A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and - Fallout: New Vegas. - - Copyright (C) 2012-2016 WrinklyNinja - - This file is part of LOOT. - - LOOT 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 3 of - the License, or (at your option) any later version. - - LOOT 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 LOOT. If not, see - . - */ - -#ifndef LOOT_LANGUAGE -#define LOOT_LANGUAGE - -#include -#include - -#include "loot/api_decorator.h" -#include "loot/enum/language_code.h" - -namespace loot { -/** - * @brief Represents a language, and used to map between API language codes, - * locale codes and language names. - */ -class Language { -public: - /** - * @brief A convenience constant that contains all available language codes. - */ - LOOT_API static const std::vector codes; - - /** - * @brief Construct a Language object. - * @param code - * A LOOT API language code. - * @return A Language object for the given code. - */ - LOOT_API Language(const LanguageCode code); - - /** - * @brief Construct a Language object. - * @param locale - * A POSIX locale code. - * @return A Language object. If the locale code corresponds to a language - * with a LanguageCode value, the object is for that language, - * otherwise it is for English. - */ - LOOT_API Language(const std::string& locale); - - /** - * Get the language's LanguageCode. - * @return The language's LanguageCode. - */ - LOOT_API LanguageCode GetCode() const; - - /** - * Get the language's name for itself. - * - * For example, ``Русский``, not ``Russian``. - * @return The language's name. - */ - LOOT_API std::string GetName() const; - - /** - * Get the language's POSIX locale code. - * @return The language's POSIX locale code. - */ - LOOT_API std::string GetLocale() const; -private: - static LanguageCode GetCode(const std::string& locale); - - LanguageCode code_; - std::string name_; - std::string locale_; -}; -} - -#endif diff --git a/include/loot/metadata/message.h b/include/loot/metadata/message.h index 67ae76b4..6509431c 100644 --- a/include/loot/metadata/message.h +++ b/include/loot/metadata/message.h @@ -30,7 +30,6 @@ #include "loot/api_decorator.h" #include "loot/metadata/conditional_metadata.h" #include "loot/metadata/message_content.h" -#include "loot/enum/language_code.h" #include "loot/enum/message_type.h" #include "loot/struct/simple_message.h" @@ -111,7 +110,7 @@ public: * @return A MessageContent object for the preferred language, or for English * if a MessageContent object is not available for the given language. */ - LOOT_API MessageContent GetContent(const LanguageCode language) const; + LOOT_API MessageContent GetContent(const std::string& language) const; /** * Get the message as a SimpleMessage given a language. @@ -120,7 +119,7 @@ public: * @return A SimpleMessage object for the preferred language, or for English * if message text is not available for the given language. */ - LOOT_API SimpleMessage ToSimpleMessage(const LanguageCode language) const; + LOOT_API SimpleMessage ToSimpleMessage(const std::string& language) const; private: MessageType type_; std::vector content_; diff --git a/include/loot/metadata/message_content.h b/include/loot/metadata/message_content.h index 51c0d960..0843f9db 100644 --- a/include/loot/metadata/message_content.h +++ b/include/loot/metadata/message_content.h @@ -25,9 +25,9 @@ #define LOOT_METADATA_MESSAGE_CONTENT #include +#include #include "loot/api_decorator.h" -#include "loot/language.h" namespace loot { /** @@ -35,6 +35,12 @@ namespace loot { */ class MessageContent { public: + /** + * The code for the default language assumed for message content, which is + * English. + */ + static const std::string defaultLanguage; + /** * Construct a MessageContent object with an empty English message string. * @return A MessageContent object. @@ -49,7 +55,8 @@ public: * The language that the message is written in. * @return A MessageContent object. */ - LOOT_API MessageContent(const std::string& text, const LanguageCode language); + LOOT_API MessageContent(const std::string& text, + const std::string& language = defaultLanguage); /** * Get the message text. @@ -61,7 +68,7 @@ public: * Get the message language. * @return A code representing the language that the message is written in. */ - LOOT_API LanguageCode GetLanguage() const; + LOOT_API std::string GetLanguage() const; /** * A less-than operator implemented with no semantics so that MessageContent @@ -83,17 +90,17 @@ public: * @param content * The MessageContent objects to choose between. * @param language - * The LanguageCode for the preferred language to select. If no + * The language code for the preferred language to select. If no * message in the preferred language is present, the English * MessageContent will be returned. * @return A MessageContent object. If the given vector is empty, a * default-constructed MessageContent is returned. */ LOOT_API static MessageContent Choose(const std::vector content, - const LanguageCode language); + const std::string& language); private: std::string text_; - LanguageCode language_; + std::string language_; }; } diff --git a/include/loot/metadata/plugin_cleaning_data.h b/include/loot/metadata/plugin_cleaning_data.h index fb5262f4..994b59ac 100644 --- a/include/loot/metadata/plugin_cleaning_data.h +++ b/include/loot/metadata/plugin_cleaning_data.h @@ -138,11 +138,11 @@ public: /** * Choose an info MessageContent object given a preferred language. * @param language - * The preferred language's LanguageCode. + * The preferred language's code. * @return The MessageContent object for the preferred language, or if one * does not exist, the English-language MessageContent object. */ - LOOT_API MessageContent ChooseInfo(const LanguageCode language) const; + LOOT_API MessageContent ChooseInfo(const std::string& language) const; private: uint32_t crc_; unsigned int itm_; diff --git a/include/loot/metadata/plugin_metadata.h b/include/loot/metadata/plugin_metadata.h index b3a1dba0..ad21365c 100644 --- a/include/loot/metadata/plugin_metadata.h +++ b/include/loot/metadata/plugin_metadata.h @@ -176,7 +176,7 @@ public: * The language to create the SimpleMessage objects for. * @return The plugin's messages as SimpleMessage objects. */ - LOOT_API std::vector GetSimpleMessages(const LanguageCode language) const; + LOOT_API std::vector GetSimpleMessages(const std::string& language) const; /** * Set whether the plugin metadata is enabled for use during sorting or not. diff --git a/include/loot/struct/simple_message.h b/include/loot/struct/simple_message.h index 11060899..b78d1e19 100644 --- a/include/loot/struct/simple_message.h +++ b/include/loot/struct/simple_message.h @@ -33,7 +33,7 @@ struct SimpleMessage { MessageType type; /** @brief The language the message string is written in. */ - LanguageCode language; + std::string language; /** * @brief The message string, which may be formatted using diff --git a/include/loot/yaml/message.h b/include/loot/yaml/message.h index 5d2a4a4f..05cb3727 100644 --- a/include/loot/yaml/message.h +++ b/include/loot/yaml/message.h @@ -74,14 +74,14 @@ struct convert { if (node["content"].IsSequence()) content = node["content"].as< std::vector >(); else { - content.push_back(loot::MessageContent(node["content"].as(), loot::LanguageCode::english)); + content.push_back(loot::MessageContent(node["content"].as())); } //Check now that at least one item in content is English if there are multiple items. if (content.size() > 1) { bool found = false; for (const auto &mc : content) { - if (mc.GetLanguage() == loot::LanguageCode::english) + if (mc.GetLanguage() == loot::MessageContent::defaultLanguage) found = true; } if (!found) diff --git a/include/loot/yaml/message_content.h b/include/loot/yaml/message_content.h index c09edf9f..31a93b25 100644 --- a/include/loot/yaml/message_content.h +++ b/include/loot/yaml/message_content.h @@ -36,7 +36,7 @@ struct convert { static Node encode(const loot::MessageContent& rhs) { Node node; node["text"] = rhs.GetText(); - node["lang"] = loot::Language(rhs.GetLanguage()).GetLocale(); + node["lang"] = rhs.GetLanguage(); return node; } @@ -50,7 +50,7 @@ struct convert { throw RepresentationException(node.Mark(), "bad conversion: 'lang' key missing from 'message content' object"); std::string text = node["text"].as(); - loot::LanguageCode lang = loot::Language(node["lang"].as()).GetCode(); + std::string lang = node["lang"].as(); rhs = loot::MessageContent(text, lang); @@ -61,7 +61,7 @@ struct convert { inline Emitter& operator << (Emitter& out, const loot::MessageContent& rhs) { out << BeginMap; - out << Key << "lang" << Value << loot::Language(rhs.GetLanguage()).GetLocale(); + out << Key << "lang" << Value << rhs.GetLanguage(); out << Key << "text" << Value << YAML::SingleQuoted << rhs.GetText(); diff --git a/include/loot/yaml/plugin_cleaning_data.h b/include/loot/yaml/plugin_cleaning_data.h index 8a587353..797b399c 100644 --- a/include/loot/yaml/plugin_cleaning_data.h +++ b/include/loot/yaml/plugin_cleaning_data.h @@ -76,7 +76,7 @@ struct convert { if (node["info"].IsSequence()) info = node["info"].as>(); else { - info.push_back(loot::MessageContent(node["info"].as(), loot::LanguageCode::english)); + info.push_back(loot::MessageContent(node["info"].as())); } } @@ -84,7 +84,7 @@ struct convert { if (info.size() > 1) { bool found = false; for (const auto &mc : info) { - if (mc.GetLanguage() == loot::LanguageCode::english) + if (mc.GetLanguage() == loot::MessageContent::defaultLanguage) found = true; } if (!found) diff --git a/src/api/helpers/language.cpp b/src/api/helpers/language.cpp deleted file mode 100644 index 3d7ffa41..00000000 --- a/src/api/helpers/language.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* LOOT - - A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and - Fallout: New Vegas. - - Copyright (C) 2012-2016 WrinklyNinja - - This file is part of LOOT. - - LOOT 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 3 of - the License, or (at your option) any later version. - - LOOT 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 LOOT. If not, see - . - */ - -#include "loot/language.h" - -namespace loot { -const std::vector Language::codes({ - LanguageCode::english, - LanguageCode::spanish, - LanguageCode::russian, - LanguageCode::french, - LanguageCode::chinese, - LanguageCode::polish, - LanguageCode::brazilian_portuguese, - LanguageCode::finnish, - LanguageCode::german, - LanguageCode::danish, - LanguageCode::korean, - LanguageCode::swedish -}); - -Language::Language(LanguageCode code) : code_(code) { - if (code_ == LanguageCode::spanish) { - name_ = "Español"; - locale_ = "es"; - } else if (code_ == LanguageCode::russian) { - name_ = "Русский"; - locale_ = "ru"; - } else if (code_ == LanguageCode::french) { - name_ = "Français"; - locale_ = "fr"; - } else if (code_ == LanguageCode::chinese) { - name_ = "简体中文"; - locale_ = "zh_CN"; - } else if (code_ == LanguageCode::polish) { - name_ = "Polski"; - locale_ = "pl"; - } else if (code_ == LanguageCode::brazilian_portuguese) { - name_ = "Português do Brasil"; - locale_ = "pt_BR"; - } else if (code_ == LanguageCode::finnish) { - name_ = "suomi"; - locale_ = "fi"; - } else if (code_ == LanguageCode::german) { - name_ = "Deutsch"; - locale_ = "de"; - } else if (code_ == LanguageCode::danish) { - name_ = "Dansk"; - locale_ = "da"; - } else if (code_ == LanguageCode::korean) { - name_ = "한국어"; - locale_ = "ko"; - } else if (code_ == LanguageCode::swedish) { - name_ = "Svenska"; - locale_ = "sv"; - } else { - code_ = LanguageCode::english; - name_ = "English"; - locale_ = "en"; - } -} - -Language::Language(const std::string& locale) : Language(GetCode(locale)) {} - -LanguageCode Language::GetCode(const std::string& locale) { - for (LanguageCode code : codes) { - if (locale == Language(code).GetLocale()) { - return code; - } - } - - return LanguageCode::english; -} - -LanguageCode Language::GetCode() const { - return code_; -} - -std::string Language::GetName() const { - return name_; -} - -std::string Language::GetLocale() const { - return locale_; -} -} diff --git a/src/api/metadata/message.cpp b/src/api/metadata/message.cpp index 6e3ab71d..6a1bbbd3 100644 --- a/src/api/metadata/message.cpp +++ b/src/api/metadata/message.cpp @@ -28,14 +28,13 @@ #include #include "api/game/game.h" -#include "loot/language.h" namespace loot { Message::Message() : type_(MessageType::say) {} Message::Message(const MessageType type, const std::string& content, const std::string& condition) : type_(type), ConditionalMetadata(condition) { - content_.push_back(MessageContent(content, LanguageCode::english)); + content_.push_back(MessageContent(content)); } Message::Message(const MessageType type, const std::vector& content, @@ -43,7 +42,7 @@ Message::Message(const MessageType type, const std::vector& cont if (content.size() > 1) { bool englishStringExists = false; for (const auto &mc : content) { - if (mc.GetLanguage() == LanguageCode::english) + if (mc.GetLanguage() == MessageContent::defaultLanguage) englishStringExists = true; } if (!englishStringExists) @@ -53,7 +52,7 @@ Message::Message(const MessageType type, const std::vector& cont bool Message::operator < (const Message& rhs) const { if (!content_.empty() && !rhs.GetContent().empty()) - return boost::ilexicographical_compare(GetContent(LanguageCode::english).GetText(), rhs.GetContent(LanguageCode::english).GetText()); + return boost::ilexicographical_compare(GetContent(MessageContent::defaultLanguage).GetText(), rhs.GetContent(MessageContent::defaultLanguage).GetText()); else if (content_.empty() && !rhs.GetContent().empty()) return true; else @@ -71,10 +70,10 @@ MessageType Message::GetType() const { std::vector Message::GetContent() const { return content_; } -MessageContent Message::GetContent(const LanguageCode language) const { +MessageContent Message::GetContent(const std::string& language) const { return MessageContent::Choose(content_, language); } -SimpleMessage Message::ToSimpleMessage(const LanguageCode language) const { +SimpleMessage Message::ToSimpleMessage(const std::string& language) const { MessageContent content = GetContent(language); SimpleMessage simpleMessage; diff --git a/src/api/metadata/message_content.cpp b/src/api/metadata/message_content.cpp index ede2d298..a2f43ad8 100644 --- a/src/api/metadata/message_content.cpp +++ b/src/api/metadata/message_content.cpp @@ -26,18 +26,18 @@ #include -#include "loot/language.h" - namespace loot { -MessageContent::MessageContent() : language_(LanguageCode::english) {} +const std::string MessageContent::defaultLanguage = "en"; -MessageContent::MessageContent(const std::string& text, const LanguageCode language) : text_(text), language_(language) {} +MessageContent::MessageContent() : language_(MessageContent::defaultLanguage) {} + +MessageContent::MessageContent(const std::string& text, const std::string& language) : text_(text), language_(language) {} std::string MessageContent::GetText() const { return text_; } -LanguageCode MessageContent::GetLanguage() const { +std::string MessageContent::GetLanguage() const { return language_; } @@ -49,7 +49,7 @@ bool MessageContent::operator == (const MessageContent& rhs) const { return (boost::iequals(text_, rhs.GetText())); } MessageContent MessageContent::Choose(const std::vector content, - const LanguageCode language) { + const std::string& language) { if (content.empty()) return MessageContent(); else if (content.size() == 1) @@ -59,7 +59,7 @@ MessageContent MessageContent::Choose(const std::vector content, for (const auto &mc : content) { if (mc.GetLanguage() == language) { return mc; - } else if (mc.GetLanguage() == LanguageCode::english) + } else if (mc.GetLanguage() == MessageContent::defaultLanguage) english = mc; } return english; diff --git a/src/api/metadata/plugin_cleaning_data.cpp b/src/api/metadata/plugin_cleaning_data.cpp index 98c8629e..e279aa06 100644 --- a/src/api/metadata/plugin_cleaning_data.cpp +++ b/src/api/metadata/plugin_cleaning_data.cpp @@ -77,7 +77,7 @@ std::vector PluginCleaningData::GetInfo() const { return info_; } -MessageContent PluginCleaningData::ChooseInfo(const LanguageCode language) const { +MessageContent PluginCleaningData::ChooseInfo(const std::string& language) const { BOOST_LOG_TRIVIAL(trace) << "Choosing dirty info content."; return MessageContent::Choose(info_, language); } diff --git a/src/api/metadata/plugin_metadata.cpp b/src/api/metadata/plugin_metadata.cpp index 1ac328c6..6ddd90f8 100644 --- a/src/api/metadata/plugin_metadata.cpp +++ b/src/api/metadata/plugin_metadata.cpp @@ -219,7 +219,7 @@ std::set PluginMetadata::GetLocations() const { return locations_; } -std::vector PluginMetadata::GetSimpleMessages(const LanguageCode language) const { +std::vector PluginMetadata::GetSimpleMessages(const std::string& language) const { std::vector simpleMessages(messages_.size()); std::transform(begin(messages_), end(messages_), begin(simpleMessages), [&](const Message& message) { return message.ToSimpleMessage(language); diff --git a/src/tests/api/internals/helpers/language_test.h b/src/tests/api/internals/helpers/language_test.h deleted file mode 100644 index 5ba4be0a..00000000 --- a/src/tests/api/internals/helpers/language_test.h +++ /dev/null @@ -1,93 +0,0 @@ -/* LOOT - -A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and -Fallout: New Vegas. - -Copyright (C) 2014-2016 WrinklyNinja - -This file is part of LOOT. - -LOOT 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 3 of -the License, or (at your option) any later version. - -LOOT 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 LOOT. If not, see -. -*/ - -#ifndef LOOT_TESTS_API_INTERNALS_HELPERS_LANGUAGE_TEST -#define LOOT_TESTS_API_INTERNALS_HELPERS_LANGUAGE_TEST - -#include "loot/language.h" - -#include - -namespace loot { -namespace test { -TEST(Language, codeConstructorShouldSetTheCorrectData) { - Language lang(LanguageCode::english); - EXPECT_EQ(LanguageCode::english, lang.GetCode()); - EXPECT_EQ("English", lang.GetName()); - EXPECT_EQ("en", lang.GetLocale()); - - lang = Language(LanguageCode::polish); - EXPECT_EQ(LanguageCode::polish, lang.GetCode()); - EXPECT_EQ("Polski", lang.GetName()); - EXPECT_EQ("pl", lang.GetLocale()); -} - -TEST(Language, localeConstructorShouldSetTheCorrectData) { - Language lang("en"); - EXPECT_EQ(LanguageCode::english, lang.GetCode()); - EXPECT_EQ("English", lang.GetName()); - EXPECT_EQ("en", lang.GetLocale()); - - lang = Language("de"); - EXPECT_EQ(LanguageCode::german, lang.GetCode()); - EXPECT_EQ("Deutsch", lang.GetName()); - EXPECT_EQ("de", lang.GetLocale()); -} - -TEST(Language, codeConstructorShouldTreatAnInvalidCodeAsEnglish) { - Language lang(LanguageCode(1000)); - EXPECT_EQ(LanguageCode::english, lang.GetCode()); - EXPECT_EQ("English", lang.GetName()); - EXPECT_EQ("en", lang.GetLocale()); -} - -TEST(Language, localeConstructorShouldTreatAnInvalidLocaleAsEnglish) { - Language lang("foo"); - EXPECT_EQ(LanguageCode::english, lang.GetCode()); - EXPECT_EQ("English", lang.GetName()); - EXPECT_EQ("en", lang.GetLocale()); -} - -TEST(Language, codesShouldContainAllExpectedLanguageCodes) { - std::vector codes = { - LanguageCode::english, - LanguageCode::spanish, - LanguageCode::russian, - LanguageCode::french, - LanguageCode::chinese, - LanguageCode::polish, - LanguageCode::brazilian_portuguese, - LanguageCode::finnish, - LanguageCode::german, - LanguageCode::danish, - LanguageCode::korean, - LanguageCode::swedish, - }; - - EXPECT_EQ(codes, Language::codes); -} -} -} - -#endif diff --git a/src/tests/api/internals/main.cpp b/src/tests/api/internals/main.cpp index 8e4128af..c063a300 100644 --- a/src/tests/api/internals/main.cpp +++ b/src/tests/api/internals/main.cpp @@ -29,7 +29,6 @@ #include "tests/api/internals/game/load_order_handler_test.h" #include "tests/api/internals/helpers/crc_test.h" #include "tests/api/internals/helpers/git_helper_test.h" -#include "tests/api/internals/helpers/language_test.h" #include "tests/api/internals/helpers/version_test.h" #include "tests/api/internals/helpers/yaml_set_helpers_test.h" #include "tests/api/internals/metadata/condition_evaluator_test.h" diff --git a/src/tests/api/internals/metadata/condition_evaluator_test.h b/src/tests/api/internals/metadata/condition_evaluator_test.h index 931fc6c9..bab169da 100644 --- a/src/tests/api/internals/metadata/condition_evaluator_test.h +++ b/src/tests/api/internals/metadata/condition_evaluator_test.h @@ -36,10 +36,10 @@ class ConditionEvaluatorTest : public CommonGameTestFixture { protected: ConditionEvaluatorTest() : info_(std::vector({ - MessageContent("info", LanguageCode::english), - })), - game_(GetParam(), dataPath.parent_path(), localPath), - evaluator_(&game_) {} + MessageContent("info"), + })), + game_(GetParam(), dataPath.parent_path(), localPath), + evaluator_(&game_) {} const std::vector info_; diff --git a/src/tests/api/internals/metadata/message_content_test.h b/src/tests/api/internals/metadata/message_content_test.h index d712be87..97b59cb9 100644 --- a/src/tests/api/internals/metadata/message_content_test.h +++ b/src/tests/api/internals/metadata/message_content_test.h @@ -33,72 +33,74 @@ along with LOOT. If not, see namespace loot { namespace test { +const std::string french = "fr"; + TEST(MessageContent, defaultConstructorShouldSetEmptyEnglishLanguageString) { MessageContent content; EXPECT_TRUE(content.GetText().empty()); - EXPECT_EQ(LanguageCode::english, content.GetLanguage()); + EXPECT_EQ(MessageContent::defaultLanguage, content.GetLanguage()); } TEST(MessageContent, contentConstructorShouldStoreGivenStringAndLanguage) { - MessageContent content("content", LanguageCode::french); + MessageContent content("content", french); EXPECT_EQ("content", content.GetText()); - EXPECT_EQ(LanguageCode::french, content.GetLanguage()); + EXPECT_EQ(french, content.GetLanguage()); } TEST(MessageContent, contentShouldBeEqualIfStringsAreCaseInsensitivelyEqual) { - MessageContent content1("content", LanguageCode::english); - MessageContent content2("Content", LanguageCode::french); + MessageContent content1("content"); + MessageContent content2("Content", french); EXPECT_TRUE(content1 == content2); } TEST(MessageContent, contentShouldBeUnequalIfStringsAreNotCaseInsensitivelyEqual) { - MessageContent content1("content1", LanguageCode::french); - MessageContent content2("content2", LanguageCode::french); + MessageContent content1("content1", french); + MessageContent content2("content2", french); EXPECT_FALSE(content1 == content2); } TEST(MessageContent, LessThanOperatorShouldUseCaseInsensitiveLexicographicalComparison) { - MessageContent content1("content", LanguageCode::english); - MessageContent content2("Content", LanguageCode::french); + MessageContent content1("content"); + MessageContent content2("Content", french); EXPECT_FALSE(content1 < content2); EXPECT_FALSE(content2 < content1); - content1 = MessageContent("content1", LanguageCode::french); - content2 = MessageContent("content2", LanguageCode::english); + content1 = MessageContent("content1", french); + content2 = MessageContent("content2"); EXPECT_TRUE(content1 < content2); EXPECT_FALSE(content2 < content1); } TEST(MessageContent, emittingAsYamlShouldOutputDataCorrectly) { - MessageContent content("content", LanguageCode::french); + MessageContent content("content", french); YAML::Emitter emitter; emitter << content; - EXPECT_EQ("lang: " + Language(content.GetLanguage()).GetLocale() + + EXPECT_EQ("lang: " + french + "\ntext: '" + content.GetText() + "'", emitter.c_str()); } TEST(MessageContent, encodingAsYamlShouldOutputDataCorrectly) { - MessageContent content("content", LanguageCode::french); + MessageContent content("content", french); YAML::Node node; node = content; EXPECT_EQ(content.GetText(), node["text"].as()); - EXPECT_EQ(Language(LanguageCode::french).GetLocale(), node["lang"].as()); + EXPECT_EQ(french, node["lang"].as()); } TEST(MessageContent, decodingFromYamlShouldSetDataCorrectly) { - YAML::Node node = YAML::Load("{text: content, lang: de}"); + YAML::Node node = YAML::Load("{text: content, lang: fr}"); MessageContent content = node.as(); EXPECT_EQ("content", content.GetText()); - EXPECT_EQ(LanguageCode::german, content.GetLanguage()); + EXPECT_EQ(french, content.GetLanguage()); } TEST(MessageContent, decodingFromYamlScalarShouldThrow) { diff --git a/src/tests/api/internals/metadata/message_test.h b/src/tests/api/internals/metadata/message_test.h index 0b8beb1d..ebaab716 100644 --- a/src/tests/api/internals/metadata/message_test.h +++ b/src/tests/api/internals/metadata/message_test.h @@ -35,7 +35,6 @@ namespace loot { namespace test { class MessageTest : public CommonGameTestFixture { protected: - typedef std::vector MessageContents; }; @@ -53,7 +52,7 @@ TEST_P(MessageTest, defaultConstructorShouldCreateNoteWithNoContent) { } TEST_P(MessageTest, scalarContentConstructorShouldCreateAMessageWithASingleContentString) { - MessageContent content = MessageContent("content1", LanguageCode::english); + MessageContent content = MessageContent("content1"); Message message(MessageType::warn, content.GetText(), "condition1"); EXPECT_EQ(MessageType::warn, message.GetType()); @@ -63,8 +62,8 @@ TEST_P(MessageTest, scalarContentConstructorShouldCreateAMessageWithASingleConte TEST_P(MessageTest, vectorContentConstructorShouldCreateAMessageWithGivenContentStrings) { MessageContents contents({ - MessageContent("content1", LanguageCode::english), - MessageContent("content2", LanguageCode::french), + MessageContent("content1"), + MessageContent("content2", french), }); Message message(MessageType::error, contents, "condition1"); @@ -75,8 +74,8 @@ TEST_P(MessageTest, vectorContentConstructorShouldCreateAMessageWithGivenContent TEST_P(MessageTest, vectorContentConstructorShouldThrowIfMultipleContentStringsAreGivenAndNoneAreEnglish) { MessageContents contents({ - MessageContent("content1", LanguageCode::german), - MessageContent("content2", LanguageCode::french), + MessageContent("content1", german), + MessageContent("content2", french), }); EXPECT_THROW(Message(MessageType::error, contents, "condition1"), std::invalid_argument); } @@ -89,15 +88,15 @@ TEST_P(MessageTest, messagesWithDifferentContentStringsShouldBeUnequal) { } TEST_P(MessageTest, messagesWithEqualContentStringsShouldBeEqual) { - Message message1(MessageType::say, MessageContents({MessageContent("content1", LanguageCode::english)}), "condition1"); - Message message2(MessageType::warn, MessageContents({MessageContent("content1", LanguageCode::french)}), "condition2"); + Message message1(MessageType::say, MessageContents({MessageContent("content1")}), "condition1"); + Message message2(MessageType::warn, MessageContents({MessageContent("content1", french)}), "condition2"); EXPECT_TRUE(message1 == message2); } TEST_P(MessageTest, lessThanOperatorShouldUseCaseInsensitiveLexicographicalContentStringComparison) { - Message message1(MessageType::say, MessageContents({MessageContent("content1", LanguageCode::english)}), "condition1"); - Message message2(MessageType::warn, MessageContents({MessageContent("content1", LanguageCode::french)}), "condition2"); + Message message1(MessageType::say, MessageContents({MessageContent("content1")}), "condition1"); + Message message2(MessageType::warn, MessageContents({MessageContent("content1", french)}), "condition2"); EXPECT_FALSE(message1 < message2); EXPECT_FALSE(message2 < message1); @@ -109,49 +108,48 @@ TEST_P(MessageTest, lessThanOperatorShouldUseCaseInsensitiveLexicographicalConte TEST_P(MessageTest, getContentShouldReturnADefaultContentObjectIfNoneExists) { Message message; - EXPECT_EQ(MessageContent(), message.GetContent(LanguageCode::english)); + EXPECT_EQ(MessageContent(), message.GetContent(MessageContent::defaultLanguage)); } TEST_P(MessageTest, getContentShouldSelectTheEnglishStringIfThereIsNoStringForTheGivenLanguage) { Message message(MessageType::say, MessageContents({ - MessageContent("content1", LanguageCode::german), - MessageContent("content2", LanguageCode::english), - MessageContent("content3", LanguageCode::french), + MessageContent("content1", german), + MessageContent("content2"), })); - EXPECT_EQ("content2", message.GetContent(LanguageCode::korean).GetText()); + EXPECT_EQ("content2", message.GetContent(french).GetText()); } TEST_P(MessageTest, getContentShouldSelectTheGivenLanguageStringIfItExists) { Message message(MessageType::say, MessageContents({ - MessageContent("content1", LanguageCode::german), - MessageContent("content2", LanguageCode::english), - MessageContent("content3", LanguageCode::french), + MessageContent("content1", german), + MessageContent("content2"), + MessageContent("content3", french), })); - EXPECT_EQ("content3", message.GetContent(LanguageCode::french).GetText()); + EXPECT_EQ("content3", message.GetContent(french).GetText()); } TEST_P(MessageTest, getContentShouldSelectTheContentStringIfOnlyOneExists) { Message message(MessageType::say, MessageContents({ - MessageContent("content1", LanguageCode::german), + MessageContent("content1", french), })); - EXPECT_EQ("content1", message.GetContent(LanguageCode::english).GetText()); + EXPECT_EQ("content1", message.GetContent(MessageContent::defaultLanguage).GetText()); } TEST_P(MessageTest, toSimpleMessageShouldSelectTextAndLanguageUsingGetContent) { Message message(MessageType::warn, MessageContents({ - MessageContent("content1", LanguageCode::german), - MessageContent("content2", LanguageCode::english), - MessageContent("content3", LanguageCode::french), + MessageContent("content1", german), + MessageContent("content2"), + MessageContent("content3", french), })); - SimpleMessage simpleMessage = message.ToSimpleMessage(LanguageCode::french); + SimpleMessage simpleMessage = message.ToSimpleMessage(french); EXPECT_EQ(MessageType::warn, simpleMessage.type); EXPECT_EQ("content3", simpleMessage.text); - EXPECT_EQ(LanguageCode::french, simpleMessage.language); + EXPECT_EQ(french, simpleMessage.language); } TEST_P(MessageTest, emittingAsYamlShouldOutputNoteMessageTypeCorrectly) { @@ -193,8 +191,8 @@ TEST_P(MessageTest, emittingAsYamlShouldOutputConditionIfItIsNotEmpty) { TEST_P(MessageTest, emittingAsYamlShouldOutputMultipleContentStringsAsAList) { Message message(MessageType::say, MessageContents({ - MessageContent("content1", LanguageCode::english), - MessageContent("content2", LanguageCode::german) + MessageContent("content1"), + MessageContent("content2", french) })); YAML::Emitter emitter; emitter << message; @@ -203,7 +201,7 @@ TEST_P(MessageTest, emittingAsYamlShouldOutputMultipleContentStringsAsAList) { "content:\n" " - lang: en\n" " text: 'content1'\n" - " - lang: de\n" + " - lang: fr\n" " text: 'content2'", emitter.c_str()); } @@ -257,8 +255,8 @@ TEST_P(MessageTest, encodingAsYamlShouldStoreASingleContentStringInAVector) { TEST_P(MessageTest, encodingAsYamlShouldMultipleContentStringsInAVector) { MessageContents contents({ - MessageContent("content1", LanguageCode::english), - MessageContent("content2", LanguageCode::french), + MessageContent("content1"), + MessageContent("content2", french), }); Message message(MessageType::say, contents); YAML::Node node; @@ -320,7 +318,7 @@ TEST_P(MessageTest, decodingFromYamlShouldStoreAScalarContentValueCorrectly) { YAML::Node node = YAML::Load("type: say\n" "content: content1\n"); Message message = node.as(); - MessageContents expectedContent({MessageContent("content1", LanguageCode::english)}); + MessageContents expectedContent({MessageContent("content1")}); EXPECT_EQ(expectedContent, message.GetContent()); } @@ -330,13 +328,13 @@ TEST_P(MessageTest, decodingFromYamlShouldStoreAListOfContentStringsCorrectly) { "content:\n" " - lang: en\n" " text: content1\n" - " - lang: de\n" + " - lang: fr\n" " text: content2"); Message message = node.as(); EXPECT_EQ(MessageContents({ - MessageContent("content1", LanguageCode::english), - MessageContent("content2", LanguageCode::german), + MessageContent("content1"), + MessageContent("content2", french), }), message.GetContent()); } @@ -367,7 +365,7 @@ TEST_P(MessageTest, decodingFromYamlShouldApplySubstitutionsWhenThereIsOnlyOneCo " - sub1"); Message message = node.as(); - EXPECT_EQ(MessageContents({MessageContent("consub1tent1", LanguageCode::english)}), message.GetContent()); + EXPECT_EQ(MessageContents({MessageContent("consub1tent1")}), message.GetContent()); } TEST_P(MessageTest, decodingFromYamlShouldApplySubstitutionsToAllContentStrings) { @@ -375,15 +373,15 @@ TEST_P(MessageTest, decodingFromYamlShouldApplySubstitutionsToAllContentStrings) "content:\n" " - lang: en\n" " text: content1 %1%\n" - " - lang: de\n" + " - lang: fr\n" " text: content2 %1%\n" "subs:\n" " - sub"); Message message = node.as(); EXPECT_EQ(MessageContents({ - MessageContent("content1 sub", LanguageCode::english), - MessageContent("content2 sub", LanguageCode::german), + MessageContent("content1 sub"), + MessageContent("content2 sub", french), }), message.GetContent()); } @@ -402,7 +400,7 @@ TEST_P(MessageTest, decodingFromYamlShouldIgnoreSubstitutionSyntaxIfNoSubstituti "content: con%1%tent1\n"); Message message = node.as(); - EXPECT_EQ(MessageContents({MessageContent("con%1%tent1", LanguageCode::english)}), message.GetContent()); + EXPECT_EQ(MessageContents({MessageContent("con%1%tent1")}), message.GetContent()); } TEST_P(MessageTest, decodingFromYamlShouldThrowIfAnInvalidConditionIsGiven) { diff --git a/src/tests/api/internals/metadata/plugin_cleaning_data_test.h b/src/tests/api/internals/metadata/plugin_cleaning_data_test.h index 2b7a7260..f93c7390 100644 --- a/src/tests/api/internals/metadata/plugin_cleaning_data_test.h +++ b/src/tests/api/internals/metadata/plugin_cleaning_data_test.h @@ -36,7 +36,7 @@ namespace test { class PluginCleaningDataTest : public CommonGameTestFixture { protected: PluginCleaningDataTest() : info_(std::vector({ - MessageContent("info", LanguageCode::english), + MessageContent("info"), })) {} const std::vector info_; @@ -93,37 +93,37 @@ TEST_P(PluginCleaningDataTest, LessThanOperatorShouldCompareCrcValues) { TEST_P(PluginCleaningDataTest, chooseInfoShouldCreateADefaultContentObjectIfNoneExists) { PluginCleaningData dirtyInfo(0xDEADBEEF, "cleaner", std::vector(), 2, 10, 30); - EXPECT_EQ(MessageContent(), dirtyInfo.ChooseInfo(LanguageCode::english)); + EXPECT_EQ(MessageContent(), dirtyInfo.ChooseInfo(MessageContent::defaultLanguage)); } TEST_P(PluginCleaningDataTest, chooseInfoShouldLeaveTheContentUnchangedIfOnlyOneStringExists) { PluginCleaningData dirtyInfo(0xDEADBEEF, "cleaner", info_, 2, 10, 30); - EXPECT_EQ(info_[0], dirtyInfo.ChooseInfo(LanguageCode::french)); - EXPECT_EQ(info_[0], dirtyInfo.ChooseInfo(LanguageCode::english)); + EXPECT_EQ(info_[0], dirtyInfo.ChooseInfo(french)); + EXPECT_EQ(info_[0], dirtyInfo.ChooseInfo(MessageContent::defaultLanguage)); } TEST_P(PluginCleaningDataTest, chooseInfoShouldSelectTheEnglishStringIfNoStringExistsForTheGivenLanguage) { - MessageContent content("content1", LanguageCode::english); + MessageContent content("content1", MessageContent::defaultLanguage); std::vector info({ content, - MessageContent("content1", LanguageCode::german), + MessageContent("content1", german), }); PluginCleaningData dirtyInfo(0xDEADBEEF, "cleaner", info, 2, 10, 30); - EXPECT_EQ(content, dirtyInfo.ChooseInfo(LanguageCode::french)); + EXPECT_EQ(content, dirtyInfo.ChooseInfo(french)); } TEST_P(PluginCleaningDataTest, chooseInfoShouldSelectTheStringForTheGivenLanguageIfOneExists) { - MessageContent french("content3", LanguageCode::french); + MessageContent frenchContent("content3", french); std::vector info({ - MessageContent("content1", LanguageCode::german), - MessageContent("content2", LanguageCode::english), - french, + MessageContent("content1", german), + MessageContent("content2", MessageContent::defaultLanguage), + frenchContent, }); PluginCleaningData dirtyInfo(0xDEADBEEF, "cleaner", info, 2, 10, 30); - EXPECT_EQ(french, dirtyInfo.ChooseInfo(LanguageCode::french)); + EXPECT_EQ(frenchContent, dirtyInfo.ChooseInfo(french)); } TEST_P(PluginCleaningDataTest, emittingAsYamlShouldOutputAllNonZeroCounts) { diff --git a/src/tests/api/internals/metadata/plugin_metadata_test.h b/src/tests/api/internals/metadata/plugin_metadata_test.h index bdb73e5b..18196876 100644 --- a/src/tests/api/internals/metadata/plugin_metadata_test.h +++ b/src/tests/api/internals/metadata/plugin_metadata_test.h @@ -36,7 +36,7 @@ namespace test { class PluginMetadataTest : public CommonGameTestFixture { protected: PluginMetadataTest() : info_(std::vector({ - MessageContent("info", LanguageCode::english), + MessageContent("info"), })) {} const std::vector info_; @@ -458,21 +458,21 @@ TEST_P(PluginMetadataTest, simpleMessagesShouldReturnMessagesAsSimpleMessages) { PluginMetadata plugin; plugin.SetMessages({ Message(MessageType::say, "content1"), - Message(MessageType::warn, {{"content2",LanguageCode::french}, {"other content2", LanguageCode::english}}), + Message(MessageType::warn, {{"content2",french}, {"other content2", MessageContent::defaultLanguage}}), Message(MessageType::error, "content3"), }); - auto simpleMessages = plugin.GetSimpleMessages(LanguageCode::french); + auto simpleMessages = plugin.GetSimpleMessages(french); EXPECT_EQ(3, simpleMessages.size()); EXPECT_EQ(MessageType::say, simpleMessages.front().type); - EXPECT_EQ(LanguageCode::english, simpleMessages.front().language); + EXPECT_EQ(MessageContent::defaultLanguage, simpleMessages.front().language); EXPECT_EQ("content1", simpleMessages.front().text); EXPECT_EQ(MessageType::warn, (++simpleMessages.begin())->type); - EXPECT_EQ(LanguageCode::french, (++simpleMessages.begin())->language); + EXPECT_EQ(french, (++simpleMessages.begin())->language); EXPECT_EQ("content2", (++simpleMessages.begin())->text); EXPECT_EQ(MessageType::error, simpleMessages.back().type); - EXPECT_EQ(LanguageCode::english, simpleMessages.back().language); + EXPECT_EQ(MessageContent::defaultLanguage, simpleMessages.back().language); EXPECT_EQ("content3", simpleMessages.back().text); } diff --git a/src/tests/common_game_test_fixture.h b/src/tests/common_game_test_fixture.h index 1989322d..8a0e3f0a 100644 --- a/src/tests/common_game_test_fixture.h +++ b/src/tests/common_game_test_fixture.h @@ -40,6 +40,8 @@ namespace test { class CommonGameTestFixture : public ::testing::TestWithParam { protected: CommonGameTestFixture() : + french("fr"), + german("de"), missingPath("./missing"), dataPath(getPluginsPath()), localPath(getLocalPath()), @@ -173,6 +175,9 @@ protected: } protected: + const std::string french; + const std::string german; + const boost::filesystem::path missingPath; const boost::filesystem::path dataPath; const boost::filesystem::path localPath;