@@ -5,6 +5,10 @@ namespace Tvl.VisualStudio.MouseFastScroll.IntegrationTests
5
5
{
6
6
using System ;
7
7
using System . Linq ;
8
+ using System . Windows ;
9
+ using System . Windows . Media ;
10
+ using WindowsInput ;
11
+ using WindowsInput . Native ;
8
12
using Xunit ;
9
13
using vsSaveChanges = EnvDTE . vsSaveChanges ;
10
14
@@ -30,7 +34,7 @@ public void TestOpenAndCloseIDE()
30
34
}
31
35
32
36
[ Fact ]
33
- public void OpenDocumentAndType ( )
37
+ public void BasicScrollingBehavior ( )
34
38
{
35
39
var window = VisualStudioInstance . RetryRpcCall ( ( ) => VisualStudio . Dte . ItemOperations . NewFile ( Name : Guid . NewGuid ( ) + ".txt" ) ) ;
36
40
@@ -44,8 +48,134 @@ public void OpenDocumentAndType()
44
48
Assert . Equal ( expected , VisualStudio . Editor . GetText ( ) ) ;
45
49
46
50
Assert . Equal ( expected . Length , VisualStudio . Editor . GetCaretPosition ( ) ) ;
51
+
52
+ // Move the caret and verify the final position. Note that the MoveCaret operation does not scroll the view.
53
+ int firstVisibleLine = VisualStudio . Editor . GetFirstVisibleLine ( ) ;
54
+ Assert . True ( firstVisibleLine > 0 , "Expected the view to start after the first line at this point." ) ;
47
55
VisualStudio . Editor . MoveCaret ( 0 ) ;
48
56
Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
57
+ Assert . Equal ( firstVisibleLine , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
58
+
59
+ var inputSimulator = new InputSimulator ( ) ;
60
+ VisualStudio . ActivateMainWindow ( ) ;
61
+ inputSimulator . Keyboard
62
+ . KeyDown ( VirtualKeyCode . CONTROL )
63
+ . KeyPress ( VirtualKeyCode . HOME )
64
+ . KeyUp ( VirtualKeyCode . CONTROL ) ;
65
+
66
+ VisualStudio . WaitForApplicationIdle ( ) ;
67
+
68
+ Assert . True ( VisualStudio . Editor . IsCaretOnScreen ( ) ) ;
69
+ firstVisibleLine = VisualStudio . Editor . GetFirstVisibleLine ( ) ;
70
+ Assert . Equal ( 0 , firstVisibleLine ) ;
71
+
72
+ int lastVisibleLine = VisualStudio . Editor . GetLastVisibleLine ( ) ;
73
+ Assert . True ( firstVisibleLine < lastVisibleLine ) ;
74
+
75
+ Point point = VisualStudio . Editor . GetCenterOfEditorOnScreen ( ) ;
76
+ int horizontalResolution = NativeMethods . GetSystemMetrics ( NativeMethods . SM_CXSCREEN ) ;
77
+ int verticalResolution = NativeMethods . GetSystemMetrics ( NativeMethods . SM_CYSCREEN ) ;
78
+ point = new ScaleTransform ( 65535.0 / horizontalResolution , 65535.0 / verticalResolution ) . Transform ( point ) ;
79
+
80
+ inputSimulator . Mouse
81
+ . MoveMouseTo ( point . X , point . Y )
82
+ . VerticalScroll ( - 1 ) ;
83
+
84
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
85
+ Assert . Equal ( 3 , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
86
+
87
+ inputSimulator . Mouse
88
+ . MoveMouseTo ( point . X , point . Y )
89
+ . VerticalScroll ( 1 ) ;
90
+
91
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
92
+ Assert . Equal ( 0 , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
93
+
94
+ inputSimulator
95
+ . Mouse . MoveMouseTo ( point . X , point . Y )
96
+ . Keyboard . KeyDown ( VirtualKeyCode . CONTROL )
97
+ . Mouse . VerticalScroll ( - 1 )
98
+ . Keyboard . KeyUp ( VirtualKeyCode . CONTROL ) ;
99
+
100
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
101
+ Assert . Equal ( lastVisibleLine , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
102
+
103
+ inputSimulator
104
+ . Mouse . MoveMouseTo ( point . X , point . Y )
105
+ . Keyboard . KeyDown ( VirtualKeyCode . CONTROL )
106
+ . Mouse . VerticalScroll ( 1 )
107
+ . Keyboard . KeyUp ( VirtualKeyCode . CONTROL ) ;
108
+
109
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
110
+ Assert . Equal ( 0 , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
111
+
112
+ VisualStudioInstance . RetryRpcCall ( ( ) => window . Close ( vsSaveChanges . vsSaveChangesNo ) ) ;
113
+ }
114
+
115
+ /// <summary>
116
+ /// Verifies that the Ctrl+Scroll operations do not change the zoom level in the editor.
117
+ /// </summary>
118
+ [ Fact ]
119
+ public void ZoomDisabled ( )
120
+ {
121
+ var window = VisualStudioInstance . RetryRpcCall ( ( ) => VisualStudio . Dte . ItemOperations . NewFile ( Name : Guid . NewGuid ( ) + ".txt" ) ) ;
122
+
123
+ string initialText = string . Join ( string . Empty , Enumerable . Range ( 0 , 400 ) . Select ( i => Guid . NewGuid ( ) + Environment . NewLine ) ) ;
124
+ VisualStudio . Editor . SetText ( initialText ) ;
125
+
126
+ string additionalTypedText = Guid . NewGuid ( ) . ToString ( ) + "\n " + Guid . NewGuid ( ) . ToString ( ) ;
127
+ VisualStudio . Editor . SendKeys ( additionalTypedText ) ;
128
+
129
+ string expected = initialText + additionalTypedText . Replace ( "\n " , Environment . NewLine ) ;
130
+ Assert . Equal ( expected , VisualStudio . Editor . GetText ( ) ) ;
131
+
132
+ Assert . Equal ( expected . Length , VisualStudio . Editor . GetCaretPosition ( ) ) ;
133
+
134
+ var inputSimulator = new InputSimulator ( ) ;
135
+ VisualStudio . ActivateMainWindow ( ) ;
136
+ inputSimulator . Keyboard
137
+ . KeyDown ( VirtualKeyCode . CONTROL )
138
+ . KeyPress ( VirtualKeyCode . HOME )
139
+ . KeyUp ( VirtualKeyCode . CONTROL ) ;
140
+
141
+ VisualStudio . WaitForApplicationIdle ( ) ;
142
+
143
+ int firstVisibleLine = VisualStudio . Editor . GetFirstVisibleLine ( ) ;
144
+ Assert . Equal ( 0 , firstVisibleLine ) ;
145
+
146
+ int lastVisibleLine = VisualStudio . Editor . GetLastVisibleLine ( ) ;
147
+ Assert . True ( firstVisibleLine < lastVisibleLine ) ;
148
+
149
+ double zoomLevel = VisualStudio . Editor . GetZoomLevel ( ) ;
150
+
151
+ Point point = VisualStudio . Editor . GetCenterOfEditorOnScreen ( ) ;
152
+ int horizontalResolution = NativeMethods . GetSystemMetrics ( NativeMethods . SM_CXSCREEN ) ;
153
+ int verticalResolution = NativeMethods . GetSystemMetrics ( NativeMethods . SM_CYSCREEN ) ;
154
+ point = new ScaleTransform ( 65535.0 / horizontalResolution , 65535.0 / verticalResolution ) . Transform ( point ) ;
155
+
156
+ inputSimulator
157
+ . Mouse . MoveMouseTo ( point . X , point . Y )
158
+ . Keyboard . KeyDown ( VirtualKeyCode . CONTROL )
159
+ . Mouse . VerticalScroll ( - 1 )
160
+ . Keyboard . KeyUp ( VirtualKeyCode . CONTROL ) ;
161
+
162
+ VisualStudio . WaitForApplicationIdle ( ) ;
163
+
164
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
165
+ Assert . Equal ( lastVisibleLine , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
166
+ Assert . Equal ( zoomLevel , VisualStudio . Editor . GetZoomLevel ( ) ) ;
167
+
168
+ inputSimulator
169
+ . Mouse . MoveMouseTo ( point . X , point . Y )
170
+ . Keyboard . KeyDown ( VirtualKeyCode . CONTROL )
171
+ . Mouse . VerticalScroll ( 1 )
172
+ . Keyboard . KeyUp ( VirtualKeyCode . CONTROL ) ;
173
+
174
+ VisualStudio . WaitForApplicationIdle ( ) ;
175
+
176
+ Assert . Equal ( 0 , VisualStudio . Editor . GetCaretPosition ( ) ) ;
177
+ Assert . Equal ( 0 , VisualStudio . Editor . GetFirstVisibleLine ( ) ) ;
178
+ Assert . Equal ( zoomLevel , VisualStudio . Editor . GetZoomLevel ( ) ) ;
49
179
50
180
VisualStudioInstance . RetryRpcCall ( ( ) => window . Close ( vsSaveChanges . vsSaveChangesNo ) ) ;
51
181
}
0 commit comments