Selaa lähdekoodia

Add tests for JSONLayout completeness.

Sam Jaffe 6 vuotta sitten
vanhempi
commit
d5db70d4dd

+ 2 - 0
logger.xcodeproj/project.pbxproj

@@ -110,6 +110,7 @@
 		CDC0E04C2267F8A9001EDAB7 /* pattern_layout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pattern_layout.h; sourceTree = "<group>"; };
 		CDC0E0502269378E001EDAB7 /* message.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = message.cxx; sourceTree = "<group>"; };
 		CDC0E06022694966001EDAB7 /* logger_test_obj.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = logger_test_obj.h; sourceTree = "<group>"; };
+		CDC0E0652269EE9E001EDAB7 /* header_test_obj.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = header_test_obj.h; sourceTree = "<group>"; };
 		CDEA62D4225A3B0B00A6FAE0 /* json_layout.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = json_layout.cxx; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -202,6 +203,7 @@
 				CD1CDE9122543E7E00E5B6B2 /* test_properties.cxx */,
 				CD1CDE8E22540DEA00E5B6B2 /* mock_logger.h */,
 				CDC0E06022694966001EDAB7 /* logger_test_obj.h */,
+				CDC0E0652269EE9E001EDAB7 /* header_test_obj.h */,
 			);
 			path = test;
 			sourceTree = "<group>";

+ 32 - 0
test/header_test_obj.h

@@ -0,0 +1,32 @@
+//
+//  header_test_obj.h
+//  logger
+//
+//  Created by Sam Jaffe on 4/19/19.
+//
+
+#pragma once
+
+#include <gmock/gmock.h>
+
+#include "logger_impl.h"
+#include "mock_logger.h"
+
+class HeaderFooterTest : public testing::Test {
+protected:
+  void SetUp() override {
+    appender = std::make_shared<StubAppender>();
+    auto GetStub = [this](logging::properties const &) {
+      return appender;
+    };
+    abinding_ = logging::appenders::instance().bind_scoped("Stub", GetStub);
+  }
+  void TearDown() override {
+    abinding_.reset();
+    appender.reset();
+  }
+protected:
+  std::shared_ptr<StubAppender> appender;
+private:
+  logging::appenders::scoped_binding abinding_;
+};

+ 48 - 0
test/json_layout_test.cxx

@@ -188,3 +188,51 @@ TEST(JsonLayoutTest, ObjectLackingJsonDefaultsToString) {
   using testing::Eq;
   EXPECT_THAT(ss.str(), Eq(struct_output));
 }
+
+#include "header_test_obj.h"
+#include "logger/logger.h"
+
+using namespace logging;
+using namespace logging::property;
+properties const JSON_HEADER_SCHEMA{_obj({
+  {"configuration", _obj({
+    {"appenders", _obj({
+      {"Stub", _obj({
+        {"JsonLayout", _obj({
+          {"complete", _v(true)},
+          {"compact", _v(true)},
+          {"eventEol", _v(true)}
+        })}
+      })}
+    })},
+    {"loggers", _obj({
+      {"root", _obj({{"appenders", _obj({{"ref", _v("Stub")}})}})}
+    })}
+  })}
+})};
+
+using JsonLayoutHeaderTest = HeaderFooterTest;
+
+TEST_F(JsonLayoutHeaderTest, ProvidesArrayBounds) {
+  {
+    manager mgr;
+    mgr.configure(JSON_HEADER_SCHEMA);
+  }
+  using testing::Eq;
+  EXPECT_THAT(appender->sstream.str(), Eq("[]"));
+}
+
+TEST_F(JsonLayoutHeaderTest, SeparatesLogsWithComma) {
+  using testing::Eq;
+  using testing::EndsWith;
+  using testing::StartsWith;
+  manager mgr;
+  mgr.configure(JSON_HEADER_SCHEMA);
+  mgr.get().log(level::error, "HELLO");
+  // Newline is printed as a part of the message...
+  EXPECT_THAT(appender->sstream.str(), EndsWith("}\n"));
+  appender->sstream.str("");
+  mgr.get().log(level::error, "HELLO");
+  // So the dividing comma gets attached to the next log
+  EXPECT_THAT(appender->sstream.str(), StartsWith(",{"));
+}

+ 4 - 25
test/pattern_layout_test.cxx

@@ -171,12 +171,12 @@ TEST(PatternLayoutTest, TokenCanBeSizeBound) {
               Eq("HELLO FR"));
 }
 
-#include "mock_logger.h"
+#include "header_test_obj.h"
 #include "logger/logger.h"
 
 using namespace logging;
 using namespace logging::property;
-properties const schema{_obj({
+properties const PATTERN_HEADER_SCHEMA{_obj({
   {"configuration", _obj({
     {"appenders", _obj({
       {"Stub", _obj({
@@ -193,32 +193,11 @@ properties const schema{_obj({
   })}
 })};
 
-class HeaderFooterTest : public testing::Test {
-protected:
-  void SetUp() override;
-  void TearDown() override;
-protected:
-  std::shared_ptr<StubAppender> appender;
-private:
-  appenders::scoped_binding abinding_;
-};
-
-void HeaderFooterTest::SetUp() {
-  appender = std::make_shared<StubAppender>();
-  auto GetStub = [this](properties const &) { return appender; };
-  abinding_ = appenders::instance().bind_scoped("Stub", GetStub);
-}
-
-void HeaderFooterTest::TearDown() {
-  abinding_.reset();
-  appender.reset();
-}
-
 using PatternLayoutHeaderTest = HeaderFooterTest;
 
 TEST_F(PatternLayoutHeaderTest, ProvidesHeader) {
   manager mgr;
-  mgr.configure(schema);
+  mgr.configure(PATTERN_HEADER_SCHEMA);
   using testing::Eq;
   EXPECT_THAT(appender->sstream.str(), Eq("HEADER-"));
   mgr.get().log(level::error, "HELLO");
@@ -229,7 +208,7 @@ TEST_F(PatternLayoutHeaderTest, ProvidesFooter) {
   using testing::Eq;
   {
     manager mgr;
-    mgr.configure(schema);
+    mgr.configure(PATTERN_HEADER_SCHEMA);
     appender->sstream.str("");
     mgr.get().log(level::error, "HELLO");
   }