Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 6d1dab1

Browse files
Importing tests (set to not compile)
1 parent 13ecbb2 commit 6d1dab1

File tree

4 files changed

+306
-0
lines changed

4 files changed

+306
-0
lines changed
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
using System.Collections.Generic;
2+
using System.Collections.ObjectModel;
3+
using System.Reactive.Linq;
4+
using System.Windows.Controls;
5+
using System.Windows.Input;
6+
using System.Windows.Media.Imaging;
7+
using GitHub.Tests.TestHelpers;
8+
using GitHub.UI;
9+
using GitHub.UI.Helpers;
10+
using Moq;
11+
using Xunit;
12+
13+
public class AutoCompleteBoxTests
14+
{
15+
public class TheItemsSourceProperty
16+
{
17+
[STAFact]
18+
public void SelectsFirstItemWhenSetToNonEmptyCollection()
19+
{
20+
var obs = Observable.Return(new BitmapImage());
21+
22+
var suggestions = new List<AutoCompleteSuggestion>
23+
{
24+
new AutoCompleteSuggestion("aaaa", obs, ":", ":"),
25+
new AutoCompleteSuggestion("bbbb", obs, ":", ":"),
26+
new AutoCompleteSuggestion("ccc", obs, ":", ":")
27+
};
28+
var result = new AutoCompleteResult(1, new ReadOnlyCollection<AutoCompleteSuggestion>(suggestions));
29+
var advisor = Mock.Of<IAutoCompleteAdvisor>(
30+
a => a.GetAutoCompletionSuggestions(Args.String, Args.Int32) == Observable.Return(result));
31+
var textBox = new TextBox();
32+
var autoCompleteBox = new AutoCompleteBox(Mock.Of<IDpiManager>())
33+
{
34+
SelectionAdapter = new SelectorSelectionAdapter(new ListBox()),
35+
Advisor = advisor,
36+
TextBox = new TextBoxAutoCompleteTextInput { TextBox = textBox }
37+
};
38+
39+
textBox.Text = ":";
40+
41+
Assert.Equal("aaaa", ((AutoCompleteSuggestion) autoCompleteBox.SelectedItem).Name);
42+
Assert.Equal(":", autoCompleteBox.Text); // It should not have expanded it yet
43+
}
44+
}
45+
46+
public class TheIsDropDownOpenProperty
47+
{
48+
[STAFact]
49+
public void IsTrueWhenTextBoxChangesWithPrefixedValue()
50+
{
51+
var obs = Observable.Return(new BitmapImage());
52+
53+
var suggestions = new List<AutoCompleteSuggestion>
54+
{
55+
new AutoCompleteSuggestion("aaaa", obs, ":", ":"),
56+
new AutoCompleteSuggestion("bbbb", obs, ":", ":"),
57+
new AutoCompleteSuggestion("ccc", obs, ":", ":")
58+
};
59+
var result = new AutoCompleteResult(0, new ReadOnlyCollection<AutoCompleteSuggestion>(suggestions));
60+
var advisor = Mock.Of<IAutoCompleteAdvisor>(
61+
a => a.GetAutoCompletionSuggestions(Args.String, Args.Int32) == Observable.Return(result));
62+
var textBox = new TextBox();
63+
var autoCompleteBox = new AutoCompleteBox(Mock.Of<IDpiManager>())
64+
{
65+
SelectionAdapter = new SelectorSelectionAdapter(new ListBox()),
66+
Advisor = advisor,
67+
TextBox = new TextBoxAutoCompleteTextInput { TextBox = textBox }
68+
};
69+
70+
textBox.Text = ":";
71+
72+
Assert.True(autoCompleteBox.IsDropDownOpen);
73+
}
74+
75+
[STAFact]
76+
public void IsFalseAfterASuggestionIsSelected()
77+
{
78+
var obs = Observable.Return(new BitmapImage());
79+
80+
var suggestions = new List<AutoCompleteSuggestion>
81+
{
82+
new AutoCompleteSuggestion("aaaa", obs, ":", ":"),
83+
new AutoCompleteSuggestion("bbbb", obs, ":", ":"),
84+
new AutoCompleteSuggestion("ccc", obs, ":", ":")
85+
};
86+
var result = new AutoCompleteResult(2, new ReadOnlyCollection<AutoCompleteSuggestion>(suggestions));
87+
var advisor = Mock.Of<IAutoCompleteAdvisor>(
88+
a => a.GetAutoCompletionSuggestions(Args.String, Args.Int32) == Observable.Return(result));
89+
var selectionAdapter = new TestSelectorSelectionAdapter();
90+
var textBox = new TextBox();
91+
var autoCompleteBox = new AutoCompleteBox(Mock.Of<IDpiManager>())
92+
{
93+
SelectionAdapter = selectionAdapter,
94+
Advisor = advisor,
95+
TextBox = new TextBoxAutoCompleteTextInput {TextBox = textBox}
96+
};
97+
textBox.Text = "A :a";
98+
textBox.CaretIndex = 4;
99+
Assert.Equal(4, textBox.CaretIndex);
100+
Assert.Equal(4, autoCompleteBox.TextBox.CaretIndex);
101+
Assert.True(autoCompleteBox.IsDropDownOpen);
102+
103+
selectionAdapter.DoCommit();
104+
105+
Assert.Equal("A :aaaa: ", textBox.Text);
106+
Assert.False(autoCompleteBox.IsDropDownOpen);
107+
}
108+
109+
[STAFact]
110+
public void IsFalseAfterASuggestionIsCancelled()
111+
{
112+
var obs = Observable.Return(new BitmapImage());
113+
114+
var suggestions = new List<AutoCompleteSuggestion>
115+
{
116+
new AutoCompleteSuggestion("aaaa", obs, ":", ":"),
117+
new AutoCompleteSuggestion("bbbb", obs, ":", ":"),
118+
new AutoCompleteSuggestion("ccc", obs, ":", ":")
119+
};
120+
var result = new AutoCompleteResult(2, new ReadOnlyCollection<AutoCompleteSuggestion>(suggestions));
121+
var advisor = Mock.Of<IAutoCompleteAdvisor>(
122+
a => a.GetAutoCompletionSuggestions(Args.String, Args.Int32) == Observable.Return(result));
123+
var selectionAdapter = new TestSelectorSelectionAdapter();
124+
var textBox = new TextBox();
125+
var autoCompleteBox = new AutoCompleteBox(Mock.Of<IDpiManager>())
126+
{
127+
SelectionAdapter = selectionAdapter,
128+
Advisor = advisor,
129+
TextBox = new TextBoxAutoCompleteTextInput { TextBox = textBox }
130+
};
131+
textBox.Text = "A :a";
132+
textBox.CaretIndex = 4;
133+
Assert.Equal(4, textBox.CaretIndex);
134+
Assert.Equal(4, autoCompleteBox.TextBox.CaretIndex);
135+
Assert.True(autoCompleteBox.IsDropDownOpen);
136+
137+
selectionAdapter.DoCancel();
138+
139+
Assert.Equal("A :a", textBox.Text);
140+
Assert.False(autoCompleteBox.IsDropDownOpen);
141+
}
142+
143+
[STAFact]
144+
public void HandlesKeyPressesToSelectAndCancelSelections()
145+
{
146+
var obs = Observable.Return(new BitmapImage());
147+
148+
var suggestions = new List<AutoCompleteSuggestion>
149+
{
150+
new AutoCompleteSuggestion("aaaa", obs, ":", ":"),
151+
new AutoCompleteSuggestion("bbbb", obs, ":", ":"),
152+
new AutoCompleteSuggestion("ccc", obs, ":", ":")
153+
};
154+
var result = new AutoCompleteResult(2, new ReadOnlyCollection<AutoCompleteSuggestion>(suggestions));
155+
var advisor = Mock.Of<IAutoCompleteAdvisor>(
156+
a => a.GetAutoCompletionSuggestions(Args.String, Args.Int32) == Observable.Return(result));
157+
var selectionAdapter = new TestSelectorSelectionAdapter();
158+
var textBox = new TextBox();
159+
var autoCompleteBox = new AutoCompleteBox(Mock.Of<IDpiManager>())
160+
{
161+
SelectionAdapter = selectionAdapter,
162+
Advisor = advisor,
163+
TextBox = new TextBoxAutoCompleteTextInput { TextBox = textBox }
164+
};
165+
textBox.Text = "A :a";
166+
textBox.CaretIndex = 4;
167+
Assert.Equal(4, textBox.CaretIndex);
168+
Assert.Equal(4, autoCompleteBox.TextBox.CaretIndex);
169+
Assert.True(autoCompleteBox.IsDropDownOpen);
170+
selectionAdapter.SelectorControl.SelectedIndex = 1; // Select the second item
171+
172+
selectionAdapter.DoKeyDown(Key.Enter);
173+
174+
Assert.Equal("A :bbbb: ", textBox.Text);
175+
Assert.False(autoCompleteBox.IsDropDownOpen);
176+
177+
textBox.Text = "A :bbbb: :";
178+
textBox.CaretIndex = 10;
179+
180+
// Ensure we can re-open the dropdown
181+
Assert.True(autoCompleteBox.IsDropDownOpen);
182+
183+
selectionAdapter.DoKeyDown(Key.Escape);
184+
Assert.False(autoCompleteBox.IsDropDownOpen);
185+
Assert.Equal("A :bbbb: :", textBox.Text);
186+
}
187+
188+
class TestSelectorSelectionAdapter : SelectorSelectionAdapter
189+
{
190+
public TestSelectorSelectionAdapter()
191+
: base(new ListBox())
192+
{
193+
}
194+
195+
public void DoCommit()
196+
{
197+
base.OnCommit();
198+
}
199+
200+
public void DoCancel()
201+
{
202+
base.OnCancel();
203+
}
204+
205+
public void DoKeyDown(Key key)
206+
{
207+
var keyEventArgs = FakeKeyEventArgs.Create(key, false);
208+
HandleKeyDown(keyEventArgs);
209+
}
210+
}
211+
}
212+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System.Reactive.Linq;
2+
using System.Windows.Media.Imaging;
3+
using GitHub.UI;
4+
using NUnit.Framework;
5+
using Xunit;
6+
7+
public class AutoCompleteSuggestionTests
8+
{
9+
public class TheToStringMethod
10+
{
11+
[Theory]
12+
[InlineData(":", ":", ":foo:")]
13+
[InlineData("@", "", "@foo")]
14+
[InlineData("#", "", "#foo")]
15+
[InlineData("@", null, "@foo")]
16+
public void ReturnsWordSurroundedByPrefixAndSuffix(string prefix, string suffix, string expected)
17+
{
18+
var obs = Observable.Return(new BitmapImage());
19+
var suggestion = new AutoCompleteSuggestion("foo", obs, prefix, suffix);
20+
Assert.Equal(expected, suggestion.ToString());
21+
}
22+
}
23+
24+
public class TheGetSortRankMethod
25+
{
26+
[Theory]
27+
[InlineData("pat", "full name", 1)]
28+
[InlineData("yosemite", "pat name", 0)]
29+
[InlineData("minnie", "full pat", 0)]
30+
[InlineData("patrick", "full name", 1)]
31+
[InlineData("groot", "patrick name", 0)]
32+
[InlineData("driver", "danica patrick", 0)]
33+
[InlineData("patricka", "pat name", 1)]
34+
[InlineData("nomatch", "full name", -1)]
35+
public void ReturnsCorrectScoreForSuggestions(string login, string name, int expectedRank)
36+
{
37+
var obs = Observable.Return(new BitmapImage());
38+
39+
var suggestion = new AutoCompleteSuggestion(login, name, obs, "@", "");
40+
41+
int rank = suggestion.GetSortRank("pat");
42+
43+
Assert.Equal(expectedRank, rank);
44+
}
45+
46+
[Fact]
47+
public void ReturnsOneForEmptyString()
48+
{
49+
var obs = Observable.Return(new BitmapImage());
50+
51+
var suggestion = new AutoCompleteSuggestion("joe", "namathe", obs, "@", "");
52+
53+
int rank = suggestion.GetSortRank("");
54+
55+
Assert.Equal(1, rank);
56+
}
57+
}
58+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using GitHub.UI;
2+
using GitHub.UI.Controls.AutoCompleteBox;
3+
using Moq;
4+
using Xunit;
5+
6+
class AutoCompleteTextInputExtensionsTests
7+
{
8+
public class TheGetExpandedTextMethod
9+
{
10+
[Theory]
11+
[InlineData(":", 1, 0, ":apple: ")]
12+
[InlineData(":a", 2, 0, ":apple: ")]
13+
[InlineData(":ap", 3, 0, ":apple: ")]
14+
[InlineData(":a", 1, 0, ":apple: a")]
15+
[InlineData("Test :", 6, 5, "Test :apple: ")]
16+
[InlineData("Test :ap", 8, 5, "Test :apple: ")]
17+
[InlineData("Test :apother stuff", 8, 5, "Test :apple: other stuff")]
18+
public void ReturnsExpandedText(string text, int caretIndex, int completionOffset, string expected)
19+
{
20+
var textInput = Mock.Of<IAutoCompleteTextInput>(t => t.CaretIndex == caretIndex && t.Text == text);
21+
var expandedText = textInput.GetExpandedText(":apple:", completionOffset);
22+
Assert.Equal(expected, expandedText);
23+
}
24+
}
25+
}

test/GitHub.UI.UnitTests/GitHub.UI.UnitTests.csproj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
<PropertyGroup>
33
<TargetFramework>net46</TargetFramework>
44
</PropertyGroup>
5+
<ItemGroup>
6+
<Compile Remove="Controls\AutoCompleteBoxTests.cs" />
7+
<Compile Remove="Controls\AutoCompleteSuggestionTests.cs" />
8+
<Compile Remove="Controls\AutoCompleteTextInputExtensionsTests.cs" />
9+
</ItemGroup>
510

611
<ItemGroup>
712
<Reference Include="System.Xaml" />
@@ -22,6 +27,12 @@
2227
<Compile Include="..\Helpers\TestBaseClass.cs" />
2328
<Compile Include="..\Helpers\Urls.cs" />
2429
</ItemGroup>
30+
31+
<ItemGroup>
32+
<Content Include="Controls\AutoCompleteBoxTests.cs" />
33+
<Content Include="Controls\AutoCompleteSuggestionTests.cs" />
34+
<Content Include="Controls\AutoCompleteTextInputExtensionsTests.cs" />
35+
</ItemGroup>
2536

2637
<ItemGroup>
2738
<ProjectReference Include="..\..\src\GitHub.UI\GitHub.UI.csproj" />

0 commit comments

Comments
 (0)