1+ using Terminal . Gui . Input ;
12using Terminal . Gui . ViewBase ;
23using TerminalGuiDesigner . Operations . MenuOperations ;
34
@@ -10,158 +11,114 @@ namespace UnitTests;
1011[ NonParallelizable ]
1112internal class MenuBarExtensionsTests : Tests
1213{
14+ private static Mouse At ( int x , int y = 0 ) => new Mouse { Position = new Point ( x , y ) } ;
15+
1316 /// <summary>
1417 /// Expects menu like
1518 /// 0123456789
1619 /// test next
1720 ///
18- /// This tests that the click in screen space finds the menu (File, Edit etc.).
19- /// Furthermore, it tests that works even when the MenuBar is not at the origin
21+ /// This tests that a click in screen space finds the correct top-level menu item.
2022 /// </summary>
2123 [ Test ]
2224 [ NonParallelizable ]
2325 public void ScreenToMenuBarItem_MultipleMenuItems_ReturnsExpectedItem_IfItemsClicked (
2426 [ Values ( 1 , 4 ) ] int clickXCoordinate ,
25- [ Values ( 0 , 3 ) ] int xOffset ,
26- [ Values ( 0 , 1 ) ] int yOffset ,
27- [ Values ( 0 ) ] int expectedMenuItem )
27+ [ Values ( 0 ) ] int expectedMenuItem )
2828 {
2929 RoundTrip < View , MenuBar > ( ( d , v ) =>
3030 {
3131 Assume . That ( d , Is . Not . Null . And . InstanceOf < Design > ( ) ) ;
3232 Assume . That ( v , Is . Not . Null . And . InstanceOf < MenuBar > ( ) ) ;
3333
34- v . X = xOffset ;
35- v . Y = yOffset ;
36-
3734 v . SuperView ! . LayoutSubViews ( ) ;
3835
39- // Expect a MenuBar to be rendered that is
40- // ".test..next..more.." (with 1 unit of preceding whitespace and 1 after each)
41- // Note that this test is brittle and subject to changes in Terminal.Gui e.g. pushing menus closer together.
4236 v . SubViews . OfType < MenuBarItem > ( ) . First ( ) . Title = "test" ;
43-
4437 Assume . That ( ( ) => new AddMenuOperation ( App , d , "next" ) . Do ( ) , Throws . Nothing ) ;
4538 Assume . That ( ( ) => new AddMenuOperation ( App , d , "more" ) . Do ( ) , Throws . Nothing ) ;
46-
4739 Assume . That ( v . SubViews . OfType < MenuBarItem > ( ) , Has . Exactly ( 3 ) . InstanceOf < MenuBarItem > ( ) ) ;
4840
49- // Clicks in the "test" region
50- var a = v . ScreenToMenuBarItem ( clickXCoordinate + xOffset ) ;
51- var b = v . SubViews . OfType < MenuBarItem > ( ) . ElementAt ( expectedMenuItem ) ;
52- Assert . That ( a , Is . SameAs ( b ) ) ;
41+ var a = v . ScreenToMenuBarItem ( App , At ( clickXCoordinate ) ) ;
42+ var b = v . SubViews . OfType < MenuBarItem > ( ) . ElementAt ( expectedMenuItem ) ;
43+ Assert . That ( a , Is . SameAs ( b ) ) ;
5344 } , out _ ) ;
5445 }
5546
5647 [ Test ]
5748 public void ScreenToMenuBarItem_MultipleMenuItems_ReturnsNull_IfClickedBeforeAndAfterItems (
58- [ Values ( 0 , 19 ) ] int clickXCoordinate ,
59- [ Values ( 0 , 5 ) ] int xOffset ,
60- [ Values ( 0 , 1 ) ] int yOffset )
49+ [ Values ( 0 , 19 ) ] int clickXCoordinate )
6150 {
6251 RoundTrip < View , MenuBar > ( ( d , v ) =>
6352 {
6453 Assume . That ( d , Is . Not . Null . And . InstanceOf < Design > ( ) ) ;
6554 Assume . That ( v , Is . Not . Null . And . InstanceOf < MenuBar > ( ) ) ;
6655
67- v . X = xOffset ;
68- v . Y = yOffset ;
69-
7056 v . SuperView ! . LayoutSubViews ( ) ;
7157
72- // Expect a MenuBar to be rendered that is
73- // ".test..next..more.." (with 1 unit of preceding whitespace and 2 after each)
74- // Note that this test is brittle and subject to changes in Terminal.Gui e.g. pushing menus closer together.
7558 v . SubViews . OfType < MenuBarItem > ( ) . First ( ) . Title = "test" ;
76-
7759 Assume . That ( ( ) => new AddMenuOperation ( App , d , "next" ) . Do ( ) , Throws . Nothing ) ;
7860 Assume . That ( ( ) => new AddMenuOperation ( App , d , "more" ) . Do ( ) , Throws . Nothing ) ;
79-
8061 Assume . That ( v . SubViews . OfType < MenuBarItem > ( ) , Has . Exactly ( 3 ) . InstanceOf < MenuBarItem > ( ) ) ;
8162
82- Assert . That ( v . ScreenToMenuBarItem ( clickXCoordinate + xOffset ) , Is . Null ) ;
63+ Assert . That ( v . ScreenToMenuBarItem ( App , At ( clickXCoordinate ) ) , Is . Null ) ;
8364 } , out _ ) ;
8465 }
8566
8667 [ Test ]
8768 [ Order ( 3 ) ]
8869 public void ScreenToMenuBarItem_OneMenuItem_ReturnsExpectedMenuBarItem_IfClickedWithin2AfterItem (
89- [ Values ( 5 , 6 ) ] int clickXCoordinate ,
90- [ Values ( 0 , 5 ) ] int xOffset ,
91- [ Values ( 0 , 1 ) ] int yOffset )
70+ [ Values ( 5 , 6 ) ] int clickXCoordinate )
9271 {
9372 RoundTrip < View , MenuBar > ( ( d , v ) =>
9473 {
9574 Assume . That ( d , Is . Not . Null . And . InstanceOf < Design > ( ) ) ;
9675 Assume . That ( v , Is . Not . Null . And . InstanceOf < MenuBar > ( ) ) ;
9776
98- v . X = xOffset ;
99- v . Y = yOffset ;
100-
10177 v . SuperView ! . LayoutSubViews ( ) ;
10278
103- // Expect a MenuBar to be rendered that is
104- // ".test.." (with 1 unit of preceding whitespace and 2 after)
105- // Note that this test is brittle and subject to changes in Terminal.Gui e.g. pushing menus closer together.
10679 Assume . That ( v . SubViews . OfType < MenuBarItem > ( ) , Has . Exactly ( 1 ) . InstanceOf < MenuBarItem > ( ) ) ;
10780 v . SubViews . OfType < MenuBarItem > ( ) . First ( ) . Title = "test" ;
10881
109- Assert . That ( v . ScreenToMenuBarItem ( clickXCoordinate + xOffset ) , Is . SameAs ( v . SubViews . OfType < MenuBarItem > ( ) . First ( ) ) ) ;
82+ Assert . That ( v . ScreenToMenuBarItem ( App , At ( clickXCoordinate ) ) , Is . SameAs ( v . SubViews . OfType < MenuBarItem > ( ) . First ( ) ) ) ;
11083 } , out _ ) ;
11184 }
11285
11386 [ Test ]
11487 [ Order ( 2 ) ]
11588 public void ScreenToMenuBarItem_OneMenuItem_ReturnsExpectedMenuBarItem_IfItemClicked (
116- [ Range ( 1 , 4 ) ] int clickXCoordinate ,
117- [ Values ( 0 , 5 ) ] int xOffset ,
118- [ Values ( 0 , 1 ) ] int yOffset )
89+ [ Range ( 1 , 4 ) ] int clickXCoordinate )
11990 {
12091 RoundTrip < View , MenuBar > ( ( d , v ) =>
12192 {
12293 Assume . That ( d , Is . Not . Null . And . InstanceOf < Design > ( ) ) ;
12394 Assume . That ( v , Is . Not . Null . And . InstanceOf < MenuBar > ( ) ) ;
12495
125- v . X = xOffset ;
126- v . Y = yOffset ;
127-
12896 v . SuperView ! . LayoutSubViews ( ) ;
12997
130- // Expect a MenuBar to be rendered that is
131- // ".test.." (with 1 unit of preceding whitespace and 2 after)
132- // Note that this test is brittle and subject to changes in Terminal.Gui e.g. pushing menus closer together.
13398 Assume . That ( v . SubViews . OfType < MenuBarItem > ( ) , Has . Exactly ( 1 ) . InstanceOf < MenuBarItem > ( ) ) ;
13499 v . SubViews . OfType < MenuBarItem > ( ) . First ( ) . Title = "test" ;
135100
136- Assert . That ( v . ScreenToMenuBarItem ( clickXCoordinate + xOffset ) , Is . SameAs ( v . SubViews . OfType < MenuBarItem > ( ) . First ( ) ) ) ;
101+ Assert . That ( v . ScreenToMenuBarItem ( App , At ( clickXCoordinate ) ) , Is . SameAs ( v . SubViews . OfType < MenuBarItem > ( ) . First ( ) ) ) ;
137102 } , out _ ) ;
138103 }
139104
140105 [ Test ]
141106 [ Order ( 1 ) ]
142107 public void ScreenToMenuBarItem_OneMenuItem_ReturnsNull_IfClickedBeforeAndAfterItems (
143- [ Values ( 0 , 7 ) ] int clickXCoordinate ,
144- [ Values ( 0 , 5 ) ] int xOffset ,
145- [ Values ( 0 , 1 ) ] int yOffset )
108+ [ Values ( 0 , 7 ) ] int clickXCoordinate )
146109 {
147110 RoundTrip < View , MenuBar > ( ( d , v ) =>
148111 {
149112 Assume . That ( d , Is . Not . Null . And . InstanceOf < Design > ( ) ) ;
150113 Assume . That ( v , Is . Not . Null . And . InstanceOf < MenuBar > ( ) ) ;
151114
152- v . X = xOffset ;
153- v . Y = yOffset ;
154-
155115 v . SuperView ! . LayoutSubViews ( ) ;
156116
157- // Expect a MenuBar to be rendered that is
158- // ".test.." (with 1 unit of preceding whitespace and 2 after)
159- // Note that this test is brittle and subject to changes in Terminal.Gui e.g. pushing menus closer together.
160117 Assume . That ( v . SubViews . OfType < MenuBarItem > ( ) , Has . Exactly ( 1 ) . InstanceOf < MenuBarItem > ( ) ) ;
161118 v . SubViews . OfType < MenuBarItem > ( ) . First ( ) . Title = "test" ;
162119
163- Assert . That ( v . ScreenToMenuBarItem ( clickXCoordinate + xOffset ) , Is . Null ,
164- "Expected Terminal.Gui MenuBar to have 1 unit of whitespace before and 2 after any MenuBarItems (e.g. File) get rendered. This may change in future, if so then update this test ." ) ;
120+ Assert . That ( v . ScreenToMenuBarItem ( App , At ( clickXCoordinate ) ) , Is . Null ,
121+ "Expected click before/ after items to return null ." ) ;
165122 } , out _ ) ;
166123 }
167124}
0 commit comments