static (IDictionary <string, object>, string) ExtractValues(string pattern, string candidate) { var parsed = ExtractionPatternParser.Parse(pattern); var extractor = ExtractionPatternInterpreter.CreateNameValueExtractor(parsed); return(extractor.ExtractValues(candidate)); }
public void ARegularStringIsASingleTextLiteral() { var pattern = ExtractionPatternParser.Parse("Hello!"); Assert.Single(pattern.Elements); var tt = Assert.IsType <LiteralTextPatternExpression>(pattern.Elements.Single()); Assert.Equal("Hello!", tt.Text); }
public void CaptureNameAndTypeAreParsed() { var pattern = ExtractionPatternParser.Parse("{abc:def}"); Assert.Single(pattern.Elements); var ct = Assert.IsType <CapturePatternExpression>(pattern.Elements.Single()); Assert.Equal("abc", ct.Name); Assert.Equal("def", ((MatchTypeContentExpression)ct.Content).Type); }
public void OnlyValidPatternsAreAccepted(string attempt, bool isValid) { if (isValid) { ExtractionPatternParser.Parse(attempt); } else { Assert.Throws <ParseException>(() => ExtractionPatternParser.Parse(attempt)); } }
public void TheTrailingIndentPatternDoesNotMatchLinesStartingWithWhitespace() { var multilineMessageExtractor = ExtractionPatternInterpreter.CreateNameValueExtractor( ExtractionPatternParser.Parse("{@m:trailingindent}")); var frame = " world"; var(properties, remainder) = multilineMessageExtractor.ExtractValues(frame); Assert.Empty(properties); Assert.Equal(frame, remainder); }
public void TheTrailingIndentPatternMatchesMultilineMessages() { var multilineMessageExtractor = ExtractionPatternInterpreter.CreateNameValueExtractor( ExtractionPatternParser.Parse("{@m:trailingindent}")); var frame = $"Hello,{Environment.NewLine} world!"; var(properties, remainder) = multilineMessageExtractor.ExtractValues(frame); Assert.Null(remainder); Assert.Single(properties, p => p.Key == ReifiedProperties.Message && ((TextSpan)p.Value).ToStringValue() == frame); }
public PlainTextLogEventReader(TextReader input, string extractionPattern) { if (extractionPattern == null) { throw new ArgumentNullException(nameof(extractionPattern)); } _nameValueExtractor = ExtractionPatternInterpreter.CreateNameValueExtractor(ExtractionPatternParser.Parse(extractionPattern)); _reader = new FrameReader(input, SpanEx.MatchedBy(_nameValueExtractor.StartMarker), TrailingLineArrivalDeadline); }