private ParserContext SetupTestRun(string document, Action <TextReader> positioningAction)
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            return(SetupTestRun(document, positioningAction, codeParser, markupParser, codeParser, new Mock <ParserVisitor>().Object));
        }
        private static List <Span> ParseDocument(
            string documentContents,
            List <RazorError> errors        = null,
            List <LineMapping> lineMappings = null)
        {
            errors = errors ?? new List <RazorError>();
            var markupParser = new HtmlMarkupParser();
            var codeParser   = new TestMvcCSharpRazorCodeParser();
            var reader       = new SeekableTextReader(documentContents);
            var context      = new ParserContext(
                reader,
                codeParser,
                markupParser,
                markupParser,
                new ErrorSink());

            codeParser.Context   = context;
            markupParser.Context = context;
            markupParser.ParseDocument();

            var results = context.CompleteParse();

            errors.AddRange(results.ParserErrors);
            return(results.Document.Flatten().ToList());
        }
Example #3
0
        private ParserContext SetupTestContext(string document)
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            return(SetupTestContext(document, b => { }, codeParser, markupParser, codeParser));
        }
Example #4
0
        private ParserContext SetupTestContext(string document, Action <TextReader> positioningAction)
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            return(SetupTestContext(document, positioningAction, codeParser, markupParser, codeParser));
        }
Example #5
0
        private static List <Span> ParseDocument(
            string documentContents,
            IList <RazorError> errors = null
            )
        {
            errors = errors ?? new List <RazorError>();
            var markupParser = new HtmlMarkupParser();
            var codeParser   = new TestMvcCSharpRazorCodeParser();
            var context      = new ParserContext(
                new SeekableTextReader(documentContents),
                codeParser,
                markupParser,
                markupParser
                );

            codeParser.Context   = context;
            markupParser.Context = context;
            markupParser.ParseDocument();

            ParserResults results = context.CompleteParse();

            foreach (RazorError error in results.ParserErrors)
            {
                errors.Add(error);
            }
            return(results.Document.Flatten().ToList());
        }
        private ParserContext SetupTestRun(string document, ParserVisitor listener)
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            return(SetupTestRun(document, b => { }, codeParser, markupParser, codeParser, listener));
        }
Example #7
0
    internal virtual RazorSyntaxTree ParseDocument(RazorLanguageVersion version, string document, IEnumerable <DirectiveDescriptor> directives, bool designTime = false, RazorParserFeatureFlags featureFlags = null, string fileKind = null)
    {
        directives = directives ?? Array.Empty <DirectiveDescriptor>();

        var source = TestRazorSourceDocument.Create(document, filePath: null, relativePath: null, normalizeNewLines: true);

        var options = CreateParserOptions(version, directives, designTime, featureFlags, fileKind);
        var context = new ParserContext(source, options);

        var codeParser   = new CSharpCodeParser(directives, context);
        var markupParser = new HtmlMarkupParser(context);

        codeParser.HtmlParser   = markupParser;
        markupParser.CodeParser = codeParser;

        var root = markupParser.ParseDocument().CreateRed();

        var diagnostics = context.ErrorSink.Errors;

        var codeDocument = RazorCodeDocument.Create(source);

        var syntaxTree = RazorSyntaxTree.Create(root, source, diagnostics, options);

        codeDocument.SetSyntaxTree(syntaxTree);

        var defaultDirectivePass = new DefaultDirectiveSyntaxTreePass();

        syntaxTree = defaultDirectivePass.Execute(codeDocument, syntaxTree);

        return(syntaxTree);
    }
        public void ConstructorAcceptsActiveParserIfIsSameAsEitherCodeOrMarkupParser()
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            new ParserContext(new BufferingTextReader(TextReader.Null), codeParser, markupParser, codeParser, new Mock <ParserVisitor>().Object);
            new ParserContext(new BufferingTextReader(TextReader.Null), codeParser, markupParser, markupParser, new Mock <ParserVisitor>().Object);
        }
Example #9
0
        public void IsHyphen_ReturnsTrueForADashSymbol()
        {
            // Arrange
            var dashSymbol = new HtmlSymbol("-", HtmlSymbolType.Text);

            // Act & Assert
            Assert.True(HtmlMarkupParser.IsHyphen(dashSymbol));
        }
Example #10
0
        public void IsHyphen_ReturnsFalseForNonDashSymbol(object symbol)
        {
            // Arrange
            var convertedSymbol = (HtmlSymbol)symbol;

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsHyphen(convertedSymbol));
        }
Example #11
0
        public void IsHyphen_ReturnsTrueForADashToken()
        {
            // Arrange
            var dashToken = new HtmlToken("-", HtmlTokenType.Text);

            // Act & Assert
            Assert.True(HtmlMarkupParser.IsHyphen(dashToken));
        }
        public void IsHyphen_ReturnsTrueForADashToken()
        {
            // Arrange
            var dashToken = SyntaxFactory.Token(SyntaxKind.Text, "-");

            // Act & Assert
            Assert.True(HtmlMarkupParser.IsHyphen(dashToken));
        }
Example #13
0
        public void ParseSectionMethodThrowsArgNullExceptionOnNullContext()
        {
            // Arrange
            HtmlMarkupParser parser = new HtmlMarkupParser();

            // Act and Assert
            Assert.Throws <InvalidOperationException>(() => parser.ParseSection(null, true), RazorResources.Parser_Context_Not_Set);
        }
        public void IsHyphen_ReturnsFalseForNonDashToken(object token)
        {
            // Arrange
            var convertedToken = (SyntaxToken)token;

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsHyphen(convertedToken));
        }
Example #15
0
        public void ConstructorAcceptsActiveParserIfIsSameAsEitherCodeOrMarkupParser()
        {
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();

            new ParserContext(new SeekableTextReader(TextReader.Null), codeParser, markupParser, codeParser);
            new ParserContext(new SeekableTextReader(TextReader.Null), codeParser, markupParser, markupParser);
        }
Example #16
0
        public void IsCommentContentEndingInvalid_ReturnsFalseForAllowedContent()
        {
            // Arrange
            var expectedSymbol1 = new HtmlSymbol("a", HtmlSymbolType.Text);
            var sequence        = Enumerable.Range((int)'a', 26).Select(item => new HtmlSymbol(((char)item).ToString(), HtmlSymbolType.Text));

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
Example #17
0
        public void IsCommentContentEndingInvalid_ReturnsTrueForDisallowedContent()
        {
            // Arrange
            var expectedSymbol1 = new HtmlSymbol("a", HtmlSymbolType.Text);
            var sequence        = new[] { new HtmlSymbol("<", HtmlSymbolType.OpenAngle), new HtmlSymbol("!", HtmlSymbolType.Bang), new HtmlSymbol("-", HtmlSymbolType.Text) };

            // Act & Assert
            Assert.True(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
Example #18
0
        public void IsCommentContentEndingInvalid_ReturnsFalseForEmptyContent()
        {
            // Arrange
            var expectedSymbol1 = new HtmlSymbol("a", HtmlSymbolType.Text);
            var sequence        = Array.Empty <HtmlSymbol>();

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
        public void IsCommentContentEndingInvalid_ReturnsFalseForAllowedContent()
        {
            // Arrange
            var expectedToken1 = SyntaxFactory.Token(SyntaxKind.Text, "a");
            var sequence       = Enumerable.Range((int)'a', 26).Select(item => SyntaxFactory.Token(SyntaxKind.Text, ((char)item).ToString()));

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
        public void IsCommentContentEndingInvalid_ReturnsFalseForEmptyContent()
        {
            // Arrange
            var expectedToken1 = SyntaxFactory.Token(SyntaxKind.Text, "a");
            var sequence       = Array.Empty <SyntaxToken>();

            // Act & Assert
            Assert.False(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
Example #21
0
        public static ParseResult Parse(Input input)
        {
            var document = CreateSourceDocument(input.Content);
            var options  = RazorParserOptions.Create(builder => {
                foreach (var directive in GetDirectives())
                {
                    builder.Directives.Add(directive);
                }

                builder.SetDesignTime(input.DesignTime);
            });

            // Syntax tree
            var context      = new ParserContext(document, options);
            var codeParser   = new CSharpCodeParser(GetDirectives(), context);
            var markupParser = new HtmlMarkupParser(context);

            codeParser.HtmlParser   = markupParser;
            markupParser.CodeParser = codeParser;
            var root = markupParser.ParseDocument().CreateRed();

            // IR tree
            RazorCodeDocument codeDocument;
            var engine = RazorProjectEngine.Create(configure: null);

            if (input.DesignTime)
            {
                codeDocument = engine.ProcessDesignTime(document, null, null, TestTagHelpers.GetDescriptors());
            }
            else
            {
                codeDocument = engine.Process(document, null, null, TestTagHelpers.GetDescriptors());
            }
            if (input.TagHelperPhase)
            {
                root = codeDocument.GetSyntaxTree().Root;
            }

            var syntaxTreeRoot = TreeSerializer.Serialize(root);

            var intermediateNode = codeDocument.GetDocumentIntermediateNode();
            var intermediateRoot = IRSerializer.Serialize(intermediateNode);

            // Generated code
            var cSharpDocument = codeDocument.GetCSharpDocument();
            var generatedCode  = new GeneratedCodeResult {
                Code = cSharpDocument.GeneratedCode
            };

            return(new ParseResult
            {
                SyntaxTreeRoot = syntaxTreeRoot,
                IntermediateRoot = intermediateRoot,
                GeneratedCode = generatedCode
            });
        }
Example #22
0
        public void ParseSectionMethodThrowsArgNullExceptionOnNullContext()
        {
            // Arrange
            var parser = new HtmlMarkupParser();

            // Act and Assert
            var exception = Assert.Throws <InvalidOperationException>(() => parser.ParseSection(null, true));

            Assert.Equal(RazorResources.Parser_Context_Not_Set, exception.Message);
        }
Example #23
0
 public void ConstructorAcceptsActiveParserIfIsSameAsEitherCodeOrMarkupParser()
 {
     var codeParser = new CSharpCodeParser();
     var markupParser = new HtmlMarkupParser();
     var errorSink = new ErrorSink();
     new ParserContext(
         new SeekableTextReader(TextReader.Null), codeParser, markupParser, codeParser, errorSink);
     new ParserContext(
         new SeekableTextReader(TextReader.Null), codeParser, markupParser, markupParser, errorSink);
 }
Example #24
0
        public void DecorateMarkupParserReturnsIncomingParser()
        {
            // Arrange
            var expected = new HtmlMarkupParser();

            // Act
            var actual = CreateHost().DecorateMarkupParser(expected);

            // Assert
            Assert.Same(expected, actual);
        }
Example #25
0
        public void AcceptAllButLastDoubleHypens_ReturnsTheDoubleHyphenSymbolAfterAcceptingTheDash()
        {
            // Arrange
            var sut = CreateTestParserForContent("--->");

            // Act
            var symbol = sut.AcceptAllButLastDoubleHyphens();

            // Assert
            Assert.Equal(doubleHyphenSymbol, symbol);
            Assert.True(sut.At(HtmlSymbolType.CloseAngle));
            Assert.True(HtmlMarkupParser.IsHyphen(sut.PreviousSymbol));
        }
        public void AcceptAllButLastDoubleHypens_ReturnsTheDoubleHyphenTokenAfterAcceptingTheDash()
        {
            // Arrange
            var sut = CreateTestParserForContent("--->");

            // Act
            var token = sut.AcceptAllButLastDoubleHyphens();

            // Assert
            Assert.True(doubleHyphenToken.IsEquivalentTo(token));
            Assert.True(sut.At(SyntaxKind.CloseAngle));
            Assert.True(HtmlMarkupParser.IsHyphen(sut.PreviousToken));
        }
Example #27
0
        public void ConstructorWithCodeLanguageAndMarkupParserSetsPropertiesAppropriately()
        {
            // Arrange
            var language = new CSharpRazorCodeLanguage();
            var expected = new HtmlMarkupParser();

            // Act
            var host = new RazorEngineHost(language, () => expected);

            // Assert
            VerifyCommonDefaults(host);
            Assert.Same(language, host.CodeLanguage);
            Assert.Same(expected, host.CreateMarkupParser());
        }
        public void IsCommentContentEndingInvalid_ReturnsTrueForDisallowedContent()
        {
            // Arrange
            var expectedToken1 = SyntaxFactory.Token(SyntaxKind.Text, "a");
            var sequence       = new[]
            {
                SyntaxFactory.Token(SyntaxKind.OpenAngle, "<"),
                SyntaxFactory.Token(SyntaxKind.Bang, "!"),
                SyntaxFactory.Token(SyntaxKind.Text, "-")
            };

            // Act & Assert
            Assert.True(HtmlMarkupParser.IsCommentContentEndingInvalid(sequence));
        }
Example #29
0
        public void SwitchActiveParserSetsCodeParserAsActiveIfMarkupParserCurrentlyActive()
        {
            // Arrange
            var           codeParser   = new CSharpCodeParser();
            var           markupParser = new HtmlMarkupParser();
            ParserContext context      = SetupTestRun("barbazbiz", b => b.Read(), codeParser, markupParser, markupParser, new Mock <ParserVisitor>().Object);

            Assert.AreSame(markupParser, context.ActiveParser);

            // Act
            context.SwitchActiveParser();

            // Assert
            Assert.AreSame(codeParser, context.ActiveParser);
        }
Example #30
0
        public void SwitchActiveParserSetsCodeParserAsActiveIfMarkupParserCurrentlyActive()
        {
            // Arrange
            var codeParser   = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();
            var context      = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, markupParser);

            Assert.Same(markupParser, context.ActiveParser);

            // Act
            context.SwitchActiveParser();

            // Assert
            Assert.Same(codeParser, context.ActiveParser);
        }
Example #31
0
        public void ConstructorInitializesProperties()
        {
            // Arrange
            var expectedBuffer       = new SeekableTextReader(TextReader.Null);
            var expectedCodeParser   = new CSharpCodeParser();
            var expectedMarkupParser = new HtmlMarkupParser();

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

            // Assert
            Assert.NotNull(context.Source);
            Assert.Same(expectedCodeParser, context.CodeParser);
            Assert.Same(expectedMarkupParser, context.MarkupParser);
            Assert.Same(expectedCodeParser, context.ActiveParser);
        }
Example #32
0
        public void ConstructorInitializesProperties()
        {
            // Arrange
            var expectedBuffer = new SeekableTextReader(TextReader.Null);
            var expectedCodeParser = new CSharpCodeParser();
            var expectedMarkupParser = new HtmlMarkupParser();

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

            // Assert
            Assert.NotNull(context.Source);
            Assert.Same(expectedCodeParser, context.CodeParser);
            Assert.Same(expectedMarkupParser, context.MarkupParser);
            Assert.Same(expectedCodeParser, context.ActiveParser);
        }
Example #33
0
        public void ParseBlockMethodThrowsArgNullExceptionOnNullContext()
        {
            // Arrange
            var parser = new HtmlMarkupParser();

            // Act and Assert
            var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseBlock());
            Assert.Equal(RazorResources.Parser_Context_Not_Set, exception.Message);
        }
        private static List<Span> ParseDocument(
            string documentContents,
            List<RazorError> errors = null,
            List<LineMapping> lineMappings = null)
        {
            errors = errors ?? new List<RazorError>();
            var markupParser = new HtmlMarkupParser();
            var codeParser = new TestMvcCSharpRazorCodeParser();
            var reader = new SeekableTextReader(documentContents);
            var context = new ParserContext(
                reader,
                codeParser,
                markupParser,
                markupParser,
                new ErrorSink());
            codeParser.Context = context;
            markupParser.Context = context;
            markupParser.ParseDocument();

            var results = context.CompleteParse();
            errors.AddRange(results.ParserErrors);
            return results.Document.Flatten().ToList();
        }
Example #35
0
        public void SwitchActiveParserSetsMarkupParserAsActiveIfCodeParserCurrentlyActive()
        {
            // Arrange
            var codeParser = new CSharpCodeParser();
            var markupParser = new HtmlMarkupParser();
            var context = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, codeParser);
            Assert.Same(codeParser, context.ActiveParser);

            // Act
            context.SwitchActiveParser();

            // Assert
            Assert.Same(markupParser, context.ActiveParser);
        }
Example #36
0
 private ParserContext SetupTestContext(string document)
 {
     var codeParser = new CSharpCodeParser();
     var markupParser = new HtmlMarkupParser();
     return SetupTestContext(document, b => { }, codeParser, markupParser, codeParser);
 }
Example #37
0
 private ParserContext SetupTestContext(string document, Action<TextReader> positioningAction)
 {
     var codeParser = new CSharpCodeParser();
     var markupParser = new HtmlMarkupParser();
     return SetupTestContext(document, positioningAction, codeParser, markupParser, codeParser);
 }