/// <summary> /// Initialises a new instance of the <see cref="IngredientParser"/> class. /// </summary> /// <param name="templates">The set of templates the parser will attempt parsing with.</param> /// <param name="sanitizationRules">A set of rules the parser will use to sanitize the input.</param> /// <param name="parserStrategy">A strategy that will be used for parsing.</param> private IngredientParser( IEnumerable <Template> templates, IEnumerable <IInputSanitizationRule> sanitizationRules, IParserStrategy parserStrategy) { _templates = templates; _sanitizationRules = sanitizationRules; _parserStrategy = parserStrategy; }
public void IngredientParser_TryReadIngredientWithMultipleTemplates_ShouldSuccessfullyParseIngredient( string[] templateDefinition, IParserStrategy parserStrategy, string rawIngredient, Type[] expectedTokens, ParseResult expectedParsedResult) { var parser = IngredientParser .Builder .New .WithTemplateDefinitions(templateDefinition) .WithTokenReaderFactory(new TokenReaderFactory(_tokenReaders)) .WithParserStrategy(parserStrategy) .WithSanitizationRules(_sanitizationRules) .Build(); var result = parser.TryParseIngredient(rawIngredient, out var parseResult); Assert.IsTrue(result); Assert.AreEqual(TemplateMatchResult.FullMatch, parseResult.Metadata.MatchResult); var tokenList = parseResult.Metadata.Tokens.ToList(); Assert.AreEqual(expectedTokens.Length, tokenList.Count); var tokenTypes = tokenList .Select(t => t.GetType()) .ToList(); CollectionAssert.AreEqual(expectedTokens, tokenTypes); Assert.AreEqual(expectedParsedResult.Details.Amount, parseResult.Details.Amount); Assert.AreEqual(expectedParsedResult.Details.Unit, parseResult.Details.Unit); Assert.AreEqual(expectedParsedResult.Details.Form, parseResult.Details.Form); Assert.AreEqual(expectedParsedResult.Details.Ingredient, parseResult.Details.Ingredient); }
internal RestSettings <T> AddParser(IParserStrategy <T> parser) { Parser = parser; return(this); }
/// <summary> /// Configures the parser to use the specified <see cref="IParserStrategy"/>. /// </summary> /// <param name="parserStrategy">A <see cref="IParserStrategy"/> instance.</param> /// <returns>A <see cref="Builder"/> instance with the parser strategy configured.</returns> public Builder WithParserStrategy(IParserStrategy parserStrategy) { _parserStrategy = parserStrategy; return(this); }