[NTFS]
[reactos.git] / rostests / apitests / crt / _vsnwprintf.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for _vsnwprintf
5 */
6
7 #include <apitest.h>
8
9 #define WIN32_NO_STATUS
10 #include <stdio.h>
11 #include <tchar.h>
12 #include <pseh/pseh2.h>
13 #include <ndk/mmfuncs.h>
14 #include <ndk/rtlfuncs.h>
15
16 static void call_varargs(wchar_t* buf, size_t buf_size, int expected_ret, LPCWSTR formatString, ...)
17 {
18 va_list args;
19 int ret;
20 /* Test the basic functionality */
21 va_start(args, formatString);
22 ret = _vsnwprintf(buf, buf_size, formatString, args);
23 ok(expected_ret == ret, "Test failed: expected %i, got %i.\n", expected_ret, ret);
24 }
25
26 START_TEST(_vsnwprintf)
27 {
28 wchar_t buffer[255];
29
30 /* Test basic functionality */
31 call_varargs(buffer, 255, 10, L"%s world!", "hello");
32 call_varargs(buffer, 255, 12, L"%s world!", L"hello");
33 call_varargs(buffer, 255, 11, L"%u cookies", 100);
34 /* This is how WINE implements _vcsprintf, and they are obviously wrong */
35 StartSeh()
36 #if defined(TEST_CRTDLL)
37 call_varargs(NULL, INT_MAX, -1, L"%s it really work?", L"does");
38 #else
39 call_varargs(NULL, INT_MAX, 20, L"%s it really work?", L"does");
40 #endif
41
42 #if defined(TEST_USER32)
43 EndSeh(STATUS_ACCESS_VIOLATION);
44 #else
45 EndSeh(STATUS_SUCCESS);
46 #endif
47
48 #if defined(TEST_USER32)/* NTDLL doesn't use/set errno */
49 ok(errno == EINVAL, "Expected EINVAL, got %u\n", errno);
50 #else
51 ok(errno == 0, "Expected 0, got %u\n", errno);
52 #endif
53
54 /* This one is no better */
55 StartSeh()
56 #if defined(TEST_CRTDLL)
57 call_varargs(NULL, 0, -1, L"%s it really work?", L"does");
58 #else
59 call_varargs(NULL, 0, 20, L"%s it really work?", L"does");
60 #endif
61 EndSeh(STATUS_SUCCESS);
62 ok(errno == 0, "Expected 0, got %u\n", errno);
63
64
65 /* One more NULL checks */
66 StartSeh()
67 call_varargs(buffer, 255, -1, NULL);
68 EndSeh(STATUS_ACCESS_VIOLATION);
69 ok(errno == 0, "Expected 0, got %u\n", errno);
70 }