UT: Add ut to protect common utils codes (#45290)

<!-- 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
As title

<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist

- [ ] Closes: #xxx
<!-- - [ ] Closes: #yyy (add separate lines for additional resolved
issues) -->
- [ ] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [ ] **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
Tests should be picked up and run and pass
This commit is contained in:
Kai Tao
2026-02-03 15:12:45 +08:00
committed by GitHub
parent 18efa0559c
commit 27ba536872
47 changed files with 5692 additions and 10 deletions

View File

@@ -34,6 +34,7 @@ public:
{
this->eventHandle = e.eventHandle;
e.eventHandle = nullptr;
return *this;
}
~EventLocker()

View File

@@ -1,5 +1,8 @@
#pragma once
#include <Windows.h>
#include "../logger/logger.h"
inline bool GetAnimationsEnabled()
{
BOOL enabled = 0;
@@ -10,4 +13,4 @@ inline bool GetAnimationsEnabled()
Logger::error("SystemParametersInfo SPI_GETCLIENTAREAANIMATION failed.");
}
return enabled;
}
}

View File

@@ -7,7 +7,19 @@ namespace ProcessWaiter
{
void OnProcessTerminate(std::wstring parent_pid, std::function<void(DWORD)> callback)
{
DWORD pid = std::stol(parent_pid);
DWORD pid = 0;
try
{
pid = std::stol(parent_pid);
}
catch (...)
{
if (callback)
{
callback(ERROR_INVALID_PARAMETER);
}
return;
}
std::thread([=]() {
HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
if (process != nullptr)
@@ -15,17 +27,26 @@ namespace ProcessWaiter
if (WaitForSingleObject(process, INFINITE) == WAIT_OBJECT_0)
{
CloseHandle(process);
callback(ERROR_SUCCESS);
if (callback)
{
callback(ERROR_SUCCESS);
}
}
else
{
CloseHandle(process);
callback(GetLastError());
if (callback)
{
callback(GetLastError());
}
}
}
else
{
callback(GetLastError());
if (callback)
{
callback(GetLastError());
}
}
}).detach();
}

View File

@@ -31,6 +31,10 @@ public:
HRESULT __stdcall CreateInstance(IUnknown* punkOuter, const IID& riid, void** ppv)
{
if (!ppv)
{
return E_POINTER;
}
*ppv = nullptr;
if (punkOuter)
@@ -55,4 +59,4 @@ public:
private:
std::atomic<long> _refCount;
};
};

View File

@@ -3,6 +3,7 @@
#include <filesystem>
#include <common/version/version.h>
#include <common/SettingsAPI/settings_helpers.h>
#include "../logger/logger.h"
namespace LoggerHelpers
{

View File

@@ -21,9 +21,16 @@
namespace package
{
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::ApplicationModel;
using namespace winrt::Windows::Management::Deployment;
using winrt::Windows::ApplicationModel::Package;
using winrt::Windows::Foundation::IAsyncOperationWithProgress;
using winrt::Windows::Foundation::AsyncStatus;
using winrt::Windows::Foundation::Uri;
using winrt::Windows::Foundation::Collections::IVector;
using winrt::Windows::Management::Deployment::AddPackageOptions;
using winrt::Windows::Management::Deployment::DeploymentOptions;
using winrt::Windows::Management::Deployment::DeploymentProgress;
using winrt::Windows::Management::Deployment::DeploymentResult;
using winrt::Windows::Management::Deployment::PackageManager;
using Microsoft::WRL::ComPtr;
inline BOOL IsWin11OrGreater()
@@ -435,7 +442,7 @@ namespace package
// Declare use of an external location
DeploymentOptions options = DeploymentOptions::ForceTargetApplicationShutdown;
Collections::IVector<Uri> uris = winrt::single_threaded_vector<Uri>();
IVector<Uri> uris = winrt::single_threaded_vector<Uri>();
if (!dependencies.empty())
{
for (const auto& dependency : dependencies)

View File

@@ -4,6 +4,7 @@
#include <cinttypes>
#include <string>
#include <optional>
#include <cwctype>
#include <winrt/base.h>
@@ -27,6 +28,17 @@ namespace timeutil
{
try
{
if (s.empty())
{
return std::nullopt;
}
for (wchar_t ch : s)
{
if (!iswdigit(ch))
{
return std::nullopt;
}
}
uint64_t i = std::stoull(s);
return static_cast<std::time_t>(i);
}