コード例 #1
0
    public void WriteRazorCompiledItemAttributeMetadata_EscapesKeysAndValuesCorrectly()
    {
        // Arrange
        var extension = new MetadataAttributeTargetExtension()
        {
            CompiledItemMetadataAttributeName = "global::TestItemMetadata",
        };
        var context = TestCodeRenderingContext.CreateRuntime();

        var node = new RazorCompiledItemMetadataAttributeIntermediateNode
        {
            Key   = "\"test\" key",
            Value = @"""test"" value",
        };

        // Act
        extension.WriteRazorCompiledItemMetadataAttribute(context, node);

        // Assert
        var csharp = context.CodeWriter.GenerateCode().Trim();

        Assert.Equal(
            "[global::TestItemMetadata(\"\\\"test\\\" key\", \"\\\"test\\\" value\")]",
            csharp,
            ignoreLineEndingDifferences: true);
    }
コード例 #2
0
    private static void AddRouteTemplateMetadataAttribute(NamespaceDeclarationIntermediateNode @namespace, ClassDeclarationIntermediateNode @class, PageDirective pageDirective)
    {
        if (string.IsNullOrEmpty(pageDirective.RouteTemplate))
        {
            return;
        }

        var classIndex = @namespace.Children.IndexOf(@class);

        if (classIndex == -1)
        {
            return;
        }

        var metadataAttributeNode = new RazorCompiledItemMetadataAttributeIntermediateNode
        {
            Key   = RouteTemplateKey,
            Value = pageDirective.RouteTemplate,
        };

        // Metadata attributes need to be inserted right before the class declaration.
        @namespace.Children.Insert(classIndex, metadataAttributeNode);
    }
コード例 #3
0
    public void WriteRazorCompiledItemMetadataAttribute(CodeRenderingContext context, RazorCompiledItemMetadataAttributeIntermediateNode node)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        if (node == null)
        {
            throw new ArgumentNullException(nameof(node));
        }

        // [assembly: global::...RazorCompiledItemAttribute(@"{node.Key}", @"{node.Value}")]
        context.CodeWriter.Write("[");
        context.CodeWriter.Write(CompiledItemMetadataAttributeName);
        context.CodeWriter.Write("(");
        context.CodeWriter.WriteStringLiteral(node.Key);
        context.CodeWriter.Write(", ");
        context.CodeWriter.WriteStringLiteral(node.Value);
        context.CodeWriter.WriteLine(")]");
    }