|
@@ -3,6 +3,7 @@
|
|
|
|
|
|
|
|
using System;
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
|
|
+using System.Threading.Tasks;
|
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components;
|
|
|
using Microsoft.AspNetCore.Components.RenderTree;
|
|
using Microsoft.AspNetCore.Components.RenderTree;
|
|
|
using Microsoft.AspNetCore.Components.Test.Helpers;
|
|
using Microsoft.AspNetCore.Components.Test.Helpers;
|
|
@@ -351,7 +352,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForTextboxes()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForTextboxes()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var component = CompileToComponent(
|
|
var component = CompileToComponent(
|
|
@@ -361,26 +362,27 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}");
|
|
}");
|
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", "Initial value", 1),
|
|
frame => AssertFrame.Attribute(frame, "value", "Initial value", 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = "Modified value"
|
|
|
|
|
- });
|
|
|
|
|
- Assert.Equal("Modified value", myValueProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs { Value = "Modified value", }));
|
|
|
|
|
+ Assert.Equal("Modified value", myValueProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForTextareas()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForTextareas()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var component = CompileToComponent(
|
|
var component = CompileToComponent(
|
|
@@ -390,26 +392,27 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}");
|
|
}");
|
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "textarea", 3, 0),
|
|
frame => AssertFrame.Element(frame, "textarea", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", "Initial value", 1),
|
|
frame => AssertFrame.Attribute(frame, "value", "Initial value", 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = "Modified value"
|
|
|
|
|
- });
|
|
|
|
|
- Assert.Equal("Modified value", myValueProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs() { Value = "Modified value", }));
|
|
|
|
|
+ Assert.Equal("Modified value", myValueProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForDateValues()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForDateValues()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var component = CompileToComponent(
|
|
var component = CompileToComponent(
|
|
@@ -419,27 +422,28 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}");
|
|
}");
|
|
|
var myDateProperty = component.GetType().GetProperty("MyDate");
|
|
var myDateProperty = component.GetType().GetProperty("MyDate");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", new DateTime(2018, 3, 4, 1, 2, 3).ToString(), 1),
|
|
frame => AssertFrame.Attribute(frame, "value", new DateTime(2018, 3, 4, 1, 2, 3).ToString(), 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- var newDateValue = new DateTime(2018, 3, 5, 4, 5, 6);
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = newDateValue.ToString()
|
|
|
|
|
- });
|
|
|
|
|
- Assert.Equal(newDateValue, myDateProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ var newDateValue = new DateTime(2018, 3, 5, 4, 5, 6);
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs() { Value = newDateValue.ToString(), }));
|
|
|
|
|
+ Assert.Equal(newDateValue, myDateProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForDateValuesWithFormatString()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForDateValuesWithFormatString()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var testDateFormat = "ddd yyyy-MM-dd";
|
|
var testDateFormat = "ddd yyyy-MM-dd";
|
|
@@ -450,22 +454,23 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}}");
|
|
}}");
|
|
|
var myDateProperty = component.GetType().GetProperty("MyDate");
|
|
var myDateProperty = component.GetType().GetProperty("MyDate");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", new DateTime(2018, 3, 4).ToString(testDateFormat), 1),
|
|
frame => AssertFrame.Attribute(frame, "value", new DateTime(2018, 3, 4).ToString(testDateFormat), 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = new DateTime(2018, 3, 5).ToString(testDateFormat)
|
|
|
|
|
- });
|
|
|
|
|
- Assert.Equal(new DateTime(2018, 3, 5), myDateProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs() { Value = new DateTime(2018, 3, 5).ToString(testDateFormat), }));
|
|
|
|
|
+ Assert.Equal(new DateTime(2018, 3, 5), myDateProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact] // In this case, onclick is just a normal HTML attribute
|
|
[Fact] // In this case, onclick is just a normal HTML attribute
|
|
@@ -496,8 +501,10 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
|
|
|
|
|
var clicked = component.GetType().GetProperty("Clicked");
|
|
var clicked = component.GetType().GetProperty("Clicked");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Act
|
|
// Act
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
|
|
|
|
|
// Assert
|
|
// Assert
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
@@ -527,8 +534,10 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
|
|
|
|
|
var clicked = component.GetType().GetProperty("Clicked");
|
|
var clicked = component.GetType().GetProperty("Clicked");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Act
|
|
// Act
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
|
|
|
|
|
// Assert
|
|
// Assert
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
@@ -546,7 +555,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForBoolValues()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForBoolValues()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var component = CompileToComponent(
|
|
var component = CompileToComponent(
|
|
@@ -556,26 +565,27 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}");
|
|
}");
|
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", true, 1),
|
|
frame => AssertFrame.Attribute(frame, "value", true, 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = false
|
|
|
|
|
- });
|
|
|
|
|
- Assert.False((bool)myValueProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs() { Value = false, }));
|
|
|
|
|
+ Assert.False((bool)myValueProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
|
- public void SupportsTwoWayBindingForEnumValues()
|
|
|
|
|
|
|
+ public async Task SupportsTwoWayBindingForEnumValues()
|
|
|
{
|
|
{
|
|
|
// Arrange/Act
|
|
// Arrange/Act
|
|
|
var myEnumType = FullTypeName<MyEnum>();
|
|
var myEnumType = FullTypeName<MyEnum>();
|
|
@@ -586,22 +596,23 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
|
}}");
|
|
}}");
|
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
var myValueProperty = component.GetType().GetProperty("MyValue");
|
|
|
|
|
|
|
|
|
|
+ var renderer = new TestRenderer();
|
|
|
|
|
+
|
|
|
// Assert
|
|
// Assert
|
|
|
- var frames = GetRenderTree(component);
|
|
|
|
|
|
|
+ Action<UIEventArgs> setter = null;
|
|
|
|
|
+ var frames = GetRenderTree(renderer, component);
|
|
|
Assert.Collection(frames,
|
|
Assert.Collection(frames,
|
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
frame => AssertFrame.Element(frame, "input", 3, 0),
|
|
|
frame => AssertFrame.Attribute(frame, "value", MyEnum.FirstValue.ToString(), 1),
|
|
frame => AssertFrame.Attribute(frame, "value", MyEnum.FirstValue.ToString(), 1),
|
|
|
frame =>
|
|
frame =>
|
|
|
{
|
|
{
|
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
AssertFrame.Attribute(frame, "onchange", 2);
|
|
|
-
|
|
|
|
|
- // Trigger the change event to show it updates the property
|
|
|
|
|
- ((Action<UIEventArgs>)frame.AttributeValue)(new UIChangeEventArgs
|
|
|
|
|
- {
|
|
|
|
|
- Value = MyEnum.SecondValue.ToString()
|
|
|
|
|
- });
|
|
|
|
|
- Assert.Equal(MyEnum.SecondValue, (MyEnum)myValueProperty.GetValue(component));
|
|
|
|
|
|
|
+ setter = Assert.IsType<Action<UIEventArgs>>(frame.AttributeValue);
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ // Trigger the change event to show it updates the property
|
|
|
|
|
+ await renderer.Invoke(() => setter(new UIChangeEventArgs() { Value = MyEnum.SecondValue.ToString(), }));
|
|
|
|
|
+ Assert.Equal(MyEnum.SecondValue, (MyEnum)myValueProperty.GetValue(component));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public enum MyEnum { FirstValue, SecondValue }
|
|
public enum MyEnum { FirstValue, SecondValue }
|