// // common_test.cpp // logger-test // // Created by Sam Jaffe on 8/13/20. // #include "logger/level.h" #include #include "../src/common.h" #include "logger/exception.h" using level_info = std::pair; struct SerializerTest : testing::TestWithParam {}; using namespace logging; TEST_P(SerializerTest, LevelFromString) { EXPECT_THAT(level_from_string(GetParam().second), GetParam().first); } TEST_P(SerializerTest, LevelToString) { EXPECT_THAT(level_to_string(GetParam().first), testing::Eq(GetParam().second)); } MATCHER(IsUpperCase, "") { return !std::any_of(arg.begin(), arg.end(), &islower); } TEST_P(SerializerTest, OstreamWritesUppercase) { std::stringstream ss; ss << GetParam().first; EXPECT_THAT(ss.str(), testing::StrCaseEq(GetParam().second)); EXPECT_THAT(ss.str(), IsUpperCase()); } TEST_P(SerializerTest, ToStringCanWriteBothCases) { EXPECT_THAT(to_string(GetParam().first, false), testing::Eq(GetParam().second)); EXPECT_THAT(to_string(GetParam().first, true), testing::StrCaseEq(GetParam().second)); EXPECT_THAT(to_string(GetParam().first, true), IsUpperCase()); } level_info pairs[] = { {level::trace, "trace"}, {level::debug, "debug"}, {level::info, "info"}, {level::warning, "warning"}, {level::error, "error"}, {level::critical, "critical"}, {level::fatal, "fatal"}, {level::none, "none"}, }; INSTANTIATE_TEST_CASE_P(LogLevel, SerializerTest, testing::ValuesIn(pairs)); TEST(LogLevelSerializerTest, LevelFromStringThrowsOnUnknown) { EXPECT_THROW(level_from_string("FAKE"), invalid_property); } TEST(LogLevelSerializerTest, LevelToStringThrowsOnUnknown) { EXPECT_THROW(level_to_string(static_cast(100)), std::domain_error); }