Add some tests for invalid data
This commit is contained in:
parent
138a24c79c
commit
99e99c167a
|
|
@ -2,7 +2,6 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
|
||||||
using BasicTestApp;
|
using BasicTestApp;
|
||||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
|
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
|
||||||
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
|
||||||
|
|
@ -877,5 +876,147 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
Browser.Equal(string.Empty, () => boundValue.Text);
|
Browser.Equal(string.Empty, () => boundValue.Text);
|
||||||
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For date comparisons, we parse (non-formatted) values to compare them. Client-side and server-side
|
||||||
|
// Blazor have different formatting behaviour by default.
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxNullableDateTime_InvalidValue()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-nullable-datetime-invalid"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-nullable-datetime-invalid-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-nullable-datetime-invalid-mirror"));
|
||||||
|
Assert.Equal(string.Empty, target.GetAttribute("value"));
|
||||||
|
Assert.Equal(string.Empty, boundValue.Text);
|
||||||
|
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||||
|
var expected = new DateTime(2000, 1, 2);
|
||||||
|
target.SendKeys("01/02/2000 00:00:00\t");
|
||||||
|
Browser.Equal(expected, () => DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
|
||||||
|
// Modify target to something invalid - the invalid change is reverted
|
||||||
|
// back to the last valid value
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06A");
|
||||||
|
Browser.Equal("05/06A", () => target.GetAttribute("value"));
|
||||||
|
target.SendKeys("\t");
|
||||||
|
Browser.Equal(expected, () => DateTime.Parse(target.GetAttribute("value")));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
|
||||||
|
// Now change it to something valid
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06\t");
|
||||||
|
expected = new DateTime(DateTime.Now.Year, 5, 6);
|
||||||
|
Browser.Equal(expected, () => DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
}
|
||||||
|
|
||||||
|
// For date comparisons, we parse (non-formatted) values to compare them. Client-side and server-side
|
||||||
|
// Blazor have different formatting behaviour by default.
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxDateTimeOffset_InvalidValue()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-datetimeoffset-invalid"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-datetimeoffset-invalid-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-datetimeoffset-invalid-mirror"));
|
||||||
|
var expected = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
||||||
|
Assert.Equal(expected, DateTimeOffset.Parse(target.GetAttribute("value")));
|
||||||
|
Assert.Equal(expected, DateTimeOffset.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
|
||||||
|
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||||
|
expected = new DateTime(2000, 1, 2);
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("01/02/2000 00:00:00\t");
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
|
||||||
|
// Modify target to something invalid - the invalid change is reverted
|
||||||
|
// back to the last valid value
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06A");
|
||||||
|
Browser.Equal("05/06A", () => target.GetAttribute("value"));
|
||||||
|
target.SendKeys("\t");
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(target.GetAttribute("value")).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
|
||||||
|
// Now change it to something valid
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06\t");
|
||||||
|
expected = new DateTime(DateTime.Now.Year, 5, 6);
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For date comparisons, we parse (non-formatted) values to compare them. Client-side and server-side
|
||||||
|
// Blazor have different formatting behaviour by default.
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxDateTimeWithFormat_InvalidValue()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-datetime-format-invalid"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-datetime-format-invalid-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-datetime-format-invalid-mirror"));
|
||||||
|
var expected = new DateTime(1985, 3, 4);
|
||||||
|
Assert.Equal("03-04", target.GetAttribute("value"));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
|
||||||
|
// Modify target to something invalid - the invalid change is reverted
|
||||||
|
// back to the last valid value
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06");
|
||||||
|
Browser.Equal("05/06", () => target.GetAttribute("value"));
|
||||||
|
target.SendKeys("\t");
|
||||||
|
Browser.Equal("03-04", () => target.GetAttribute("value"));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
|
||||||
|
// Now change it to something valid
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05-06\t");
|
||||||
|
expected = new DateTime(DateTime.Now.Year, 5, 6);
|
||||||
|
Browser.Equal(expected, () => DateTime.Parse(boundValue.Text));
|
||||||
|
Assert.Equal(expected, DateTime.Parse(mirrorValue.GetAttribute("value")));
|
||||||
|
}
|
||||||
|
|
||||||
|
// For date comparisons, we parse (non-formatted) values to compare them. Client-side and server-side
|
||||||
|
// Blazor have different formatting behaviour by default.
|
||||||
|
[Fact]
|
||||||
|
public void CanBindTextboxNullableDateTimeOffsetWithFormat_InvalidValue()
|
||||||
|
{
|
||||||
|
var target = Browser.FindElement(By.Id("textbox-nullable-datetimeoffset-format-invalid"));
|
||||||
|
var boundValue = Browser.FindElement(By.Id("textbox-nullable-datetimeoffset-format-invalid-value"));
|
||||||
|
var mirrorValue = Browser.FindElement(By.Id("textbox-nullable-datetimeoffset-format-invalid-mirror"));
|
||||||
|
Assert.Equal(string.Empty, target.GetAttribute("value"));
|
||||||
|
Assert.Equal(string.Empty, boundValue.Text);
|
||||||
|
Assert.Equal(string.Empty, mirrorValue.GetAttribute("value"));
|
||||||
|
|
||||||
|
// Modify target; verify value is updated and that textboxes linked to the same data are updated
|
||||||
|
var expected = new DateTimeOffset(new DateTime(DateTime.Now.Year, 1, 2));
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("01-02\t");
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
|
||||||
|
// Modify target to something invalid - the invalid change is reverted
|
||||||
|
// back to the last valid value
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05/06");
|
||||||
|
Browser.Equal("05/06", () => target.GetAttribute("value"));
|
||||||
|
target.SendKeys("\t");
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(target.GetAttribute("value")).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
|
||||||
|
// Now change it to something valid
|
||||||
|
target.SendKeys(Keys.Control + "a"); // select all
|
||||||
|
target.SendKeys("05-06\t");
|
||||||
|
expected = new DateTime(DateTime.Now.Year, 5, 6);
|
||||||
|
Browser.Equal(expected.DateTime, () => DateTimeOffset.Parse(boundValue.Text).DateTime);
|
||||||
|
Assert.Equal(expected.DateTime, DateTimeOffset.Parse(mirrorValue.GetAttribute("value")).DateTime);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,12 +123,24 @@
|
||||||
<span id="textbox-nullable-datetime-value">@textboxNullableDateTimeValue</span>
|
<span id="textbox-nullable-datetime-value">@textboxNullableDateTimeValue</span>
|
||||||
<input id="textbox-nullable-datetime-mirror" @bind="textboxNullableDateTimeValue" readonly />
|
<input id="textbox-nullable-datetime-mirror" @bind="textboxNullableDateTimeValue" readonly />
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
Nullable DateTime (invalid input):
|
||||||
|
<input id="textbox-nullable-datetime-invalid" @bind="textboxNullableDateTimeInvalidValue" type="text" />
|
||||||
|
<span id="textbox-nullable-datetime-invalid-value">@textboxNullableDateTimeInvalidValue</span>
|
||||||
|
<input id="textbox-nullable-datetime-invalid-mirror" @bind="textboxNullableDateTimeInvalidValue" readonly />
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
DateTimeOffset:
|
DateTimeOffset:
|
||||||
<input id="textbox-datetimeoffset" @bind="textboxDateTimeOffsetValue" type="text" />
|
<input id="textbox-datetimeoffset" @bind="textboxDateTimeOffsetValue" type="text" />
|
||||||
<span id="textbox-datetimeoffset-value">@textboxDateTimeOffsetValue</span>
|
<span id="textbox-datetimeoffset-value">@textboxDateTimeOffsetValue</span>
|
||||||
<input id="textbox-datetimeoffset-mirror" @bind="textboxDateTimeOffsetValue" readonly />
|
<input id="textbox-datetimeoffset-mirror" @bind="textboxDateTimeOffsetValue" readonly />
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
DateTimeOffset (invalid input):
|
||||||
|
<input id="textbox-datetimeoffset-invalid" @bind="textboxDateTimeOffsetInvalidValue" type="text" />
|
||||||
|
<span id="textbox-datetimeoffset-invalid-value">@textboxDateTimeOffsetInvalidValue</span>
|
||||||
|
<input id="textbox-datetimeoffset-invalid-mirror" @bind="textboxDateTimeOffsetInvalidValue" readonly />
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Nullable DateTimeOffset:
|
Nullable DateTimeOffset:
|
||||||
<input id="textbox-nullable-datetimeoffset" @bind="textboxNullableDateTimeOffsetValue" type="text" />
|
<input id="textbox-nullable-datetimeoffset" @bind="textboxNullableDateTimeOffsetValue" type="text" />
|
||||||
|
|
@ -141,6 +153,18 @@
|
||||||
<span id="textbox-datetime-format-value">@textboxDateTimeFormatValue</span>
|
<span id="textbox-datetime-format-value">@textboxDateTimeFormatValue</span>
|
||||||
<input id="textbox-datetime-format-mirror" @bind="textboxDateTimeFormatValue" readonly />
|
<input id="textbox-datetime-format-mirror" @bind="textboxDateTimeFormatValue" readonly />
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
DateTime (format):
|
||||||
|
<input id="textbox-datetime-format-invalid" @bind="textboxDateTimeFormatValue" type="text" @bind:format="MM-dd" />
|
||||||
|
<span id="textbox-datetime-format-invalid-value">@textboxDateTimeFormatValue</span>
|
||||||
|
<input id="textbox-datetime-format-invalid-mirror" @bind="textboxDateTimeFormatValue" readonly />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
DateTime (format / invalid value):
|
||||||
|
<input id="textbox-datetime-format-invalid" @bind="textboxDateTimeFormatInvalidValue" type="text" @bind:format="MM-dd" />
|
||||||
|
<span id="textbox-datetime-format-invalid-value">@textboxDateTimeFormatInvalidValue</span>
|
||||||
|
<input id="textbox-datetime-format-invalid-mirror" @bind="textboxDateTimeFormatInvalidValue" readonly />
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Nullable DateTime (format):
|
Nullable DateTime (format):
|
||||||
<input id="textbox-nullable-datetime-format" @bind="textboxNullableDateTimeFormatValue" type="text" @bind:format="MM-dd" />
|
<input id="textbox-nullable-datetime-format" @bind="textboxNullableDateTimeFormatValue" type="text" @bind:format="MM-dd" />
|
||||||
|
|
@ -159,6 +183,12 @@
|
||||||
<span id="textbox-nullable-datetimeoffset-format-value">@textboxNullableDateTimeOffsetFormatValue</span>
|
<span id="textbox-nullable-datetimeoffset-format-value">@textboxNullableDateTimeOffsetFormatValue</span>
|
||||||
<input id="textbox-nullable-datetimeoffset-format-mirror" @bind="textboxNullableDateTimeOffsetFormatValue" readonly />
|
<input id="textbox-nullable-datetimeoffset-format-mirror" @bind="textboxNullableDateTimeOffsetFormatValue" readonly />
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
Nullable DateTimeOffset (format / invalid value):
|
||||||
|
<input id="textbox-nullable-datetimeoffset-format-invalid" @bind="textboxNullableDateTimeOffsetFormatInvalidValue" type="text" @bind:format="MM-dd" />
|
||||||
|
<span id="textbox-nullable-datetimeoffset-format-invalid-value">@textboxNullableDateTimeOffsetFormatInvalidValue</span>
|
||||||
|
<input id="textbox-nullable-datetimeoffset-format-invalid-mirror" @bind="textboxNullableDateTimeOffsetFormatInvalidValue" readonly />
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2>Text Area</h2>
|
<h2>Text Area</h2>
|
||||||
<p>
|
<p>
|
||||||
|
|
@ -254,11 +284,17 @@
|
||||||
DateTimeOffset textboxDateTimeOffsetValue = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
DateTimeOffset textboxDateTimeOffsetValue = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
||||||
DateTimeOffset? textboxNullableDateTimeOffsetValue = null;
|
DateTimeOffset? textboxNullableDateTimeOffsetValue = null;
|
||||||
|
|
||||||
|
DateTime? textboxNullableDateTimeInvalidValue = null;
|
||||||
|
DateTimeOffset textboxDateTimeOffsetInvalidValue = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
||||||
|
|
||||||
DateTime textboxDateTimeFormatValue = new DateTime(1985, 3, 4);
|
DateTime textboxDateTimeFormatValue = new DateTime(1985, 3, 4);
|
||||||
DateTime? textboxNullableDateTimeFormatValue = null;
|
DateTime? textboxNullableDateTimeFormatValue = null;
|
||||||
DateTimeOffset textboxDateTimeOffsetFormatValue = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
DateTimeOffset textboxDateTimeOffsetFormatValue = new DateTimeOffset(new DateTime(1985, 3, 4), TimeSpan.FromHours(8));
|
||||||
DateTimeOffset? textboxNullableDateTimeOffsetFormatValue = null;
|
DateTimeOffset? textboxNullableDateTimeOffsetFormatValue = null;
|
||||||
|
|
||||||
|
DateTime textboxDateTimeFormatInvalidValue = new DateTime(1985, 3, 4);
|
||||||
|
DateTimeOffset? textboxNullableDateTimeOffsetFormatInvalidValue = null;
|
||||||
|
|
||||||
bool includeFourthOption = false;
|
bool includeFourthOption = false;
|
||||||
enum SelectableValue { First, Second, Third, Fourth }
|
enum SelectableValue { First, Second, Third, Fourth }
|
||||||
SelectableValue selectValue = SelectableValue.Second;
|
SelectableValue selectValue = SelectableValue.Second;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue