mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-02-24 12:11:09 +01:00
This pull request introduces a new unit testing framework for the `WorkspacesLib` module, adds test coverage for various utilities, and integrates the new test project into the build system. Key changes include adding the `WorkspacesLibUnitTests` project, implementing tests for `AppUtils`, `JsonUtils`, and `PwaHelper`, and updating the build configuration to include the new test project. ### Unit Tests Added: * **`AppUtilsTests`**: - Added comprehensive tests for methods such as `GetCurrentFolder`, `IsEdge`, `IsChrome`, and `IsSteamGame` to validate their behavior under various conditions. * **`JsonUtilsTests`**: - Implemented tests for reading and writing workspace data, including scenarios for invalid JSON, non-existent files, and valid workspace lists. * **`PwaHelperTests`**: - Added tests to ensure the stability of `PwaHelper` methods, such as `GetEdgeAppId`, `GetChromeAppId`, and `SearchPwaName`, even with invalid or empty inputs. ### Build System Updates: * **New Test Project Integration**: - Added the `WorkspacesLibUnitTests` project to the solution file `PowerToys.sln` with appropriate dependencies. - Updated build configurations to include the new test project for both Debug and Release builds across architectures. [[1]](diffhunk://#diff-ca837ce490070b91656ffffe31cbad8865ba9174e0f020231f77baf35ff3f811R2208-R2215) [[2]](diffhunk://#diff-ca837ce490070b91656ffffe31cbad8865ba9174e0f020231f77baf35ff3f811R2841) ### Pipeline Adjustments: * **Test Discovery**: - Updated the pipeline configuration in `.pipelines/v2/templates/job-build-project.yml` to discover the new `WorkspacesLibUnitTests.dll` during test runs. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
239 lines
7.1 KiB
C++
239 lines
7.1 KiB
C++
#include "pch.h"
|
|
#include <filesystem> // Add this line
|
|
|
|
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
|
|
|
namespace WorkspacesLibUnitTests
|
|
{
|
|
TEST_CLASS(AppUtilsTests)
|
|
{
|
|
public:
|
|
TEST_METHOD(GetCurrentFolder_ReturnsNonEmptyPath)
|
|
{
|
|
// Act
|
|
const std::wstring& result = Utils::Apps::GetCurrentFolder();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result.empty());
|
|
Assert::IsTrue(std::filesystem::exists(result));
|
|
}
|
|
|
|
TEST_METHOD(GetCurrentFolderUpper_ReturnsUppercasePath)
|
|
{
|
|
// Act
|
|
const std::wstring& currentFolder = Utils::Apps::GetCurrentFolder();
|
|
const std::wstring& currentFolderUpper = Utils::Apps::GetCurrentFolderUpper();
|
|
|
|
// Assert
|
|
Assert::IsFalse(currentFolderUpper.empty());
|
|
Assert::AreEqual(currentFolder.length(), currentFolderUpper.length());
|
|
|
|
// Verify it's actually uppercase
|
|
std::wstring expectedUpper = currentFolder;
|
|
std::transform(expectedUpper.begin(), expectedUpper.end(), expectedUpper.begin(), towupper);
|
|
Assert::AreEqual(expectedUpper, currentFolderUpper);
|
|
}
|
|
|
|
TEST_METHOD(GetCurrentFolder_ConsistentResults)
|
|
{
|
|
// Act
|
|
const std::wstring& result1 = Utils::Apps::GetCurrentFolder();
|
|
const std::wstring& result2 = Utils::Apps::GetCurrentFolder();
|
|
|
|
// Assert
|
|
Assert::AreEqual(result1, result2);
|
|
}
|
|
|
|
TEST_METHOD(GetCurrentFolderUpper_ConsistentResults)
|
|
{
|
|
// Act
|
|
const std::wstring& result1 = Utils::Apps::GetCurrentFolderUpper();
|
|
const std::wstring& result2 = Utils::Apps::GetCurrentFolderUpper();
|
|
|
|
// Assert
|
|
Assert::AreEqual(result1, result2);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsEdge_EdgePath_ReturnsTrue)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
|
|
// Act
|
|
bool result = appData.IsEdge();
|
|
|
|
// Assert
|
|
Assert::IsTrue(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsEdge_NonEdgePath_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
|
|
|
|
// Act
|
|
bool result = appData.IsEdge();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsEdge_EmptyPath_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"";
|
|
|
|
// Act
|
|
bool result = appData.IsEdge();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsChrome_ChromePath_ReturnsTrue)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
|
|
|
|
// Act
|
|
bool result = appData.IsChrome();
|
|
|
|
// Assert
|
|
Assert::IsTrue(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsChrome_NonChromePath_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
|
|
// Act
|
|
bool result = appData.IsChrome();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsChrome_EmptyPath_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.installPath = L"";
|
|
|
|
// Act
|
|
bool result = appData.IsChrome();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsSteamGame_SteamProtocol_ReturnsTrue)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.protocolPath = L"steam://run/123456";
|
|
|
|
// Act
|
|
bool result = appData.IsSteamGame();
|
|
|
|
// Assert
|
|
Assert::IsTrue(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsSteamGame_NonSteamProtocol_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.protocolPath = L"https://example.com";
|
|
|
|
// Act
|
|
bool result = appData.IsSteamGame();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsSteamGame_EmptyProtocol_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.protocolPath = L"";
|
|
|
|
// Act
|
|
bool result = appData.IsSteamGame();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_IsSteamGame_PartialSteamString_ReturnsFalse)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData appData;
|
|
appData.protocolPath = L"http://run/123456";
|
|
|
|
// Act
|
|
bool result = appData.IsSteamGame();
|
|
|
|
// Assert
|
|
Assert::IsFalse(result);
|
|
}
|
|
|
|
TEST_METHOD(AppData_DefaultValues)
|
|
{
|
|
// Arrange & Act
|
|
Utils::Apps::AppData appData;
|
|
|
|
// Assert
|
|
Assert::IsTrue(appData.name.empty());
|
|
Assert::IsTrue(appData.installPath.empty());
|
|
Assert::IsTrue(appData.packageFullName.empty());
|
|
Assert::IsTrue(appData.appUserModelId.empty());
|
|
Assert::IsTrue(appData.pwaAppId.empty());
|
|
Assert::IsTrue(appData.protocolPath.empty());
|
|
Assert::IsFalse(appData.canLaunchElevated);
|
|
}
|
|
|
|
TEST_METHOD(AppData_MultipleBrowserDetection)
|
|
{
|
|
// Arrange
|
|
Utils::Apps::AppData edgeApp;
|
|
edgeApp.installPath = L"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
|
|
Utils::Apps::AppData chromeApp;
|
|
chromeApp.installPath = L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
|
|
|
|
Utils::Apps::AppData otherApp;
|
|
otherApp.installPath = L"C:\\Program Files\\Firefox\\firefox.exe";
|
|
|
|
// Act & Assert
|
|
Assert::IsTrue(edgeApp.IsEdge());
|
|
Assert::IsFalse(edgeApp.IsChrome());
|
|
Assert::IsFalse(edgeApp.IsSteamGame());
|
|
|
|
Assert::IsFalse(chromeApp.IsEdge());
|
|
Assert::IsTrue(chromeApp.IsChrome());
|
|
Assert::IsFalse(chromeApp.IsSteamGame());
|
|
|
|
Assert::IsFalse(otherApp.IsEdge());
|
|
Assert::IsFalse(otherApp.IsChrome());
|
|
Assert::IsFalse(otherApp.IsSteamGame());
|
|
}
|
|
|
|
TEST_METHOD(GetAppsList_ReturnsAppList)
|
|
{
|
|
// Act
|
|
Utils::Apps::AppList apps = Utils::Apps::GetAppsList();
|
|
|
|
// Assert
|
|
// The list can be empty or non-empty depending on the system
|
|
// But it should not crash and should return a valid list
|
|
Assert::IsTrue(apps.size() >= 0);
|
|
}
|
|
};
|
|
} |