1
+ using Majorsoft . Blazor . Components . Common . JsInterop . Click ;
2
+ using Majorsoft . Blazor . Components . Debounce ;
3
+
4
+ using Microsoft . Extensions . DependencyInjection ;
5
+ using Microsoft . Extensions . Logging ;
6
+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
7
+
8
+ using Moq ;
9
+ using Majorsoft . Blazor . Components . CommonTestsBase ;
10
+ using Bunit ;
11
+ using Majorsoft . Blazor . Components . Timer ;
12
+ using Majorsoft . Blazor . Components . Common . JsInterop . ElementInfo ;
13
+ using System . Text . Json ;
14
+ using System . Linq ;
15
+ using System . Threading . Tasks ;
16
+ using Microsoft . AspNetCore . Components . Web ;
17
+
18
+ namespace Majorsoft . Blazor . Components . Typeahead . Tests
19
+ {
20
+ [ TestClass ]
21
+ public class TypeaheadInputTest : ComponentsTestBase < TypeaheadInput < string > >
22
+ {
23
+ private Mock < IClickBoundariesHandler > _clickBoundariesMock ;
24
+ private BunitJSModuleInterop _jsInteropModul ;
25
+
26
+ private class StatesWithFlags
27
+ {
28
+ public string Name { get ; set ; }
29
+ public string Flag { get ; set ; }
30
+ }
31
+ private static StatesWithFlags [ ] _testData = null ;
32
+ 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\" }]" ;
33
+
34
+ [ ClassInitialize ]
35
+ public static void TestInitForAll ( Microsoft . VisualStudio . TestTools . UnitTesting . TestContext context )
36
+ {
37
+ _testData = JsonSerializer . Deserialize < StatesWithFlags [ ] > ( JsonData ) ;
38
+ }
39
+
40
+ [ TestInitialize ]
41
+ public void Init ( )
42
+ {
43
+ var logger = new Mock < ILogger < DebounceInput > > ( ) ;
44
+ var logger2 = new Mock < ILogger < AdvancedTimer > > ( ) ;
45
+ _clickBoundariesMock = new Mock < IClickBoundariesHandler > ( ) ;
46
+
47
+ _testContext . Services . Add ( new ServiceDescriptor ( typeof ( ILogger < DebounceInput > ) , logger . Object ) ) ;
48
+ _testContext . Services . Add ( new ServiceDescriptor ( typeof ( ILogger < AdvancedTimer > ) , logger2 . Object ) ) ;
49
+ _testContext . Services . Add ( new ServiceDescriptor ( typeof ( IClickBoundariesHandler ) , _clickBoundariesMock . Object ) ) ;
50
+
51
+ _testContext . JSInterop . Mode = JSRuntimeMode . Strict ;
52
+ #if DEBUG
53
+ _jsInteropModul = _testContext . JSInterop . SetupModule ( "./_content/Majorsoft.Blazor.Components.Common.JsInterop/elementInfo.js" ) ;
54
+ #else
55
+ _jsInteropModul = _testContext . JSInterop . SetupModule ( "./_content/Majorsoft.Blazor.Components.Common.JsInterop/elementInfo.min.js" ) ;
56
+ #endif
57
+ _jsInteropModul . Setup < DomRect > ( "getBoundingClientRect" , _ => true ) . SetResult ( new DomRect ( ) ) ;
58
+ }
59
+
60
+ [ TestMethod ]
61
+ public void TypeaheadInput_should_rendered_correctly_html_attributes ( )
62
+ {
63
+ var rendered = _testContext . RenderComponent < TypeaheadInput < string > > (
64
+ ( "id" , "id1" ) , //HTML attributes
65
+ ( "class" , "form-control w-100" ) //HTML attributes
66
+ ) ;
67
+
68
+ var input = rendered . Find ( "input" ) ;
69
+
70
+ Assert . IsNotNull ( input ) ;
71
+ input . MarkupMatches ( @"<input autocomplete=""off"" id=""id1"" class=""form-control w-100"" />" ) ;
72
+ }
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
+ }
132
+ }
133
+ }
0 commit comments