include test to convert functions and change suggested by @gabime

This commit is contained in:
fegomes 2018-03-08 19:08:24 -03:00
parent f9750dddee
commit 48c8755d06
2 changed files with 57 additions and 10 deletions

View File

@ -15,7 +15,8 @@
#include <memory> #include <memory>
#include <atomic> #include <atomic>
#include <exception> #include <exception>
#include<functional> #include <functional>
#include <unordered_map>
#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES)
#include <codecvt> #include <codecvt>
@ -89,6 +90,17 @@ enum level_enum
off = 6 off = 6
}; };
static std::unordered_map<std::string, level_enum> name_to_level = {
{ "trace" , level::trace },
{ "debug" , level::debug },
{ "info" , level::info },
{ "warning" , level::warn },
{ "error" , level::err },
{ "critical", level::critical },
{ "off" , level::off }
};
#if !defined(SPDLOG_LEVEL_NAMES) #if !defined(SPDLOG_LEVEL_NAMES)
#define SPDLOG_LEVEL_NAMES { "trace", "debug", "info", "warning", "error", "critical", "off" } #define SPDLOG_LEVEL_NAMES { "trace", "debug", "info", "warning", "error", "critical", "off" }
#endif #endif
@ -105,17 +117,19 @@ inline const char* to_short_str(spdlog::level::level_enum l)
{ {
return short_level_names[l]; return short_level_names[l];
} }
inline spdlog::level::level_enum to_level_enum(const char* name) inline spdlog::level::level_enum to_level_enum(const std::string& name)
{ {
for (size_t level = 0; level < size(level_names); level++) auto ci = name_to_level.find(name);
if (ci != name_to_level.end())
{ {
if (!strcmp(level_names[level], name)) return ci->second;
}
else
{ {
return (spdlog::level::level_enum) level; return level::off;
} }
}
return (spdlog::level::level_enum) 0;
} }
using level_hasher = std::hash<int>; using level_hasher = std::hash<int>;
} //level } //level

View File

@ -42,6 +42,39 @@ TEST_CASE("log_levels", "[log_levels]")
REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello"); REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello");
} }
TEST_CASE("to_str", "[convert_to_str]")
{
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::trace)) == "trace");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::debug)) == "debug");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::info)) == "info");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::warn)) == "warning");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::err)) == "error");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::critical)) == "critical");
REQUIRE(std::string(spdlog::level::to_str(spdlog::level::off)) == "off");
}
TEST_CASE("to_short_str", "[convert_to_short_str]")
{
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::trace)) == "T");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::debug)) == "D");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::info)) == "I");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::warn)) == "W");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::err)) == "E");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::critical)) == "C");
REQUIRE(std::string(spdlog::level::to_short_str(spdlog::level::off)) == "O");
}
TEST_CASE("to_level_enum", "[convert_to_level_enum]")
{
REQUIRE(spdlog::level::to_level_enum("trace") == spdlog::level::trace);
REQUIRE(spdlog::level::to_level_enum("debug") == spdlog::level::debug);
REQUIRE(spdlog::level::to_level_enum("info") == spdlog::level::info);
REQUIRE(spdlog::level::to_level_enum("warning") == spdlog::level::warn);
REQUIRE(spdlog::level::to_level_enum("error") == spdlog::level::err);
REQUIRE(spdlog::level::to_level_enum("critical") == spdlog::level::critical);
REQUIRE(spdlog::level::to_level_enum("off") == spdlog::level::off);
REQUIRE(spdlog::level::to_level_enum("null") == spdlog::level::off);
}