Skip to content

Commit 6d1ea72

Browse files
Clear button does not clear uncommitted text in DatePicker and TimePicker (#3377)
* Add failing UI tests * Clear the associated TextBox when the clear button is pressed Tests run green now
1 parent 8847dec commit 6d1ea72

File tree

4 files changed

+66
-1
lines changed

4 files changed

+66
-1
lines changed

MaterialDesignThemes.UITests/WPF/DatePickers/DatePickerTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,35 @@ await Wait.For(async () =>
6060
recorder.Success();
6161
}
6262

63+
[Fact]
64+
[Description("Issue 3369")]
65+
public async Task OnDatePicker_WithClearButton_ClearsSelectedUncommittedText()
66+
{
67+
await using var recorder = new TestRecorder(App);
68+
69+
// Arrange
70+
var stackPanel = await LoadXaml<StackPanel>("""
71+
<StackPanel>
72+
<DatePicker materialDesign:TextFieldAssist.HasClearButton="True"/>
73+
</StackPanel>
74+
""");
75+
var datePicker = await stackPanel.GetElement<DatePicker>("/DatePicker");
76+
var datePickerTextBox = await stackPanel.GetElement<DatePickerTextBox>("/DatePickerTextBox");
77+
var clearButton = await datePicker.GetElement<Button>("PART_ClearButton");
78+
79+
await datePickerTextBox.SendKeyboardInput($"invalid date");
80+
Assert.Equal("invalid date", await datePickerTextBox.GetText());
81+
82+
// Act
83+
await clearButton.LeftClick();
84+
await Task.Delay(50);
85+
86+
// Assert
87+
Assert.Null(await datePickerTextBox.GetText());
88+
89+
recorder.Success();
90+
}
91+
6392
[Fact]
6493
[Description("Issue 2737")]
6594
public async Task OutlinedDatePicker_RespectsActiveAndInactiveBorderThickness_WhenAttachedPropertiesAreSet()

MaterialDesignThemes.UITests/WPF/TimePickers/TimePickerTests.cs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.ComponentModel;
1+
using System.ComponentModel;
22
using System.Globalization;
33
using MaterialDesignThemes.UITests.WPF.TextBoxes;
44

@@ -509,6 +509,36 @@ public async Task TimePicker_WithClearButton_ClearButtonClearsSelectedTime()
509509

510510
recorder.Success();
511511
}
512+
513+
[Fact]
514+
[Description("Issue 3369")]
515+
public async Task TimePicker_WithClearButton_ClearButtonClearsUncommittedText()
516+
{
517+
await using var recorder = new TestRecorder(App);
518+
519+
// Arrange
520+
var stackPanel = await LoadXaml<StackPanel>($"""
521+
<StackPanel>
522+
<materialDesign:TimePicker
523+
materialDesign:TextFieldAssist.HasClearButton="True" />
524+
</StackPanel>
525+
""");
526+
var timePicker = await stackPanel.GetElement<TimePicker>("/TimePicker");
527+
var timePickerTextBox = await timePicker.GetElement<TimePickerTextBox>("/TimePickerTextBox");
528+
var clearButton = await timePicker.GetElement<Button>("PART_ClearButton");
529+
530+
await timePickerTextBox.SendKeyboardInput($"invalid time");
531+
Assert.Equal("invalid time", await timePickerTextBox.GetText());
532+
533+
// Act
534+
await clearButton.LeftClick();
535+
await Task.Delay(50);
536+
537+
// Assert
538+
Assert.Null(await timePickerTextBox.GetText());
539+
540+
recorder.Success();
541+
}
512542
}
513543

514544
public class OnlyTenOClockValidationRule : ValidationRule

MaterialDesignThemes.Wpf/Internal/ClearText.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ static void OnClearCommand(object sender, ExecutedRoutedEventArgs e)
3939
{
4040
case DatePicker datePicker:
4141
datePicker.SetCurrentValue(DatePicker.SelectedDateProperty, null);
42+
datePicker.Text = string.Empty; // Clears the text in the DatePickerTextBox which could contain uncommitted text
4243
break;
4344
case TimePicker timePicker:
4445
timePicker.SetCurrentValue(TimePicker.SelectedTimeProperty, null);
46+
timePicker.Clear(); // Clears the text in the TimePickerTextBox which could contain uncommitted text
4547
break;
4648
case TextBox textBox:
4749
textBox.SetCurrentValue(TextBox.TextProperty, null);

MaterialDesignThemes.Wpf/TimePicker.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ public override void OnApplyTemplate()
312312
base.OnApplyTemplate();
313313
}
314314

315+
internal void Clear()
316+
=> _textBox?.Clear();
317+
318+
315319
private void TextBoxOnLostFocus(object sender, RoutedEventArgs routedEventArgs)
316320
{
317321
string? text = _textBox?.Text;

0 commit comments

Comments
 (0)