Exemplo n.º 1
0
 /// <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);
        }
Exemplo n.º 3
0
 internal RestSettings <T> AddParser(IParserStrategy <T> parser)
 {
     Parser = parser;
     return(this);
 }
Exemplo n.º 4
0
            /// <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);
            }