Просмотр исходного кода

Add true full test coverage for common.cxx

Sam Jaffe 5 лет назад
Родитель
Сommit
542f855b87
2 измененных файлов с 70 добавлено и 0 удалено
  1. 4 0
      logger.xcodeproj/project.pbxproj
  2. 66 0
      test/common_test.cxx

+ 4 - 0
logger.xcodeproj/project.pbxproj

@@ -34,6 +34,7 @@
 		CDCB3C7124E481F50029B771 /* GoogleMock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD6F7437225189470081ED74 /* GoogleMock.framework */; };
 		CDCB3C7224E482020029B771 /* libjsoncpp.1.9.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CDCB3C5724E480E70029B771 /* libjsoncpp.1.9.2.dylib */; };
 		CDCB3C9C24E4C8510029B771 /* properties_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3C9B24E4C8510029B771 /* properties_test.cxx */; };
+		CDCB3CA224E55A8B0029B771 /* common_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3CA124E55A8B0029B771 /* common_test.cxx */; };
 		CDEA62D5225A3B0B00A6FAE0 /* json_layout.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDEA62D4225A3B0B00A6FAE0 /* json_layout.cxx */; };
 /* End PBXBuildFile section */
 
@@ -114,6 +115,7 @@
 		CDCB3C5E24E481B10029B771 /* logger-test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "logger-test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDCB3C6224E481B10029B771 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		CDCB3C9B24E4C8510029B771 /* properties_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = properties_test.cxx; sourceTree = "<group>"; };
+		CDCB3CA124E55A8B0029B771 /* common_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = common_test.cxx; sourceTree = "<group>"; };
 		CDEA62D4225A3B0B00A6FAE0 /* json_layout.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = json_layout.cxx; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -200,6 +202,7 @@
 				CDCB3C9B24E4C8510029B771 /* properties_test.cxx */,
 				CD760CB822621776008A62DE /* pattern_layout_test.cxx */,
 				CD760CC822627202008A62DE /* json_layout_test.cxx */,
+				CDCB3CA124E55A8B0029B771 /* common_test.cxx */,
 				CD760CBE226221F6008A62DE /* console_appender_test.cxx */,
 				CD760CC0226226CC008A62DE /* file_appender_test.cxx */,
 				CD1CDE8C22540D9B00E5B6B2 /* c_logger_test.cxx */,
@@ -406,6 +409,7 @@
 				CDCB3C6D24E481E70029B771 /* file_appender_test.cxx in Sources */,
 				CDCB3C6F24E481E70029B771 /* log_manager_test.cxx in Sources */,
 				CDCB3C6B24E481E70029B771 /* json_layout_test.cxx in Sources */,
+				CDCB3CA224E55A8B0029B771 /* common_test.cxx in Sources */,
 				CDCB3C9C24E4C8510029B771 /* properties_test.cxx in Sources */,
 				CDCB3C6A24E481E70029B771 /* pattern_layout_test.cxx in Sources */,
 				CDCB3C6C24E481E70029B771 /* console_appender_test.cxx in Sources */,

+ 66 - 0
test/common_test.cxx

@@ -0,0 +1,66 @@
+//
+//  common_test.cpp
+//  logger-test
+//
+//  Created by Sam Jaffe on 8/13/20.
+//
+
+#include "logger/level.h"
+
+#include <gmock/gmock.h>
+
+#include "logger/exception.h"
+#include "../src/common.h"
+
+using level_info = std::pair<logging::level, std::string>;
+struct SerializerTest : testing::TestWithParam<level_info> {};
+
+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<level>(100)), std::domain_error);
+}