public void Execute_MultipleCustomDirectives_RemovesDirectiveNodesFromDocument()
    {
        // Arrange
        var content        = "@custom \"Hello\"" + Environment.NewLine + "@custom \"World\"";
        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);
        var pass         = new DirectiveRemovalOptimizationPass()
        {
            Engine = defaultEngine,
        };

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

        // Assert
        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);
    }
Esempio n. 2
0
        public void DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives()
        {
            // Arrange
            var customDescriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                builder =>
            {
                builder.Usage = DirectiveUsage.FileScopedSinglyOccurring;
                builder.AddTypeToken();
            });
            var somethingDescriptor = DirectiveDescriptor.CreateDirective(
                "something",
                DirectiveKind.SingleLine,
                builder =>
            {
                builder.Usage = DirectiveUsage.FileScopedMultipleOccurring;
                builder.AddMemberToken();
            });

            // Act & Assert
            ParseDocumentTest(
                @"@* There are two directives beneath this *@
@custom System.Text.Encoding.ASCIIEncoding

@something Else

<p>This is extra</p>",
                new[] { customDescriptor, somethingDescriptor });
        }
    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));
    }
    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);
    }
Esempio n. 5
0
        public void DirectiveDescriptor_AttributeToken_ErrorsIfDoesNotStartWithOpenBracket()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddAttributeToken());

            // Act & Assert
            ParseDocumentTest("@custom Serializable]",
                              new[] { descriptor });
        }
Esempio n. 6
0
        public void Directives_CanUseReservedWord_Namespace()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "namespace",
                DirectiveKind.SingleLine);

            // Act & Assert
            ParseDocumentTest(
                "@namespace",
                new[] { descriptor });
        }
Esempio n. 7
0
        public void Directives_CanUseReservedWord_Class()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "class",
                DirectiveKind.SingleLine);

            // Act & Assert
            ParseCodeBlockTest(
                "@class",
                new[] { descriptor });
        }
Esempio n. 8
0
        public void ExtensibleDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddTypeToken());

            // Act & Assert
            ParseDocumentTest(Environment.NewLine + "  @custom System.Text.Encoding.ASCIIEncoding",
                              new[] { descriptor });
        }
Esempio n. 9
0
        public void DirectiveDescriptor_ErrorsForInvalidMemberTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddMemberToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom -Some_Member",
                new[] { descriptor });
        }
Esempio n. 10
0
        public void DirectiveDescriptor_AllowsWhiteSpaceAroundTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddTypeToken().AddMemberToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom    System.Text.Encoding.ASCIIEncoding       Some_Member    ",
                new[] { descriptor });
        }
Esempio n. 11
0
        public void OptionalDirectiveTokens_WithMultipleOptionalTokens_AreParsed()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddOptionalStringToken().AddOptionalTypeToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"{formaction}?/{id}?\" System.String",
                new[] { descriptor });
        }
Esempio n. 12
0
        public void DirectiveDescriptor_ErrorsWhenMissingEndBrace()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.CodeBlock,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"Hello\" {",
                new[] { descriptor });
        }
Esempio n. 13
0
        public void DirectiveDescriptor_ErrorsExtraContentAfterDirective()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"hello\" \"world\"",
                new[] { descriptor });
        }
Esempio n. 14
0
        public void Parser_ParsesNamespaceDirectiveToken_WithMultipleSegments()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddNamespaceToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom BaseNamespace.Foo.Bar",
                new[] { descriptor });
        }
Esempio n. 15
0
        public void DirectiveDescriptor_CanHandleInvalidNamespaceTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddNamespaceToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom System<" + Environment.NewLine,
                new[] { descriptor });
        }
Esempio n. 16
0
        public void DirectiveDescriptor_CanHandleEOFIncompleteNamespaceTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddNamespaceToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom System.",
                new[] { descriptor });
        }
Esempio n. 17
0
        public void DirectiveDescriptor_TokensMustBeSeparatedBySpace()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddStringToken().AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"string1\"\"string2\"",
                new[] { descriptor });
        }
Esempio n. 18
0
        public void OptionalDirectiveTokens_WithBraces_AreParsed()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddOptionalStringToken());

            // Act & Assert
            ParseCodeBlockTest(
                "@custom \"{formaction}?/{id}?\"",
                new[] { descriptor });
        }
Esempio n. 19
0
        public void DirectiveDescriptor_NoErrorsSemicolonAfterDirective()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"hello\" ;  ",
                new[] { descriptor });
        }
Esempio n. 20
0
        public void DirectiveDescriptor_UnderstandsStringTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"AString\"",
                new[] { descriptor });
        }
Esempio n. 21
0
        public void DirectiveDescriptor_AllowsTupleTypes_IgnoresTrailingWhitespace()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddTypeToken());

            // Act & Assert
            ParseDocumentTest(
                $"@custom (bool, int?)   ",
                new[] { descriptor });
        }
Esempio n. 22
0
        public void DirectiveDescriptor_StringToken_ParserErrorForPartialQuotedValue()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom AString\"",
                new[] { descriptor });
        }
Esempio n. 23
0
        public void DirectiveDescriptor_ErrorsWhenExtraContentBeforeBlockStart()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.CodeBlock,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"Hello\" World { foo(); bar(); }",
                new[] { descriptor });
        }
Esempio n. 24
0
        public void OptionalDirectiveTokens_AreSkipped()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddOptionalStringToken());

            // Act & Assert
            ParseCodeBlockTest(
                "@custom ",
                new[] { descriptor });
        }
Esempio n. 25
0
        public void OptionalDirectiveTokens_WithSimpleTokens_AreParsed()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddOptionalStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"simple-value\"",
                new[] { descriptor });
        }
Esempio n. 26
0
        public void DirectiveDescriptor_UnderstandsRazorBlocks()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.RazorBlock,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"Header\" { <p>F{o}o</p> }",
                new[] { descriptor });
        }
Esempio n. 27
0
        public void OptionalMemberTokens_WithMemberSpecified_IsParsed()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "TestDirective",
                DirectiveKind.SingleLine,
                b => b.AddOptionalMemberToken().AddOptionalStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@TestDirective PropertyName",
                new[] { descriptor });
        }
Esempio n. 28
0
        public void DirectiveDescriptor_UnderstandsCodeBlocks()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.CodeBlock,
                b => b.AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom \"Name\" { foo(); bar(); }",
                new[] { descriptor });
        }
Esempio n. 29
0
        public void DirectiveDescriptor_UnderstandsMultipleTokens()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "custom",
                DirectiveKind.SingleLine,
                b => b.AddTypeToken().AddMemberToken().AddStringToken());

            // Act & Assert
            ParseDocumentTest(
                "@custom System.Text.Encoding.ASCIIEncoding Some_Member \"AString\"",
                new[] { descriptor });
        }
Esempio n. 30
0
        public void OptionalMemberTokens_WithMissingMember_IsParsed()
        {
            // Arrange
            var descriptor = DirectiveDescriptor.CreateDirective(
                "TestDirective",
                DirectiveKind.SingleLine,
                b => b.AddOptionalMemberToken().AddOptionalStringToken());

            // Act & Assert
            ParseCodeBlockTest(
                "@TestDirective ",
                new[] { descriptor });
        }