فهرست منبع

Finish coverage of format.cxx.
Fix bugs:
- Only erasing one character in truncate.
- Not loading generator for other handlers.

Sam Jaffe 6 سال پیش
والد
کامیت
ccc1c9b05b
2فایلهای تغییر یافته به همراه63 افزوده شده و 6 حذف شده
  1. 6 6
      src/format.cxx
  2. 57 0
      test/format_test.cxx

+ 6 - 6
src/format.cxx

@@ -144,10 +144,10 @@ namespace logging {
     gen = handle( next );
     gen = handle( next );
     
     
     return [=](logpacket const & lp, std::ostream & out) {
     return [=](logpacket const & lp, std::ostream & out) {
-      std::string str = gen( lp );
-      if ( str.length() > max )
-        str.erase(str.begin() + max);
-      out << align << std::setw( min ) << str;
+      std::string str = gen(lp);
+      if (str.length() > max)
+        str.erase(str.begin()+max, str.end());
+      out << align << std::setw(min) << str;
     };
     };
   }
   }
   
   
@@ -183,9 +183,9 @@ namespace logging {
       } else if (is('%')) {
       } else if (is('%')) {
         out.gen.push_back(convert(string_token("%")));
         out.gen.push_back(convert(string_token("%")));
       } else if (is('.') || is('-') || isdigit( *next )) {
       } else if (is('.') || is('-') || isdigit( *next )) {
-        parse_with_bounds( next );
+        out.gen.push_back(parse_with_bounds(next));
       } else {
       } else {
-        handle( next );
+        out.gen.push_back(convert(handle(next)));
       }
       }
       curr = ++next;
       curr = ++next;
     }
     }

+ 57 - 0
test/format_test.cxx

@@ -101,3 +101,60 @@ TEST(FormatTest, SupportsHumanDateFormat) {
   auto fmt = format::parse_format_string("%d{DATE}");
   auto fmt = format::parse_format_string("%d{DATE}");
   EXPECT_THAT(fmt.process({{NOW,0}}), Eq("04 Apr 2019 18:17:20,000"));
   EXPECT_THAT(fmt.process({{NOW,0}}), Eq("04 Apr 2019 18:17:20,000"));
 }
 }
+
+TEST(FormatTest, LoggerIdIsCToken) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%c");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq("UNIT_TEST"));
+}
+
+TEST(FormatTest, LogLevelIsPToken) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%p");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq("ERROR"));
+}
+
+TEST(FormatTest, LogMessageIsMToken) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%m");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq("HELLO"));
+}
+
+TEST(FormatTest, ThrowsOnUnknownToken) {
+  using testing::Eq;
+  EXPECT_THROW(format::parse_format_string("%q"),
+               unknown_format_specifier);
+}
+
+TEST(FormatTest, TokenCanBeTruncatedInFormat) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%.3m");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq("HEL"));
+}
+
+TEST(FormatTest, TokenCanBeLeftPadded) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%6m");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq(" HELLO"));
+}
+
+TEST(FormatTest, TokenCanBeRightPadded) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%-6m");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq("HELLO "));
+}
+
+TEST(FormatTest, TokenCanBeSizeBound) {
+  using testing::Eq;
+  auto fmt = format::parse_format_string("%6.8m");
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO"}),
+              Eq(" HELLO"));
+  EXPECT_THAT(fmt.process({{}, LERROR, {}, "UNIT_TEST", "HELLO FRIEND"}),
+              Eq("HELLO FR"));
+}