mirror of
https://github.com/reactos/reactos.git
synced 2024-11-18 21:13:52 +00:00
[KMTESTS]
- Add a test showing RtlUpcaseUnicodeString behavior with zero-length strings - Run all test cases against FsRtlIsNameInExpressionTest on checked builds, only the Dbcs version asserts CORE-9254 svn path=/trunk/; revision=66479
This commit is contained in:
parent
b9809e6704
commit
49bb368ddc
4 changed files with 86 additions and 7 deletions
|
@ -56,6 +56,7 @@ typedef ULONG LOGICAL, *PLOGICAL;
|
||||||
#define RtlCopyMemoryNonTemporal RtlCopyMemory
|
#define RtlCopyMemoryNonTemporal RtlCopyMemory
|
||||||
#define RtlPrefetchMemoryNonTemporal(s, l)
|
#define RtlPrefetchMemoryNonTemporal(s, l)
|
||||||
#define ExRaiseStatus RtlRaiseStatus
|
#define ExRaiseStatus RtlRaiseStatus
|
||||||
|
#define KmtIsCheckedBuild FALSE
|
||||||
#endif /* defined KMT_EMULATE_KERNEL */
|
#endif /* defined KMT_EMULATE_KERNEL */
|
||||||
|
|
||||||
#endif /* defined KMT_USER_MODE */
|
#endif /* defined KMT_USER_MODE */
|
||||||
|
|
|
@ -59,6 +59,7 @@ KMT_TESTFUNC Test_RtlIntSafe;
|
||||||
KMT_TESTFUNC Test_RtlMemory;
|
KMT_TESTFUNC Test_RtlMemory;
|
||||||
KMT_TESTFUNC Test_RtlRegistry;
|
KMT_TESTFUNC Test_RtlRegistry;
|
||||||
KMT_TESTFUNC Test_RtlSplayTree;
|
KMT_TESTFUNC Test_RtlSplayTree;
|
||||||
|
KMT_TESTFUNC Test_RtlUnicodeString;
|
||||||
KMT_TESTFUNC Test_ZwAllocateVirtualMemory;
|
KMT_TESTFUNC Test_ZwAllocateVirtualMemory;
|
||||||
KMT_TESTFUNC Test_ZwCreateSection;
|
KMT_TESTFUNC Test_ZwCreateSection;
|
||||||
KMT_TESTFUNC Test_ZwMapViewOfSection;
|
KMT_TESTFUNC Test_ZwMapViewOfSection;
|
||||||
|
@ -117,6 +118,7 @@ const KMT_TEST TestList[] =
|
||||||
{ "RtlMemoryKM", Test_RtlMemory },
|
{ "RtlMemoryKM", Test_RtlMemory },
|
||||||
{ "RtlRegistryKM", Test_RtlRegistry },
|
{ "RtlRegistryKM", Test_RtlRegistry },
|
||||||
{ "RtlSplayTreeKM", Test_RtlSplayTree },
|
{ "RtlSplayTreeKM", Test_RtlSplayTree },
|
||||||
|
{ "RtlUnicodeStringKM", Test_RtlUnicodeString },
|
||||||
{ "ZwAllocateVirtualMemory", Test_ZwAllocateVirtualMemory },
|
{ "ZwAllocateVirtualMemory", Test_ZwAllocateVirtualMemory },
|
||||||
{ "ZwCreateSection", Test_ZwCreateSection },
|
{ "ZwCreateSection", Test_ZwCreateSection },
|
||||||
{ "ZwMapViewOfSection", Test_ZwMapViewOfSection },
|
{ "ZwMapViewOfSection", Test_ZwMapViewOfSection },
|
||||||
|
|
|
@ -184,10 +184,6 @@ static VOID FsRtlIsNameInExpressionTest()
|
||||||
UNICODE_STRING Expression;
|
UNICODE_STRING Expression;
|
||||||
UNICODE_STRING Name;
|
UNICODE_STRING Name;
|
||||||
|
|
||||||
/* Don't run Tests which are known to assert in checked builds */
|
|
||||||
if (KmtIsCheckedBuild && Tests[i].AssertsInChecked)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
RtlInitUnicodeString(&Expression, Tests[i].Expression);
|
RtlInitUnicodeString(&Expression, Tests[i].Expression);
|
||||||
RtlInitUnicodeString(&Name, Tests[i].Name);
|
RtlInitUnicodeString(&Name, Tests[i].Name);
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,87 @@ TestFindCharInUnicodeString(VOID)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
TestUpcaseUnicodeString(VOID)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
UNICODE_STRING Lower;
|
||||||
|
UNICODE_STRING Upper;
|
||||||
|
PWCHAR Buffer;
|
||||||
|
|
||||||
|
Buffer = KmtAllocateGuarded(sizeof(WCHAR));
|
||||||
|
|
||||||
|
if (!KmtIsCheckedBuild)
|
||||||
|
{
|
||||||
|
RtlInitEmptyUnicodeString(&Lower, NULL, 0);
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, 0);
|
||||||
|
ok_eq_uint(Upper.MaximumLength, 0);
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
|
||||||
|
RtlInitEmptyUnicodeString(&Lower, Buffer, 0);
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, 0);
|
||||||
|
ok_eq_uint(Upper.MaximumLength, 0);
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
|
||||||
|
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
|
||||||
|
Buffer[0] = UNICODE_NULL;
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, 0);
|
||||||
|
ok_eq_uint(Upper.MaximumLength, 0);
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
|
||||||
|
Lower.Length = sizeof(WCHAR);
|
||||||
|
Buffer[0] = UNICODE_NULL;
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, sizeof(WCHAR));
|
||||||
|
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
ok_eq_hex(Upper.Buffer[0], UNICODE_NULL);
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
|
||||||
|
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
|
||||||
|
Lower.Length = sizeof(WCHAR);
|
||||||
|
Buffer[0] = 'a';
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, sizeof(WCHAR));
|
||||||
|
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
ok_eq_hex(Upper.Buffer[0], 'A');
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&Lower, L"a");
|
||||||
|
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
|
||||||
|
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
|
||||||
|
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||||
|
ok_eq_uint(Upper.Length, sizeof(WCHAR));
|
||||||
|
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
|
||||||
|
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
|
||||||
|
ok_eq_hex(Upper.Buffer[0], 'A');
|
||||||
|
RtlFreeUnicodeString(&Upper);
|
||||||
|
|
||||||
|
KmtFreeGuarded(Buffer);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(RtlUnicodeString)
|
START_TEST(RtlUnicodeString)
|
||||||
{
|
{
|
||||||
TestFindCharInUnicodeString();
|
TestFindCharInUnicodeString();
|
||||||
|
TestUpcaseUnicodeString();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue