Skip to content

Commit 869d88c

Browse files
author
nahida-mono
committed
2 parents 80c9e8b + 2e172af commit 869d88c

19 files changed

+1344
-61
lines changed
Lines changed: 169 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,179 @@
11
#pragma once
22

33
#include <Windows.h>
4-
#include "../Snap.Hutao.Remastered.Native/IHutaoNative_h.h"
5-
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeRegistryNotification_h.h"
6-
#include "../Snap.Hutao.Remastered.Native/IHutaoString_h.h"
4+
#include "../Snap.Hutao.Remastered.Native/IHutaoNative.h"
5+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeLoopbackSupport.h"
6+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeRegistryNotification.h"
7+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeWindowSubclass.h"
8+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeWindowNonRude.h"
9+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeDeviceCapabilities.h"
10+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativePhysicalDrive.h"
11+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeLogicalDrive.h"
12+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeInputLowLevelKeyboardSource.h"
13+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeFileSystem.h"
14+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeFileSystem2.h"
15+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeFileSystem3.h"
16+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeFileSystem4.h"
17+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeNotifyIcon.h"
18+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeHotKeyAction.h"
19+
#include "../Snap.Hutao.Remastered.Native/IHutaoNativeProcess.h"
20+
#include "../Snap.Hutao.Remastered.Native/IHutaoString.h"
721
#include "../Snap.Hutao.Remastered.Native/HutaoNativeLoggingCallback.h"
822
#include "../Snap.Hutao.Remastered.Native/HutaoNativeMessageCallback.h"
23+
#include "../Snap.Hutao.Remastered.Native/HutaoNativeHotKeyBeforeSwitchCallback.h"
924

10-
#define DLL_IMPORT __declspec(dllimport) extern "C"
25+
// Empty callback function definitions
26+
static void __stdcall EmptyMessageCallback(FailureInfo*, PWSTR, ULONG64) {}
27+
static void __stdcall EmptyLoggingCallback(FailureInfo*) {}
1128

12-
DLL_IMPORT HRESULT __stdcall HutaoCreateInstance(
29+
extern "C" {
30+
31+
__declspec(dllimport) HRESULT __stdcall HutaoCreateInstance(
1332
IHutaoNative** ppInstance);
14-
DLL_IMPORT HRESULT __stdcall HutaoStringCreateInstance(
33+
34+
__declspec(dllimport) HRESULT __stdcall HutaoStringCreateInstance(
1535
IHutaoString** ppInstance);
16-
DLL_IMPORT HRESULT __stdcall HutaoNativeRegistryNotificationCreateInstance(
36+
37+
__declspec(dllimport) HRESULT __stdcall HutaoNativeRegistryNotificationCreateInstance(
1738
IHutaoNativeRegistryNotification** ppInstance);
18-
DLL_IMPORT HRESULT HutaoInitializeWilCallbacks(HutaoNativeLoggingCallback loggingCallback, HutaoNativeMessageCallback messageCallback);
19-
DLL_IMPORT void HutaoTestWilCallbacks();
39+
40+
__declspec(dllimport) HRESULT __stdcall HutaoInitializeWilCallbacks(
41+
HutaoNativeLoggingCallback loggingCallback,
42+
HutaoNativeMessageCallback messageCallback);
43+
44+
__declspec(dllimport) void __stdcall HutaoTestWilCallbacks();
45+
46+
__declspec(dllimport) BOOL __stdcall HutaoHResultIsWin32(HRESULT hr, WIN32_ERROR error);
47+
48+
__declspec(dllimport) HRESULT __stdcall HutaoNativeHotKeyInitializeBeforeSwitchCallback(
49+
HutaoNativeHotKeyBeforeSwitchCallback callback);
50+
51+
}
52+
53+
// Test helper function declarations
54+
inline HRESULT MakeHutaoNative(IHutaoNative** ppInstance)
55+
{
56+
return HutaoCreateInstance(ppInstance);
57+
}
58+
59+
inline HRESULT MakeHutaoNative2(IHutaoNative2** ppInstance)
60+
{
61+
// IHutaoNative2 is derived from IHutaoNative
62+
IHutaoNative* pNative = nullptr;
63+
HRESULT hr = HutaoCreateInstance(&pNative);
64+
if (SUCCEEDED(hr))
65+
{
66+
hr = pNative->QueryInterface(__uuidof(IHutaoNative2), (void**)ppInstance);
67+
pNative->Release();
68+
}
69+
return hr;
70+
}
71+
72+
inline HRESULT MakeHutaoNative3(IHutaoNative3** ppInstance)
73+
{
74+
// IHutaoNative3 is derived from IHutaoNative
75+
IHutaoNative* pNative = nullptr;
76+
HRESULT hr = HutaoCreateInstance(&pNative);
77+
if (SUCCEEDED(hr))
78+
{
79+
hr = pNative->QueryInterface(__uuidof(IHutaoNative3), (void**)ppInstance);
80+
pNative->Release();
81+
}
82+
return hr;
83+
}
84+
85+
inline HRESULT MakeHutaoNative4(IHutaoNative4** ppInstance)
86+
{
87+
// IHutaoNative4 is derived from IHutaoNative
88+
IHutaoNative* pNative = nullptr;
89+
HRESULT hr = HutaoCreateInstance(&pNative);
90+
if (SUCCEEDED(hr))
91+
{
92+
hr = pNative->QueryInterface(__uuidof(IHutaoNative4), (void**)ppInstance);
93+
pNative->Release();
94+
}
95+
return hr;
96+
}
97+
98+
inline HRESULT MakeHutaoNative5(IHutaoNative5** ppInstance)
99+
{
100+
// IHutaoNative5 is derived from IHutaoNative
101+
IHutaoNative* pNative = nullptr;
102+
HRESULT hr = HutaoCreateInstance(&pNative);
103+
if (SUCCEEDED(hr))
104+
{
105+
hr = pNative->QueryInterface(__uuidof(IHutaoNative5), (void**)ppInstance);
106+
pNative->Release();
107+
}
108+
return hr;
109+
}
110+
111+
inline HRESULT MakeHutaoNative6(IHutaoNative6** ppInstance)
112+
{
113+
// IHutaoNative6 is derived from IHutaoNative
114+
IHutaoNative* pNative = nullptr;
115+
HRESULT hr = HutaoCreateInstance(&pNative);
116+
if (SUCCEEDED(hr))
117+
{
118+
hr = pNative->QueryInterface(__uuidof(IHutaoNative6), (void**)ppInstance);
119+
pNative->Release();
120+
}
121+
return hr;
122+
}
123+
124+
inline HRESULT MakeHutaoNative7(IHutaoNative7** ppInstance)
125+
{
126+
// IHutaoNative7 is derived from IHutaoNative
127+
IHutaoNative* pNative = nullptr;
128+
HRESULT hr = HutaoCreateInstance(&pNative);
129+
if (SUCCEEDED(hr))
130+
{
131+
hr = pNative->QueryInterface(__uuidof(IHutaoNative7), (void**)ppInstance);
132+
pNative->Release();
133+
}
134+
return hr;
135+
}
136+
137+
inline HRESULT MakeRegistryNotification(IHutaoNativeRegistryNotification** ppInstance)
138+
{
139+
return HutaoNativeRegistryNotificationCreateInstance(ppInstance);
140+
}
141+
142+
inline HRESULT MakeWindowSubclass(HWND hWnd, HutaoNativeWindowSubclassCallback callback, GCHandle userData, IHutaoNativeWindowSubclass** ppInstance)
143+
{
144+
// Create through IHutaoNative
145+
IHutaoNative* pNative = nullptr;
146+
HRESULT hr = HutaoCreateInstance(&pNative);
147+
if (SUCCEEDED(hr))
148+
{
149+
hr = pNative->MakeWindowSubclass(hWnd, callback, userData, ppInstance);
150+
pNative->Release();
151+
}
152+
return hr;
153+
}
154+
155+
inline HRESULT MakeWindowNonRude(HWND hWnd, IHutaoNativeWindowNonRude** ppInstance)
156+
{
157+
// Create through IHutaoNative
158+
IHutaoNative* pNative = nullptr;
159+
HRESULT hr = HutaoCreateInstance(&pNative);
160+
if (SUCCEEDED(hr))
161+
{
162+
hr = pNative->MakeWindowNonRude(hWnd, ppInstance);
163+
pNative->Release();
164+
}
165+
return hr;
166+
}
167+
inline void SetHutaoNativeLoggingCallback(HutaoNativeLoggingCallback callback)
168+
{
169+
// Use empty message callback
170+
HutaoNativeMessageCallback emptyMsgCallback = HutaoNativeMessageCallback::Create(EmptyMessageCallback);
171+
HutaoInitializeWilCallbacks(callback, emptyMsgCallback);
172+
}
173+
174+
inline void SetHutaoNativeMessageCallback(HutaoNativeMessageCallback callback)
175+
{
176+
// Use empty logging callback
177+
HutaoNativeLoggingCallback emptyLogCallback = HutaoNativeLoggingCallback::Create(EmptyLoggingCallback);
178+
HutaoInitializeWilCallbacks(emptyLogCallback, callback);
179+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#include "pch.h"
2+
#include "SimpleTestFramework.h"
3+
#include <windows.h>
4+
5+
using namespace SimpleTestFramework;
6+
7+
// 测试用例1:基本断言测试
8+
TEST_CASE(TestBasicAssertions, "测试基本断言功能")
9+
{
10+
ASSERT_TRUE(true);
11+
ASSERT_FALSE(false);
12+
ASSERT_EQUAL(1, 1);
13+
ASSERT_NOT_EQUAL(1, 2);
14+
15+
int x = 5;
16+
int* ptr = &x;
17+
ASSERT_NOT_NULL(ptr);
18+
ASSERT_NULL(nullptr);
19+
}
20+
21+
// 测试用例2:HRESULT测试
22+
TEST_CASE(TestHResultAssertions, "测试HRESULT断言功能")
23+
{
24+
HRESULT hrSuccess = S_OK;
25+
HRESULT hrFailure = E_FAIL;
26+
27+
ASSERT_SUCCEEDED(hrSuccess);
28+
ASSERT_FAILED(hrFailure);
29+
}
30+
31+
// 测试用例3:字符串测试
32+
TEST_CASE(TestStringAssertions, "测试字符串断言功能")
33+
{
34+
std::string str1 = "hello";
35+
std::string str2 = "hello";
36+
std::string str3 = "world";
37+
38+
ASSERT_EQUAL(str1, str2);
39+
ASSERT_NOT_EQUAL(str1, str3);
40+
}
41+
42+
// 测试用例4:异常测试
43+
TEST_CASE(TestExceptionAssertions, "测试异常断言功能")
44+
{
45+
// 测试抛出异常
46+
ASSERT_THROWS([]() {
47+
throw std::runtime_error("test exception");
48+
});
49+
50+
// 测试不抛出异常
51+
ASSERT_NO_THROW([]() {
52+
int x = 1 + 1;
53+
});
54+
}
55+
56+
// 测试套件:基础功能测试
57+
TEST_SUITE(BasicFunctionTests, "基础功能测试套件")
58+
59+
// 注册测试用例到套件
60+
class BasicTestSuiteRegistrar {
61+
public:
62+
BasicTestSuiteRegistrar() {
63+
auto suite = std::make_shared<TestSuite>("BasicFunctionTests", "基础功能测试套件");
64+
65+
// 创建测试用例实例并注册
66+
suite->AddTestCase(std::make_shared<TestBasicAssertions_TestCase>());
67+
suite->AddTestCase(std::make_shared<TestHResultAssertions_TestCase>());
68+
suite->AddTestCase(std::make_shared<TestStringAssertions_TestCase>());
69+
suite->AddTestCase(std::make_shared<TestExceptionAssertions_TestCase>());
70+
71+
TestRunner::GetInstance().AddTestSuite(suite);
72+
}
73+
};
74+
75+
static BasicTestSuiteRegistrar basicTestSuiteRegistrar;
76+
77+
// 主函数 - 运行所有测试
78+
int RunSimpleTests()
79+
{
80+
std::wcout << L"=== 开始运行简易测试框架示例 ===\n";
81+
82+
// 配置测试运行器
83+
TestRunner& runner = TestRunner::GetInstance();
84+
runner.SetStopOnFirstFailure(false);
85+
86+
// 运行所有测试
87+
bool allPassed = runner.RunAllTests();
88+
89+
// 生成报告
90+
std::string report = runner.GenerateReport();
91+
std::wcout << L"\n=== 文本报告 ===\n";
92+
std::cout << report << std::endl;
93+
94+
// 保存HTML报告
95+
runner.SaveReportToFile("test_report.html", "html");
96+
97+
// 保存XML报告
98+
runner.SaveReportToFile("test_report.xml", "xml");
99+
100+
if (allPassed) {
101+
std::wcout << L"\n✅ 所有测试通过!\n";
102+
return 0;
103+
} else {
104+
std::wcout << L"\n❌ 有测试失败!\n";
105+
return 1;
106+
}
107+
}
108+
109+
// 集成到现有main函数的辅助函数
110+
extern "C" __declspec(dllexport) int RunSimpleTestFramework()
111+
{
112+
return RunSimpleTests();
113+
}
59.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)