comctl32: Rename 'string' test to 'misc'.
[wine] / dlls / comctl32 / tests / misc.c
1 /*
2  * Misc tests
3  *
4  * Copyright 2006 Paul Vriens
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #include <stdio.h>
22 #include <windows.h>
23
24 #include "wine/test.h"
25
26 static INT (WINAPI * pStr_GetPtrA)(LPCSTR, LPSTR, INT);
27 static BOOL (WINAPI * pStr_SetPtrA)(LPSTR, LPCSTR);
28 static INT (WINAPI * pStr_GetPtrW)(LPCWSTR, LPWSTR, INT);
29 static BOOL (WINAPI * pStr_SetPtrW)(LPWSTR, LPCWSTR);
30
31 static HMODULE hComctl32 = 0;
32
33 #define COMCTL32_GET_PROC(ordinal, func) \
34     p ## func = (void*)GetProcAddress(hComctl32, (LPSTR)ordinal); \
35     if(!p ## func) { \
36       trace("GetProcAddress(%d)(%s) failed\n", ordinal, #func); \
37       FreeLibrary(hComctl32); \
38     }
39
40 static BOOL InitFunctionPtrs(void)
41 {
42     hComctl32 = LoadLibraryA("comctl32.dll");
43
44     if(!hComctl32)
45     {
46         trace("Could not load comctl32.dll\n");
47         return FALSE;
48     }
49
50     COMCTL32_GET_PROC(233, Str_GetPtrA)
51     COMCTL32_GET_PROC(234, Str_SetPtrA)
52     COMCTL32_GET_PROC(235, Str_GetPtrW)
53     COMCTL32_GET_PROC(236, Str_SetPtrW)
54
55     return TRUE;
56 }
57
58 static void test_GetPtrAW(void)
59 {
60     if (pStr_GetPtrA)
61     {
62         static const char source[] = "Just a source string";
63         static const char desttest[] = "Just a destination string";
64         static char dest[MAX_PATH];
65         int sourcelen;
66         int destsize = MAX_PATH;
67         int count = -1;
68
69         sourcelen = strlen(source) + 1;
70
71         count = pStr_GetPtrA(NULL, NULL, 0);
72         ok (count == 0, "Expected count to be 0, it was %d\n", count);
73
74         if (0)
75         {
76             /* Crashes on W98, NT4, W2K, XP, W2K3
77              * Our implementation also crashes and we should probably leave
78              * it like that.
79              */
80             count = -1;
81             count = pStr_GetPtrA(NULL, NULL, destsize);
82             trace("count : %d\n", count);
83         }
84
85         count = 0;
86         count = pStr_GetPtrA(source, NULL, 0);
87         ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
88
89         count = 0;
90         strcpy(dest, desttest);
91         count = pStr_GetPtrA(source, dest, 0);
92         ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
93         ok (!lstrcmp(dest, desttest), "Expected destination to not have changed\n");
94
95         count = 0;
96         count = pStr_GetPtrA(source, NULL, destsize);
97         ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
98
99         count = 0;
100         count = pStr_GetPtrA(source, dest, destsize);
101         ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
102         ok (!lstrcmp(source, dest), "Expected source and destination to be the same\n");
103
104         count = -1;
105         strcpy(dest, desttest);
106         count = pStr_GetPtrA(NULL, dest, destsize);
107         ok (count == 0, "Expected count to be 0, it was %d\n", count);
108         ok (dest[0] == '\0', "Expected destination to be cut-off and 0 terminated\n");
109
110         count = 0;
111         destsize = 15;
112         count = pStr_GetPtrA(source, dest, destsize);
113         ok (count == 15, "Expected count to be 15, it was %d\n", count);
114         ok (!memcmp(source, dest, 14), "Expected first part of source and destination to be the same\n");
115         ok (dest[14] == '\0', "Expected destination to be cut-off and 0 terminated\n");
116     }
117 }
118
119 START_TEST(misc)
120 {
121     if(!InitFunctionPtrs())
122         return;
123
124     test_GetPtrAW();
125
126     FreeLibrary(hComctl32);
127 }