コード例 #1
0
        private static RazorTemplateEngine CreateTemplateEngine(
            string path = "C:\\This\\Path\\Is\\Just\\For\\Line\\Pragmas.cshtml",
            IEnumerable <TagHelperDescriptor> tagHelpers = null)
        {
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                RazorExtensions.Register(builder);

                if (tagHelpers != null)
                {
                    builder.AddTagHelpers(tagHelpers);
                }
            });

            // GetImports on RazorTemplateEngine will at least check that the item exists, so we need to pretend
            // that it does.
            var items = new List <RazorProjectItem>();

            items.Add(new TestRazorProjectItem(path));

            var project = new TestRazorProject(items);

            var templateEngine = new RazorTemplateEngine(engine, project);

            templateEngine.Options.DefaultImports = RazorSourceDocument.Create("@addTagHelper *, Test", "_TestImports.cshtml");
            return(templateEngine);
        }
コード例 #2
0
        private static RazorTemplateEngineFactoryService CreateTemplateEngineFactory(
            string path = TestLinePragmaFileName,
            IEnumerable <TagHelperDescriptor> tagHelpers = null)
        {
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                RazorExtensions.Register(builder);

                if (tagHelpers != null)
                {
                    builder.AddTagHelpers(tagHelpers);
                }
            });

            // GetImports on RazorTemplateEngine will at least check that the item exists, so we need to pretend
            // that it does.
            var items = new List <RazorProjectItem>();

            items.Add(new TestRazorProjectItem(path));

            var project = new TestRazorProject(items);

            var templateEngine = new RazorTemplateEngine(engine, project);

            templateEngine.Options.DefaultImports = RazorSourceDocument.Create("@addTagHelper *, Test", "_TestImports.cshtml");

            var templateEngineFactory = Mock.Of <RazorTemplateEngineFactoryService>(
                service => service.Create(It.IsAny <string>(), It.IsAny <Action <IRazorEngineBuilder> >()) == templateEngine);

            return(templateEngineFactory);
        }
コード例 #3
0
        private void RunDesignTimeTagHelpersTest(IEnumerable <TagHelperDescriptor> descriptors)
        {
            // Arrange
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                builder.Features.Add(new ApiSetsIRTestAdapter());
                builder.AddTagHelpers(descriptors);

                // Some of these tests use templates
                builder.AddTargetExtension(new TemplateTargetExtension());

                FunctionsDirective.Register(builder);
                InheritsDirective.Register(builder);
                SectionDirective.Register(builder);
            });

            var document = CreateCodeDocument();

            // Act
            engine.Process(document);

            // Assert
            AssertDocumentNodeMatchesBaseline(document.GetDocumentIntermediateNode());
            AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
            AssertSourceMappingsMatchBaseline(document);
        }
コード例 #4
0
        private void DesignTimeTest()
        {
            // Arrange
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                builder.ConfigureDocumentClassifier();

                // Some of these tests use templates
                builder.AddTargetExtension(new TemplateTargetExtension());

                FunctionsDirective.Register(builder);
                InheritsDirective.Register(builder);
                SectionDirective.Register(builder);
            });

            var document = CreateCodeDocument();

            // Act
            engine.Process(document);

            // Assert
            AssertDocumentNodeMatchesBaseline(document.GetDocumentIntermediateNode());
            AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
            AssertSourceMappingsMatchBaseline(document);
        }
コード例 #5
0
ファイル: RazorEngineTest.cs プロジェクト: sbauer/AspNetCore
    public void CreateDesignTime_Lambda_AddsFeaturesAndPhases()
    {
        // Arrange
        IRazorEngineFeature[] features = null;
        IRazorEnginePhase[]   phases   = null;

        // Act
        var engine = RazorEngine.CreateDesignTime(builder =>
        {
            builder.Features.Clear();
            builder.Phases.Clear();

            builder.Features.Add(Mock.Of <IRazorEngineFeature>());
            builder.Features.Add(Mock.Of <IRazorEngineFeature>());

            builder.Phases.Add(Mock.Of <IRazorEnginePhase>());
            builder.Phases.Add(Mock.Of <IRazorEnginePhase>());

            features = builder.Features.ToArray();
            phases   = builder.Phases.ToArray();
        });

        // Assert
        Assert.Collection(
            engine.Features,
            f => Assert.Same(features[0], f),
            f => Assert.Same(features[1], f));

        Assert.Collection(
            engine.Phases,
            p => Assert.Same(phases[0], p),
            p => Assert.Same(phases[1], p));
    }
コード例 #6
0
        private RazorEngine CreateDesignTimeEngine()
        {
            return(RazorEngine.CreateDesignTime(b =>
            {
                // Notice we're not registering the ModelDirective.Pass here so we can run it on demand.
                b.AddDirective(ModelDirective.Directive);

                // There's some special interaction with the inherits directive
                InheritsDirective.Register(b);
            }));
        }
コード例 #7
0
ファイル: RazorEngineTest.cs プロジェクト: sbauer/AspNetCore
    public void CreateDesignTime_Null_CreatesDefaultDesignTimeEngine()
    {
        // Arrange
        // Act
        var engine = RazorEngine.CreateDesignTime(configure: null);

        // Assert
        Assert.IsType <DefaultRazorEngine>(engine);
        AssertDefaultDesignTimeFeatures(engine.Features);
        AssertDefaultDesignTimePhases(engine.Phases);
        AssertDefaultDesignTimeTargetExtensions(engine);
    }
コード例 #8
0
        protected RazorEngine CreateDesignTimeEngine(CSharpCompilation compilation)
        {
            var references = compilation.References.Concat(new[] { compilation.ToMetadataReference() });

            return(RazorEngine.CreateDesignTime(b =>
            {
                RazorExtensions.Register(b);

                b.Features.Add(GetMetadataReferenceFeature(references));
                b.Features.Add(new CompilationTagHelperFeature());
            }));
        }
コード例 #9
0
        public override RazorTemplateEngine Create(string projectPath, Action <IRazorEngineBuilder> configure)
        {
            if (projectPath == null)
            {
                throw new ArgumentNullException(nameof(projectPath));
            }

            // In 15.5 we expect projectPath to be a directory, NOT the path to the csproj.
            var project       = FindProject(projectPath);
            var configuration = (project?.Configuration as MvcExtensibilityConfiguration) ?? DefaultConfiguration;

            RazorEngine engine;

            if (configuration.RazorAssembly.Identity.Version.Major == 1)
            {
                engine = RazorEngine.CreateDesignTime(b =>
                {
                    configure?.Invoke(b);

                    Mvc1_X.RazorExtensions.Register(b);

                    if (configuration.MvcAssembly.Identity.Version.Minor >= 1)
                    {
                        Mvc1_X.RazorExtensions.RegisterViewComponentTagHelpers(b);
                    }
                });

                var templateEngine = new Mvc1_X.MvcRazorTemplateEngine(engine, RazorProject.Create(projectPath));
                templateEngine.Options.ImportsFileName = "_ViewImports.cshtml";
                return(templateEngine);
            }
            else
            {
                engine = RazorEngine.CreateDesignTime(b =>
                {
                    configure?.Invoke(b);

                    MvcLatest.RazorExtensions.Register(b);
                });

                var templateEngine = new MvcLatest.MvcRazorTemplateEngine(engine, RazorProject.Create(projectPath));
                templateEngine.Options.ImportsFileName = "_ViewImports.cshtml";
                return(templateEngine);
            }
        }
コード例 #10
0
        private static RazorSyntaxTree GetSyntaxTree(StringTextSnapshot source, IEnumerable <DirectiveDescriptor> directives = null)
        {
            directives = directives ?? Enumerable.Empty <DirectiveDescriptor>();
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                foreach (var directive in directives)
                {
                    builder.AddDirective(directive);
                }
            });

            var sourceDocument = RazorSourceDocument.Create(source.GetText(), "test.cshtml");
            var codeDocument   = RazorCodeDocument.Create(sourceDocument);

            engine.Process(codeDocument);

            return(codeDocument.GetSyntaxTree());
        }
コード例 #11
0
        protected RazorEngine CreateDesignTimeEngine(IEnumerable <MetadataReference> references)
        {
            return(RazorEngine.CreateDesignTime(b =>
            {
                RazorExtensions.Register(b);

                b.Features.Add(GetMetadataReferenceFeature(references));
                b.Features.Add(new CompilationTagHelperFeature());
                b.Features.Add(new DefaultTagHelperDescriptorProvider()
                {
                    DesignTime = true
                });
                b.Features.Add(new ViewComponentTagHelperDescriptorProvider()
                {
                    ForceEnabled = true
                });
            }));
        }
コード例 #12
0
        public void CSharpDocument_DesignTime_PreservesParserErrors()
        {
            // Arrange
            var engine = RazorEngine.CreateDesignTime();

            var document = RazorCodeDocument.Create(TestRazorSourceDocument.Create("@{", fileName: "test.cshtml"));

            var expected = RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
                new SourceSpan(new SourceLocation("test.cshtml", 1, 0, 1), contentLength: 1), Resources.BlockName_Code, "}", "{");

            // Act
            engine.Process(document);

            // Assert
            var csharpDocument = document.GetCSharpDocument();
            var error          = Assert.Single(csharpDocument.Diagnostics);

            Assert.Equal(expected, error);
        }
コード例 #13
0
        private static RazorSyntaxTree GetSyntaxTree(string source)
        {
            var taghelper = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
                            .TagMatchingRuleDescriptor(rule => rule.RequireTagName("taghelper"))
                            .TypeName("TestTagHelper")
                            .Build();
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                builder.AddTagHelpers(taghelper);
            });

            var sourceDocument     = RazorSourceDocument.Create(source, "test.cshtml");
            var addTagHelperImport = RazorSourceDocument.Create("@addTagHelper *, TestAssembly", "import.cshtml");
            var codeDocument       = RazorCodeDocument.Create(sourceDocument, new[] { addTagHelperImport });

            engine.Process(codeDocument);

            return(codeDocument.GetSyntaxTree());
        }
        public override RazorTemplateEngine Create(string projectPath, Action <IRazorEngineBuilder> configure)
        {
            if (projectPath == null)
            {
                throw new ArgumentNullException(nameof(projectPath));
            }

            var engine = RazorEngine.CreateDesignTime(b =>
            {
                configure?.Invoke(b);

                // For now we're hardcoded to use MVC's extensibility.
                RazorExtensions.Register(b);
            });

            var templateEngine = new MvcRazorTemplateEngine(engine, RazorProject.Create(projectPath));

            templateEngine.Options.ImportsFileName = "_ViewImports.cshtml";
            return(templateEngine);
        }
コード例 #15
0
        public void NamespaceToken()
        {
            // Arrange
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                builder.ConfigureDocumentClassifier();

                builder.AddDirective(DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddNamespaceToken()));
            });

            var document = CreateCodeDocument();

            // Act
            engine.Process(document);

            // Assert
            AssertDocumentNodeMatchesBaseline(document.GetDocumentIntermediateNode());
            AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
            AssertSourceMappingsMatchBaseline(document);
        }
コード例 #16
0
        private static RazorCodeDocument GetCodeDocument(string source)
        {
            var taghelper = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
                            .BoundAttributeDescriptor(attr => attr.Name("show").TypeName("System.Boolean"))
                            .BoundAttributeDescriptor(attr => attr.Name("id").TypeName("System.Int32"))
                            .TagMatchingRuleDescriptor(rule => rule.RequireTagName("taghelper"))
                            .TypeName("TestTagHelper")
                            .Build();
            var engine = RazorEngine.CreateDesignTime(builder =>
            {
                builder.AddTagHelpers(taghelper);
            });

            var sourceDocument     = RazorSourceDocument.Create(source, "test.cshtml");
            var addTagHelperImport = RazorSourceDocument.Create("@addTagHelper *, TestAssembly", "import.cshtml");
            var codeDocument       = RazorCodeDocument.Create(sourceDocument, new[] { addTagHelperImport });

            engine.Process(codeDocument);

            return(codeDocument);
        }
コード例 #17
0
        public void CSharpDocument_DesignTime_PreservesParserErrors()
        {
            // Arrange
            var engine = RazorEngine.CreateDesignTime();

            var document = RazorCodeDocument.Create(TestRazorSourceDocument.Create("@{", fileName: "test.cshtml"));

            var expected = RazorDiagnostic.Create(new RazorError(
                                                      LegacyResources.FormatParseError_Expected_EndOfBlock_Before_EOF(LegacyResources.BlockName_Code, "}", "{"),
                                                      new SourceLocation("test.cshtml", 1, 0, 1),
                                                      length: 1));

            // Act
            engine.Process(document);

            // Assert
            var csharpDocument = document.GetCSharpDocument();
            var error          = Assert.Single(csharpDocument.Diagnostics);

            Assert.Equal(expected, error);
        }
コード例 #18
0
        public CodeGenerationBenchmark()
        {
            var current = new DirectoryInfo(AppContext.BaseDirectory);

            while (current != null && !File.Exists(Path.Combine(current.FullName, "MSN.cshtml")))
            {
                current = current.Parent;
            }

            var root = current;

            var engine = RazorEngine.Create(b => { RazorExtensions.Register(b); });

            var project = RazorProject.Create(root.FullName);

            DesignTimeTemplateEngine = new MvcRazorTemplateEngine(RazorEngine.CreateDesignTime(b => { RazorExtensions.Register(b); }), project);
            RuntimeTemplateEngine    = new MvcRazorTemplateEngine(RazorEngine.Create(b => { RazorExtensions.Register(b); }), project);

            var codeDocument = RuntimeTemplateEngine.CreateCodeDocument(Path.Combine(root.FullName, "MSN.cshtml"));

            Imports = codeDocument.Imports;
            MSN     = codeDocument.Source;
        }
コード例 #19
0
        private static DocumentIntermediateNode LowerDesignTime(RazorCodeDocument codeDocument)
        {
            var engine = RazorEngine.CreateDesignTime();

            return(Lower(codeDocument, engine));
        }