diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-02-17 15:47:46 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-02-17 16:20:10 -0600 |
commit | 0b5290319a13c8f73315ea0e0407d88bfd79c944 (patch) | |
tree | 52638f81d37958c66c602cc1c57a93dfa487d7b4 /src/TestBA | |
parent | 15b1946325bf1cfd1794b997f2cbbbcfeb648e92 (diff) | |
download | wix-0b5290319a13c8f73315ea0e0407d88bfd79c944.tar.gz wix-0b5290319a13c8f73315ea0e0407d88bfd79c944.tar.bz2 wix-0b5290319a13c8f73315ea0e0407d88bfd79c944.zip |
Add test for explicitly elevating between detect and plan.
Diffstat (limited to 'src/TestBA')
-rw-r--r-- | src/TestBA/MessagePump.cs | 39 | ||||
-rw-r--r-- | src/TestBA/TestBA.cs | 22 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/TestBA/MessagePump.cs b/src/TestBA/MessagePump.cs new file mode 100644 index 00000000..21a00349 --- /dev/null +++ b/src/TestBA/MessagePump.cs | |||
@@ -0,0 +1,39 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixToolset.Test.BA | ||
4 | { | ||
5 | using System; | ||
6 | using System.Runtime.InteropServices; | ||
7 | using System.Windows.Forms; | ||
8 | |||
9 | public class MessagePump | ||
10 | { | ||
11 | const uint PM_REMOVE = 1; | ||
12 | |||
13 | [DllImport("user32.dll", ExactSpelling = true)] | ||
14 | [return: MarshalAs(UnmanagedType.Bool)] | ||
15 | public static extern bool PeekMessageW(ref Message pMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg); | ||
16 | |||
17 | [DllImport("user32.dll", ExactSpelling = true)] | ||
18 | [return: MarshalAs(UnmanagedType.Bool)] | ||
19 | public static extern bool TranslateMessage(ref Message pMsg); | ||
20 | |||
21 | [DllImport("user32.dll", ExactSpelling = true)] | ||
22 | public static extern IntPtr DispatchMessageW(ref Message pMsg); | ||
23 | |||
24 | public static void ProcessMessages(int maxMessages) | ||
25 | { | ||
26 | for (int i = 0; i < maxMessages; i++) | ||
27 | { | ||
28 | Message message = new Message(); | ||
29 | if (!PeekMessageW(ref message, IntPtr.Zero, 0, 0, PM_REMOVE)) | ||
30 | { | ||
31 | break; | ||
32 | } | ||
33 | |||
34 | TranslateMessage(ref message); | ||
35 | DispatchMessageW(ref message); | ||
36 | } | ||
37 | } | ||
38 | } | ||
39 | } | ||
diff --git a/src/TestBA/TestBA.cs b/src/TestBA/TestBA.cs index 1348ce98..b9f869a6 100644 --- a/src/TestBA/TestBA.cs +++ b/src/TestBA/TestBA.cs | |||
@@ -28,6 +28,7 @@ namespace WixToolset.Test.BA | |||
28 | 28 | ||
29 | private bool immediatelyQuit; | 29 | private bool immediatelyQuit; |
30 | private bool quitAfterDetect; | 30 | private bool quitAfterDetect; |
31 | private bool explicitlyElevateAndPlanFromOnElevateBegin; | ||
31 | private int redetectRemaining; | 32 | private int redetectRemaining; |
32 | private int sleepDuringCache; | 33 | private int sleepDuringCache; |
33 | private int cancelCacheAtProgress; | 34 | private int cancelCacheAtProgress; |
@@ -122,6 +123,12 @@ namespace WixToolset.Test.BA | |||
122 | redetectCount = 0; | 123 | redetectCount = 0; |
123 | } | 124 | } |
124 | 125 | ||
126 | string explicitlyElevateAndPlanFromOnElevateBegin = this.ReadPackageAction(null, "ExplicitlyElevateAndPlanFromOnElevateBegin"); | ||
127 | if (String.IsNullOrEmpty(explicitlyElevateAndPlanFromOnElevateBegin) || !Boolean.TryParse(explicitlyElevateAndPlanFromOnElevateBegin, out this.explicitlyElevateAndPlanFromOnElevateBegin)) | ||
128 | { | ||
129 | this.explicitlyElevateAndPlanFromOnElevateBegin = false; | ||
130 | } | ||
131 | |||
125 | string quitAfterDetect = this.ReadPackageAction(null, "QuitAfterDetect"); | 132 | string quitAfterDetect = this.ReadPackageAction(null, "QuitAfterDetect"); |
126 | if (String.IsNullOrEmpty(quitAfterDetect) || !Boolean.TryParse(quitAfterDetect, out this.quitAfterDetect)) | 133 | if (String.IsNullOrEmpty(quitAfterDetect) || !Boolean.TryParse(quitAfterDetect, out this.quitAfterDetect)) |
127 | { | 134 | { |
@@ -214,6 +221,10 @@ namespace WixToolset.Test.BA | |||
214 | { | 221 | { |
215 | this.ShutdownUiThread(); | 222 | this.ShutdownUiThread(); |
216 | } | 223 | } |
224 | else if (this.explicitlyElevateAndPlanFromOnElevateBegin) | ||
225 | { | ||
226 | this.Engine.Elevate(this.windowHandle); | ||
227 | } | ||
217 | else | 228 | else |
218 | { | 229 | { |
219 | this.Engine.Plan(this.action); | 230 | this.Engine.Plan(this.action); |
@@ -225,6 +236,17 @@ namespace WixToolset.Test.BA | |||
225 | } | 236 | } |
226 | } | 237 | } |
227 | 238 | ||
239 | protected override void OnElevateBegin(ElevateBeginEventArgs args) | ||
240 | { | ||
241 | if (this.explicitlyElevateAndPlanFromOnElevateBegin) | ||
242 | { | ||
243 | this.Engine.Plan(this.action); | ||
244 | |||
245 | // Simulate showing some UI since these tests won't actually show the UAC prompt. | ||
246 | MessagePump.ProcessMessages(10); | ||
247 | } | ||
248 | } | ||
249 | |||
228 | protected override void OnPlanPackageBegin(PlanPackageBeginEventArgs args) | 250 | protected override void OnPlanPackageBegin(PlanPackageBeginEventArgs args) |
229 | { | 251 | { |
230 | RequestState state; | 252 | RequestState state; |