From d6034f8cb0fdccc28f8b2faa953a9a739fcd62a3 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 22 Aug 2025 21:09:57 +0800 Subject: [PATCH] fix: fix minor issue of testbench - fix testbench minor issue. - delete migrated source code files. --- src/YYCCLegacy/WinFctHelper.cpp | 115 ------------------------------ src/YYCCLegacy/WinFctHelper.hpp | 106 --------------------------- testbench/shared/literals.cpp | 2 +- testbench/yycc/windows/winfct.cpp | 3 +- 4 files changed, 3 insertions(+), 223 deletions(-) delete mode 100644 src/YYCCLegacy/WinFctHelper.cpp delete mode 100644 src/YYCCLegacy/WinFctHelper.hpp diff --git a/src/YYCCLegacy/WinFctHelper.cpp b/src/YYCCLegacy/WinFctHelper.cpp deleted file mode 100644 index f841fb5..0000000 --- a/src/YYCCLegacy/WinFctHelper.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "WinFctHelper.hpp" -#if defined(YYCC_OS_WINDOWS) - -#include "EncodingHelper.hpp" -#include "COMHelper.hpp" - -namespace YYCC::WinFctHelper { - - HMODULE GetCurrentModule() { - // Reference: https://stackoverflow.com/questions/557081/how-do-i-get-the-hmodule-for-the-currently-executing-code - HMODULE hModule = NULL; - ::GetModuleHandleExW( - GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, // get address and do not inc ref counter. - (LPCWSTR)GetCurrentModule, - &hModule); - - return hModule; - } - - bool GetTempDirectory(yycc_u8string& ret) { - // create wchar buffer for receiving the temp path. - std::wstring wpath(MAX_PATH + 1u, L'\0'); - DWORD expected_size; - - // fetch temp folder - while (true) { - if ((expected_size = ::GetTempPathW(static_cast(wpath.size()), wpath.data())) == 0) { - // failed, set to empty - return false; - } - - if (expected_size > static_cast(wpath.size())) { - // buffer is too short, need enlarge and do fetching again - wpath.resize(expected_size); - } else { - // ok. shrink to real length, break while - break; - } - } - - // resize result - wpath.resize(expected_size); - // convert to utf8 and return - return YYCC::EncodingHelper::WcharToUTF8(wpath, ret); - } - - bool GetModuleFileName(HINSTANCE hModule, yycc_u8string& ret) { - // create wchar buffer for receiving the temp path. - std::wstring wpath(MAX_PATH + 1u, L'\0'); - DWORD copied_size; - - while (true) { - if ((copied_size = ::GetModuleFileNameW(hModule, wpath.data(), static_cast(wpath.size()))) == 0) { - // failed, return - return false; - } - - // check insufficient buffer - if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER) { - // buffer is not enough, enlarge it and try again. - wpath.resize(wpath.size() + MAX_PATH); - } else { - // ok, break while - break; - } - } - - // resize result - wpath.resize(copied_size); - // convert to utf8 and return - return YYCC::EncodingHelper::WcharToUTF8(wpath, ret); - } - - bool GetLocalAppData(yycc_u8string& ret) { - // check whether com initialized - if (!COMHelper::IsInitialized()) return false; - - // fetch path - LPWSTR _known_path; - HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, NULL, &_known_path); - if (FAILED(hr)) return false; - COMHelper::SmartLPWSTR known_path(_known_path); - - // convert to utf8 - return YYCC::EncodingHelper::WcharToUTF8(known_path.get(), ret); - } - - bool IsValidCodePage(UINT code_page) { - CPINFOEXW cpinfo; - return ::GetCPInfoExW(code_page, 0, &cpinfo); - } - - BOOL CopyFile(const yycc_u8string_view& lpExistingFileName, const yycc_u8string_view& lpNewFileName, BOOL bFailIfExists) { - std::wstring wExistingFileName, wNewFileName; - if (!YYCC::EncodingHelper::UTF8ToWchar(lpExistingFileName, wExistingFileName)) return FALSE; - if (!YYCC::EncodingHelper::UTF8ToWchar(lpNewFileName, wNewFileName)) return FALSE; - return ::CopyFileW(wExistingFileName.c_str(), wNewFileName.c_str(), bFailIfExists); - } - - BOOL MoveFile(const yycc_u8string_view& lpExistingFileName, const yycc_u8string_view& lpNewFileName) { - std::wstring wExistingFileName, wNewFileName; - if (!YYCC::EncodingHelper::UTF8ToWchar(lpExistingFileName, wExistingFileName)) return FALSE; - if (!YYCC::EncodingHelper::UTF8ToWchar(lpNewFileName, wNewFileName)) return FALSE; - return ::MoveFileW(wExistingFileName.c_str(), wNewFileName.c_str()); - } - - BOOL DeleteFile(const yycc_u8string_view& lpFileName) { - std::wstring wFileName; - if (!YYCC::EncodingHelper::UTF8ToWchar(lpFileName, wFileName)) return FALSE; - return ::DeleteFileW(wFileName.c_str()); - } - -} - -#endif diff --git a/src/YYCCLegacy/WinFctHelper.hpp b/src/YYCCLegacy/WinFctHelper.hpp deleted file mode 100644 index 6b38d15..0000000 --- a/src/YYCCLegacy/WinFctHelper.hpp +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once -#include "YYCCInternal.hpp" -#if defined(YYCC_OS_WINDOWS) - -#include - -#include "WinImportPrefix.hpp" -#include -#include "WinImportSuffix.hpp" - -/** - * @brief The helper providing assistance of Win32 functions. - * @details - * This helper is Windows specific. - * If current environment is not Windows, the whole namespace will be unavailable. - * See also \ref win_fct_helper -*/ -namespace YYCC::WinFctHelper { - - /** - * @brief Get Windows used HANDLE for current module. - * @details - * If your target is EXE, the current module simply is your program self. - * However, if your target is DLL, the current module is your DLL, not the EXE loading your DLL. - * - * This function is frequently used by DLL. - * Because some design need the HANDLE of current module, not the host EXE loading your DLL. - * For example, you may want to get the path of your built DLL, or fetch resources from your DLL at runtime, - * then you should pass current module HANDLE, not NULL or the HANDLE of EXE. - * @return A Windows HANDLE pointing to current module, NULL if failed. - */ - HMODULE GetCurrentModule(); - - /** - * @brief Get path to Windows temporary folder. - * @details Windows temporary folder usually is the target of \%TEMP\%. - * @param[out] ret The variable receiving UTF8 encoded path to Windows temp folder. - * @return True if success, otherwise false. - */ - bool GetTempDirectory(yycc_u8string& ret); - - /** - * @brief Get the file name of given module HANDLE - * @param[in] hModule - * The HANDLE to the module where you want to get file name. - * It is same as the HANDLE parameter of Win32 \c GetModuleFileName. - * @param[out] ret The variable receiving UTF8 encoded file name of given module. - * @return True if success, otherwise false. - */ - bool GetModuleFileName(HINSTANCE hModule, yycc_u8string& ret); - - /** - * @brief Get the path to \%LOCALAPPDATA\%. - * @details \%LOCALAPPDATA\% usually was used as putting local app data files - * @param[out] ret The variable receiving UTF8 encoded path to LOCALAPPDATA. - * @return True if success, otherwise false. - */ - bool GetLocalAppData(yycc_u8string& ret); - - /** - * @brief Check whether given code page number is a valid one. - * @param[in] code_page The code page number. - * @return True if it is valid, otherwise false. - */ - bool IsValidCodePage(UINT code_page); - - /** - * @brief Copies an existing file to a new file. - * @param lpExistingFileName The name of an existing file. - * @param lpNewFileName The name of the new file. - * @param bFailIfExists - * If this parameter is TRUE and the new file specified by \c lpNewFileName already exists, the function fails. - * If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds. - * @return - * If the function succeeds, the return value is nonzero. - * If the function fails, the return value is zero. To get extended error information, call \c GetLastError. - * @remarks Same as Windows \c CopyFile: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfilew - */ - BOOL CopyFile(const yycc_u8string_view& lpExistingFileName, const yycc_u8string_view& lpNewFileName, BOOL bFailIfExists); - - /** - * @brief Moves an existing file or a directory, including its children. - * @param lpExistingFileName The current name of the file or directory on the local computer. - * @param lpNewFileName - * The new name for the file or directory. The new name must not already exist. - * A new file may be on a different file system or drive. A new directory must be on the same drive. - * @return - * If the function succeeds, the return value is nonzero. - * If the function fails, the return value is zero. To get extended error information, call \c GetLastError. - * @remarks Same as Windows \c MoveFile: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefilew - */ - BOOL MoveFile(const yycc_u8string_view& lpExistingFileName, const yycc_u8string_view& lpNewFileName); - - /** - * @brief Deletes an existing file. - * @param lpFileName The name of the file to be deleted. - * @return - * If the function succeeds, the return value is nonzero. - * If the function fails, the return value is zero. To get extended error information, call \c GetLastError. - * @remarks Same as Windows \c DeleteFile: https://learn.microsoft.com/e-us/windows/win32/api/winbase/nf-winbase-deletefile - */ - BOOL DeleteFile(const yycc_u8string_view& lpFileName); - -} - -#endif diff --git a/testbench/shared/literals.cpp b/testbench/shared/literals.cpp index bd65919..b918a9e 100644 --- a/testbench/shared/literals.cpp +++ b/testbench/shared/literals.cpp @@ -157,7 +157,7 @@ namespace yyccshared::literals { #pragma region OtherLiterals Data - std::vector OTHERLIT_OTHERSTR_VEC{{"\xC4\xE3\xBA\xC3\xD6\xD0\xB9\xFA", UINT32_C(936), "GBK", u8"gbk"}}; + static std::vector OTHERLIT_OTHERSTR_VEC{{"\xC4\xE3\xBA\xC3\xD6\xD0\xB9\xFA", UINT32_C(936), "GBK", u8"gbk"}}; #define OTHER_STR_GBK "\u4f60\u597d\u4e2d\u56fd" diff --git a/testbench/yycc/windows/winfct.cpp b/testbench/yycc/windows/winfct.cpp index 35e7289..7f91156 100644 --- a/testbench/yycc/windows/winfct.cpp +++ b/testbench/yycc/windows/winfct.cpp @@ -26,9 +26,10 @@ namespace yycctest::windows::winfct { } TEST(WindowsWinFct, IsValidCodePage) { + // Test valid code page EXPECT_TRUE(WINFCT::is_valid_code_page(437)); EXPECT_TRUE(WINFCT::is_valid_code_page(65001)); - + // This code page must be invalid EXPECT_FALSE(WINFCT::is_valid_code_page(6161)); }