public void Lower_WithMultipleImports_SingleLineFileScopedSinglyOccurring()
        {
            // Arrange
            var source  = TestRazorSourceDocument.Create("<p>Hi!</p>");
            var imports = new[]
            {
                TestRazorSourceDocument.Create("@test value1"),
                TestRazorSourceDocument.Create("@test value2"),
            };

            var codeDocument = TestRazorCodeDocument.Create(source, imports);

            // Act
            var documentNode = Lower(codeDocument, b =>
            {
                b.AddDirective(DirectiveDescriptor.CreateDirective(
                                   "test",
                                   DirectiveKind.SingleLine,
                                   builder =>
                {
                    builder.AddMemberToken();
                    builder.Usage = DirectiveUsage.FileScopedSinglyOccurring;
                }));
            });

            // Assert
            Children(
                documentNode,
                n => Directive("test", n, c => DirectiveToken(DirectiveTokenKind.Member, "value2", c)),
                n => Html("<p>Hi!</p>", n));
        }
示例#2
0
        public void CreateDirective_CreatesDirective_WithProvidedKind()
        {
            // Arrange & Act
            var directive = DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine);

            // Assert
            Assert.Equal("test", directive.Directive);
            Assert.Equal(DirectiveKind.SingleLine, directive.Kind);
        }
示例#3
0
        public void AddOptionalNamespaceToken_AddsToken()
        {
            // Arrange & Act
            var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddOptionalNamespaceToken());

            // Assert
            var token = Assert.Single(descriptor.Tokens);

            Assert.Equal(DirectiveTokenKind.Namespace, token.Kind);
            Assert.True(token.Optional);
        }
示例#4
0
        public void AddOptionalMemberToken_AddsToken()
        {
            // Arrange & Act
            var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddOptionalMemberToken("Name", "Description"));

            // Assert
            var token = Assert.Single(descriptor.Tokens);

            Assert.Equal(DirectiveTokenKind.Member, token.Kind);
            Assert.True(token.Optional);
            Assert.Equal("Name", token.Name);
            Assert.Equal("Description", token.Description);
        }
示例#5
0
        public void AddStringToken_AddsToken()
        {
            // Arrange & Act
            var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddStringToken());

            // Assert
            var token = Assert.Single(descriptor.Tokens);

            Assert.Equal(DirectiveTokenKind.String, token.Kind);
            Assert.False(token.Optional);
            Assert.Null(token.Name);
            Assert.Null(token.Description);
        }
示例#6
0
        public void CreateDirective_WithConfigure_CreatesDirective_WithProvidedKind()
        {
            // Arrange
            var called = false;
            Action <IDirectiveDescriptorBuilder> configure = b => { called = true; };

            // Act
            var directive = DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine, configure);

            // Assert
            Assert.Equal("test", directive.Directive);
            Assert.Equal(DirectiveKind.SingleLine, directive.Kind);
            Assert.True(called);
        }
示例#7
0
        public void AddDirective_NoFeature_CreatesFeature()
        {
            // Arrange
            var engine = RazorEngine.CreateEmpty(b =>
            {
                // Act
                b.AddDirective(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine));
            });

            // Assert
            var actual = Assert.Single(engine.Features.OfType <IRazorDirectiveFeature>());

            Assert.IsType <DefaultRazorDirectiveFeature>(actual);

            var directive = Assert.Single(actual.Directives);

            Assert.Equal("test", directive.Directive);
        }
示例#8
0
        public void Execute_DirectiveWithError_PreservesDiagnosticsAndRemovesDirectiveNodeFromDocument()
        {
            // Arrange
            var content            = "@custom \"Hello\"";
            var expectedDiagnostic = RazorDiagnostic.Create(new RazorDiagnosticDescriptor("RZ9999", () => "Some diagnostic message.", RazorDiagnosticSeverity.Error), SourceSpan.Undefined);
            var sourceDocument     = TestRazorSourceDocument.Create(content);
            var codeDocument       = RazorCodeDocument.Create(sourceDocument);
            var defaultEngine      = RazorProjectEngine.Create(b =>
            {
                b.AddDirective(DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, d => d.AddStringToken()));
            }).Engine;
            var documentNode = Lower(codeDocument, defaultEngine);

            // Add the diagnostic to the directive node.
            var directiveNode = documentNode.FindDescendantNodes <DirectiveIntermediateNode>().Single();

            directiveNode.Diagnostics.Add(expectedDiagnostic);

            var pass = new DirectiveRemovalOptimizationPass()
            {
                Engine = defaultEngine,
            };

            // Act
            pass.Execute(codeDocument, documentNode);

            // Assert
            var diagnostic = Assert.Single(documentNode.Diagnostics);

            Assert.Equal(expectedDiagnostic, diagnostic);

            Children(documentNode,
                     node => Assert.IsType <NamespaceDeclarationIntermediateNode>(node));
            var @namespace = documentNode.Children[0];

            Children(@namespace,
                     node => Assert.IsType <ClassDeclarationIntermediateNode>(node));
            var @class = @namespace.Children[0];
            var method = SingleChild <MethodDeclarationIntermediateNode>(@class);

            Assert.Empty(method.Children);
        }
示例#9
0
        public void AddDirective_ExistingFeature_UsesFeature()
        {
            // Arrange
            var expected = new DefaultRazorDirectiveFeature();
            var engine   = RazorEngine.CreateEmpty(b =>
            {
                b.Features.Add(expected);

                // Act
                b.AddDirective(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine));
            });

            // Assert
            var actual = Assert.Single(engine.Features.OfType <IRazorDirectiveFeature>());

            Assert.Same(expected, actual);

            var directive = Assert.Single(actual.Directives);

            Assert.Equal("test", directive.Directive);
        }
示例#10
0
        public void Lower_WithImports_IgnoresBlockDirective()
        {
            // Arrange
            var source  = TestRazorSourceDocument.Create("<p>Hi!</p>");
            var imports = new[]
            {
                TestRazorSourceDocument.Create("@block token { }"),
            };

            var codeDocument = TestRazorCodeDocument.Create(source, imports);

            // Act
            var documentNode = Lower(codeDocument, b =>
            {
                b.AddDirective(DirectiveDescriptor.CreateDirective("block", DirectiveKind.RazorBlock, d => d.AddMemberToken()));
            });

            // Assert
            Children(
                documentNode,
                n => Html("<p>Hi!</p>", n));
        }
 public void Configure(RazorParserOptionsBuilder options)
 {
     options.Directives.Add(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine));
 }