Skip to content

Commit 98616a7

Browse files
authored
Merge pull request #17 from sharwell/test-input-reliability
Improve the reliability of tests sending inputs through InputSimulator
2 parents 17fef3a + c0cf03c commit 98616a7

File tree

2 files changed

+77
-62
lines changed

2 files changed

+77
-62
lines changed

Tvl.VisualStudio.MouseFastScroll.IntegrationTests/SendKeys.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,8 @@ public SendKeys(VisualStudioInstance visualStudioInstance)
1919

2020
internal void Send(object[] keys)
2121
{
22-
var foregroundWindow = IntPtr.Zero;
23-
24-
try
22+
Send(inputSimulator =>
2523
{
26-
var foreground = GetForegroundWindow();
27-
_visualStudioInstance.ActivateMainWindow();
28-
29-
var inputSimulator = new InputSimulator();
30-
3124
foreach (var key in keys)
3225
{
3326
switch (key)
@@ -72,6 +65,24 @@ internal void Send(object[] keys)
7265
throw new ArgumentException($"Unexpected type encountered: {key.GetType()}", nameof(keys));
7366
}
7467
}
68+
});
69+
}
70+
71+
internal void Send(Action<InputSimulator> actions)
72+
{
73+
if (actions == null)
74+
{
75+
throw new ArgumentNullException(nameof(actions));
76+
}
77+
78+
var foregroundWindow = IntPtr.Zero;
79+
80+
try
81+
{
82+
var foreground = GetForegroundWindow();
83+
_visualStudioInstance.ActivateMainWindow();
84+
85+
actions(new InputSimulator());
7586
}
7687
finally
7788
{

Tvl.VisualStudio.MouseFastScroll.IntegrationTests/TrivialIntegrationTest.cs

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ public void BasicScrollingBehavior()
5757
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
5858
Assert.Equal(firstVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
5959

60-
var inputSimulator = new InputSimulator();
61-
VisualStudio.ActivateMainWindow();
62-
inputSimulator.Keyboard
63-
.KeyDown(VirtualKeyCode.CONTROL)
64-
.KeyPress(VirtualKeyCode.HOME)
65-
.KeyUp(VirtualKeyCode.CONTROL);
66-
67-
VisualStudio.WaitForApplicationIdle();
60+
VisualStudio.SendKeys.Send(inputSimulator =>
61+
{
62+
inputSimulator.Keyboard
63+
.KeyDown(VirtualKeyCode.CONTROL)
64+
.KeyPress(VirtualKeyCode.HOME)
65+
.KeyUp(VirtualKeyCode.CONTROL);
66+
});
6867

6968
Assert.True(VisualStudio.Editor.IsCaretOnScreen());
7069
firstVisibleLine = VisualStudio.Editor.GetFirstVisibleLine();
@@ -79,43 +78,47 @@ public void BasicScrollingBehavior()
7978
int verticalResolution = NativeMethods.GetSystemMetrics(NativeMethods.SM_CYSCREEN);
8079
point = new ScaleTransform(65535.0 / horizontalResolution, 65535.0 / verticalResolution).Transform(point);
8180

82-
inputSimulator.Mouse
83-
.MoveMouseTo(point.X, point.Y)
84-
.VerticalScroll(-1);
85-
86-
VisualStudio.WaitForApplicationIdle();
81+
VisualStudio.SendKeys.Send(inputSimulator =>
82+
{
83+
inputSimulator.Mouse
84+
.MoveMouseTo(point.X, point.Y)
85+
.VerticalScroll(-1);
86+
});
8787

8888
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
8989
Assert.Equal(3, VisualStudio.Editor.GetFirstVisibleLine());
9090

91-
inputSimulator.Mouse
92-
.MoveMouseTo(point.X, point.Y)
93-
.VerticalScroll(1);
94-
95-
VisualStudio.WaitForApplicationIdle();
91+
VisualStudio.SendKeys.Send(inputSimulator =>
92+
{
93+
inputSimulator.Mouse
94+
.MoveMouseTo(point.X, point.Y)
95+
.VerticalScroll(1);
96+
});
9697

9798
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
9899
Assert.Equal(0, VisualStudio.Editor.GetFirstVisibleLine());
99100

100-
inputSimulator
101-
.Mouse.MoveMouseTo(point.X, point.Y)
102-
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
103-
.Mouse.VerticalScroll(-1)
104-
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
105-
106-
VisualStudio.WaitForApplicationIdle();
101+
VisualStudio.SendKeys.Send(inputSimulator =>
102+
{
103+
inputSimulator
104+
.Mouse.MoveMouseTo(point.X, point.Y)
105+
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
106+
.Mouse.VerticalScroll(-1)
107+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
108+
});
107109

108110
int expectedLastVisibleLine = lastVisibleLine + (lastVisibleLineState == VisibilityState.FullyVisible ? 1 : 0);
109111
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
110112
Assert.Equal(expectedLastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
111113

112-
inputSimulator
113-
.Mouse.MoveMouseTo(point.X, point.Y)
114-
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
115-
.Mouse.VerticalScroll(1)
116-
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
117-
118-
VisualStudio.WaitForApplicationIdle();
114+
VisualStudio.SendKeys.Send(inputSimulator =>
115+
{
116+
inputSimulator
117+
.Mouse.MoveMouseTo(point.X, point.Y)
118+
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
119+
.Mouse.VerticalScroll(1)
120+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
121+
});
119122

120123
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
121124
Assert.Equal(0, VisualStudio.Editor.GetFirstVisibleLine());
@@ -142,14 +145,13 @@ public void ZoomDisabled()
142145

143146
Assert.Equal(expected.Length, VisualStudio.Editor.GetCaretPosition());
144147

145-
var inputSimulator = new InputSimulator();
146-
VisualStudio.ActivateMainWindow();
147-
inputSimulator.Keyboard
148-
.KeyDown(VirtualKeyCode.CONTROL)
149-
.KeyPress(VirtualKeyCode.HOME)
150-
.KeyUp(VirtualKeyCode.CONTROL);
151-
152-
VisualStudio.WaitForApplicationIdle();
148+
VisualStudio.SendKeys.Send(inputSimulator =>
149+
{
150+
inputSimulator.Keyboard
151+
.KeyDown(VirtualKeyCode.CONTROL)
152+
.KeyPress(VirtualKeyCode.HOME)
153+
.KeyUp(VirtualKeyCode.CONTROL);
154+
});
153155

154156
int firstVisibleLine = VisualStudio.Editor.GetFirstVisibleLine();
155157
Assert.Equal(0, firstVisibleLine);
@@ -165,26 +167,28 @@ public void ZoomDisabled()
165167
int verticalResolution = NativeMethods.GetSystemMetrics(NativeMethods.SM_CYSCREEN);
166168
point = new ScaleTransform(65535.0 / horizontalResolution, 65535.0 / verticalResolution).Transform(point);
167169

168-
inputSimulator
169-
.Mouse.MoveMouseTo(point.X, point.Y)
170-
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
171-
.Mouse.VerticalScroll(-1)
172-
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
173-
174-
VisualStudio.WaitForApplicationIdle();
170+
VisualStudio.SendKeys.Send(inputSimulator =>
171+
{
172+
inputSimulator
173+
.Mouse.MoveMouseTo(point.X, point.Y)
174+
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
175+
.Mouse.VerticalScroll(-1)
176+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
177+
});
175178

176179
int expectedLastVisibleLine = lastVisibleLine + (lastVisibleLineState == VisibilityState.FullyVisible ? 1 : 0);
177180
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
178181
Assert.Equal(expectedLastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
179182
Assert.Equal(zoomLevel, VisualStudio.Editor.GetZoomLevel());
180183

181-
inputSimulator
182-
.Mouse.MoveMouseTo(point.X, point.Y)
183-
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
184-
.Mouse.VerticalScroll(1)
185-
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
186-
187-
VisualStudio.WaitForApplicationIdle();
184+
VisualStudio.SendKeys.Send(inputSimulator =>
185+
{
186+
inputSimulator
187+
.Mouse.MoveMouseTo(point.X, point.Y)
188+
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
189+
.Mouse.VerticalScroll(1)
190+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
191+
});
188192

189193
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
190194
Assert.Equal(0, VisualStudio.Editor.GetFirstVisibleLine());

0 commit comments

Comments
 (0)