forked from MaterialDesignInXAML/MaterialDesignInXamlToolkit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAutoSuggestTextBoxTests.cs
More file actions
216 lines (172 loc) · 7.83 KB
/
AutoSuggestTextBoxTests.cs
File metadata and controls
216 lines (172 loc) · 7.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
using System.Collections;
using System.ComponentModel;
using MaterialDesignThemes.UITests.Samples.AutoSuggestBoxes;
using MaterialDesignThemes.UITests.Samples.AutoSuggestTextBoxes;
using Xunit.Sdk;
namespace MaterialDesignThemes.UITests.WPF.AutoSuggestBoxes;
public class AutoSuggestBoxTests : TestBase
{
public AutoSuggestBoxTests(ITestOutputHelper output)
: base(output)
{
AttachedDebuggerToRemoteProcess = true;
}
[Fact]
public async Task CanFilterItems_WithSuggestionsAndDisplayMember_FiltersSuggestions()
{
await using var recorder = new TestRecorder(App);
//Arrange
IVisualElement<AutoSuggestBox> suggestBox = (await LoadUserControl<AutoSuggestTextBoxWithTemplate>()).As<AutoSuggestBox>();
IVisualElement<Popup> popup = await suggestBox.GetElement<Popup>();
IVisualElement<ListBox> suggestionListBox = await popup.GetElement<ListBox>();
//Act
await suggestBox.MoveKeyboardFocus();
await suggestBox.SendInput(new KeyboardInput("B"));
//Assert
Assert.True(await suggestBox.GetIsSuggestionOpen());
Assert.True(await popup.GetIsOpen());
//Validates these elements are found
await AssertExists(suggestionListBox, "Bananas");
await AssertExists(suggestionListBox, "Beans");
//Validate other items are hidden
await AssertExists(suggestionListBox, "Apples", false);
await AssertExists(suggestionListBox, "Mtn Dew", false);
await AssertExists(suggestionListBox, "Orange", false);
recorder.Success();
}
[Fact]
public async Task CanChoiceItem_FromTheSuggestions_AssertTheTextUpdated()
{
await using var recorder = new TestRecorder(App);
//Arrange
IVisualElement<AutoSuggestBox> suggestBox = (await LoadUserControl<AutoSuggestTextBoxWithTemplate>()).As<AutoSuggestBox>();
IVisualElement<Popup> popup = await suggestBox.GetElement<Popup>();
IVisualElement<ListBox> suggestionListBox = await popup.GetElement<ListBox>();
//Act
await suggestBox.MoveKeyboardFocus();
await suggestBox.SendInput(new KeyboardInput("B"));
//Assert
Assert.True(await suggestBox.GetIsSuggestionOpen());
Assert.True(await popup.GetIsOpen());
double? lastHeight = null;
await Wait.For(async () =>
{
double currentHeight = await suggestionListBox.GetActualHeight();
bool rv = currentHeight == lastHeight && currentHeight > 50;
lastHeight = currentHeight;
if (!rv)
{
await Task.Delay(100);
}
return rv;
});
//Choose Item from the list
var bananas = await suggestionListBox.GetElement<ListBoxItem>("/ListBoxItem[0]");
await bananas.MoveCursorTo();
await bananas.LeftClick();
// Wait for the text to be updated
await Task.Delay(50);
var suggestBoxText = await suggestBox.GetText();
//Validate that the current text is the same as the selected item
Assert.Equal("Bananas", suggestBoxText);
recorder.Success();
}
[Fact]
public async Task CanFilterItems_WithCollectionView_FiltersSuggestions()
{
await using var recorder = new TestRecorder(App);
//Arrange
IVisualElement userControl = await LoadUserControl<AutoSuggestTextBoxWithCollectionView>();
IVisualElement<AutoSuggestBox> suggestBox = await userControl.GetElement<AutoSuggestBox>();
IVisualElement<Popup> popup = await suggestBox.GetElement<Popup>();
IVisualElement<ListBox> suggestionListBox = await popup.GetElement<ListBox>();
//Act
await suggestBox.MoveKeyboardFocus();
await suggestBox.SendInput(new KeyboardInput("B"));
//Assert
Assert.True(await suggestBox.GetIsSuggestionOpen());
Assert.True(await popup.GetIsOpen());
//Validates these elements are found
await AssertExists(suggestionListBox, "Bananas");
await AssertExists(suggestionListBox, "Beans");
//Validate other items are hidden
await AssertExists(suggestionListBox, "Apples", false);
await AssertExists(suggestionListBox, "Mtn Dew", false);
await AssertExists(suggestionListBox, "Orange", false);
recorder.Success();
}
[Fact]
[Description("Issue 3761")]
public async Task AutoSuggestBox_MovesFocusToNextElement_WhenPopupIsClosed()
{
await using var recorder = new TestRecorder(App);
// Arrange
string xaml = """
<StackPanel>
<local:AutoSuggestTextBoxWithCollectionView x:Name="AutoSuggestBoxSample" />
<TextBox x:Name="NextTextBox" />
</StackPanel>
""";
IVisualElement<StackPanel> stackPanel = await LoadXaml<StackPanel>(xaml, ("local", typeof(AutoSuggestTextBoxWithCollectionView)));
var suggestBoxSample = await stackPanel.GetElement<AutoSuggestTextBoxWithCollectionView>("AutoSuggestBoxSample");
IVisualElement<AutoSuggestBox> suggestBox = await suggestBoxSample.GetElement<AutoSuggestBox>();
IVisualElement<TextBox> nextTextBox = await stackPanel.GetElement<TextBox>("NextTextBox");
// Act
await suggestBox.MoveKeyboardFocus();
await Task.Delay(50);
await suggestBox.SendInput(new KeyboardInput("B")); // Open the popup
await Task.Delay(50);
await suggestBox.SendInput(new KeyboardInput(Key.Escape)); // Close the popup
await Task.Delay(50);
await suggestBox.SendInput(new KeyboardInput(Key.Tab)); // Press TAB to focus the next element
await Task.Delay(50);
// Assert
Assert.False(await suggestBox.GetIsFocused());
Assert.True(await nextTextBox.GetIsFocused());
recorder.Success();
}
[Fact]
[Description("Issue 3815")]
public async Task AutoSuggestBox_KeysUpAndDown_WrapAround()
{
await using var recorder = new TestRecorder(App);
//Arrange
IVisualElement<AutoSuggestBox> suggestBox = (await LoadUserControl<AutoSuggestTextBoxWithTemplate>()).As<AutoSuggestBox>();
IVisualElement<Popup> popup = await suggestBox.GetElement<Popup>();
IVisualElement<ListBox> suggestionListBox = await popup.GetElement<ListBox>();
const int delay = 50;
//Act & Assert
await suggestBox.MoveKeyboardFocus();
await suggestBox.SendInput(new KeyboardInput("e"));
await Task.Delay(delay);
static int? GetSuggestionCount(AutoSuggestBox autoSuggestBox)
{
int? count = autoSuggestBox.Suggestions?.OfType<object>().Count();
return count;
}
int itemCount = await suggestBox.RemoteExecute(GetSuggestionCount) ?? 0;
//Assert that initially the first item is selected
int selectedIndex = await suggestionListBox.GetSelectedIndex();
Assert.Equal(0, selectedIndex);
await Task.Delay(delay);
//Assert that the last item is selected after pressing ArrowUp
await suggestBox.SendInput(new KeyboardInput(Key.Up));
Assert.Equal(itemCount - 1, await suggestionListBox.GetSelectedIndex());
await Task.Delay(delay);
//Assert that the first item is selected after pressing ArrowDown
await suggestBox.SendInput(new KeyboardInput(Key.Down));
Assert.Equal(0, await suggestionListBox.GetSelectedIndex());
}
private static async Task AssertExists(IVisualElement<ListBox> suggestionListBox, string text, bool existsOrNotCheck = true)
{
try
{
_ = await suggestionListBox.GetElement(ElementQuery.PropertyExpression<TextBlock>(x => x.Text, text));
Assert.True(existsOrNotCheck);
}
catch (Exception e) when (e is not TrueException)
{
Assert.False(existsOrNotCheck);
}
}
}