From 632c9dead748364837d3a27736feea0fc53c308e Mon Sep 17 00:00:00 2001 From: Artak Mkrtchyan Date: Wed, 7 Mar 2018 14:52:33 -0800 Subject: [PATCH] Added tests for the LookaheadUntil method --- .../Legacy/TokenizerLookaheadTest.cs | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs index 6abd70ad3e..a9ac4be740 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs @@ -56,6 +56,83 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy Assert.Equal("pre-existing values", tokenizer.Buffer.ToString(), StringComparer.Ordinal); } + [Fact] + public void LookaheadUntil_PassesThePreviousSymbolsInReverseOrder() + { + // Arrange + var source = TestRazorSourceDocument.Create("asdf--fvd--<"); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var tokenizer = new TestTokenizerBackedParser(HtmlLanguageCharacteristics.Instance, context); + + // Act + Stack symbols = new Stack(); + var i = 3; + var symbolFound = tokenizer.LookaheadUntil((s, p) => + { + symbols.Push(s); + return --i == 0; + }); + + // Assert + Assert.Equal(3, symbols.Count); + Assert.Equal(new HtmlSymbol("fvd", HtmlSymbolType.Text), symbols.Pop()); + Assert.Equal(new HtmlSymbol("--", HtmlSymbolType.DoubleHyphen), symbols.Pop()); + Assert.Equal(new HtmlSymbol("asdf", HtmlSymbolType.Text), symbols.Pop()); + } + + [Fact] + public void LookaheadUntil_ReturnsFalseAfterIteratingOverAllSymbolsIfConditionIsNotMet() + { + // Arrange + var source = TestRazorSourceDocument.Create("asdf--fvd"); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var tokenizer = new TestTokenizerBackedParser(HtmlLanguageCharacteristics.Instance, context); + + // Act + Stack symbols = new Stack(); + var symbolFound = tokenizer.LookaheadUntil((s, p) => + { + symbols.Push(s); + return false; + }); + + // Assert + Assert.False(symbolFound); + Assert.Equal(3, symbols.Count); + Assert.Equal(new HtmlSymbol("fvd", HtmlSymbolType.Text), symbols.Pop()); + Assert.Equal(new HtmlSymbol("--", HtmlSymbolType.DoubleHyphen), symbols.Pop()); + Assert.Equal(new HtmlSymbol("asdf", HtmlSymbolType.Text), symbols.Pop()); + } + + [Fact] + public void LookaheadUntil_ReturnsTrueAndBreaksIteration() + { + // Arrange + var source = TestRazorSourceDocument.Create("asdf--fvd"); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var tokenizer = new TestTokenizerBackedParser(HtmlLanguageCharacteristics.Instance, context); + + // Act + Stack symbols = new Stack(); + var symbolFound = tokenizer.LookaheadUntil((s, p) => + { + symbols.Push(s); + return s.Type == HtmlSymbolType.DoubleHyphen; + }); + + // Assert + Assert.True(symbolFound); + Assert.Equal(2, symbols.Count); + Assert.Equal(new HtmlSymbol("--", HtmlSymbolType.DoubleHyphen), symbols.Pop()); + Assert.Equal(new HtmlSymbol("asdf", HtmlSymbolType.Text), symbols.Pop()); + } + private class ExposedTokenizer : Tokenizer { public ExposedTokenizer(string input) @@ -116,5 +193,27 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy throw new NotImplementedException(); } } + + private class TestTokenizerBackedParser : TokenizerBackedParser + { + internal TestTokenizerBackedParser(LanguageCharacteristics language, ParserContext context) : base(language, context) + { + } + + public override void ParseBlock() + { + throw new NotImplementedException(); + } + + protected override bool SymbolTypeEquals(HtmlSymbolType x, HtmlSymbolType y) + { + throw new NotImplementedException(); + } + + internal new bool LookaheadUntil(Func, bool> condition) + { + return base.LookaheadUntil(condition); + } + } } }