Ejemplo n.º 1
0
    public void WriteCSharpCodeAttributeValue_RendersCorrectly()
    {
        var writer         = new DesignTimeNodeWriter();
        var content        = "<input checked=\"hello-world @if(@true){ }\" />";
        var sourceDocument = TestRazorSourceDocument.Create(content);
        var codeDocument   = RazorCodeDocument.Create(sourceDocument);
        var documentNode   = Lower(codeDocument);
        var node           = documentNode.Children.OfType <HtmlAttributeIntermediateNode>().Single().Children[1] as CSharpCodeAttributeValueIntermediateNode;

        var context = TestCodeRenderingContext.CreateDesignTime(source: sourceDocument);

        // Act
        writer.WriteCSharpCodeAttributeValue(context, node);

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

        Assert.Equal(
            @"
#nullable restore
#line 1 ""test.cshtml""
                             if(@true){ }

#line default
#line hidden
#nullable disable
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 2
0
    public void WriteCSharpExpression_SkipsLinePragma_WithoutSource()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var node    = new CSharpExpressionIntermediateNode();
        var builder = IntermediateNodeBuilder.Create(node);

        builder.Add(new IntermediateToken()
        {
            Content = "i++",
            Kind    = TokenKind.CSharp,
        });

        // Act
        writer.WriteCSharpExpression(context, node);

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

        Assert.Equal(
            @"__o = i++;
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 3
0
    public void WriteCSharpCode_SkipsLinePragma_WithoutSource()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var node = new CSharpCodeIntermediateNode();

        IntermediateNodeBuilder.Create(node)
        .Add(new IntermediateToken()
        {
            Kind    = TokenKind.CSharp,
            Content = "if (true) { }"
        });

        // Act
        writer.WriteCSharpCode(context, node);

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

        Assert.Equal(
            @"if (true) { }
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 4
0
    public void WriteCSharpExpression_WithSource_WritesPadding()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var node = new CSharpExpressionIntermediateNode()
        {
            Source = new SourceSpan("test.cshtml", 8, 0, 8, 3),
        };
        var builder = IntermediateNodeBuilder.Create(node);

        builder.Add(new IntermediateToken()
        {
            Content = "i",
            Kind    = TokenKind.CSharp,
        });
        builder.Add(new MyExtensionIntermediateNode());
        builder.Add(new IntermediateToken()
        {
            Content = "++",
            Kind    = TokenKind.CSharp,
        });

        // Act
        writer.WriteCSharpExpression(context, node);

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

        Assert.Equal(
            @"
#nullable restore
#line 1 ""test.cshtml""
  __o = iRender Children
++;

#line default
#line hidden
#nullable disable
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 5
0
    public static CodeRenderingContext CreateDesignTime(
        string newLineString              = null,
        string suppressUniqueIds          = "test",
        RazorSourceDocument source        = null,
        IntermediateNodeWriter nodeWriter = null)
    {
        var codeWriter   = new CodeWriter();
        var documentNode = new DocumentIntermediateNode();
        var options      = RazorCodeGenerationOptions.CreateDesignTimeDefault();

        if (source == null)
        {
            source = TestRazorSourceDocument.Create();
        }

        var codeDocument = RazorCodeDocument.Create(source);

        if (newLineString != null)
        {
            codeDocument.Items[CodeRenderingContext.NewLineString] = newLineString;
        }

        if (suppressUniqueIds != null)
        {
            codeDocument.Items[CodeRenderingContext.SuppressUniqueIds] = suppressUniqueIds;
        }

        if (nodeWriter == null)
        {
            nodeWriter = new DesignTimeNodeWriter();
        }

        var context = new DefaultCodeRenderingContext(codeWriter, nodeWriter, codeDocument, documentNode, options);

        context.Visitor = new RenderChildrenVisitor(context);

        return(context);
    }
Ejemplo n.º 6
0
    public void WriteUsingDirective_NoSource_WritesContent()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var node = new UsingDirectiveIntermediateNode()
        {
            Content = "System",
        };

        // Act
        writer.WriteUsingDirective(context, node);

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

        Assert.Equal(
            @"using System;
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 7
0
    public void WriteUsingDirective_WithSource_WritesContentWithLinePragmaAndMapping()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var originalSpan          = new SourceSpan("test.cshtml", 0, 0, 0, 6);
        var generatedSpan         = new SourceSpan(null, 38 + Environment.NewLine.Length * 3, 3, 0, 6);
        var expectedSourceMapping = new SourceMapping(originalSpan, generatedSpan);
        var node = new UsingDirectiveIntermediateNode()
        {
            Content = "System",
            Source  = originalSpan,
        };

        // Act
        writer.WriteUsingDirective(context, node);

        // Assert
        var mapping = Assert.Single(((DefaultCodeRenderingContext)context).SourceMappings);

        Assert.Equal(expectedSourceMapping, mapping);
        var csharp = context.CodeWriter.GenerateCode();

        Assert.Equal(
            @"
#nullable restore
#line 1 ""test.cshtml""
using System;

#line default
#line hidden
#nullable disable
",
            csharp,
            ignoreLineEndingDifferences: true);
    }
Ejemplo n.º 8
0
    public void WriteCSharpCode_WritesPadding_WithSource()
    {
        // Arrange
        var writer  = new DesignTimeNodeWriter();
        var context = TestCodeRenderingContext.CreateDesignTime();

        var node = new CSharpCodeIntermediateNode()
        {
            Source = new SourceSpan("test.cshtml", 0, 0, 0, 17),
        };

        IntermediateNodeBuilder.Create(node)
        .Add(new IntermediateToken()
        {
            Kind    = TokenKind.CSharp,
            Content = "    if (true) { }",
        });

        // Act
        writer.WriteCSharpCode(context, node);

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

        Assert.Equal(
            @"
#nullable restore
#line 1 ""test.cshtml""
    if (true) { }

#line default
#line hidden
#nullable disable
",
            csharp,
            ignoreLineEndingDifferences: true);
    }