FancyZones.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.IO.Abstractions; 7 using System.Text.Json; 8 9 using Microsoft.PowerToys.Settings.UI.Library; 10 using Microsoft.PowerToys.Settings.UI.Library.Interfaces; 11 using Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility; 12 using Microsoft.PowerToys.Settings.UI.UnitTests.Mocks; 13 using Microsoft.PowerToys.Settings.UI.ViewModels; 14 using Microsoft.VisualStudio.TestTools.UnitTesting; 15 using Moq; 16 17 namespace ViewModelTests 18 { 19 [TestClass] 20 public class FancyZones 21 { 22 public const string FancyZonesTestFolderName = "Test\\FancyZones"; 23 24 /// <summary> 25 /// Test if the original settings files were modified. 26 /// </summary> 27 [TestMethod] 28 [DataRow("v0.18.2", "settings.json")] 29 [DataRow("v0.19.2", "settings.json")] 30 [DataRow("v0.20.1", "settings.json")] 31 [DataRow("v0.21.1", "settings.json")] 32 [DataRow("v0.22.0", "settings.json")] 33 public void OriginalFilesModificationTest(string version, string fileName) 34 { 35 var settingPathMock = new Mock<SettingPath>(); 36 37 var fileMock = BackCompatTestProperties.GetModuleIOProvider(version, FancyZonesSettings.ModuleName, fileName); 38 var mockSettingsUtils = new SettingsUtils(fileMock.Object, settingPathMock.Object); 39 FancyZonesSettings originalSettings = mockSettingsUtils.GetSettingsOrDefault<FancyZonesSettings>(FancyZonesSettings.ModuleName); 40 41 var mockGeneralIOProvider = BackCompatTestProperties.GetGeneralSettingsIOProvider(version); 42 var mockGeneralSettingsUtils = new SettingsUtils(mockGeneralIOProvider.Object, settingPathMock.Object); 43 GeneralSettings originalGeneralSettings = mockGeneralSettingsUtils.GetSettingsOrDefault<GeneralSettings>(); 44 45 var generalSettingsRepository = new BackCompatTestProperties.MockSettingsRepository<GeneralSettings>(mockGeneralSettingsUtils); 46 var fancyZonesRepository = new BackCompatTestProperties.MockSettingsRepository<FancyZonesSettings>(mockSettingsUtils); 47 48 // Initialise View Model with test Config files 49 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils, generalSettingsRepository, fancyZonesRepository, ColorPickerIsEnabledByDefault_IPC); 50 51 // Verify that the old settings persisted 52 Assert.AreEqual(originalGeneralSettings.Enabled.FancyZones, viewModel.IsEnabled); 53 Assert.AreEqual(originalSettings.Properties.FancyzonesAppLastZoneMoveWindows.Value, viewModel.AppLastZoneMoveWindows); 54 Assert.AreEqual(originalSettings.Properties.FancyzonesBorderColor.Value, viewModel.ZoneBorderColor); 55 Assert.AreEqual(originalSettings.Properties.FancyzonesDisplayOrWorkAreaChangeMoveWindows.Value, viewModel.DisplayOrWorkAreaChangeMoveWindows); 56 Assert.AreEqual(originalSettings.Properties.FancyzonesEditorHotkey.Value.ToString(), viewModel.EditorHotkey.ToString()); 57 Assert.AreEqual(originalSettings.Properties.FancyzonesWindowSwitching.Value, viewModel.WindowSwitching); 58 Assert.AreEqual(originalSettings.Properties.FancyzonesNextTabHotkey.Value.ToString(), viewModel.NextTabHotkey.ToString()); 59 Assert.AreEqual(originalSettings.Properties.FancyzonesPrevTabHotkey.Value.ToString(), viewModel.PrevTabHotkey.ToString()); 60 Assert.AreEqual(originalSettings.Properties.FancyzonesExcludedApps.Value, viewModel.ExcludedApps); 61 Assert.AreEqual(originalSettings.Properties.FancyzonesHighlightOpacity.Value, viewModel.HighlightOpacity); 62 Assert.AreEqual(originalSettings.Properties.FancyzonesInActiveColor.Value, viewModel.ZoneInActiveColor); 63 Assert.AreEqual(originalSettings.Properties.FancyzonesMakeDraggedWindowTransparent.Value, viewModel.MakeDraggedWindowsTransparent); 64 Assert.AreEqual(originalSettings.Properties.FancyzonesMouseSwitch.Value, viewModel.MouseSwitch); 65 Assert.AreEqual(originalSettings.Properties.FancyzonesMoveWindowsAcrossMonitors.Value, viewModel.MoveWindowsAcrossMonitors); 66 Assert.AreEqual(originalSettings.Properties.FancyzonesMoveWindowsBasedOnPosition.Value, viewModel.MoveWindowsBasedOnPosition); 67 Assert.AreEqual(originalSettings.Properties.FancyzonesOpenWindowOnActiveMonitor.Value, viewModel.OpenWindowOnActiveMonitor); 68 Assert.AreEqual(originalSettings.Properties.FancyzonesOverrideSnapHotkeys.Value, viewModel.OverrideSnapHotkeys); 69 Assert.AreEqual(originalSettings.Properties.FancyzonesRestoreSize.Value, viewModel.RestoreSize); 70 Assert.AreEqual(originalSettings.Properties.FancyzonesShiftDrag.Value, viewModel.ShiftDrag); 71 Assert.AreEqual(originalSettings.Properties.FancyzonesShowOnAllMonitors.Value, viewModel.ShowOnAllMonitors); 72 Assert.AreEqual(originalSettings.Properties.FancyzonesSpanZonesAcrossMonitors.Value, viewModel.SpanZonesAcrossMonitors); 73 Assert.AreEqual(originalSettings.Properties.FancyzonesZoneHighlightColor.Value, viewModel.ZoneHighlightColor); 74 Assert.AreEqual(originalSettings.Properties.FancyzonesZoneSetChangeMoveWindows.Value, viewModel.ZoneSetChangeMoveWindows); 75 Assert.AreEqual(originalSettings.Properties.UseCursorposEditorStartupscreen.Value, viewModel.UseCursorPosEditorStartupScreen); 76 Assert.AreEqual(originalSettings.Properties.FancyzonesAllowChildWindowSnap.Value, viewModel.AllowChildWindowSnap); 77 Assert.AreEqual(originalSettings.Properties.FancyzonesDisableRoundCornersOnSnap.Value, viewModel.DisableRoundCornersOnWindowSnap); 78 79 // Verify that the stub file was used 80 var expectedCallCount = 2; // once via the view model, and once by the test (GetSettings<T>) 81 BackCompatTestProperties.VerifyModuleIOProviderWasRead(fileMock, FancyZonesSettings.ModuleName, expectedCallCount); 82 BackCompatTestProperties.VerifyGeneralSettingsIOProviderWasRead(mockGeneralIOProvider, expectedCallCount); 83 } 84 85 private int ColorPickerIsEnabledByDefault_IPC(string msg) 86 { 87 OutGoingGeneralSettings snd = JsonSerializer.Deserialize<OutGoingGeneralSettings>(msg); 88 Assert.IsTrue(snd.GeneralSettings.Enabled.ColorPicker); 89 return 0; 90 } 91 92 private Mock<SettingsUtils> mockGeneralSettingsUtils; 93 94 private Mock<SettingsUtils> mockFancyZonesSettingsUtils; 95 96 private Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 97 98 [TestInitialize] 99 public void SetUpStubSettingUtils() 100 { 101 mockGeneralSettingsUtils = ISettingsUtilsMocks.GetStubSettingsUtils<GeneralSettings>(); 102 mockFancyZonesSettingsUtils = ISettingsUtilsMocks.GetStubSettingsUtils<FancyZonesSettings>(); 103 } 104 105 [TestCleanup] 106 public void CleanUp() 107 { 108 // Reset singleton instances to prevent state pollution between tests 109 ResetSettingsRepository<GeneralSettings>(); 110 ResetSettingsRepository<FancyZonesSettings>(); 111 } 112 113 private void ResetSettingsRepository<T>() 114 where T : class, ISettingsConfig, new() 115 { 116 var repositoryType = typeof(SettingsRepository<T>); 117 var field = repositoryType.GetField("settingsRepository", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); 118 field?.SetValue(null, null); 119 } 120 121 [TestMethod] 122 public void IsEnabledShouldDisableModuleWhenSuccessful() 123 { 124 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 125 126 Func<string, int> sendMockIPCConfigMSG = msg => 127 { 128 OutGoingGeneralSettings snd = JsonSerializer.Deserialize<OutGoingGeneralSettings>(msg); 129 Assert.IsFalse(snd.GeneralSettings.Enabled.FancyZones); 130 return 0; 131 }; 132 133 // arrange 134 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 135 Assert.IsTrue(viewModel.IsEnabled); // check if the module is enabled. 136 137 // act 138 viewModel.IsEnabled = false; 139 } 140 141 [TestMethod] 142 public void ShiftDragShouldSetValue2FalseWhenSuccessful() 143 { 144 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 145 146 // arrange 147 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 148 Assert.IsTrue(viewModel.ShiftDrag); // check if value was initialized to false. 149 150 // act 151 viewModel.ShiftDrag = false; 152 153 // assert 154 var expected = viewModel.ShiftDrag; 155 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesShiftDrag.Value; 156 Assert.AreEqual(expected, actual); 157 } 158 159 [TestMethod] 160 public void OverrideSnapHotkeysShouldSetValue2TrueWhenSuccessful() 161 { 162 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 163 164 // arrange 165 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 166 Assert.IsFalse(viewModel.OverrideSnapHotkeys); // check if value was initialized to false. 167 168 // act 169 viewModel.OverrideSnapHotkeys = true; 170 171 // assert 172 var expected = viewModel.OverrideSnapHotkeys; 173 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesOverrideSnapHotkeys.Value; 174 Assert.AreEqual(expected, actual); 175 } 176 177 [TestMethod] 178 public void MoveWindowsAcrossMonitorsShouldSetValue2TrueWhenSuccessful() 179 { 180 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 181 182 // arrange 183 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 184 Assert.IsFalse(viewModel.MoveWindowsAcrossMonitors); // check if value was initialized to false. 185 186 // act 187 viewModel.MoveWindowsAcrossMonitors = true; 188 189 // assert 190 var expected = viewModel.MoveWindowsAcrossMonitors; 191 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesMoveWindowsAcrossMonitors.Value; 192 Assert.AreEqual(expected, actual); 193 } 194 195 [TestMethod] 196 public void MoveWindowsBasedOnPositionShouldSetValue2TrueWhenSuccessful() 197 { 198 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 199 200 // arrange 201 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 202 Assert.IsFalse(viewModel.MoveWindowsBasedOnPosition); // check if value was initialized to false. 203 Assert.IsTrue(viewModel.MoveWindowsBasedOnZoneIndex); // check if value was initialized to true. 204 205 // act 206 viewModel.MoveWindowsBasedOnPosition = true; 207 208 // assert 209 var basedOnPositionExpected = viewModel.MoveWindowsBasedOnPosition; 210 var basedOnPositionActual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesMoveWindowsBasedOnPosition.Value; 211 Assert.AreEqual(basedOnPositionExpected, basedOnPositionActual); 212 213 var basedOnZoneIndexExpected = viewModel.MoveWindowsBasedOnZoneIndex; 214 var basedOnZoneIndexActual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesMoveWindowsBasedOnPosition.Value; 215 Assert.AreNotEqual(basedOnZoneIndexExpected, basedOnZoneIndexActual); 216 } 217 218 [TestMethod] 219 public void QuickLayoutSwitchShouldSetValue2FalseWhenSuccessful() 220 { 221 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 222 223 // arrange 224 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 225 Assert.IsTrue(viewModel.QuickLayoutSwitch); // check if value was initialized to true. 226 227 // act 228 viewModel.QuickLayoutSwitch = false; 229 230 // assert 231 var expected = viewModel.QuickLayoutSwitch; 232 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesQuickLayoutSwitch.Value; 233 Assert.AreEqual(expected, actual); 234 } 235 236 [TestMethod] 237 public void FlashZonesOnQuickSwitchShouldSetValue2FalseWhenSuccessful() 238 { 239 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 240 241 // arrange 242 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 243 Assert.IsTrue(viewModel.FlashZonesOnQuickSwitch); // check if value was initialized to true. 244 245 // act 246 viewModel.FlashZonesOnQuickSwitch = false; 247 248 // assert 249 var expected = viewModel.FlashZonesOnQuickSwitch; 250 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesFlashZonesOnQuickSwitch.Value; 251 Assert.AreEqual(expected, actual); 252 } 253 254 [TestMethod] 255 public void MakeDraggedWindowsTransparentShouldSetValue2TrueWhenSuccessful() 256 { 257 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 258 259 // arrange 260 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 261 Assert.IsFalse(viewModel.MakeDraggedWindowsTransparent); // check if value was initialized to false. 262 263 // act 264 viewModel.MakeDraggedWindowsTransparent = true; 265 266 // assert 267 var expected = viewModel.MakeDraggedWindowsTransparent; 268 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesMakeDraggedWindowTransparent.Value; 269 Assert.AreEqual(expected, actual); 270 } 271 272 [TestMethod] 273 public void MouseSwitchShouldSetValue2TrueWhenSuccessful() 274 { 275 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 276 277 // arrange 278 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 279 Assert.IsFalse(viewModel.MouseSwitch); // check if value was initialized to false. 280 281 // act 282 viewModel.MouseSwitch = true; 283 284 // assert 285 var expected = viewModel.MouseSwitch; 286 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesMouseSwitch.Value; 287 Assert.AreEqual(expected, actual); 288 } 289 290 [TestMethod] 291 public void DisplayOrWorkAreaChangeMoveWindowsShouldSetValue2FalseWhenSuccessful() 292 { 293 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 294 295 // arrange 296 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 297 Assert.IsTrue(viewModel.DisplayOrWorkAreaChangeMoveWindows); // check if value was initialized to true. 298 299 // act 300 viewModel.DisplayOrWorkAreaChangeMoveWindows = false; 301 302 // assert 303 var expected = viewModel.DisplayOrWorkAreaChangeMoveWindows; 304 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesDisplayOrWorkAreaChangeMoveWindows.Value; 305 Assert.AreEqual(expected, actual); 306 } 307 308 [TestMethod] 309 public void ZoneSetChangeMoveWindowsShouldSetValue2TrueWhenSuccessful() 310 { 311 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 312 313 // arrange 314 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 315 Assert.IsFalse(viewModel.ZoneSetChangeMoveWindows); // check if value was initialized to false. 316 317 // act 318 viewModel.ZoneSetChangeMoveWindows = true; 319 320 // assert 321 var expected = viewModel.ZoneSetChangeMoveWindows; 322 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesZoneSetChangeMoveWindows.Value; 323 Assert.AreEqual(expected, actual); 324 } 325 326 [TestMethod] 327 public void AppLastZoneMoveWindowsShouldSetValue2TrueWhenSuccessful() 328 { 329 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 330 331 // arrange 332 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 333 Assert.IsFalse(viewModel.AppLastZoneMoveWindows); // check if value was initialized to false. 334 335 // act 336 viewModel.AppLastZoneMoveWindows = true; 337 338 // assert 339 var expected = viewModel.AppLastZoneMoveWindows; 340 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesAppLastZoneMoveWindows.Value; 341 Assert.AreEqual(expected, actual); 342 } 343 344 [TestMethod] 345 public void OpenWindowOnActiveMonitorShouldSetValue2TrueWhenSuccessful() 346 { 347 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 348 349 // arrange 350 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 351 Assert.IsFalse(viewModel.OpenWindowOnActiveMonitor); // check if value was initialized to false. 352 353 // act 354 viewModel.OpenWindowOnActiveMonitor = true; 355 356 // assert 357 var expected = viewModel.OpenWindowOnActiveMonitor; 358 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesOpenWindowOnActiveMonitor.Value; 359 Assert.AreEqual(expected, actual); 360 } 361 362 [TestMethod] 363 public void RestoreSizeShouldSetValue2TrueWhenSuccessful() 364 { 365 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 366 367 // arrange 368 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 369 Assert.IsFalse(viewModel.RestoreSize); // check if value was initialized to false. 370 371 // act 372 viewModel.RestoreSize = true; 373 374 // assert 375 var expected = viewModel.RestoreSize; 376 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesRestoreSize.Value; 377 Assert.AreEqual(expected, actual); 378 } 379 380 [TestMethod] 381 public void UseCursorPosEditorStartupScreenShouldSetValue2FalseWhenSuccessful() 382 { 383 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 384 385 // arrange 386 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 387 Assert.IsTrue(viewModel.UseCursorPosEditorStartupScreen); // check if value was initialized to false. 388 389 // act 390 viewModel.UseCursorPosEditorStartupScreen = true; 391 392 // assert 393 var expected = viewModel.UseCursorPosEditorStartupScreen; 394 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.UseCursorposEditorStartupscreen.Value; 395 Assert.AreEqual(expected, actual); 396 } 397 398 [TestMethod] 399 public void ShowOnAllMonitorsShouldSetValue2TrueWhenSuccessful() 400 { 401 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 402 403 // arrange 404 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 405 Assert.IsFalse(viewModel.ShowOnAllMonitors); // check if value was initialized to false. 406 407 // act 408 viewModel.ShowOnAllMonitors = true; 409 410 // assert 411 var expected = viewModel.ShowOnAllMonitors; 412 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesShowOnAllMonitors.Value; 413 Assert.AreEqual(expected, actual); 414 } 415 416 [TestMethod] 417 public void SpanZonesAcrossMonitorsShouldSetValue2TrueWhenSuccessful() 418 { 419 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 420 421 // arrange 422 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 423 Assert.IsFalse(viewModel.SpanZonesAcrossMonitors); // check if value was initialized to false. 424 425 // act 426 viewModel.SpanZonesAcrossMonitors = true; 427 428 // assert 429 var expected = viewModel.SpanZonesAcrossMonitors; 430 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesSpanZonesAcrossMonitors.Value; 431 Assert.AreEqual(expected, actual); 432 } 433 434 [TestMethod] 435 public void OverlappingZonesAlgorithmIndexShouldSetValue2AnotherWhenSuccessful() 436 { 437 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 438 439 // arrange 440 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 441 Assert.AreEqual(0, viewModel.OverlappingZonesAlgorithmIndex); // check if value was initialized to false. 442 443 // act 444 viewModel.OverlappingZonesAlgorithmIndex = 1; 445 446 // assert 447 var expected = viewModel.OverlappingZonesAlgorithmIndex; 448 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesOverlappingZonesAlgorithm.Value; 449 Assert.AreEqual(expected, actual); 450 } 451 452 [TestMethod] 453 public void AllowChildWindowsToSnapShouldSetValue2TrueWhenSuccessful() 454 { 455 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 456 457 // arrange 458 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 459 Assert.IsFalse(viewModel.AllowChildWindowSnap); // check if value was initialized to false. 460 461 // act 462 viewModel.AllowChildWindowSnap = true; 463 464 // assert 465 var expected = viewModel.AllowChildWindowSnap; 466 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesAllowChildWindowSnap.Value; 467 Assert.AreEqual(expected, actual); 468 } 469 470 [TestMethod] 471 public void DisableRoundCornersOnSnapShouldSetValue2TrueWhenSuccessful() 472 { 473 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 474 475 // arrange 476 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 477 Assert.IsFalse(viewModel.DisableRoundCornersOnWindowSnap); // check if value was initialized to false. 478 479 // act 480 viewModel.DisableRoundCornersOnWindowSnap = true; 481 482 // assert 483 var expected = viewModel.DisableRoundCornersOnWindowSnap; 484 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesDisableRoundCornersOnSnap.Value; 485 Assert.AreEqual(expected, actual); 486 } 487 488 [TestMethod] 489 public void ZoneHighlightColorShouldSetColorValue2WhiteWhenSuccessful() 490 { 491 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 492 493 // arrange 494 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 495 Assert.AreEqual(ConfigDefaults.DefaultFancyZonesZoneHighlightColor, viewModel.ZoneHighlightColor); 496 497 // act 498 viewModel.ZoneHighlightColor = "#FFFFFF"; 499 500 // assert 501 var expected = viewModel.ZoneHighlightColor; 502 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesZoneHighlightColor.Value; 503 Assert.AreEqual(expected, actual); 504 } 505 506 [TestMethod] 507 public void ZoneBorderColorShouldSetColorValue2WhiteWhenSuccessful() 508 { 509 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 510 511 // arrange 512 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 513 Assert.AreEqual(ConfigDefaults.DefaultFancyzonesBorderColor, viewModel.ZoneBorderColor); 514 515 // act 516 viewModel.ZoneBorderColor = "#FFFFFF"; 517 518 // assert 519 var expected = viewModel.ZoneBorderColor; 520 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesBorderColor.Value; 521 Assert.AreEqual(expected, actual); 522 } 523 524 [TestMethod] 525 public void ZoneInActiveColorShouldSetColorValue2WhiteWhenSuccessful() 526 { 527 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 528 529 // arrange 530 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 531 Assert.AreEqual(ConfigDefaults.DefaultFancyZonesInActiveColor, viewModel.ZoneInActiveColor); 532 533 // act 534 viewModel.ZoneInActiveColor = "#FFFFFF"; 535 536 // assert 537 var expected = viewModel.ZoneInActiveColor; 538 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesInActiveColor.Value; 539 Assert.AreEqual(expected, actual); 540 } 541 542 [TestMethod] 543 public void ExcludedAppsShouldSetColorValue2WhiteWhenSuccessful() 544 { 545 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 546 547 // arrange 548 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 549 Assert.AreEqual(string.Empty, viewModel.ExcludedApps); 550 551 // act 552 viewModel.ExcludedApps = "Sample"; 553 554 // assert 555 var expected = viewModel.ExcludedApps; 556 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesExcludedApps.Value; 557 Assert.AreEqual(expected, actual); 558 } 559 560 [TestMethod] 561 public void HighlightOpacityShouldSetOpacityValueTo60WhenSuccessful() 562 { 563 Mock<SettingsUtils> mockSettingsUtils = new Mock<SettingsUtils>(new FileSystem(), null); 564 565 // arrange 566 FancyZonesViewModel viewModel = new FancyZonesViewModel(mockSettingsUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object), sendMockIPCConfigMSG, FancyZonesTestFolderName); 567 Assert.AreEqual(50, viewModel.HighlightOpacity); 568 569 // act 570 viewModel.HighlightOpacity = 60; 571 572 // assert 573 var expected = viewModel.HighlightOpacity; 574 var actual = SettingsRepository<FancyZonesSettings>.GetInstance(mockFancyZonesSettingsUtils.Object).SettingsConfig.Properties.FancyzonesHighlightOpacity.Value; 575 Assert.AreEqual(expected, actual); 576 } 577 } 578 }