Skip to content

Commit 1ede535

Browse files
committed
Fix flakiness and edge cases in integration tests
1 parent b725c1c commit 1ede535

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

Tvl.VisualStudio.MouseFastScroll.IntegrationTests/Editor_InProc.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Tvl.VisualStudio.MouseFastScroll.IntegrationTests
88
using System.Windows;
99
using Microsoft.VisualStudio.Text;
1010
using Microsoft.VisualStudio.Text.Editor;
11+
using Microsoft.VisualStudio.Text.Formatting;
1112
using Microsoft.VisualStudio.TextManager.Interop;
1213

1314
internal class Editor_InProc : TextViewWindow_InProc
@@ -105,6 +106,11 @@ public int GetLastVisibleLine()
105106
return ExecuteOnActiveView(view => view.TextViewLines.LastVisibleLine.Start.GetContainingLine().LineNumber);
106107
}
107108

109+
public int GetLastVisibleLineState()
110+
{
111+
return ExecuteOnActiveView(view => (int)view.TextViewLines.LastVisibleLine.VisibilityState);
112+
}
113+
108114
public Point GetCenterOfEditorOnScreen()
109115
{
110116
return ExecuteOnActiveView(

Tvl.VisualStudio.MouseFastScroll.IntegrationTests/Editor_OutOfProc.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace Tvl.VisualStudio.MouseFastScroll.IntegrationTests
55
{
66
using System.Windows;
7+
using Microsoft.VisualStudio.Text.Formatting;
78
using WindowsInput.Native;
89

910
public class Editor_OutOfProc : TextViewWindow_OutOfProc
@@ -54,6 +55,9 @@ public int GetFirstVisibleLine()
5455
public int GetLastVisibleLine()
5556
=> EditorInProc.GetLastVisibleLine();
5657

58+
public VisibilityState GetLastVisibleLineState()
59+
=> (VisibilityState)EditorInProc.GetLastVisibleLineState();
60+
5761
public Point GetCenterOfEditorOnScreen()
5862
=> EditorInProc.GetCenterOfEditorOnScreen();
5963

Tvl.VisualStudio.MouseFastScroll.IntegrationTests/TrivialIntegrationTest.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace Tvl.VisualStudio.MouseFastScroll.IntegrationTests
77
using System.Linq;
88
using System.Windows;
99
using System.Windows.Media;
10+
using Microsoft.VisualStudio.Text.Formatting;
1011
using WindowsInput;
1112
using WindowsInput.Native;
1213
using Xunit;
@@ -70,6 +71,7 @@ public void BasicScrollingBehavior()
7071
Assert.Equal(0, firstVisibleLine);
7172

7273
int lastVisibleLine = VisualStudio.Editor.GetLastVisibleLine();
74+
VisibilityState lastVisibleLineState = VisualStudio.Editor.GetLastVisibleLineState();
7375
Assert.True(firstVisibleLine < lastVisibleLine);
7476

7577
Point point = VisualStudio.Editor.GetCenterOfEditorOnScreen();
@@ -81,30 +83,39 @@ public void BasicScrollingBehavior()
8183
.MoveMouseTo(point.X, point.Y)
8284
.VerticalScroll(-1);
8385

86+
VisualStudio.WaitForApplicationIdle();
87+
8488
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
8589
Assert.Equal(3, VisualStudio.Editor.GetFirstVisibleLine());
8690

8791
inputSimulator.Mouse
8892
.MoveMouseTo(point.X, point.Y)
8993
.VerticalScroll(1);
9094

95+
VisualStudio.WaitForApplicationIdle();
96+
9197
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
9298
Assert.Equal(0, VisualStudio.Editor.GetFirstVisibleLine());
9399

94100
inputSimulator
95101
.Mouse.MoveMouseTo(point.X, point.Y)
96102
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
97103
.Mouse.VerticalScroll(-1)
98-
.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
104+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
99105

106+
VisualStudio.WaitForApplicationIdle();
107+
108+
int expectedLastVisibleLine = lastVisibleLine + (lastVisibleLineState == VisibilityState.FullyVisible ? 1 : 0);
100109
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
101-
Assert.Equal(lastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
110+
Assert.Equal(expectedLastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
102111

103112
inputSimulator
104113
.Mouse.MoveMouseTo(point.X, point.Y)
105114
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
106115
.Mouse.VerticalScroll(1)
107-
.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
116+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
117+
118+
VisualStudio.WaitForApplicationIdle();
108119

109120
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
110121
Assert.Equal(0, VisualStudio.Editor.GetFirstVisibleLine());
@@ -144,6 +155,7 @@ public void ZoomDisabled()
144155
Assert.Equal(0, firstVisibleLine);
145156

146157
int lastVisibleLine = VisualStudio.Editor.GetLastVisibleLine();
158+
VisibilityState lastVisibleLineState = VisualStudio.Editor.GetLastVisibleLineState();
147159
Assert.True(firstVisibleLine < lastVisibleLine);
148160

149161
double zoomLevel = VisualStudio.Editor.GetZoomLevel();
@@ -157,19 +169,20 @@ public void ZoomDisabled()
157169
.Mouse.MoveMouseTo(point.X, point.Y)
158170
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
159171
.Mouse.VerticalScroll(-1)
160-
.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
172+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
161173

162174
VisualStudio.WaitForApplicationIdle();
163175

176+
int expectedLastVisibleLine = lastVisibleLine + (lastVisibleLineState == VisibilityState.FullyVisible ? 1 : 0);
164177
Assert.Equal(0, VisualStudio.Editor.GetCaretPosition());
165-
Assert.Equal(lastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
178+
Assert.Equal(expectedLastVisibleLine, VisualStudio.Editor.GetFirstVisibleLine());
166179
Assert.Equal(zoomLevel, VisualStudio.Editor.GetZoomLevel());
167180

168181
inputSimulator
169182
.Mouse.MoveMouseTo(point.X, point.Y)
170183
.Keyboard.KeyDown(VirtualKeyCode.CONTROL)
171184
.Mouse.VerticalScroll(1)
172-
.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
185+
.Keyboard.Sleep(10).KeyUp(VirtualKeyCode.CONTROL);
173186

174187
VisualStudio.WaitForApplicationIdle();
175188

0 commit comments

Comments
 (0)