public void DescriptorResolver_DoesNotReturnInvalidTagHelpersWhenSpecified()
        {
            // Arrange
            var tagHelperDescriptorResolver =
                new TagHelperDescriptorResolver(
                    new TestTagHelperTypeResolver(TestableTagHelpers));

            // Act
            var descriptors = tagHelperDescriptorResolver.Resolve(
                "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_AbstractTagHelper, MyAssembly");

            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_GenericTagHelper`, MyAssembly"));
            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_NestedPublicTagHelper, MyAssembly"));
            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_NestedInternalTagHelper, MyAssembly"));
            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_PrivateTagHelper, MyAssembly"));
            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_ProtectedTagHelper, MyAssembly"));
            descriptors = descriptors.Concat(tagHelperDescriptorResolver.Resolve(
                                                 "Microsoft.AspNet.Razor.Runtime.Test.TagHelpers.Invalid_InternalTagHelper, MyAssembly"));

            // Assert
            Assert.Empty(descriptors);
        }
Esempio n. 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);
            }
        }
        public void DescriptorResolver_ResolvesMultipleTypes()
        {
            // Arrange
            var resolver = new TagHelperDescriptorResolver(
                new LookupBasedTagHelperTypeResolver(
                    new Dictionary <string, IEnumerable <Type> >(StringComparer.OrdinalIgnoreCase)
            {
                { "lookupText", new Type[] { typeof(Valid_PlainTagHelper), typeof(Valid_InheritedTagHelper) } },
            }));
            var expectedDescriptors = new TagHelperDescriptor[]
            {
                new TagHelperDescriptor("Valid_Plain",
                                        typeof(Valid_PlainTagHelper).FullName,
                                        ContentBehavior.None),
                new TagHelperDescriptor("Valid_Inherited",
                                        typeof(Valid_InheritedTagHelper).FullName,
                                        ContentBehavior.None)
            };

            // Act
            var descriptors = resolver.Resolve("lookupText").ToArray();

            // Assert
            Assert.Equal(descriptors.Length, 2);
            Assert.Equal(descriptors, expectedDescriptors, CompleteTagHelperDescriptorComparer.Default);
        }
        public void DescriptorResolver_DoesNotResolveTypesForNoTypeResolvingLookupText()
        {
            // Arrange
            var resolver = new TagHelperDescriptorResolver(
                new LookupBasedTagHelperTypeResolver(
                    new Dictionary <string, IEnumerable <Type> >(StringComparer.OrdinalIgnoreCase)
            {
                { "lookupText1", ValidTestableTagHelpers },
                { "lookupText2", new Type[] { typeof(Valid_PlainTagHelper) } }
            }));

            // Act
            var descriptors = resolver.Resolve("lookupText").ToArray();

            // Assert
            Assert.Empty(descriptors);
        }
        public void DescriptorResolver_ResolveThrowsIfNullOrEmptyLookupText(string lookupText)
        {
            // Arrange
            var tagHelperDescriptorResolver =
                new TagHelperDescriptorResolver(
                    new TestTagHelperTypeResolver(InvalidTestableTagHelpers));

            var expectedMessage =
                Resources.FormatTagHelperDescriptorResolver_InvalidTagHelperLookupText(lookupText) +
                Environment.NewLine +
                "Parameter name: lookupText";

            // Act & Assert
            var ex = Assert.Throws <ArgumentException>(nameof(lookupText),
                                                       () =>
            {
                tagHelperDescriptorResolver.Resolve(lookupText);
            });

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void DescriptorResolver_ResolvesOnlyTypeResolverProvidedTypes()
        {
            // Arrange
            var resolver = new TagHelperDescriptorResolver(
                new LookupBasedTagHelperTypeResolver(
                    new Dictionary <string, IEnumerable <Type> >(StringComparer.OrdinalIgnoreCase)
            {
                { "lookupText1", ValidTestableTagHelpers },
                { "lookupText2", new Type[] { typeof(Valid_PlainTagHelper) } }
            }));
            var expectedDescriptor = new TagHelperDescriptor("Valid_Plain",
                                                             typeof(Valid_PlainTagHelper).FullName,
                                                             ContentBehavior.None);

            // Act
            var descriptors = resolver.Resolve("lookupText2");

            // Assert
            var descriptor = Assert.Single(descriptors);

            Assert.Equal(descriptor, expectedDescriptor, CompleteTagHelperDescriptorComparer.Default);
        }
        public void DescriptorResolver_IgnoresSpaces(string lookupText)
        {
            // Arrange
            var tagHelperTypeResolver = new TestTagHelperTypeResolver(TestableTagHelpers)
            {
                OnGetLibraryDefinedTypes = (assemblyName) =>
                {
                    Assert.Equal("MyAssembly", assemblyName.Name);
                }
            };
            var tagHelperDescriptorResolver = new TagHelperDescriptorResolver(tagHelperTypeResolver);
            var expectedDescriptor          = new TagHelperDescriptor("Valid_Plain",
                                                                      typeof(Valid_PlainTagHelper).FullName,
                                                                      ContentBehavior.None);

            // Act
            var descriptors = tagHelperDescriptorResolver.Resolve(lookupText);

            // Assert
            var descriptor = Assert.Single(descriptors);

            Assert.Equal(expectedDescriptor, descriptor, CompleteTagHelperDescriptorComparer.Default);
        }