winhlp32: Update German translation.
[wine.git] / dlls / comctl32 / tests / misc.c
blob881f0b0082d8c8a185af5ccf206e74e071f3df7b
1 /*
2 * Misc tests
4 * Copyright 2006 Paul Vriens
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <stdio.h>
22 #include <windows.h>
24 #include "wine/test.h"
26 static PVOID (WINAPI * pAlloc)(LONG);
27 static PVOID (WINAPI * pReAlloc)(PVOID, LONG);
28 static BOOL (WINAPI * pFree)(PVOID);
29 static LONG (WINAPI * pGetSize)(PVOID);
31 static INT (WINAPI * pStr_GetPtrA)(LPCSTR, LPSTR, INT);
32 static BOOL (WINAPI * pStr_SetPtrA)(LPSTR, LPCSTR);
33 static INT (WINAPI * pStr_GetPtrW)(LPCWSTR, LPWSTR, INT);
34 static BOOL (WINAPI * pStr_SetPtrW)(LPWSTR, LPCWSTR);
36 static HMODULE hComctl32 = 0;
38 #define COMCTL32_GET_PROC(ordinal, func) \
39 p ## func = (void*)GetProcAddress(hComctl32, (LPSTR)ordinal); \
40 if(!p ## func) { \
41 trace("GetProcAddress(%d)(%s) failed\n", ordinal, #func); \
42 FreeLibrary(hComctl32); \
45 #define expect(expected, got) ok(expected == got, "expected %d, got %d\n", expected,got)
47 static BOOL InitFunctionPtrs(void)
49 hComctl32 = LoadLibraryA("comctl32.dll");
51 if(!hComctl32)
53 trace("Could not load comctl32.dll\n");
54 return FALSE;
57 COMCTL32_GET_PROC(71, Alloc);
58 COMCTL32_GET_PROC(72, ReAlloc);
59 COMCTL32_GET_PROC(73, Free);
60 COMCTL32_GET_PROC(74, GetSize);
62 COMCTL32_GET_PROC(233, Str_GetPtrA)
63 COMCTL32_GET_PROC(234, Str_SetPtrA)
64 COMCTL32_GET_PROC(235, Str_GetPtrW)
65 COMCTL32_GET_PROC(236, Str_SetPtrW)
67 return TRUE;
70 static void test_GetPtrAW(void)
72 if (pStr_GetPtrA)
74 static const char source[] = "Just a source string";
75 static const char desttest[] = "Just a destination string";
76 static char dest[MAX_PATH];
77 int sourcelen;
78 int destsize = MAX_PATH;
79 int count = -1;
81 sourcelen = strlen(source) + 1;
83 count = pStr_GetPtrA(NULL, NULL, 0);
84 ok (count == 0, "Expected count to be 0, it was %d\n", count);
86 if (0)
88 /* Crashes on W98, NT4, W2K, XP, W2K3
89 * Our implementation also crashes and we should probably leave
90 * it like that.
92 count = -1;
93 count = pStr_GetPtrA(NULL, NULL, destsize);
94 trace("count : %d\n", count);
97 count = 0;
98 count = pStr_GetPtrA(source, NULL, 0);
99 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
101 count = 0;
102 strcpy(dest, desttest);
103 count = pStr_GetPtrA(source, dest, 0);
104 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
105 ok (!lstrcmp(dest, desttest), "Expected destination to not have changed\n");
107 count = 0;
108 count = pStr_GetPtrA(source, NULL, destsize);
109 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
111 count = 0;
112 count = pStr_GetPtrA(source, dest, destsize);
113 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
114 ok (!lstrcmp(source, dest), "Expected source and destination to be the same\n");
116 count = -1;
117 strcpy(dest, desttest);
118 count = pStr_GetPtrA(NULL, dest, destsize);
119 ok (count == 0, "Expected count to be 0, it was %d\n", count);
120 ok (dest[0] == '\0', "Expected destination to be cut-off and 0 terminated\n");
122 count = 0;
123 destsize = 15;
124 count = pStr_GetPtrA(source, dest, destsize);
125 ok (count == 15, "Expected count to be 15, it was %d\n", count);
126 ok (!memcmp(source, dest, 14), "Expected first part of source and destination to be the same\n");
127 ok (dest[14] == '\0', "Expected destination to be cut-off and 0 terminated\n");
131 static void test_Alloc(void)
133 PCHAR p = pAlloc(0);
134 ok(p != NULL, "p=%p\n", p);
135 ok(pFree(p), "\n");
136 p = pAlloc(1);
137 ok(p != NULL, "\n");
138 *p = '\0';
139 expect(1, pGetSize(p));
140 p = pReAlloc(p, 2);
141 ok(p != NULL, "\n");
142 expect(2, pGetSize(p));
143 ok(pFree(p), "\n");
144 ok(pFree(NULL), "\n");
145 p = pReAlloc(NULL, 2);
146 ok(p != NULL, "\n");
147 ok(pFree(p), "\n");
150 START_TEST(misc)
152 if(!InitFunctionPtrs())
153 return;
155 test_GetPtrAW();
156 test_Alloc();
158 FreeLibrary(hComctl32);