mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 02:06:36 +02:00
[cmdpal] Migrate some plugin's unit tests from PT run to cmdpal. (#40462)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Migrate blow plugin's from UT to cmdpal: 1. TimeDate 2. WindowWalker 3. System 4. Registry This PR is mostly helped by Copilot. Please feel free to change cases in the future. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #40461 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --------- Co-authored-by: Yu Leng <yuleng@microsoft.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
// 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 System;
|
||||
using Microsoft.CmdPal.Ext.System.Helpers;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.System.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class BasicTests
|
||||
{
|
||||
[TestMethod]
|
||||
public void CommandsHelperTest()
|
||||
{
|
||||
// Setup & Act
|
||||
var commands = Commands.GetSystemCommands(false, false, false, false);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(commands);
|
||||
Assert.IsTrue(commands.Count > 0);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void IconsHelperTest()
|
||||
{
|
||||
// Assert
|
||||
Assert.IsNotNull(Icons.FirmwareSettingsIcon);
|
||||
Assert.IsNotNull(Icons.LockIcon);
|
||||
Assert.IsNotNull(Icons.LogoffIcon);
|
||||
Assert.IsNotNull(Icons.NetworkAdapterIcon);
|
||||
Assert.IsNotNull(Icons.RecycleBinIcon);
|
||||
Assert.IsNotNull(Icons.RestartIcon);
|
||||
Assert.IsNotNull(Icons.RestartShellIcon);
|
||||
Assert.IsNotNull(Icons.ShutdownIcon);
|
||||
Assert.IsNotNull(Icons.SleepIcon);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Win32HelpersTest()
|
||||
{
|
||||
// Setup & Act
|
||||
// These methods should not throw exceptions
|
||||
var firmwareType = Win32Helpers.GetSystemFirmwareType();
|
||||
|
||||
// Assert
|
||||
// Just testing that they don't throw exceptions
|
||||
Assert.IsTrue(Enum.IsDefined(typeof(FirmwareType), firmwareType));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void NetworkConnectionPropertiesTest()
|
||||
{
|
||||
// Test that network connection properties can be accessed without throwing exceptions
|
||||
try
|
||||
{
|
||||
var networkPropertiesList = NetworkConnectionProperties.GetList();
|
||||
|
||||
// If we have network connections, test accessing their properties
|
||||
if (networkPropertiesList.Count > 0)
|
||||
{
|
||||
var networkProperties = networkPropertiesList[0];
|
||||
|
||||
// Access properties (these used to be methods)
|
||||
var ipv4 = networkProperties.IPv4;
|
||||
var ipv6 = networkProperties.IPv6Primary;
|
||||
var macAddress = networkProperties.PhysicalAddress;
|
||||
|
||||
// Test passes if no exceptions are thrown
|
||||
Assert.IsTrue(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If no network connections, test still passes
|
||||
Assert.IsTrue(true);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Assert.Fail("Network properties should not throw exceptions");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
// 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 System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.CmdPal.Ext.System.Helpers;
|
||||
using Microsoft.CmdPal.Ext.System.Pages;
|
||||
using Microsoft.CommandPalette.Extensions;
|
||||
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.System.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class ImageTests
|
||||
{
|
||||
[DataTestMethod]
|
||||
[DataRow("shutdown", "ShutdownIcon")]
|
||||
[DataRow("restart", "RestartIcon")]
|
||||
[DataRow("sign out", "LogoffIcon")]
|
||||
[DataRow("lock", "LockIcon")]
|
||||
[DataRow("sleep", "SleepIcon")]
|
||||
[DataRow("hibernate", "SleepIcon")]
|
||||
[DataRow("recycle bin", "RecycleBinIcon")]
|
||||
[DataRow("uefi firmware settings", "FirmwareSettingsIcon")]
|
||||
[DataRow("IPv4 addr", "NetworkAdapterIcon")]
|
||||
[DataRow("IPV6 addr", "NetworkAdapterIcon")]
|
||||
[DataRow("MAC addr", "NetworkAdapterIcon")]
|
||||
public void IconThemeDarkTest(string typedString, string expectedIconPropertyName)
|
||||
{
|
||||
var systemPage = new SystemCommandPage(new SettingsManager());
|
||||
|
||||
foreach (var item in systemPage.GetItems())
|
||||
{
|
||||
if (item.Title.Contains(typedString, StringComparison.OrdinalIgnoreCase) || item.Subtitle.Contains(typedString, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var icon = item.Icon;
|
||||
Assert.IsNotNull(icon, $"Icon for '{typedString}' should not be null.");
|
||||
Assert.IsNotEmpty(icon.Dark.Icon, $"Icon for '{typedString}' should not be empty.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow("shutdown", "ShutdownIcon")]
|
||||
[DataRow("restart", "RestartIcon")]
|
||||
[DataRow("sign out", "LogoffIcon")]
|
||||
[DataRow("lock", "LockIcon")]
|
||||
[DataRow("sleep", "SleepIcon")]
|
||||
[DataRow("hibernate", "SleepIcon")]
|
||||
[DataRow("recycle bin", "RecycleBinIcon")]
|
||||
[DataRow("uefi firmware settings", "FirmwareSettingsIcon")]
|
||||
[DataRow("IPv4 addr", "NetworkAdapterIcon")]
|
||||
[DataRow("IPV6 addr", "NetworkAdapterIcon")]
|
||||
[DataRow("MAC addr", "NetworkAdapterIcon")]
|
||||
public void IconThemeLightTest(string typedString, string expectedIconPropertyName)
|
||||
{
|
||||
var systemPage = new SystemCommandPage(new SettingsManager());
|
||||
|
||||
foreach (var item in systemPage.GetItems())
|
||||
{
|
||||
if (item.Title.Contains(typedString, StringComparison.OrdinalIgnoreCase) || item.Subtitle.Contains(typedString, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var icon = item.Icon;
|
||||
Assert.IsNotNull(icon, $"Icon for '{typedString}' should not be null.");
|
||||
Assert.IsNotEmpty(icon.Light.Icon, $"Icon for '{typedString}' should not be empty.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!-- Look at Directory.Build.props in root for common stuff as well -->
|
||||
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<RootNamespace>Microsoft.CmdPal.Ext.System.UnitTests</RootNamespace>
|
||||
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPal\tests\</OutputPath>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Moq" />
|
||||
<PackageReference Include="MSTest" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\..\common\ManagedCommon\ManagedCommon.csproj" />
|
||||
<ProjectReference Include="..\..\ext\Microsoft.CmdPal.Ext.System\Microsoft.CmdPal.Ext.System.csproj" />
|
||||
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,105 @@
|
||||
// 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 System;
|
||||
using System.Linq;
|
||||
using Microsoft.CmdPal.Ext.System.Helpers;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.System.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class QueryTests
|
||||
{
|
||||
[DataTestMethod]
|
||||
[DataRow("shutdown", "Shutdown")]
|
||||
[DataRow("restart", "Restart")]
|
||||
[DataRow("sign out", "Sign out")]
|
||||
[DataRow("lock", "Lock")]
|
||||
[DataRow("sleep", "Sleep")]
|
||||
[DataRow("hibernate", "Hibernate")]
|
||||
public void SystemCommandsTest(string typedString, string expectedCommand)
|
||||
{
|
||||
// Setup
|
||||
var commands = Commands.GetSystemCommands(false, false, false, false);
|
||||
|
||||
// Act
|
||||
var result = commands.Where(c => c.Title.Contains(expectedCommand, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.IsTrue(result.Title.Contains(expectedCommand, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void RecycleBinCommandTest()
|
||||
{
|
||||
// Setup
|
||||
var commands = Commands.GetSystemCommands(false, false, false, false);
|
||||
|
||||
// Act
|
||||
var result = commands.Where(c => c.Title.Contains("Recycle", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void NetworkCommandsTest()
|
||||
{
|
||||
// Test that network commands can be retrieved
|
||||
try
|
||||
{
|
||||
var networkPropertiesList = NetworkConnectionProperties.GetList();
|
||||
Assert.IsTrue(networkPropertiesList.Count >= 0); // Should not throw exceptions
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Assert.Fail($"Network commands should not throw exceptions: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void UefiCommandIsAvailableTest()
|
||||
{
|
||||
// Setup
|
||||
var firmwareType = Win32Helpers.GetSystemFirmwareType();
|
||||
var isUefiMode = firmwareType == FirmwareType.Uefi;
|
||||
|
||||
// Act
|
||||
var commands = Commands.GetSystemCommands(isUefiMode, false, false, false);
|
||||
var uefiCommand = commands.Where(c => c.Title.Contains("UEFI", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||
|
||||
// Assert
|
||||
if (isUefiMode)
|
||||
{
|
||||
Assert.IsNotNull(uefiCommand);
|
||||
}
|
||||
else
|
||||
{
|
||||
// UEFI command may still exist but be disabled on non-UEFI systems
|
||||
Assert.IsTrue(true); // Test environment independent
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FirmwareTypeTest()
|
||||
{
|
||||
// Test that GetSystemFirmwareType returns a valid enum value
|
||||
var firmwareType = Win32Helpers.GetSystemFirmwareType();
|
||||
Assert.IsTrue(Enum.IsDefined(typeof(FirmwareType), firmwareType));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EmptyRecycleBinCommandTest()
|
||||
{
|
||||
// Test that empty recycle bin command exists
|
||||
var commands = Commands.GetSystemCommands(false, false, false, false);
|
||||
var result = commands.Where(c => c.Title.Contains("Empty", StringComparison.OrdinalIgnoreCase) &&
|
||||
c.Title.Contains("Recycle", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||
|
||||
// Empty recycle bin command should exist
|
||||
Assert.IsNotNull(result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user