Skip to content
Merged
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 UI tests for TextBox with validation error
  • Loading branch information
nicolaihenriksen committed Feb 14, 2023
commit 7bf20826e1a06a91add9e78d35810b6b44255cd2
51 changes: 50 additions & 1 deletion MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.ComponentModel;
using System.ComponentModel;
using System.Globalization;
using System.Windows.Media;

Expand Down Expand Up @@ -513,6 +513,55 @@ public async Task TextBox_WithHintAndHelperText_RespectsPadding(string styleName

recorder.Success();
}

[Theory]
[InlineData("MaterialDesignFloatingHintTextBox", null)]
[InlineData("MaterialDesignFloatingHintTextBox", 5)]
[InlineData("MaterialDesignFloatingHintTextBox", 20)]
[InlineData("MaterialDesignFilledTextBox", null)]
[InlineData("MaterialDesignFilledTextBox", 5)]
[InlineData("MaterialDesignFilledTextBox", 20)]
[InlineData("MaterialDesignOutlinedTextBox", null)]
[InlineData("MaterialDesignOutlinedTextBox", 5)]
[InlineData("MaterialDesignOutlinedTextBox", 20)]
public async Task TextBox_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 textBox = await LoadXaml<TextBox>($@"
<TextBox {styleAttribute} {paddingAttribute}
materialDesign:HintAssist.Hint=""Hint text""
materialDesign:HintAssist.HelperText=""Helper text""
Width=""200"" VerticalAlignment=""Center"" HorizontalAlignment=""Center"">
<TextBox.Text>
<Binding RelativeSource=""{{RelativeSource Self}}"" Path=""Tag"" UpdateSourceTrigger=""PropertyChanged"">
<Binding.ValidationRules>
<local:NotEmptyValidationRule ValidatesOnTargetUpdated=""True""/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
", ("local", typeof(NotEmptyValidationRule)));

var contentHost = await textBox.GetElement<ScrollViewer>("PART_ContentHost");
var hint = await textBox.GetElement<SmartHint>("Hint");
var errorViewer = await textBox.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 NotEmptyValidationRule : ValidationRule
Expand Down