From 3bb9e242aeac3f19fe7531fa5a6fe099ae7db2ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Hu=CC=88ser?= Date: Sat, 5 Oct 2019 01:43:30 +0200 Subject: [PATCH] fix format strings with '+' not parsed correctly. fix #1353 Custom format string not accepted by the message template parser. Custom numeric format strings may contain plus '+' signs. That character was not recognised by the parser. --- src/Serilog/Parsing/MessageTemplateParser.cs | 3 +- .../Parsing/MessageTemplateParserTests.cs | 28 ++++++++----------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Serilog/Parsing/MessageTemplateParser.cs b/src/Serilog/Parsing/MessageTemplateParser.cs index 20f9c3290..a5a9a5026 100644 --- a/src/Serilog/Parsing/MessageTemplateParser.cs +++ b/src/Serilog/Parsing/MessageTemplateParser.cs @@ -253,7 +253,8 @@ static bool IsValidInFormat(char c) return c != '}' && (char.IsLetterOrDigit(c) || char.IsPunctuation(c) || - c == ' '); + c == ' ' || + c == '+'); } static TextToken ParseTextToken(int startAt, string messageTemplate, out int next) diff --git a/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs b/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs index 4c26e7f92..78d67480c 100644 --- a/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs +++ b/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs @@ -173,21 +173,17 @@ public void IndexOutOfRangeExceptionBugHasNotRegressed() } [Fact] - public void Bug1353FormatStringIsParsedCorrectly() - { - AssertParsedAs("{0,-25} {1,10:#,##0} {2,10:#,##0} {3,10:+#,##0;-#,##0;0} {4,10:0.00}", - new PropertyToken("0","{0,-25}", startIndex:0), - new TextToken(" ", startIndex:7), - new PropertyToken("1","{1,10:#,##0}", "#,##0", startIndex:8), - new TextToken(" ", startIndex:20), - new PropertyToken("2","{2,10:#,##0}", "#,##0", startIndex:21), - new TextToken(" ", startIndex:33), - new PropertyToken("3","{3,10:+#,##0;-#,##0;0}", "+#,##0;-#,##0;0", startIndex:34), - new TextToken(" ", startIndex:56), - new PropertyToken("4","{4,10:0.00}", "0.00", startIndex:57) - ); - } - - + public void FormatCanContainMultipleSections() + { + var parsed = (PropertyToken)Parse("{Number:##.0;-##.0;zero}").Single(); + Assert.Equal("##.0;-##.0;zero", parsed.Format); + } + + [Fact] + public void FormatCanContainPlusSign() + { + var parsed = (PropertyToken)Parse("{Number:+##.0}").Single(); + Assert.Equal("+##.0", parsed.Format); + } } }