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;