// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; using System.Linq; using Microsoft.AspNet.Razor.Generator.Compiler; using Microsoft.AspNet.Razor.Parser; using Microsoft.AspNet.Razor.Parser.SyntaxTree; using Microsoft.AspNet.Razor.TagHelpers; using Microsoft.AspNet.Razor.Text; using Moq; using Xunit; namespace Microsoft.AspNet.Mvc.Razor { public class MvcRazorCodeParserTest { [Fact] public void GetTagHelperDescriptors_ReturnsDescriptorsFromViewStart() { // Arrange var builder = new BlockBuilder { Type = BlockType.Comment }; var block = new Block(builder); var codeTrees = new[] { new CodeTree { Chunks = new Chunk[] { new LiteralChunk { Text = "Hello world" }, new AddTagHelperChunk { LookupText = "Add Tag Helper" }, } }, new CodeTree { Chunks = new[] { new RemoveTagHelperChunk { LookupText = "Remove Tag Helper" }, } } }; IList descriptors = null; var resolver = new Mock(); resolver.Setup(r => r.Resolve(It.IsAny())) .Callback((TagHelperDescriptorResolutionContext context) => { descriptors = context.DirectiveDescriptors; }) .Returns(Enumerable.Empty()) .Verifiable(); var baseParser = new RazorParser(new CSharpCodeParser(), new HtmlMarkupParser(), resolver.Object); var parser = new TestableMvcRazorParser(baseParser, codeTrees, new Chunk[0]); var sink = new ParserErrorSink(); // Act var result = parser.GetTagHelperDescriptorsPublic(block, sink).ToArray(); // Assert Assert.NotNull(descriptors); Assert.Equal(2, descriptors.Count); Assert.Equal("Remove Tag Helper", descriptors[0].LookupText); Assert.Equal(SourceLocation.Undefined, descriptors[0].Location); Assert.Equal("Add Tag Helper", descriptors[1].LookupText); Assert.Equal(TagHelperDirectiveType.AddTagHelper, descriptors[1].DirectiveType); Assert.Equal(SourceLocation.Undefined, descriptors[1].Location); } private class TestableMvcRazorParser : MvcRazorParser { public TestableMvcRazorParser(RazorParser parser, IReadOnlyList codeTrees, IReadOnlyList defaultInheritedChunks) : base(parser, codeTrees, defaultInheritedChunks) { } public IEnumerable GetTagHelperDescriptorsPublic( Block documentRoot, ParserErrorSink errorSink) { return GetTagHelperDescriptors(documentRoot, errorSink); } } } }