[FZ Editor]Add tests to editor #197 + feedback (#29051)

* here are the tests for the fancy zones

* Wrote tests for GridLayoutModel

* Move FancyZonesEditor tests to right place, tests for default layout model

* fixed SettingTheVerticalLayoutShouldBeTheDefault test

* removed coverlet in the test project

* Fixes for comments on pr

* squashed and updated for comments

* Added the test to the pipeline

---------

Co-authored-by: Drew Gordon <andrewbengordon@gmail.com>
Co-authored-by: Caleb Wightman <agentcboy@gmail.com>
This commit is contained in:
Garrett Vernon 2023-10-18 01:07:48 -06:00 committed by GitHub
parent ec47805634
commit cd99a2e848
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 204 additions and 0 deletions

View File

@ -197,6 +197,7 @@ steps:
**\UnitTests-PdfThumbnailProvider.dll
**\Settings.UI.UnitTests.dll
**\UnitTests-GcodePreviewHandler.dll
**\UnitTests-FancyZonesEditor.dll
**\UnitTests-PdfPreviewHandler.dll
**\UnitTests-PreviewHandlerCommon.dll
**\Microsoft.PowerToys.Run.Plugin.Registry.UnitTests.dll

View File

@ -537,6 +537,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CropAndLock", "src\modules\
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CropAndLockModuleInterface", "src\modules\CropAndLock\CropAndLockModuleInterface\CropAndLockModuleInterface.vcxproj", "{3157FA75-86CF-4EE2-8F62-C43F776493C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests-FancyZonesEditor", "src\modules\fancyzones\UnitTests-FancyZonesEditor\UnitTests-FancyZonesEditor.csproj", "{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@ -2307,6 +2309,18 @@ Global
{3157FA75-86CF-4EE2-8F62-C43F776493C6}.Release|x64.Build.0 = Release|x64
{3157FA75-86CF-4EE2-8F62-C43F776493C6}.Release|x86.ActiveCfg = Release|x64
{3157FA75-86CF-4EE2-8F62-C43F776493C6}.Release|x86.Build.0 = Release|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|ARM64.Build.0 = Debug|ARM64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|x64.ActiveCfg = Debug|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|x64.Build.0 = Debug|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|x86.ActiveCfg = Debug|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Debug|x86.Build.0 = Debug|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|ARM64.ActiveCfg = Release|ARM64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|ARM64.Build.0 = Release|ARM64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|x64.ActiveCfg = Release|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|x64.Build.0 = Release|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|x86.ActiveCfg = Release|x64
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B}.Release|x86.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -2501,6 +2515,7 @@ Global
{3B227528-4BA6-4CAF-B44A-A10C78A64849} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC}
{F5E1146E-B7B3-4E11-85FD-270A500BD78C} = {3B227528-4BA6-4CAF-B44A-A10C78A64849}
{3157FA75-86CF-4EE2-8F62-C43F776493C6} = {3B227528-4BA6-4CAF-B44A-A10C78A64849}
{FC8EB78F-F061-4BD9-A3F6-507BEA965E2B} = {D1D6BC88-09AE-4FB4-AD24-5DED46A791DD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}

View File

@ -0,0 +1,59 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using FancyZonesEditor.Models;
namespace UnitTestsFancyZonesEditor;
[TestClass]
public class DefaultLayoutsModelTests
{
[TestMethod]
public void LayoutCapacityShouldBeNumberOfMonitorConfigurations()
{
var defaultLayoutsModel = new DefaultLayoutsModel();
var expectedOptionCount = Enum.GetValues(typeof(MonitorConfigurationType)).Length;
var actualCapacity = defaultLayoutsModel.Layouts.Capacity;
Assert.AreEqual(expectedOptionCount, actualCapacity);
}
[TestMethod]
public void OverridingLayoutClearsOldDefault()
{
var defaultLayoutsModel = new DefaultLayoutsModel();
GridLayoutModel firstLayout = new GridLayoutModel();
CanvasLayoutModel secondLayout = new CanvasLayoutModel("steve");
defaultLayoutsModel.Set(firstLayout, MonitorConfigurationType.Horizontal);
Assert.AreEqual(defaultLayoutsModel.Layouts[(int)MonitorConfigurationType.Horizontal], firstLayout);
defaultLayoutsModel.Set(secondLayout, MonitorConfigurationType.Horizontal);
Assert.AreNotEqual(defaultLayoutsModel.Layouts[(int)MonitorConfigurationType.Horizontal], firstLayout);
Assert.AreEqual(defaultLayoutsModel.Layouts[(int)MonitorConfigurationType.Horizontal], secondLayout);
}
[TestMethod]
public void SettingTheVerticalLayoutShouldBeTheDefault()
{
var defaultLayoutsModel = new DefaultLayoutsModel();
GridLayoutModel firstLayout = new GridLayoutModel();
defaultLayoutsModel.Set(firstLayout, MonitorConfigurationType.Horizontal);
defaultLayoutsModel.Set(firstLayout, MonitorConfigurationType.Vertical);
Assert.AreEqual(defaultLayoutsModel.Layouts[(int)MonitorConfigurationType.Vertical], firstLayout);
}
[TestMethod]
public void RestoringLayoutShouldSetLayouts()
{
var defaultLayoutsModel = new DefaultLayoutsModel();
GridLayoutModel firstLayout = new GridLayoutModel();
CanvasLayoutModel secondLayout = new CanvasLayoutModel("steve");
var restoredLayouts = new List<LayoutModel> { firstLayout, secondLayout };
defaultLayoutsModel.Restore(restoredLayouts);
CollectionAssert.AreEqual(defaultLayoutsModel.Layouts, restoredLayouts);
}
}

View File

@ -0,0 +1,95 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using FancyZonesEditor.Models;
namespace UnitTestsFancyZonesEditor;
[TestClass]
public class GridLayoutModelTests
{
[TestMethod]
public void EmptyGridLayoutModelIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithInvalidRowAndColumnCountsIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
gridLayoutModel.Rows = 0;
gridLayoutModel.Columns = 0;
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithInvalidRowPercentsIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
gridLayoutModel.Rows = 1;
gridLayoutModel.Columns = 1;
gridLayoutModel.RowPercents = new List<int> { 0 }; // Invalid percentage
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithInvalidColumnPercentsIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
gridLayoutModel.Rows = 1;
gridLayoutModel.Columns = 1;
gridLayoutModel.ColumnPercents = new List<int> { 0 }; // Invalid percentage
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithInvalidCellChildMapLengthIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
gridLayoutModel.Rows = 2;
gridLayoutModel.Columns = 2;
gridLayoutModel.CellChildMap = new int[2, 1]; // Invalid length
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithInvalidZoneCountIsNotValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
gridLayoutModel.Rows = 2;
gridLayoutModel.Columns = 2;
gridLayoutModel.CellChildMap = new int[,]
{
{ 1, 2 },
{ 3, 4 },
}; // Invalid zone count
Assert.IsFalse(gridLayoutModel.IsModelValid());
}
[TestMethod]
public void GridLayoutModelWithValidPropertiesIsValid()
{
GridLayoutModel gridLayoutModel = new GridLayoutModel();
// Set valid row and column counts
gridLayoutModel.Rows = 2;
gridLayoutModel.Columns = 2;
// Set valid percentages for rows and columns
// Should add up to 10000
gridLayoutModel.RowPercents = new List<int> { 5000, 5000 };
gridLayoutModel.ColumnPercents = new List<int> { 5000, 5000 };
// Set a valid CellChildMap
gridLayoutModel.CellChildMap = new int[,]
{
{ 0, 1 },
{ 2, 3 },
}; // corresponds to 4 zones
Assert.IsTrue(gridLayoutModel.IsModelValid(), "GridLayoutModel with valid properties should be valid.");
}
}

View File

@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows10.0.20348.0</TargetFramework>
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
<SupportedOSPlatformVersion>10.0.19041.0</SupportedOSPlatformVersion>
<ImplicitUsings>enable</ImplicitUsings>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<OutputPath>..\..\..\..\$(Platform)\$(Configuration)\tests\UnitTest-FancyZonesEditor\</OutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Windows.CsWinRT" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
<PackageReference Include="System.IO.Abstractions" />
<PackageReference Include="System.IO.Abstractions.TestingHelpers" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\editor\FancyZonesEditor\FancyZonesEditor.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,5 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
global using Microsoft.VisualStudio.TestTools.UnitTesting;