Skip to content

Commit 223ce03

Browse files
committed
Fix double event issue added more unit tests.
1 parent a22ddae commit 223ce03

File tree

5 files changed

+89
-22
lines changed

5 files changed

+89
-22
lines changed

src/Majorsoft.Blazor.Components.TestApps.Common/Components/Typeahead.razor

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,15 @@ textarea {
486486
{
487487
_testData = JsonSerializer.Deserialize<StatesWithFlags[]>(jsonData);
488488
}
489-
489+
490+
//protected override async Task OnAfterRenderAsync(bool firstRender)
491+
//{
492+
// if(firstRender)
493+
// {
494+
// _input.SelectedItem = "Texas";
495+
// }
496+
//}
497+
490498
//TypeaheadInput
491499
private string _typeaheadInputValue = "";
492500
private string _selectedItem;

src/Majorsoft.Blazor.Components.Typeahead.Tests/TypeaheadInputTest.cs

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
using Majorsoft.Blazor.Components.Timer;
1212
using Majorsoft.Blazor.Components.Common.JsInterop.ElementInfo;
1313
using System.Text.Json;
14+
using System.Linq;
15+
using System.Threading.Tasks;
16+
using Microsoft.AspNetCore.Components.Web;
1417

1518
namespace Majorsoft.Blazor.Components.Typeahead.Tests
1619
{
@@ -25,11 +28,11 @@ private class StatesWithFlags
2528
public string Name { get; set; }
2629
public string Flag { get; set; }
2730
}
28-
private StatesWithFlags[] _testData = null;
31+
private static StatesWithFlags[] _testData = null;
2932
private const string JsonData = "[{\"Name\":\"Alabama\",\"Flag\":\"5/5c/Flag_of_Alabama.svg/45px-Flag_of_Alabama.svg.png\"},{\"Name\":\"Alaska\",\"Flag\":\"e/e6/Flag_of_Alaska.svg/43px-Flag_of_Alaska.svg.png\"},{\"Name\":\"Arizona\",\"Flag\":\"9/9d/Flag_of_Arizona.svg/45px-Flag_of_Arizona.svg.png\"},{\"Name\":\"Arkansas\",\"Flag\":\"9/9d/Flag_of_Arkansas.svg/45px-Flag_of_Arkansas.svg.png\"},{\"Name\":\"California\",\"Flag\":\"0/01/Flag_of_California.svg/45px-Flag_of_California.svg.png\"},{\"Name\":\"Colorado\",\"Flag\":\"4/46/Flag_of_Colorado.svg/45px-Flag_of_Colorado.svg.png\"},{\"Name\":\"Connecticut\",\"Flag\":\"9/96/Flag_of_Connecticut.svg/39px-Flag_of_Connecticut.svg.png\"},{\"Name\":\"Delaware\",\"Flag\":\"c/c6/Flag_of_Delaware.svg/45px-Flag_of_Delaware.svg.png\"},{\"Name\":\"Florida\",\"Flag\":\"f/f7/Flag_of_Florida.svg/45px-Flag_of_Florida.svg.png\"},{\"Name\":\"Georgia\",\"Flag\":\"5/54/Flag_of_Georgia_%28U.S._state%29.svg/46px-Flag_of_Georgia_%28U.S._state%29.svg.png\"},{\"Name\":\"Hawaii\",\"Flag\":\"e/ef/Flag_of_Hawaii.svg/46px-Flag_of_Hawaii.svg.png\"},{\"Name\":\"Idaho\",\"Flag\":\"a/a4/Flag_of_Idaho.svg/38px-Flag_of_Idaho.svg.png\"},{\"Name\":\"Illinois\",\"Flag\":\"0/01/Flag_of_Illinois.svg/46px-Flag_of_Illinois.svg.png\"},{\"Name\":\"Indiana\",\"Flag\":\"a/ac/Flag_of_Indiana.svg/45px-Flag_of_Indiana.svg.png\"},{\"Name\":\"Iowa\",\"Flag\":\"a/aa/Flag_of_Iowa.svg/44px-Flag_of_Iowa.svg.png\"},{\"Name\":\"Kansas\",\"Flag\":\"d/da/Flag_of_Kansas.svg/46px-Flag_of_Kansas.svg.png\"},{\"Name\":\"Kentucky\",\"Flag\":\"8/8d/Flag_of_Kentucky.svg/46px-Flag_of_Kentucky.svg.png\"},{\"Name\":\"Louisiana\",\"Flag\":\"e/e0/Flag_of_Louisiana.svg/46px-Flag_of_Louisiana.svg.png\"},{\"Name\":\"Maine\",\"Flag\":\"3/35/Flag_of_Maine.svg/45px-Flag_of_Maine.svg.png\"},{\"Name\":\"Maryland\",\"Flag\":\"a/a0/Flag_of_Maryland.svg/45px-Flag_of_Maryland.svg.png\"},{\"Name\":\"Massachusetts\",\"Flag\":\"f/f2/Flag_of_Massachusetts.svg/46px-Flag_of_Massachusetts.svg.png\"},{\"Name\":\"Michigan\",\"Flag\":\"b/b5/Flag_of_Michigan.svg/45px-Flag_of_Michigan.svg.png\"},{\"Name\":\"Minnesota\",\"Flag\":\"b/b9/Flag_of_Minnesota.svg/46px-Flag_of_Minnesota.svg.png\"},{\"Name\":\"Mississippi\",\"Flag\":\"4/42/Flag_of_Mississippi.svg/45px-Flag_of_Mississippi.svg.png\"},{\"Name\":\"Missouri\",\"Flag\":\"5/5a/Flag_of_Missouri.svg/46px-Flag_of_Missouri.svg.png\"},{\"Name\":\"Montana\",\"Flag\":\"c/cb/Flag_of_Montana.svg/45px-Flag_of_Montana.svg.png\"},{\"Name\":\"Nebraska\",\"Flag\":\"4/4d/Flag_of_Nebraska.svg/46px-Flag_of_Nebraska.svg.png\"},{\"Name\":\"Nevada\",\"Flag\":\"f/f1/Flag_of_Nevada.svg/45px-Flag_of_Nevada.svg.png\"},{\"Name\":\"New Hampshire\",\"Flag\":\"2/28/Flag_of_New_Hampshire.svg/45px-Flag_of_New_Hampshire.svg.png\"},{\"Name\":\"New Jersey\",\"Flag\":\"9/92/Flag_of_New_Jersey.svg/45px-Flag_of_New_Jersey.svg.png\"},{\"Name\":\"New Mexico\",\"Flag\":\"c/c3/Flag_of_New_Mexico.svg/45px-Flag_of_New_Mexico.svg.png\"},{\"Name\":\"New York\",\"Flag\":\"1/1a/Flag_of_New_York.svg/46px-Flag_of_New_York.svg.png\"},{\"Name\":\"North Carolina\",\"Flag\":\"b/bb/Flag_of_North_Carolina.svg/45px-Flag_of_North_Carolina.svg.png\"},{\"Name\":\"North Dakota\",\"Flag\":\"e/ee/Flag_of_North_Dakota.svg/38px-Flag_of_North_Dakota.svg.png\"},{\"Name\":\"Ohio\",\"Flag\":\"4/4c/Flag_of_Ohio.svg/46px-Flag_of_Ohio.svg.png\"},{\"Name\":\"Oklahoma\",\"Flag\":\"6/6e/Flag_of_Oklahoma.svg/45px-Flag_of_Oklahoma.svg.png\"},{\"Name\":\"Oregon\",\"Flag\":\"b/b9/Flag_of_Oregon.svg/46px-Flag_of_Oregon.svg.png\"},{\"Name\":\"Pennsylvania\",\"Flag\":\"f/f7/Flag_of_Pennsylvania.svg/45px-Flag_of_Pennsylvania.svg.png\"},{\"Name\":\"Rhode Island\",\"Flag\":\"f/f3/Flag_of_Rhode_Island.svg/32px-Flag_of_Rhode_Island.svg.png\"},{\"Name\":\"South Carolina\",\"Flag\":\"6/69/Flag_of_South_Carolina.svg/45px-Flag_of_South_Carolina.svg.png\"},{\"Name\":\"South Dakota\",\"Flag\":\"1/1a/Flag_of_South_Dakota.svg/46px-Flag_of_South_Dakota.svg.png\"},{\"Name\":\"Tennessee\",\"Flag\":\"9/9e/Flag_of_Tennessee.svg/46px-Flag_of_Tennessee.svg.png\"},{\"Name\":\"Texas\",\"Flag\":\"f/f7/Flag_of_Texas.svg/45px-Flag_of_Texas.svg.png\"},{\"Name\":\"Utah\",\"Flag\":\"f/f6/Flag_of_Utah.svg/45px-Flag_of_Utah.svg.png\"},{\"Name\":\"Vermont\",\"Flag\":\"4/49/Flag_of_Vermont.svg/46px-Flag_of_Vermont.svg.png\"},{\"Name\":\"Virginia\",\"Flag\":\"4/47/Flag_of_Virginia.svg/44px-Flag_of_Virginia.svg.png\"},{\"Name\":\"Washington\",\"Flag\":\"5/54/Flag_of_Washington.svg/46px-Flag_of_Washington.svg.png\"},{\"Name\":\"West Virginia\",\"Flag\":\"2/22/Flag_of_West_Virginia.svg/46px-Flag_of_West_Virginia.svg.png\"},{\"Name\":\"Wisconsin\",\"Flag\":\"2/22/Flag_of_Wisconsin.svg/45px-Flag_of_Wisconsin.svg.png\"},{\"Name\":\"Wyoming\",\"Flag\":\"b/bc/Flag_of_Wyoming.svg/43px-Flag_of_Wyoming.svg.png\"}]";
3033

3134
[ClassInitialize]
32-
public void TestInit()
35+
public static void TestInitForAll(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext context)
3336
{
3437
_testData = JsonSerializer.Deserialize<StatesWithFlags[]>(JsonData);
3538
}
@@ -67,5 +70,64 @@ public void TypeaheadInput_should_rendered_correctly_html_attributes()
6770
Assert.IsNotNull(input);
6871
input.MarkupMatches(@"<input autocomplete=""off"" id=""id1"" class=""form-control w-100"" />");
6972
}
73+
74+
[TestMethod]
75+
public void TypeaheadInput_should_rendered_correctly()
76+
{
77+
var rendered = _testContext.RenderComponent<TypeaheadInput<string>>(parameters => parameters
78+
.Add(p => p.InProgressContent, "<strong>Searching...</strong>")
79+
.Add(p => p.Data, _testData.Select(x => x.Name))
80+
.Add(p => p.MinLength, 5));
81+
82+
var input = rendered.Find("input");
83+
84+
Assert.IsNotNull(input);
85+
input.MarkupMatches(@"<input autocomplete=""off"" class=""typeahead"" />");
86+
}
87+
88+
[TestMethod]
89+
public async Task TypeaheadInput_should_rendered_correctly_DropdownHeight()
90+
{
91+
//TODO: it should open dropdown....
92+
var rendered = _testContext.RenderComponent<TypeaheadInput<string>>(parameters => parameters
93+
.Add(p => p.InProgressContent, "<strong>Searching...</strong>")
94+
.Add(p => p.NoResultContent, "<strong>Not found...</strong>")
95+
.Add(p => p.Data, _testData.Select(x => x.Name))
96+
.Add(p => p.ShowAllOnEmptyInput, true)
97+
.Add(p => p.FitDropdownWidth, false)
98+
.Add(p => p.DropdownHeight, 50)
99+
.Add(p => p.DropdownWidth, 500));
100+
101+
var input = rendered.Find("input");
102+
103+
//input.Focus();
104+
//await input.TriggerEventAsync("onmouseenter", new MouseEventArgs());
105+
input.Input("t");
106+
rendered.SetParametersAndRender();
107+
108+
Assert.IsNotNull(input);
109+
rendered.WaitForAssertion(() => input.MarkupMatches(@"<input value=""t"" autocomplete=""off"" class=""typeahead"" />"));
110+
}
111+
112+
[TestMethod]
113+
public void TypeaheadInput_should_set_SelectedItem_with_OnSelectedItemChanged_event_triggered()
114+
{
115+
string selectedItem = "";
116+
int eventCounter = 0;
117+
var rendered = _testContext.RenderComponent<TypeaheadInput<string>>(parameters => parameters
118+
.Add(p => p.InProgressContent, "<strong>Searching...</strong>")
119+
.Add(p => p.Data, _testData.Select(x => x.Name))
120+
.Add(p => p.OnSelectedItemChanged, x => { selectedItem = x; eventCounter++; })
121+
.Add(p => p.SelectedItem, "Texas"));
122+
123+
var input = rendered.Find("input");
124+
125+
Assert.IsNotNull(input);
126+
Assert.AreEqual(rendered.Instance.Value, "Texas");
127+
Assert.AreEqual(rendered.Instance.SelectedItem, selectedItem);
128+
Assert.AreEqual(1, eventCounter);
129+
130+
input.MarkupMatches(@"<input value=""Texas"" autocomplete=""off"" class=""typeahead"" />");
131+
}
70132
}
71133
}

src/Majorsoft.Blazor.Components.Typeahead/TypeaheadInput.razor.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,13 @@ public TItem SelectedItem
118118

119119
_selectedItem = value;
120120
Value = GetItemText(_selectedItem);
121-
//if (OnSelectedItemChanged.HasDelegate) //Immediately notify listeners for model selected
122-
//{
123-
// InvokeAsync(async () =>
124-
// {
125-
// await OnSelectedItemChanged.InvokeAsync(_selectedItem);
126-
// });
127-
//}
121+
if (OnSelectedItemChanged.HasDelegate) //Immediately notify listeners for model selected
122+
{
123+
InvokeAsync(async () =>
124+
{
125+
await OnSelectedItemChanged.InvokeAsync(_selectedItem);
126+
});
127+
}
128128
}
129129
}
130130
//[Parameter] public IEnumerable<TItem> SelectedItems {get; set; }
@@ -374,7 +374,7 @@ private async Task Activate()
374374
}
375375
private async Task SelectItem(TItem item)
376376
{
377-
SelectedItem = item;
377+
_selectedItem = item;
378378
Value = GetItemText(item);
379379
IsOpen = false;
380380
try

src/Majorsoft.Blazor.Components.Typeahead/TypeaheadInputText.razor.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,13 @@ public TItem SelectedItem
118118

119119
_selectedItem = value;
120120
Value = GetItemText(_selectedItem);
121-
//if (OnSelectedItemChanged.HasDelegate) //Immediately notify listeners for model selected
122-
//{
123-
// InvokeAsync(async () =>
124-
// {
125-
// await OnSelectedItemChanged.InvokeAsync(_selectedItem);
126-
// });
127-
//}
121+
if (OnSelectedItemChanged.HasDelegate) //Immediately notify listeners for model selected
122+
{
123+
InvokeAsync(async () =>
124+
{
125+
await OnSelectedItemChanged.InvokeAsync(_selectedItem);
126+
});
127+
}
128128
}
129129
}
130130
//[Parameter] public IEnumerable<TItem> SelectedItems {get; set; }
@@ -375,7 +375,7 @@ private async Task Activate()
375375
}
376376
private async Task SelectItem(TItem item)
377377
{
378-
SelectedItem = item;
378+
_selectedItem = item;
379379
Value = GetItemText(item);
380380
IsOpen = false;
381381
try

src/Majorsoft.Blazor.Components.Typeahead/TypeaheadInputText.razor.css

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
/*-ms-overflow-style: none;*/ /* Internet Explorer 10+ */
2121
/*scrollbar-width: none;*/ /* Firefox */
2222
}
23-
/*.dropdown-menu::-webkit-scrollbar {
24-
display: none;*/ /* Safari and Chrome */
25-
/*}*/
2623

2724
.dropdown-menu .list {
2825
list-style: none;

0 commit comments

Comments
 (0)