In RazorCompiler, support expressions with non-string or null values
This commit is contained in:
parent
8c2a32b87c
commit
5949045319
|
|
@ -59,6 +59,13 @@ namespace Microsoft.Blazor.RenderTree
|
||||||
public void AddText(string textContent)
|
public void AddText(string textContent)
|
||||||
=> Append(RenderTreeNode.Text(textContent));
|
=> Append(RenderTreeNode.Text(textContent));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Appends a node representing text content.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="textContent">Content for the new text node.</param>
|
||||||
|
public void AddText(object textContent)
|
||||||
|
=> AddText(textContent?.ToString());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Appends a node representing a string-valued attribute.
|
/// Appends a node representing a string-valued attribute.
|
||||||
/// The attribute is associated with the most recently added element.
|
/// The attribute is associated with the most recently added element.
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ namespace Microsoft.Blazor.RenderTree
|
||||||
internal static RenderTreeNode Text(string textContent) => new RenderTreeNode
|
internal static RenderTreeNode Text(string textContent) => new RenderTreeNode
|
||||||
{
|
{
|
||||||
NodeType = RenderTreeNodeType.Text,
|
NodeType = RenderTreeNodeType.Text,
|
||||||
TextContent = textContent,
|
TextContent = textContent ?? string.Empty,
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static RenderTreeNode Attribute(string name, string value) => new RenderTreeNode
|
internal static RenderTreeNode Attribute(string name, string value) => new RenderTreeNode
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,25 @@ namespace Microsoft.Blazor.Build.Test
|
||||||
node => AssertNode.Text(node, "Some plain text"));
|
node => AssertNode.Text(node, "Some plain text"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SupportsCSharpExpressions()
|
||||||
|
{
|
||||||
|
// Arrange/Act
|
||||||
|
var component = CompileToComponent(@"
|
||||||
|
@(""Hello"")
|
||||||
|
@((object)null)
|
||||||
|
@(123)
|
||||||
|
@(new object())
|
||||||
|
");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var nodes = GetRenderTree(component).Where(NotWhitespace);
|
||||||
|
Assert.Collection(nodes,
|
||||||
|
node => AssertNode.Text(node, "Hello"),
|
||||||
|
node => AssertNode.Text(node, "123"),
|
||||||
|
node => AssertNode.Text(node, new object().ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SupportsCSharpFunctionsBlock()
|
public void SupportsCSharpFunctionsBlock()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,11 @@ namespace Microsoft.Blazor.Test
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var builder = new RenderTreeBuilder(new TestRenderer());
|
var builder = new RenderTreeBuilder(new TestRenderer());
|
||||||
|
var nullString = (string)null;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
builder.AddText("First item");
|
builder.AddText("First item");
|
||||||
|
builder.AddText(nullString);
|
||||||
builder.AddText("Second item");
|
builder.AddText("Second item");
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -50,9 +52,29 @@ namespace Microsoft.Blazor.Test
|
||||||
Assert.Equal(0, nodes.Offset);
|
Assert.Equal(0, nodes.Offset);
|
||||||
Assert.Collection(nodes,
|
Assert.Collection(nodes,
|
||||||
node => AssertNode.Text(node, "First item"),
|
node => AssertNode.Text(node, "First item"),
|
||||||
|
node => AssertNode.Text(node, string.Empty),
|
||||||
node => AssertNode.Text(node, "Second item"));
|
node => AssertNode.Text(node, "Second item"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CanAddNonStringValueAsText()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var builder = new RenderTreeBuilder(new TestRenderer());
|
||||||
|
var nullObject = (object)null;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddText(1234);
|
||||||
|
builder.AddText(nullObject);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var nodes = builder.GetNodes();
|
||||||
|
Assert.Equal(0, nodes.Offset);
|
||||||
|
Assert.Collection(nodes,
|
||||||
|
node => AssertNode.Text(node, "1234"),
|
||||||
|
node => AssertNode.Text(node, string.Empty));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UnclosedElementsHaveNoEndDescendantIndex()
|
public void UnclosedElementsHaveNoEndDescendantIndex()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<h1>Counter</h1>
|
<h1>Counter</h1>
|
||||||
<p>Current count: @currentCount.ToString()</p>
|
<p>Current count: @currentCount</p>
|
||||||
<button onclick=@OnButtonClicked>Click me</button>
|
<button onclick=@OnButtonClicked>Click me</button>
|
||||||
|
|
||||||
@functions {
|
@functions {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue