Example #1
0
        public void ViewParsing(bool designTime)
        {
            // Arrange
            var chunkTreeCache = new DefaultChunkTreeCache(new TestFileProvider());
            var resolver       = new TagHelperDescriptorResolver(designTime: false);
            var razorHost      = new MvcRazorHost(chunkTreeCache, resolver)
            {
                DesignTimeMode = designTime
            };
            var assembly     = typeof(RazorTests).GetTypeInfo().Assembly;
            var assemblyName = assembly.GetName().Name;
            var stream       = assembly.GetManifestResourceStream($"{assemblyName}.compiler.resources.RazorTests.TestFile.cshtml");
            GeneratorResults result;

            // Act
            using (Collector.StartCollection())
            {
                result = razorHost.GenerateCode("test/path", stream);
            }

            // Assert
            Assert.Empty(result.ErrorSink.Errors);
            Assert.Empty(result.ParserErrors);
            Assert.True(result.Success);
        }
Example #2
0
        internal MvcRazorHost(ICodeTreeCache codeTreeCache, RazorPathNormalizer pathNormalizer)
            : base(new CSharpRazorCodeLanguage())
        {
            _pathNormalizer = pathNormalizer;
            _baseType       = BaseType;
            _codeTreeCache  = codeTreeCache;

            TagHelperDescriptorResolver = new TagHelperDescriptorResolver();
            DefaultBaseClass            = BaseType + "<" + DefaultModel + ">";
            DefaultNamespace            = "Asp";
            // Enable instrumentation by default to allow precompiled views to work with BrowserLink.
            EnableInstrumentation = true;
            GeneratedClassContext = new GeneratedClassContext(
                executeMethodName: "ExecuteAsync",
                writeMethodName: "Write",
                writeLiteralMethodName: "WriteLiteral",
                writeToMethodName: "WriteTo",
                writeLiteralToMethodName: "WriteLiteralTo",
                templateTypeName: "Microsoft.AspNet.Mvc.Razor.HelperResult",
                defineSectionMethodName: "DefineSection",
                generatedTagHelperContext: new GeneratedTagHelperContext
            {
                ExecutionContextTypeName      = typeof(TagHelperExecutionContext).FullName,
                ExecutionContextAddMethodName = nameof(TagHelperExecutionContext.Add),
                ExecutionContextAddTagHelperAttributeMethodName =
                    nameof(TagHelperExecutionContext.AddTagHelperAttribute),
                ExecutionContextAddHtmlAttributeMethodName = nameof(TagHelperExecutionContext.AddHtmlAttribute),
                ExecutionContextOutputPropertyName         = nameof(TagHelperExecutionContext.Output),

                RunnerTypeName           = typeof(TagHelperRunner).FullName,
                RunnerRunAsyncMethodName = nameof(TagHelperRunner.RunAsync),

                ScopeManagerTypeName        = typeof(TagHelperScopeManager).FullName,
                ScopeManagerBeginMethodName = nameof(TagHelperScopeManager.Begin),
                ScopeManagerEndMethodName   = nameof(TagHelperScopeManager.End),

                TagHelperContentTypeName = nameof(TagHelperContent),

                // Can't use nameof because RazorPage is not accessible here.
                CreateTagHelperMethodName            = "CreateTagHelper",
                StartTagHelperWritingScopeMethodName = "StartTagHelperWritingScope",
                EndTagHelperWritingScopeMethodName   = "EndTagHelperWritingScope",

                WriteTagHelperAsyncMethodName   = "WriteTagHelperAsync",
                WriteTagHelperToAsyncMethodName = "WriteTagHelperToAsync",

                // Can't use nameof because IHtmlHelper is (also) not accessible here.
                MarkAsHtmlEncodedMethodName = HtmlHelperPropertyName + ".Raw",
            })
            {
                ResolveUrlMethodName   = "Href",
                BeginContextMethodName = "BeginContext",
                EndContextMethodName   = "EndContext"
            };

            foreach (var ns in _defaultNamespaces)
            {
                NamespaceImports.Add(ns);
            }
        }
Example #3
0
 public CompositeTagHelperDescriptorResolver(
     TagHelperDescriptorResolver tagHelperDescriptorResolver,
     ViewComponentTagHelperDescriptorResolver viewComponentTagHelperDescriptorResolver)
 {
     _tagHelperDescriptorResolver = tagHelperDescriptorResolver;
     _viewComponentTagHelperDescriptorResolver = viewComponentTagHelperDescriptorResolver;
 }
Example #4
0
        protected IMvcRazorHost GetRazorHost()
        {
            var descriptorResolver = new TagHelperDescriptorResolver(TagHelperTypeResolver, designTime: false);

            return(new MvcRazorHost(new DefaultChunkTreeCache(FileProvider))
            {
                TagHelperDescriptorResolver = descriptorResolver
            });
        }
Example #5
0
        /// <summary>
        /// Initializes a new instance of <see cref="MvcRazorHost"/> using the specified <paramref name="fileSystem"/>.
        /// </summary>
        /// <param name="fileSystem">A <see cref="IFileSystem"/> rooted at the application base path.</param>
        public MvcRazorHost(IFileSystem fileSystem)
            : base(new CSharpRazorCodeLanguage())
        {
            _fileSystem = fileSystem;
            _baseType   = BaseType;

            TagHelperDescriptorResolver = new TagHelperDescriptorResolver();
            DefaultBaseClass            = BaseType + '<' + DefaultModel + '>';
            DefaultNamespace            = "Asp";
            // Enable instrumentation by default to allow precompiled views to work with BrowserLink.
            EnableInstrumentation = true;
            GeneratedClassContext = new GeneratedClassContext(
                executeMethodName: "ExecuteAsync",
                writeMethodName: "Write",
                writeLiteralMethodName: "WriteLiteral",
                writeToMethodName: "WriteTo",
                writeLiteralToMethodName: "WriteLiteralTo",
                templateTypeName: "Microsoft.AspNet.Mvc.Razor.HelperResult",
                defineSectionMethodName: "DefineSection",
                generatedTagHelperContext: new GeneratedTagHelperContext
            {
                ExecutionContextTypeName      = typeof(TagHelperExecutionContext).FullName,
                ExecutionContextAddMethodName = nameof(TagHelperExecutionContext.Add),
                ExecutionContextAddTagHelperAttributeMethodName =
                    nameof(TagHelperExecutionContext.AddTagHelperAttribute),
                ExecutionContextAddHtmlAttributeMethodName = nameof(TagHelperExecutionContext.AddHtmlAttribute),
                ExecutionContextOutputPropertyName         = nameof(TagHelperExecutionContext.Output),

                RunnerTypeName           = typeof(TagHelperRunner).FullName,
                RunnerRunAsyncMethodName = nameof(TagHelperRunner.RunAsync),

                ScopeManagerTypeName        = typeof(TagHelperScopeManager).FullName,
                ScopeManagerBeginMethodName = nameof(TagHelperScopeManager.Begin),
                ScopeManagerEndMethodName   = nameof(TagHelperScopeManager.End),

                OutputGenerateStartTagMethodName = nameof(TagHelperOutput.GenerateStartTag),
                OutputGenerateContentMethodName  = nameof(TagHelperOutput.GenerateContent),
                OutputGenerateEndTagMethodName   = nameof(TagHelperOutput.GenerateEndTag),

                // Can't use nameof because RazorPage is not accessible here.
                CreateTagHelperMethodName   = "CreateTagHelper",
                StartWritingScopeMethodName = "StartWritingScope",
                EndWritingScopeMethodName   = "EndWritingScope",
            })
            {
                ResolveUrlMethodName   = "Href",
                BeginContextMethodName = "BeginContext",
                EndContextMethodName   = "EndContext"
            };

            foreach (var ns in _defaultNamespaces)
            {
                NamespaceImports.Add(ns);
            }
        }
Example #6
0
        public void TagHelperResolution(bool designTime)
        {
            var descriptorResolver    = new TagHelperDescriptorResolver(designTime);
            var errorSink             = new ErrorSink();
            var addTagHelperDirective = new TagHelperDirectiveDescriptor
            {
                DirectiveText = "*, Microsoft.AspNetCore.Mvc.TagHelpers",
                DirectiveType = TagHelperDirectiveType.AddTagHelper,
                Location      = SourceLocation.Zero
            };
            var resolutionContext = new TagHelperDescriptorResolutionContext(
                new[] { addTagHelperDirective },
                errorSink);
            IEnumerable <TagHelperDescriptor> descriptors;

            using (Collector.StartCollection())
            {
                descriptors = descriptorResolver.Resolve(resolutionContext);
            }

            Assert.NotEmpty(descriptors);
            Assert.Empty(errorSink.Errors);
        }