|
@@ -23,16 +23,14 @@ namespace {
|
|
|
constexpr const int NOW = 1554401840;
|
|
constexpr const int NOW = 1554401840;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-std::shared_ptr<logging::layout>
|
|
|
|
|
-GetPatternLayout(std::string const & fmt) {
|
|
|
|
|
|
|
+std::shared_ptr<logging::layout> GetPatternLayout(std::string const & fmt) {
|
|
|
using namespace logging;
|
|
using namespace logging;
|
|
|
using namespace logging::property;
|
|
using namespace logging::property;
|
|
|
properties props{_obj({{"pattern", _v(fmt)}})};
|
|
properties props{_obj({{"pattern", _v(fmt)}})};
|
|
|
return layouts::instance().get("PatternLayout", props);
|
|
return layouts::instance().get("PatternLayout", props);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-std::string DoFormat(std::string const & fmt,
|
|
|
|
|
- logging::logpacket const & pkt) {
|
|
|
|
|
|
|
+std::string DoFormat(std::string const & fmt, logging::logpacket const & pkt) {
|
|
|
std::stringstream ss;
|
|
std::stringstream ss;
|
|
|
GetPatternLayout(fmt)->format(ss, pkt);
|
|
GetPatternLayout(fmt)->format(ss, pkt);
|
|
|
return ss.str();
|
|
return ss.str();
|
|
@@ -49,8 +47,7 @@ TEST(PatternLayoutTest, EmptyFormatterCanParse) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, ThrowsForEndOfStringAfterPct) {
|
|
TEST(PatternLayoutTest, ThrowsForEndOfStringAfterPct) {
|
|
|
- EXPECT_THROW(GetPatternLayout("%"),
|
|
|
|
|
- logging::format_parsing_exception);
|
|
|
|
|
|
|
+ EXPECT_THROW(GetPatternLayout("%"), logging::format_parsing_exception);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, RawStringFmtReturnsSelf) {
|
|
TEST(PatternLayoutTest, RawStringFmtReturnsSelf) {
|
|
@@ -80,30 +77,27 @@ TEST(PatternLayoutTest, CatchesRawContentAfterFmt) {
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, HandlesDateFormatter) {
|
|
TEST(PatternLayoutTest, HandlesDateFormatter) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d", {{NOW,0}}),
|
|
|
|
|
- Eq("2019-04-04 18:17:20,000"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d", {{NOW, 0}}), Eq("2019-04-04 18:17:20,000"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, FormatsMilliseconds) {
|
|
TEST(PatternLayoutTest, FormatsMilliseconds) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d", {{NOW,123000}}),
|
|
|
|
|
- Eq("2019-04-04 18:17:20,123"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d", {{NOW, 123000}}), Eq("2019-04-04 18:17:20,123"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, ThrowsIfCustomFmtUnterminated) {
|
|
TEST(PatternLayoutTest, ThrowsIfCustomFmtUnterminated) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THROW(GetPatternLayout("%d{%"),
|
|
|
|
|
- logging::format_parsing_exception);
|
|
|
|
|
|
|
+ EXPECT_THROW(GetPatternLayout("%d{%"), logging::format_parsing_exception);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, SupportsCustomFormatWithBrace) {
|
|
TEST(PatternLayoutTest, SupportsCustomFormatWithBrace) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d{%Y}", {{NOW,0}}), Eq("2019"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{%Y}", {{NOW, 0}}), Eq("2019"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, FormatsCustomMilliseconds) {
|
|
TEST(PatternLayoutTest, FormatsCustomMilliseconds) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d{%_ms}", {{NOW,123000}}), Eq("123"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{%_ms}", {{NOW, 123000}}), Eq("123"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
MATCHER(IsTimeZoneOffsetLike, "") {
|
|
MATCHER(IsTimeZoneOffsetLike, "") {
|
|
@@ -117,48 +111,41 @@ MATCHER(IsTimeZoneOffsetLike, "") {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, FormatsTimeZone) {
|
|
TEST(PatternLayoutTest, FormatsTimeZone) {
|
|
|
- EXPECT_THAT(DoFormat("%d{%z}", {{NOW,0}}), IsTimeZoneOffsetLike());
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{%z}", {{NOW, 0}}), IsTimeZoneOffsetLike());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, SupportsISO8601Format) {
|
|
TEST(PatternLayoutTest, SupportsISO8601Format) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d{ISO8601}", {{NOW,0}}),
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{ISO8601}", {{NOW, 0}}),
|
|
|
Eq("2019-04-04T18:17:20.000Z"));
|
|
Eq("2019-04-04T18:17:20.000Z"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, SupportsSingleDayFormat) {
|
|
TEST(PatternLayoutTest, SupportsSingleDayFormat) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d{ABSOLUTE}", {{NOW,0}}),
|
|
|
|
|
- Eq("18:17:20,000"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{ABSOLUTE}", {{NOW, 0}}), Eq("18:17:20,000"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, SupportsHumanDateFormat) {
|
|
TEST(PatternLayoutTest, SupportsHumanDateFormat) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%d{DATE}", {{NOW,0}}),
|
|
|
|
|
- Eq("04 Apr 2019 18:17:20,000"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%d{DATE}", {{NOW, 0}}), Eq("04 Apr 2019 18:17:20,000"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, LoggerIdIsCToken) {
|
|
TEST(PatternLayoutTest, LoggerIdIsCToken) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%c", getpkt("HELLO")),
|
|
|
|
|
- Eq("UNIT_TEST"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%c", getpkt("HELLO")), Eq("UNIT_TEST"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, LogLevelIsPToken) {
|
|
TEST(PatternLayoutTest, LogLevelIsPToken) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%p", getpkt("HELLO")),
|
|
|
|
|
- Eq("ERROR"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%p", getpkt("HELLO")), Eq("ERROR"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, LogMessageIsMToken) {
|
|
TEST(PatternLayoutTest, LogMessageIsMToken) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%m", getpkt("HELLO")),
|
|
|
|
|
- Eq("HELLO"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%m", getpkt("HELLO")), Eq("HELLO"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-MATCHER_P2(Near, value, error, "") {
|
|
|
|
|
- return std::abs(arg - value) < error;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+MATCHER_P2(Near, value, error, "") { return std::abs(arg - value) < error; }
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputTimeSinceCreation) {
|
|
TEST(PatternLayoutTest, CanOutputTimeSinceCreation) {
|
|
|
// Because we're passing in a timestamp of {0, 0} with getpkt(), %r should
|
|
// Because we're passing in a timestamp of {0, 0} with getpkt(), %r should
|
|
@@ -171,22 +158,19 @@ TEST(PatternLayoutTest, CanOutputTimeSinceCreation) {
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputLineNumber) {
|
|
TEST(PatternLayoutTest, CanOutputLineNumber) {
|
|
|
EXPECT_THAT(std::stoi(DoFormat("%L", getpkt("", log_here))),
|
|
EXPECT_THAT(std::stoi(DoFormat("%L", getpkt("", log_here))),
|
|
|
- testing::Eq(__LINE__ - 1));
|
|
|
|
|
|
|
+ testing::Eq(__LINE__ - 1));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputFileName) {
|
|
TEST(PatternLayoutTest, CanOutputFileName) {
|
|
|
EXPECT_THAT(DoFormat("%F", getpkt("", log_here)),
|
|
EXPECT_THAT(DoFormat("%F", getpkt("", log_here)),
|
|
|
- testing::EndsWith("pattern_layout_test.cxx"));
|
|
|
|
|
|
|
+ testing::EndsWith("pattern_layout_test.cxx"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputCallingMethod) {
|
|
TEST(PatternLayoutTest, CanOutputCallingMethod) {
|
|
|
- EXPECT_THAT(DoFormat("%M", getpkt("", log_here)),
|
|
|
|
|
- testing::Eq("TestBody"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%M", getpkt("", log_here)), testing::Eq("TestBody"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-logging::logpacket packet() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
-}
|
|
|
|
|
|
|
+logging::logpacket packet() { return getpkt("", log_here); }
|
|
|
struct stub {
|
|
struct stub {
|
|
|
std::map<int, int> rval;
|
|
std::map<int, int> rval;
|
|
|
std::map<int, int> operator()(logging::logpacket & out) {
|
|
std::map<int, int> operator()(logging::logpacket & out) {
|
|
@@ -197,30 +181,20 @@ struct stub {
|
|
|
out = getpkt("", log_here);
|
|
out = getpkt("", log_here);
|
|
|
return rval;
|
|
return rval;
|
|
|
}
|
|
}
|
|
|
- logging::logpacket operator()() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
- }
|
|
|
|
|
- static logging::logpacket packet() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ logging::logpacket operator()() { return getpkt("", log_here); }
|
|
|
|
|
+ static logging::logpacket packet() { return getpkt("", log_here); }
|
|
|
};
|
|
};
|
|
|
namespace ns {
|
|
namespace ns {
|
|
|
- logging::logpacket packet() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ logging::logpacket packet() { return getpkt("", log_here); }
|
|
|
struct stub {
|
|
struct stub {
|
|
|
- logging::logpacket operator()() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
- }
|
|
|
|
|
- static logging::logpacket packet() {
|
|
|
|
|
- return getpkt("", log_here);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ logging::logpacket operator()() { return getpkt("", log_here); }
|
|
|
|
|
+ static logging::logpacket packet() { return getpkt("", log_here); }
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputClassName) {
|
|
TEST(PatternLayoutTest, CanOutputClassName) {
|
|
|
EXPECT_THAT(DoFormat("%C", getpkt("", log_here)),
|
|
EXPECT_THAT(DoFormat("%C", getpkt("", log_here)),
|
|
|
- testing::Eq("PatternLayoutTest_CanOutputClassName_Test"));
|
|
|
|
|
|
|
+ testing::Eq("PatternLayoutTest_CanOutputClassName_Test"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, GlobalNamespaceClassIsEmptyString) {
|
|
TEST(PatternLayoutTest, GlobalNamespaceClassIsEmptyString) {
|
|
@@ -238,14 +212,14 @@ TEST(PatternLayoutTest, StaticMethodClassIsClass) {
|
|
|
TEST(PatternLayoutTest, NCMethodReturningComplexTypeReturnsCorrectClass) {
|
|
TEST(PatternLayoutTest, NCMethodReturningComplexTypeReturnsCorrectClass) {
|
|
|
logging::logpacket pkt;
|
|
logging::logpacket pkt;
|
|
|
stub st{};
|
|
stub st{};
|
|
|
- (void) st(pkt);
|
|
|
|
|
|
|
+ (void)st(pkt);
|
|
|
EXPECT_THAT(DoFormat("%C", pkt), testing::Eq("stub"));
|
|
EXPECT_THAT(DoFormat("%C", pkt), testing::Eq("stub"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, ConstMethodReturningComplexTypeReturnsCorrectClass) {
|
|
TEST(PatternLayoutTest, ConstMethodReturningComplexTypeReturnsCorrectClass) {
|
|
|
logging::logpacket pkt;
|
|
logging::logpacket pkt;
|
|
|
stub const st{};
|
|
stub const st{};
|
|
|
- (void) st(pkt);
|
|
|
|
|
|
|
+ (void)st(pkt);
|
|
|
EXPECT_THAT(DoFormat("%C", pkt), testing::Eq("stub"));
|
|
EXPECT_THAT(DoFormat("%C", pkt), testing::Eq("stub"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -256,7 +230,8 @@ TEST(PatternLayoutTest, CanLimitClassToNTokens) {
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, CanOutputLocation) {
|
|
TEST(PatternLayoutTest, CanOutputLocation) {
|
|
|
auto message = DoFormat("%l", getpkt("", log_here));
|
|
auto message = DoFormat("%l", getpkt("", log_here));
|
|
|
- std::string regex = "PatternLayoutTest_CanOutputLocation_Test::TestBody ..*pattern_layout_test.cxx, [1-9][0-9]*.";
|
|
|
|
|
|
|
+ std::string regex = "PatternLayoutTest_CanOutputLocation_Test::TestBody "
|
|
|
|
|
+ "..*pattern_layout_test.cxx, [1-9][0-9]*.";
|
|
|
EXPECT_THAT(message, testing::MatchesRegex(regex));
|
|
EXPECT_THAT(message, testing::MatchesRegex(regex));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -277,47 +252,37 @@ TEST(PatternLayoutTest, OutputsThreadNameIfAvailable) {
|
|
|
TEST(PatternLayoutTest, ThreadNameIsThreadLocalStorage) {
|
|
TEST(PatternLayoutTest, ThreadNameIsThreadLocalStorage) {
|
|
|
using testing::Ne;
|
|
using testing::Ne;
|
|
|
::logging::detail::thread_info_helper::set_name("main");
|
|
::logging::detail::thread_info_helper::set_name("main");
|
|
|
- std::thread tr([](){
|
|
|
|
|
- EXPECT_THAT(DoFormat("%t", getpkt("")), Ne("main"));
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ std::thread tr([]() { EXPECT_THAT(DoFormat("%t", getpkt("")), Ne("main")); });
|
|
|
tr.join();
|
|
tr.join();
|
|
|
::logging::detail::thread_info_helper::set_name("");
|
|
::logging::detail::thread_info_helper::set_name("");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, ThrowsOnUnknownToken) {
|
|
TEST(PatternLayoutTest, ThrowsOnUnknownToken) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THROW(GetPatternLayout("%q"),
|
|
|
|
|
- logging::unknown_format_specifier);
|
|
|
|
|
|
|
+ EXPECT_THROW(GetPatternLayout("%q"), logging::unknown_format_specifier);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, TokenCanBeTruncatedInFormat) {
|
|
TEST(PatternLayoutTest, TokenCanBeTruncatedInFormat) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%.3m", getpkt("HELLO")),
|
|
|
|
|
- Eq("HEL"));
|
|
|
|
|
- EXPECT_THAT(DoFormat("%.5c", getpkt("HELLO")),
|
|
|
|
|
- Eq("UNIT_"));
|
|
|
|
|
- EXPECT_THAT(DoFormat("%.2t", getpkt("HELLO")),
|
|
|
|
|
- Eq("0x"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%.3m", getpkt("HELLO")), Eq("HEL"));
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%.5c", getpkt("HELLO")), Eq("UNIT_"));
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%.2t", getpkt("HELLO")), Eq("0x"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, TokenCanBeLeftPadded) {
|
|
TEST(PatternLayoutTest, TokenCanBeLeftPadded) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%6m", getpkt("HELLO")),
|
|
|
|
|
- Eq(" HELLO"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%6m", getpkt("HELLO")), Eq(" HELLO"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, TokenCanBeRightPadded) {
|
|
TEST(PatternLayoutTest, TokenCanBeRightPadded) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%-6m", getpkt("HELLO")),
|
|
|
|
|
- Eq("HELLO "));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%-6m", getpkt("HELLO")), Eq("HELLO "));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(PatternLayoutTest, TokenCanBeSizeBound) {
|
|
TEST(PatternLayoutTest, TokenCanBeSizeBound) {
|
|
|
using testing::Eq;
|
|
using testing::Eq;
|
|
|
- EXPECT_THAT(DoFormat("%6.8m", getpkt("HELLO")),
|
|
|
|
|
- Eq(" HELLO"));
|
|
|
|
|
- EXPECT_THAT(DoFormat("%6.8m", getpkt("HELLO FRIEND")),
|
|
|
|
|
- Eq("HELLO FR"));
|
|
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%6.8m", getpkt("HELLO")), Eq(" HELLO"));
|
|
|
|
|
+ EXPECT_THAT(DoFormat("%6.8m", getpkt("HELLO FRIEND")), Eq("HELLO FR"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#include "header_test_obj.h"
|
|
#include "header_test_obj.h"
|
|
@@ -325,6 +290,7 @@ TEST(PatternLayoutTest, TokenCanBeSizeBound) {
|
|
|
|
|
|
|
|
using namespace logging;
|
|
using namespace logging;
|
|
|
using namespace logging::property;
|
|
using namespace logging::property;
|
|
|
|
|
+// clang-format off
|
|
|
properties const PATTERN_HEADER_SCHEMA{_obj({
|
|
properties const PATTERN_HEADER_SCHEMA{_obj({
|
|
|
{"configuration", _obj({
|
|
{"configuration", _obj({
|
|
|
{"appenders", _obj({
|
|
{"appenders", _obj({
|
|
@@ -341,6 +307,7 @@ properties const PATTERN_HEADER_SCHEMA{_obj({
|
|
|
})}
|
|
})}
|
|
|
})}
|
|
})}
|
|
|
})};
|
|
})};
|
|
|
|
|
+// clang-format on
|
|
|
|
|
|
|
|
using PatternLayoutHeaderTest = HeaderFooterTest;
|
|
using PatternLayoutHeaderTest = HeaderFooterTest;
|
|
|
|
|
|