microsoft/TypeAgent

Public

mirrored fromhttps://github.com/microsoft/TypeAgentAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
d4944c6517c9a96a3c419f827769f518913f1b75

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

dotnet/autoShell.Tests/HandlerRegistrationTests.cs

99lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using autoShell.Handlers;
5using autoShell.Handlers.Settings;
6using autoShell.Logging;
7using autoShell.Services;
8using Moq;
9
10namespace autoShell.Tests;
11
12/// <summary>
13/// Verifies structural invariants across all registered handlers (e.g., no duplicate commands).
14/// </summary>
15public class HandlerRegistrationTests
16{
17 private readonly List<IActionHandler> _handlers;
18
19 public HandlerRegistrationTests()
20 {
21 var audioMock = new Mock<IAudioService>();
22 var registryMock = new Mock<IRegistryService>();
23 var systemParamsMock = new Mock<ISystemParametersService>();
24 var processMock = new Mock<IProcessService>();
25 var appRegistryMock = new Mock<IAppRegistry>();
26 var debuggerMock = new Mock<IDebuggerService>();
27 var brightnessMock = new Mock<IBrightnessService>();
28 var displayMock = new Mock<IDisplayService>();
29 var windowMock = new Mock<IWindowService>();
30 var networkMock = new Mock<INetworkService>();
31 var virtualDesktopMock = new Mock<IVirtualDesktopService>();
32 var loggerMock = new Mock<ILogger>();
33
34 _handlers =
35 [
36 new AudioActionHandler(audioMock.Object),
37 new AppActionHandler(appRegistryMock.Object, processMock.Object, windowMock.Object, loggerMock.Object),
38 new WindowActionHandler(appRegistryMock.Object, windowMock.Object),
39 new ThemeActionHandler(registryMock.Object, processMock.Object, systemParamsMock.Object),
40 new VirtualDesktopActionHandler(appRegistryMock.Object, windowMock.Object, virtualDesktopMock.Object, loggerMock.Object),
41 new NetworkActionHandler(networkMock.Object, processMock.Object, loggerMock.Object),
42 new DisplayActionHandler(displayMock.Object, loggerMock.Object),
43 new TaskbarSettingsHandler(registryMock.Object, processMock.Object),
44 new DisplaySettingsHandler(registryMock.Object, processMock.Object, brightnessMock.Object, loggerMock.Object),
45 new PersonalizationSettingsHandler(registryMock.Object, processMock.Object),
46 new MouseSettingsHandler(registryMock.Object, processMock.Object, systemParamsMock.Object, loggerMock.Object),
47 new AccessibilitySettingsHandler(registryMock.Object, processMock.Object, systemParamsMock.Object),
48 new PowerSettingsHandler(registryMock.Object, processMock.Object),
49 new FileExplorerSettingsHandler(registryMock.Object),
50 new PrivacySettingsHandler(registryMock.Object),
51 new SystemSettingsHandler(registryMock.Object, processMock.Object),
52 new SystemActionHandler(processMock.Object, debuggerMock.Object),
53 ];
54 }
55
56 /// <summary>
57 /// Verifies that no handler declares the same command key more than once.
58 /// </summary>
59 [Fact]
60 public void AllHandlers_HaveNoDuplicateCommandsWithinHandler()
61 {
62 foreach (var handler in _handlers)
63 {
64 var commands = handler.SupportedActions.ToList();
65 var duplicates = commands.GroupBy(c => c).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
66
67 Assert.Empty(duplicates);
68 }
69 }
70
71 /// <summary>
72 /// Verifies that no command key is claimed by more than one handler.
73 /// </summary>
74 [Fact]
75 public void AllHandlers_HaveNoDuplicateCommandsAcrossHandlers()
76 {
77 var seen = new Dictionary<string, string>();
78 var duplicates = new List<string>();
79
80 foreach (var handler in _handlers)
81 {
82 string handlerName = handler.GetType().Name;
83 foreach (string cmd in handler.SupportedActions)
84 {
85 if (seen.TryGetValue(cmd, out string? existingHandler))
86 {
87 duplicates.Add($"'{cmd}' in both {existingHandler} and {handlerName}");
88 }
89 else
90 {
91 seen[cmd] = handlerName;
92 }
93 }
94 }
95
96 Assert.Empty(duplicates);
97 }
98
99}
100