فهرست منبع

Reach 100% code coverage

Sam Jaffe 5 سال پیش
والد
کامیت
cb21767b9b
4فایلهای تغییر یافته به همراه96 افزوده شده و 3 حذف شده
  1. 4 0
      logger.xcodeproj/project.pbxproj
  2. 30 0
      test/default_layout_test.cxx
  3. 46 3
      test/log_manager_test.cxx
  4. 16 0
      test/mock_properties.cxx

+ 4 - 0
logger.xcodeproj/project.pbxproj

@@ -35,6 +35,7 @@
 		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 */; };
+		CDCB3CA424E566C50029B771 /* default_layout_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3CA324E566C50029B771 /* default_layout_test.cxx */; };
 		CDEA62D5225A3B0B00A6FAE0 /* json_layout.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDEA62D4225A3B0B00A6FAE0 /* json_layout.cxx */; };
 /* End PBXBuildFile section */
 
@@ -116,6 +117,7 @@
 		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>"; };
+		CDCB3CA324E566C50029B771 /* default_layout_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = default_layout_test.cxx; sourceTree = "<group>"; };
 		CDEA62D4225A3B0B00A6FAE0 /* json_layout.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = json_layout.cxx; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -204,6 +206,7 @@
 				CD760CC822627202008A62DE /* json_layout_test.cxx */,
 				CDCB3CA124E55A8B0029B771 /* common_test.cxx */,
 				CD760CBE226221F6008A62DE /* console_appender_test.cxx */,
+				CDCB3CA324E566C50029B771 /* default_layout_test.cxx */,
 				CD760CC0226226CC008A62DE /* file_appender_test.cxx */,
 				CD1CDE8C22540D9B00E5B6B2 /* c_logger_test.cxx */,
 				CD1CDE8F22542CC500E5B6B2 /* log_manager_test.cxx */,
@@ -411,6 +414,7 @@
 				CDCB3C6B24E481E70029B771 /* json_layout_test.cxx in Sources */,
 				CDCB3CA224E55A8B0029B771 /* common_test.cxx in Sources */,
 				CDCB3C9C24E4C8510029B771 /* properties_test.cxx in Sources */,
+				CDCB3CA424E566C50029B771 /* default_layout_test.cxx in Sources */,
 				CDCB3C6A24E481E70029B771 /* pattern_layout_test.cxx in Sources */,
 				CDCB3C6C24E481E70029B771 /* console_appender_test.cxx in Sources */,
 				CDCB3C6924E481E70029B771 /* logger_test.cxx in Sources */,

+ 30 - 0
test/default_layout_test.cxx

@@ -0,0 +1,30 @@
+//
+//  default_layout_test.cpp
+//  logger-test
+//
+//  Created by Sam Jaffe on 8/13/20.
+//
+
+#include "logger/detail/layout.h"
+
+#include <gmock/gmock.h>
+
+#include "resource_factory/prototype_factory.hpp"
+
+#include "logger/log_manager.h"
+#include "logger/logpacket.h"
+#include "logger/properties.h"
+
+using namespace logging;
+
+TEST(DefaultLayoutTest, ConstructsFromEmptyProps) {
+  EXPECT_NO_THROW(layouts::instance().get("default", properties()));
+}
+
+TEST(DefaultLayoutTest, FormatAppendsMessageAndNewline) {
+  std::stringstream ss;
+  auto default_layout = layouts::instance().get("default", properties());
+  logpacket pkt{{}, level::error, {}, {}, "Test"};
+  default_layout->format(ss, pkt);
+  EXPECT_THAT(ss.str(), "Test\n");
+}

+ 46 - 3
test/log_manager_test.cxx

@@ -5,10 +5,13 @@
 //  Created by Sam Jaffe on 4/2/19.
 //
 
+#include "logger/log_manager.h"
+
 #include "resource_factory/prototype_factory.hpp"
 
 #include "logger/c_logger.h"
-#include "logger/log_manager.h"
+#include "logger/exception.h"
+#include "logger/logger.h"
 #include "logger/properties.h"
 
 #include "mock_logger.h"
@@ -52,16 +55,37 @@ void LogManagerTest::TearDown() {
 }
 
 extern properties const APPENDER_LEVEL_PROPERTY_SCHEMA;
+extern properties const DEFAULT_LAYOUT_PROPERTY_SCHEMA;
 extern properties const LOGGER_LEVEL_PROPERTY_SCHEMA;
 extern properties const MIN_PROPERTY_SCHEMA;
 extern properties const MULTIPLEX_PROPERTY_SCHEMA;
 
+
 TEST_F(LogManagerTest, CanInjectMock) {
   manager().configure(MIN_PROPERTY_SCHEMA);
+  EXPECT_THAT(appender, ::testing::NotNull());
+  EXPECT_THAT(layout, ::testing::NotNull());
+}
 
-  using ::testing::NotNull;
-
+TEST_F(LogManagerTest, IfNoLayoutIsProvidedThenWeUseTheDefault) {
+  manager().configure(DEFAULT_LAYOUT_PROPERTY_SCHEMA);
   EXPECT_THAT(appender, ::testing::NotNull());
+  EXPECT_THAT(layout, testing::IsNull());
+}
+
+TEST_F(LogManagerTest, WillThrowIfSchemaError) {
+  using namespace logging::property;
+  properties const BAD_SCHEMA = _obj({
+    {"configuration", _obj({
+      {"loggers", _obj({
+        {"root", _obj({
+          {"appenders", _v("Mock")}
+        })}
+      })},
+      {"appenders", _obj({})}
+    })}
+  });
+  EXPECT_THROW(manager().configure(BAD_SCHEMA), invalid_property_type);
 }
 
 using ::testing::_;
@@ -112,3 +136,22 @@ TEST_F(LogManagerTest, LevelCanBeBakedIntoLoggerProperties) {
   c_logger l = mgr.c_get();
   l.warn("TEST MESSAGE");
 }
+
+TEST_F(LogManagerTest, CanFetchLoggerByName) {
+  manager mgr;
+  mgr.configure(MIN_PROPERTY_SCHEMA);
+
+  EXPECT_CALL(*appender, flush()).Times(AnyNumber());
+  EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"), _));
+
+  c_logger l = mgr.c_get("root");
+  l.error("TEST MESSAGE");
+}
+
+TEST_F(LogManagerTest, ThrowsIfAskingForNonExistantLoggerName) {
+  manager mgr;
+  mgr.configure(MIN_PROPERTY_SCHEMA);
+
+  EXPECT_THROW(mgr.c_get("Mock"), std::out_of_range);
+  EXPECT_THROW(mgr.get("Mock"), std::out_of_range);
+}

+ 16 - 0
test/mock_properties.cxx

@@ -11,6 +11,7 @@ using logging::properties;
 using namespace logging::property;
 
 extern properties const APPENDER_LEVEL_PROPERTY_SCHEMA;
+extern properties const DEFAULT_LAYOUT_PROPERTY_SCHEMA;
 extern properties const LOGGER_LEVEL_PROPERTY_SCHEMA;
 extern properties const MIN_PROPERTY_SCHEMA;
 extern properties const MULTIPLEX_PROPERTY_SCHEMA;
@@ -32,6 +33,21 @@ properties const MIN_PROPERTY_SCHEMA{_obj({
   })}
 })};
 
+properties const DEFAULT_LAYOUT_PROPERTY_SCHEMA{_obj({
+  {"configuration", _obj({
+    {"appenders", _obj({
+      {"Mock", _obj({})}
+    })},
+    {"loggers", _obj({
+      {"root", _obj({
+        {"appenders", _obj({
+          {"ref", _v("Mock")}
+        })}
+      })}
+    })}
+  })}
+})};
+
 properties const APPENDER_LEVEL_PROPERTY_SCHEMA{_obj({
   {"configuration", _obj({
     {"appenders", _obj({