public void ConstructorInitializesProperties() {
            // Arrange
            LookaheadTextReader expectedBuffer = new BufferingTextReader(TextReader.Null);
            CSharpCodeParser expectedCodeParser = new CSharpCodeParser();
            HtmlMarkupParser expectedMarkupParser = new HtmlMarkupParser();
            ParserVisitor expectedListener = new Mock<ParserVisitor>().Object;

            // Act
            ParserContext context = new ParserContext(expectedBuffer, expectedCodeParser, expectedMarkupParser, expectedCodeParser, expectedListener);

            // Assert
            Assert.IsInstanceOfType(context.Source, typeof(BufferingTextReader));
            Assert.AreSame(expectedBuffer, context.Source);
            Assert.AreSame(expectedCodeParser, context.CodeParser);
            Assert.AreSame(expectedMarkupParser, context.MarkupParser);
            Assert.AreSame(expectedCodeParser, context.ActiveParser);
            Assert.AreSame(expectedListener, context.Visitor);
        }
 private static List<Span> ParseDocument(string documentContents, List<RazorError> errors = null) {
     errors = errors ?? new List<RazorError>();
     var reader = new BufferingTextReader(new StringReader(documentContents));
     var markupParser = new HtmlMarkupParser();
     var parserConsumerMock = new Mock<ParserVisitor>();
     List<Span> spans = new List<Span>();
     parserConsumerMock.Setup(consumer => consumer.VisitSpan(It.IsAny<Span>())).Callback<Span>(span => spans.Add(span));
     parserConsumerMock.Setup(consumer => consumer.VisitError(It.IsAny<RazorError>())).Callback<RazorError>(error => errors.Add(error));
     var codeParser = new TestMvcVBRazorCodeParser();
     var context = new ParserContext(reader, codeParser, markupParser, markupParser, parserConsumerMock.Object);
     codeParser.Context = context;
     markupParser.Context = context;
     markupParser.ParseDocument();
     return spans;
 }
        private static void RunDisposeTest(Action<LookaheadTextReader> triggerAction)
        {
            // Arrange
            DisposeTestMockTextReader source = new DisposeTestMockTextReader();
            LookaheadTextReader reader = new BufferingTextReader(source);

            // Act
            triggerAction(reader);

            // Assert
            Assert.True(source.Disposed);
        }
        public void BacktrackBufferIsClearedWhenEndReachedAndNoCurrentLookaheads()
        {
            // Arrange
            StringReader source = new StringReader(TestString);
            BufferingTextReader reader = new BufferingTextReader(source);

            reader.Read(); // Reader: "bcdefg"
            using (reader.BeginLookahead())
            {
                reader.Read(); // Reader: "cdefg"
            } // Reader: "bcdefg"
            reader.Read(); // Reader: "cdefg"
            Assert.NotNull(reader.Buffer); // Verify our assumption that the buffer still exists

            // Act
            reader.Read();

            // Assert
            Assert.False(reader.Buffering, "The buffer was not reset when the end was reached");
            Assert.Equal(0, reader.Buffer.Length);
        }