[SHELL32]
[reactos.git] / rostests / apitests / shell32 / AddCommas.c
1 /*
2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for AddCommas
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8 #include <apitest.h>
9 #include <windef.h>
10 #include <winnls.h>
11 #include <bcrypt.h>
12 #include <ntstatus.h>
13 #include <strsafe.h>
14
15 DECLSPEC_IMPORT LPWSTR WINAPI AddCommasW(DWORD lValue, LPWSTR lpNumber);
16
17 START_TEST(AddCommas)
18 {
19 WCHAR Separator[4];
20 WCHAR Grouping[11];
21 WCHAR Number[32];
22 WCHAR Expected[32];
23 PWSTR Ptr;
24 int Ret;
25
26 StartSeh()
27 AddCommasW(0, NULL);
28 EndSeh(STATUS_ACCESS_VIOLATION);
29
30 RtlFillMemory(Number, sizeof(Number), 0x55);
31 Ptr = AddCommasW(0, Number);
32 ok(Ptr == Number, "Ptr = %p, expected %p\n", Ptr, Number);
33 ok(Number[0] == L'0', "Number[0] = 0x%x\n", Number[0]);
34 ok(Number[1] == 0, "Number[1] = 0x%x\n", Number[1]);
35 ok(Number[2] == 0x5555, "Number[2] = 0x%x\n", Number[2]);
36
37 Ret = GetLocaleInfoW(LOCALE_USER_DEFAULT,
38 LOCALE_STHOUSAND,
39 Separator,
40 RTL_NUMBER_OF(Separator));
41 if (!Ret)
42 {
43 skip("GetLocaleInfoW failed with %lu\n", GetLastError());
44 return;
45 }
46 Ret = GetLocaleInfoW(LOCALE_USER_DEFAULT,
47 LOCALE_SGROUPING,
48 Grouping,
49 RTL_NUMBER_OF(Grouping));
50 if (!Ret)
51 {
52 skip("GetLocaleInfoW failed with %lu\n", GetLastError());
53 return;
54 }
55
56 if (wcscmp(Grouping, L"3;0"))
57 {
58 skip("Skipping remaining tests due to incompatible locale (separator '%ls', grouping '%ls')\n",
59 Separator, Grouping);
60 return;
61 }
62
63 RtlFillMemory(Number, sizeof(Number), 0x55);
64 Ptr = AddCommasW(123456789, Number);
65 ok(Ptr == Number, "Ptr = %p, expected %p\n", Ptr, Number);
66 StringCbPrintfW(Expected, sizeof(Expected), L"123%ls456%ls789", Separator, Separator);
67 ok(!wcscmp(Number, Expected), "Number = '%ls', expected %ls\n", Number, Expected);
68 ok(Number[wcslen(Number) + 1] == 0x5555, "Number[N] = 0x%x\n", Number[wcslen(Number) + 1]);
69
70 RtlFillMemory(Number, sizeof(Number), 0x55);
71 Ptr = AddCommasW(4294967295U, Number);
72 ok(Ptr == Number, "Ptr = %p, expected %p\n", Ptr, Number);
73 StringCbPrintfW(Expected, sizeof(Expected), L"4%ls294%ls967%ls295", Separator, Separator, Separator);
74 ok(!wcscmp(Number, Expected), "Number = '%ls', expected %ls\n", Number, Expected);
75 ok(Number[wcslen(Number) + 1] == 0x5555, "Number[N] = 0x%x\n", Number[wcslen(Number) + 1]);
76 }