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
24 #include "wine/test.h"
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);
31 static HMODULE hComctl32 = 0;
33 #define COMCTL32_GET_PROC(ordinal, func) \
34 p ## func = (void*)GetProcAddress(hComctl32, (LPSTR)ordinal); \
36 trace("GetProcAddress(%d)(%s) failed\n", ordinal, #func); \
37 FreeLibrary(hComctl32); \
40 static BOOL InitFunctionPtrs(void)
42 hComctl32 = LoadLibraryA("comctl32.dll");
46 trace("Could not load comctl32.dll\n");
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)
58 static void test_GetPtrAW(void)
62 static const char source[] = "Just a source string";
63 static const char desttest[] = "Just a destination string";
64 static char dest[MAX_PATH];
66 int destsize = MAX_PATH;
69 sourcelen = strlen(source) + 1;
71 count = pStr_GetPtrA(NULL, NULL, 0);
72 ok (count == 0, "Expected count to be 0, it was %d\n", count);
76 /* Crashes on W98, NT4, W2K, XP, W2K3
77 * Our implementation also crashes and we should probably leave
81 count = pStr_GetPtrA(NULL, NULL, destsize);
82 trace("count : %d\n", count);
86 count = pStr_GetPtrA(source, NULL, 0);
87 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
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");
96 count = pStr_GetPtrA(source, NULL, destsize);
97 ok (count == sourcelen, "Expected count to be %d, it was %d\n", sourcelen , count);
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");
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");
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");
121 if(!InitFunctionPtrs())
126 FreeLibrary(hComctl32);