Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add failing DatePicker UI tests
  • Loading branch information
nicolaihenriksen committed Feb 17, 2023
commit 1e1647d84b265c5128c72d6b46c0b04ae6a9ee2b
91 changes: 91 additions & 0 deletions MaterialDesignThemes.UITests/WPF/DatePickers/DatePickerTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.ComponentModel;
using System.Globalization;
using MaterialDesignThemes.UITests.WPF.TextBoxes;

namespace MaterialDesignThemes.UITests.WPF.DatePickers;

Expand Down Expand Up @@ -112,6 +113,96 @@ public async Task OutlinedDatePicker_RespectsActiveAndInactiveBorderThickness_Wh

recorder.Success();
}

[Theory]
[InlineData("MaterialDesignFloatingHintDatePicker", null)]
[InlineData("MaterialDesignFloatingHintDatePicker", 5)]
[InlineData("MaterialDesignFloatingHintDatePicker", 20)]
[InlineData("MaterialDesignFilledDatePicker", null)]
[InlineData("MaterialDesignFilledDatePicker", 5)]
[InlineData("MaterialDesignFilledDatePicker", 20)]
[InlineData("MaterialDesignOutlinedDatePicker", null)]
[InlineData("MaterialDesignOutlinedDatePicker", 5)]
[InlineData("MaterialDesignOutlinedDatePicker", 20)]
public async Task DatePicker_WithHintAndHelperText_RespectsPadding(string styleName, int? padding)
{
await using var recorder = new TestRecorder(App);

// FIXME: Tolerance needed because TextFieldAssist.TextBoxViewMargin is in play and slightly modifies the hint text placement in certain cases.
double tolerance = 1.5;

string styleAttribute = $"Style=\"{{StaticResource {styleName}}}\"";
string paddingAttribute = padding.HasValue ? $"Padding=\"{padding.Value}\"" : string.Empty;

var datePicker = await LoadXaml<DatePicker>($@"
<DatePicker {styleAttribute} {paddingAttribute}
materialDesign:HintAssist.Hint=""Hint text""
materialDesign:HintAssist.HelperText=""Helper text""
Width=""200"" VerticalAlignment=""Center"" HorizontalAlignment=""Center"" />
");

var contentHost = await datePicker.GetElement<ScrollViewer>("PART_ContentHost");
var hint = await datePicker.GetElement<SmartHint>("Hint");
var helperText = await datePicker.GetElement<TextBlock>("HelperTextTextBlock");

Rect? contentHostCoordinates = await contentHost.GetCoordinates();
Rect? hintCoordinates = await hint.GetCoordinates();
Rect? helperTextCoordinates = await helperText.GetCoordinates();

Assert.InRange(Math.Abs(contentHostCoordinates.Value.Left - hintCoordinates.Value.Left), 0, tolerance);
Assert.InRange(Math.Abs(contentHostCoordinates.Value.Left - helperTextCoordinates.Value.Left), 0, tolerance);

recorder.Success();
}

[Theory]
[InlineData("MaterialDesignFloatingHintDatePicker", null)]
[InlineData("MaterialDesignFloatingHintDatePicker", 5)]
[InlineData("MaterialDesignFloatingHintDatePicker", 20)]
[InlineData("MaterialDesignFilledDatePicker", null)]
[InlineData("MaterialDesignFilledDatePicker", 5)]
[InlineData("MaterialDesignFilledDatePicker", 20)]
[InlineData("MaterialDesignOutlinedDatePicker", null)]
[InlineData("MaterialDesignOutlinedDatePicker", 5)]
[InlineData("MaterialDesignOutlinedDatePicker", 20)]
public async Task DatePicker_WithHintAndValidationError_RespectsPadding(string styleName, int? padding)
{
await using var recorder = new TestRecorder(App);

// FIXME: Tolerance needed because TextFieldAssist.TextBoxViewMargin is in play and slightly modifies the hint text placement in certain cases.
double tolerance = 1.5;

string styleAttribute = $"Style=\"{{StaticResource {styleName}}}\"";
string paddingAttribute = padding.HasValue ? $"Padding=\"{padding.Value}\"" : string.Empty;

var datePicker = await LoadXaml<DatePicker>($@"
<DatePicker {styleAttribute} {paddingAttribute}
materialDesign:HintAssist.Hint=""Hint text""
materialDesign:HintAssist.HelperText=""Helper text""
Width=""200"" VerticalAlignment=""Center"" HorizontalAlignment=""Center"">
<DatePicker.Text>
<Binding RelativeSource=""{{RelativeSource Self}}"" Path=""Tag"" UpdateSourceTrigger=""PropertyChanged"">
<Binding.ValidationRules>
<local:NotEmptyValidationRule ValidatesOnTargetUpdated=""True""/>
</Binding.ValidationRules>
</Binding>
</DatePicker.Text>
</DatePicker>
", ("local", typeof(NotEmptyValidationRule)));

var contentHost = await datePicker.GetElement<ScrollViewer>("PART_ContentHost");
var hint = await datePicker.GetElement<SmartHint>("Hint");
var errorViewer = await datePicker.GetElement<Border>("DefaultErrorViewer");

Rect? contentHostCoordinates = await contentHost.GetCoordinates();
Rect? hintCoordinates = await hint.GetCoordinates();
Rect? errorViewerCoordinates = await errorViewer.GetCoordinates();

Assert.InRange(Math.Abs(contentHostCoordinates.Value.Left - hintCoordinates.Value.Left), 0, tolerance);
Assert.InRange(Math.Abs(contentHostCoordinates.Value.Left - errorViewerCoordinates.Value.Left), 0, tolerance);

recorder.Success();
}
}

public class FutureDateValidationRule : ValidationRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@
CornerRadius="{TemplateBinding wpf:TextFieldAssist.UnderlineCornerRadius}"
Visibility="{TemplateBinding wpf:TextFieldAssist.DecorationVisibility}" />
<Canvas x:Name="HelperTextWrapper" VerticalAlignment="Bottom">
<TextBlock Canvas.Top="2"
<TextBlock x:Name="HelperTextTextBlock" Canvas.Top="2"
MaxWidth="{Binding ActualWidth, ElementName=border}"
FontSize="{TemplateBinding wpf:HintAssist.HelperTextFontSize}"
Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
Expand Down