stick the winetests in the sub folder with the other regtests Added: trunk/reactos/regtests/winetests/ Added: trunk/reactos/regtests/winetests/advapi32/ Modified: trunk/reactos/regtests/winetests/advapi32/registry.c Modified: trunk/reactos/regtests/winetests/advapi32/security.c Modified: trunk/reactos/regtests/winetests/advapi32/testlist.c Added: trunk/reactos/regtests/winetests/comctl32/ Modified: trunk/reactos/regtests/winetests/comctl32/dpa.c Modified: trunk/reactos/regtests/winetests/comctl32/imagelist.c Modified: trunk/reactos/regtests/winetests/comctl32/mru.c Modified: trunk/reactos/regtests/winetests/comctl32/subclass.c Modified: trunk/reactos/regtests/winetests/comctl32/tab.c Modified: trunk/reactos/regtests/winetests/comctl32/testlist.c Added: trunk/reactos/regtests/winetests/msvcrt/ Added: trunk/reactos/regtests/winetests/version/ Added: trunk/reactos/regtests/winetests/winetest/ Modified: trunk/reactos/regtests/winetests/winetest/dist.rc Modified: trunk/reactos/regtests/winetests/winetest/gui.c Modified: trunk/reactos/regtests/winetests/winetest/main.c Modified: trunk/reactos/regtests/winetests/winetest/resource.h Modified: trunk/reactos/regtests/winetests/winetest/send.c Modified: trunk/reactos/regtests/winetests/winetest/tests.rc Modified: trunk/reactos/regtests/winetests/winetest/util.c Modified: trunk/reactos/regtests/winetests/winetest/winetest.h Modified: trunk/reactos/regtests/winetests/winetest/winetest.rc _____
Copied: trunk/reactos/regtests/winetests/advapi32 (from rev 17052, trunk/reactos/lib/advapi32/winetests) _____
Modified: trunk/reactos/regtests/winetests/advapi32/registry.c --- trunk/reactos/lib/advapi32/winetests/registry.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/advapi32/registry.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -428,7 +428,6 @@
setup_main_key(); create_test_entries(); test_enum_value(); -#if 0 test_query_value_ex(); test_reg_open_key(); test_reg_close_key(); @@ -445,7 +444,6 @@ set_privileges(SE_BACKUP_NAME, FALSE); set_privileges(SE_RESTORE_NAME, FALSE); } -#endif /* cleanup */ delete_key( hkey_main ); } _____
Modified: trunk/reactos/regtests/winetests/advapi32/security.c --- trunk/reactos/lib/advapi32/winetests/security.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/advapi32/security.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -424,7 +424,8 @@
strcpy(directory, "\Should not exist");
SetLastError(NO_ERROR); - result = pGetFileSecurityA( directory,OWNER_SECURITY_INFORMATION,buffer,0x40,&outSize); + result = GetFileSecurityA( directory,OWNER_SECURITY_INFORMATION, + (PSECURITY_DESCRIPTOR)buffer,0x40,&outSize); ok(!result, "GetFileSecurityA should fail for not existing directories/files\n"); ok( (GetLastError() == ERROR_FILE_NOT_FOUND ) || (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) , _____
Modified: trunk/reactos/regtests/winetests/advapi32/testlist.c --- trunk/reactos/lib/advapi32/winetests/testlist.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/advapi32/testlist.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -7,11 +7,6 @@
#include "windef.h" #include "winbase.h"
-extern void func_crypt(void); -extern void func_crypt_lmhash(void); -extern void func_crypt_md4(void); -extern void func_crypt_md5(void); -extern void func_crypt_sha(void); extern void func_registry(void); extern void func_security(void);
@@ -23,11 +18,6 @@
static const struct test winetest_testlist[] = { - { "crypt", func_crypt }, - { "crypt_lmhash", func_crypt_lmhash }, - { "crypt_md4", func_crypt_md4 }, - { "crypt_md5", func_crypt_md5 }, - { "crypt_sha", func_crypt_sha }, { "registry", func_registry }, { "security", func_security }, { 0, 0 } _____
Copied: trunk/reactos/regtests/winetests/comctl32 (from rev 17052, trunk/reactos/lib/comctl32/winetests) _____
Modified: trunk/reactos/regtests/winetests/comctl32/dpa.c --- trunk/reactos/lib/comctl32/winetests/dpa.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/dpa.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -2,6 +2,7 @@
* Unit tests for DPA functions * * Copyright 2003 Uwe Bonnes + * Copyright 2005 Felix Nawothnig * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,63 +19,421 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+#define COBJMACROS + #include <stdarg.h>
-#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" +#include "windows.h" #include "commctrl.h" +#include "objidl.h"
#include "wine/test.h"
-static HDPA (WINAPI *pDPA_Create)(int); -static BOOL (WINAPI *pDPA_Grow)(const HDPA hdpa, INT nGrow); -static BOOL (WINAPI *pDPA_Destroy)(const HDPA hdpa); -static BOOL (WINAPI *pDPA_SetPtr)(const HDPA hdpa, INT i, LPVOID p); +#define DPAM_NOSORT 0x1 +#define DPAM_INSERT 0x4 +#define DPAM_DELETE 0x8
-static INT CALLBACK dpa_strcmp(LPVOID pvstr1, LPVOID pvstr2, LPARAM flags) +typedef struct _ITEMDATA { - LPCSTR str1 = (LPCSTR)pvstr1; - LPCSTR str2 = (LPCSTR)pvstr2; + INT iPos; + PVOID pvData; +} ITEMDATA, *LPITEMDATA;
- return lstrcmpA (str1, str2); +typedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM); +typedef HRESULT (CALLBACK *PFNDPASTM)(LPITEMDATA,IStream*,LPARAM); + +static HDPA (WINAPI *pDPA_Clone)(const HDPA,const HDPA); +static HDPA (WINAPI *pDPA_Create)(INT); +static HDPA (WINAPI *pDPA_CreateEx)(INT,HANDLE); +static PVOID (WINAPI *pDPA_DeleteAllPtrs)(const HDPA); +static PVOID (WINAPI *pDPA_DeletePtr)(const HDPA,INT); +static BOOL (WINAPI *pDPA_Destroy)(const HDPA); +static VOID (WINAPI *pDPA_DestroyCallback)(HDPA,PFNDPAENUMCALLBACK,PVOID); +static VOID (WINAPI *pDPA_EnumCallback)(HDPA,PFNDPAENUMCALLBACK,PVOID); +static INT (WINAPI *pDPA_GetPtr)(const HDPA,INT); +static INT (WINAPI *pDPA_GetPtrIndex)(const HDPA,PVOID); +static BOOL (WINAPI *pDPA_Grow)(HDPA,INT); +static INT (WINAPI *pDPA_InsertPtr)(const HDPA,INT,PVOID); +static HRESULT (WINAPI *pDPA_LoadStream)(HDPA*,PFNDPASTM,IStream*,LPARAM); +static BOOL (WINAPI *pDPA_Merge)(const HDPA,const HDPA,DWORD,PFNDPACOMPARE,PFNDPAMERGE,LPARAM); +static HRESULT (WINAPI *pDPA_SaveStream)(HDPA,PFNDPASTM,IStream*,LPARAM); +static INT (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT); +static BOOL (WINAPI *pDPA_SetPtr)(const HDPA,INT,PVOID); +static BOOL (WINAPI *pDPA_Sort)(const HDPA,PFNDPACOMPARE,LPARAM); + +#define COMCTL32_GET_PROC(func, ord) \ + ((p ## func = (PVOID)GetProcAddress(hcomctl32,(LPCSTR)ord)) ? 1 \ + : (trace( #func " not exported\n"), 0)) + +static BOOL InitFunctionPtrs(HMODULE hcomctl32) +{ + /* 4.00+ */ + if(COMCTL32_GET_PROC(DPA_Clone, 331) && + COMCTL32_GET_PROC(DPA_Create, 328) && + COMCTL32_GET_PROC(DPA_CreateEx, 340) && + COMCTL32_GET_PROC(DPA_DeleteAllPtrs, 337) && + COMCTL32_GET_PROC(DPA_DeletePtr, 336) && + COMCTL32_GET_PROC(DPA_Destroy, 329) && + COMCTL32_GET_PROC(DPA_GetPtr, 332) && + COMCTL32_GET_PROC(DPA_GetPtrIndex, 333) && + COMCTL32_GET_PROC(DPA_Grow, 330) && + COMCTL32_GET_PROC(DPA_InsertPtr, 334) && + COMCTL32_GET_PROC(DPA_Search, 339) && + COMCTL32_GET_PROC(DPA_SetPtr, 335) && + COMCTL32_GET_PROC(DPA_Sort, 338)) + { + /* 4.71+ */ + COMCTL32_GET_PROC(DPA_DestroyCallback, 386) && + COMCTL32_GET_PROC(DPA_EnumCallback, 385) && + COMCTL32_GET_PROC(DPA_LoadStream, 9) && + COMCTL32_GET_PROC(DPA_Merge, 11) && + COMCTL32_GET_PROC(DPA_SaveStream, 10); + + return TRUE; + } + + return FALSE; }
-void DPA_test() +/* Callbacks */ +static INT CALLBACK CB_CmpLT(PVOID p1, PVOID p2, LPARAM lp) { - HDPA dpa_ret; - INT int_ret; - CHAR test_str0[]="test0"; + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + return p1 < p2 ? -1 : p1 > p2 ? 1 : 0; +}
- if (!pDPA_Create) - return; +static INT CALLBACK CB_CmpGT(PVOID p1, PVOID p2, LPARAM lp) +{ + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + return p1 > p2 ? -1 : p1 < p2 ? 1 : 0; +}
- dpa_ret = pDPA_Create(0); - ok((dpa_ret !=0), "DPA_Create failed\n"); - int_ret = DPA_Search(dpa_ret,test_str0,0, dpa_strcmp,0, DPAS_SORTED); - ok((int_ret == -1), "DPA_Search found invalid item\n"); - int_ret = DPA_Search(dpa_ret,test_str0,0, dpa_strcmp,0, DPAS_SORTED|DPAS_INSERTBEFORE); - ok((int_ret == 0), "DPA_Search proposed bad item\n"); - int_ret = DPA_Search(dpa_ret,test_str0,0, dpa_strcmp,0, DPAS_SORTED|DPAS_INSERTAFTER); - ok((int_ret == 0), "DPA_Search proposed bad item\n"); - int_ret = pDPA_Grow(dpa_ret,0); - ok(int_ret != 0, "DPA_Grow failed\n"); - int_ret = pDPA_SetPtr(dpa_ret, 0, (void*)0xdeadbeef); - ok(int_ret != 0, "DPA_SetPtr failed\n"); - int_ret = pDPA_Destroy(dpa_ret); - ok(int_ret != 0, "DPA_Destory failed\n"); +static PVOID CALLBACK CB_MergeInsertSrc(UINT op, PVOID p1, PVOID p2, LPARAM lp) +{ + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + return p1; +} + +static PVOID CALLBACK CB_MergeDeleteOddSrc(UINT op, PVOID p1, PVOID p2, LPARAM lp) +{ + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + return ((PCHAR)p2)+1; }
+static INT nEnum; + +static INT CALLBACK CB_EnumFirstThree(PVOID pItem, PVOID lp) +{ + INT i; + + i = pDPA_GetPtrIndex(lp, pItem); + ok(i == nEnum, "i=%d nEnum=%d\n", i, nEnum); + nEnum++; + pDPA_SetPtr(lp, i, (PVOID)7); + return pItem != (PVOID)3; +} + +static HRESULT CALLBACK CB_Save(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) +{ + HRESULT hRes; + + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + hRes = IStream_Write(pStm, &pInfo->iPos, sizeof(INT), NULL); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + hRes = IStream_Write(pStm, &pInfo->pvData, sizeof(PVOID), NULL); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + return S_OK; +} + +static HRESULT CALLBACK CB_Load(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) +{ + HRESULT hRes; + INT iOldPos; + + iOldPos = pInfo->iPos; + ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + hRes = IStream_Read(pStm, &pInfo->iPos, sizeof(INT), NULL); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + ok(pInfo->iPos == iOldPos, "iPos=%d iOldPos=%d\n", pInfo->iPos, iOldPos); + hRes = IStream_Read(pStm, &pInfo->pvData, sizeof(PVOID), NULL); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + return S_OK; +} + +static BOOL CheckDPA(HDPA dpa, DWORD dwIn, PDWORD pdwOut) +{ + DWORD dwOut = 0; + INT i; + + for(i = 0; i < 8;) + { + ULONG_PTR ulItem = (ULONG_PTR)pDPA_GetPtr(dpa, i++); + if(!ulItem) break; + dwOut = dwOut << 4 | (ulItem & 0xf); + } + + *pdwOut = dwOut; + + if(dwOut != dwIn) + { + pDPA_DeleteAllPtrs(dpa); + + do + { + pDPA_InsertPtr(dpa, 0, (PVOID)(dwIn & 0xf)); + dwIn >>= 4; + } + while(dwIn); + + return FALSE; + } + + return TRUE; +} + +static void test_dpa(void) +{ + SYSTEM_INFO si; + HANDLE hHeap; + HDPA dpa, dpa2, dpa3; + INT ret, i; + PVOID p; + DWORD dw, dw2, dw3; + HRESULT hRes; + + GetSystemInfo(&si); + hHeap = HeapCreate(0, 1, 2); + ok(hHeap != NULL, "error=%ld\n", GetLastError()); + dpa3 = pDPA_CreateEx(0, hHeap); + ok(dpa3 != NULL, "\n"); + ret = pDPA_Grow(dpa3, si.dwPageSize + 1); + todo_wine ok(!ret && GetLastError() == ERROR_NOT_ENOUGH_MEMORY, + "ret=%d error=%ld\n", ret, GetLastError()); + + dpa = pDPA_Create(0); + ok(dpa != NULL, "\n"); + + /* Set item with out of bound index */ + ok(pDPA_SetPtr(dpa, 1, (PVOID)6), "\n"); + /* Fill the greated gap */ + ok(pDPA_SetPtr(dpa, 0, (PVOID)5), "\n"); + ok(CheckDPA(dpa, 0x56, &dw), "dw=0x%lx\n", dw); + + /* Prepend item */ + ret = pDPA_InsertPtr(dpa, 1, (PVOID)1); + ok(ret == 1, "ret=%d\n", ret); + /* Append item using correct index */ + ret = pDPA_InsertPtr(dpa, 3, (PVOID)3); + ok(ret == 3, "ret=%d\n", ret); + /* Append item using out of bound index */ + ret = pDPA_InsertPtr(dpa, 5, (PVOID)2); + ok(ret == 4, "ret=%d\n", ret); + /* Append item using DPA_APPEND */ + ret = pDPA_InsertPtr(dpa, DPA_APPEND, (PVOID)4); + ok(ret == 5, "ret=%d\n", ret); + + ok(CheckDPA(dpa, 0x516324, &dw), "dw=0x%lx\n", dw); + + for(i = 1; i <= 6; i++) + { + INT j, k; + k = pDPA_GetPtrIndex(dpa, (PVOID)i); + /* Linear searches should work on unsorted DPAs */ + j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpLT, 0xdeadbeef, 0); + ok(j == k, "j=%d k=%d\n", j, k); + } + + /* Sort DPA */ + ok(pDPA_Sort(dpa, CB_CmpGT, 0xdeadbeef), "\n"); + ok(CheckDPA(dpa, 0x654321, &dw), "dw=0x%lx\n", dw); + + /* Clone into a new DPA */ + dpa2 = pDPA_Clone(dpa, NULL); + ok(dpa2 != NULL, "\n"); + /* The old data should have been preserved */ + ok(CheckDPA(dpa2, 0x654321, &dw2), "dw=0x%lx\n", dw2); + ok(pDPA_Sort(dpa, CB_CmpLT, 0xdeadbeef), "\n"); + + /* Test if the DPA itself was really copied */ + ok(CheckDPA(dpa, 0x123456, &dw), "dw=0x%lx\n", dw ); + ok(CheckDPA(dpa2, 0x654321, &dw2), "dw2=0x%lx\n", dw2); + + /* Clone into an old DPA */ + p = NULL; SetLastError(ERROR_SUCCESS); + p = pDPA_Clone(dpa, dpa3); + ok(p == dpa3, "p=%p\n", p); + ok(CheckDPA(dpa3, 0x123456, &dw3), "dw3=0x%lx\n", dw3); + + for(i = 1; i <= 6; i++) + { + INT j; + + /* The array is in order so ptr == index+1 */ + j = pDPA_GetPtrIndex(dpa, (PVOID)i); + ok(j+1 == i, "j=%d i=%d\n", j, i); + j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpLT, 0xdeadbeef, DPAS_SORTED); + ok(j+1 == i, "j=%d i=%d\n", j, i); + + /* Linear searches respect iStart ... */ + j = pDPA_Search(dpa, (PVOID)i, i+1, CB_CmpLT, 0xdeadbeef, 0); + ok(j == DPA_ERR, "j=%d\n", j); + /* ... but for a binary search it's ignored */ + j = pDPA_Search(dpa, (PVOID)i, i+1, CB_CmpLT, 0xdeadbeef, DPAS_SORTED); + todo_wine ok(j+1 == i, "j=%d i=%d\n", j, i); + } + + /* Try to get the index of a nonexistent item */ + i = pDPA_GetPtrIndex(dpa, (PVOID)7); + ok(i == DPA_ERR, "i=%d\n", i); + + /* Try to delete out of bound indexes */ + p = pDPA_DeletePtr(dpa, -1); + ok(p == NULL, "p=%p\n", p); + p = pDPA_DeletePtr(dpa, 6); + ok(p == NULL, "p=%p\n", p); + + /* Delete the third item */ + p = pDPA_DeletePtr(dpa, 2); + ok(p == (PVOID)3, "p=%p\n", p); + ok(CheckDPA(dpa, 0x12456, &dw), "dw=0x%lx\n", dw); + + /* Check where to re-insert the deleted item */ + i = pDPA_Search(dpa, (PVOID)3, 0, + CB_CmpLT, 0xdeadbeef, DPAS_SORTED|DPAS_INSERTAFTER); + ok(i == 2, "i=%d\n", i); + /* DPAS_INSERTBEFORE works just like DPAS_INSERTAFTER */ + i = pDPA_Search(dpa, (PVOID)3, 0, + CB_CmpLT, 0xdeadbeef, DPAS_SORTED|DPAS_INSERTBEFORE); + ok(i == 2, "i=%d\n", i); + /* without DPAS_INSERTBEFORE/AFTER */ + i = pDPA_Search(dpa, (PVOID)3, 0, + CB_CmpLT, 0xdeadbeef, DPAS_SORTED); + ok(i == -1, "i=%d\n", i); + + /* Re-insert the item */ + ret = pDPA_InsertPtr(dpa, 2, (PVOID)3); + ok(ret == 2, "ret=%d i=%d\n", ret, 2); + ok(CheckDPA(dpa, 0x123456, &dw), "dw=0x%lx\n", dw); + + /* When doing a binary search while claiming reverse order all indexes + * should be bogus */ + for(i = 0; i < 6; i++) + { + INT j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpGT, 0xdeadbeef, + DPAS_SORTED|DPAS_INSERTBEFORE); + ok(j != i, "i=%d\n", i); + } + + if(pDPA_Merge) + { + /* Delete all even entries from dpa */ + p = pDPA_DeletePtr(dpa, 1); + p = pDPA_DeletePtr(dpa, 2); + p = pDPA_DeletePtr(dpa, 3); + ok(CheckDPA(dpa, 0x135, &dw), "dw=0x%lx\n", dw); + + /* Delete all odd entries from dpa2 */ + pDPA_Merge(dpa2, dpa, DPAM_DELETE, + CB_CmpLT, CB_MergeDeleteOddSrc, 0xdeadbeef); + todo_wine ok(CheckDPA(dpa2, 0x246, &dw2), "dw=0x%lx\n", dw2); + + /* Merge dpa3 into dpa2 and dpa */ + pDPA_Merge(dpa, dpa3, DPAM_INSERT|DPAM_NOSORT, + CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef); + pDPA_Merge(dpa2, dpa3, DPAM_INSERT|DPAM_NOSORT, + CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef); + + ok(CheckDPA(dpa, 0x123456, &dw ), "dw=0x%lx\n", dw); + ok(CheckDPA(dpa2, 0x123456, &dw2), "dw2=0x%lx\n", dw2); + ok(CheckDPA(dpa3, 0x123456, &dw3), "dw3=0x%lx\n", dw3); + } + + if(pDPA_EnumCallback) + { + nEnum = 0; + pDPA_EnumCallback(dpa2, CB_EnumFirstThree, (PVOID)dpa2); + ok(CheckDPA(dpa2, 0x777456, &dw2), "dw=0x%lx\n", dw2); + ok(nEnum == 3, "nEnum=%d\n", nEnum); + } + + /* Setting item with huge index should work */ + ok(pDPA_SetPtr(dpa2, 0x12345, (PVOID)0xdeadbeef), "\n"); + ret = pDPA_GetPtrIndex(dpa2, (PVOID)0xdeadbeef); + ok(ret == 0x12345, "ret=%d\n", ret); + + pDPA_DeleteAllPtrs(dpa2); + ok(CheckDPA(dpa2, 0, &dw2), "dw2=0x%lx\n", dw2); + pDPA_Destroy(dpa2); + + if(pDPA_DestroyCallback) + { + nEnum = 0; + pDPA_DestroyCallback(dpa3, CB_EnumFirstThree, dpa3); + ok(nEnum == 3, "nEnum=%d\n", nEnum); + } + else pDPA_Destroy(dpa3); + + if(!pDPA_SaveStream) + goto skip_stream_tests; + + hRes = CoInitialize(NULL); + if(hRes == S_OK) + { + static const WCHAR szStg[] = { 'S','t','g',0 }; + IStorage* pStg = NULL; + IStream* pStm = NULL; + LARGE_INTEGER liZero; + DWORD dwMode; + liZero.QuadPart = 0; + + dwMode = STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE; + hRes = StgCreateDocfile(NULL, dwMode|STGM_DELETEONRELEASE, 0, &pStg); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + + hRes = IStorage_CreateStream(pStg, szStg, dwMode, 0, 0, &pStm); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + + hRes = pDPA_SaveStream(dpa, CB_Save, pStm, 0xdeadbeef); + todo_wine ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + pDPA_Destroy(dpa); + + hRes = IStream_Seek(pStm, liZero, STREAM_SEEK_SET, NULL); + ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, 0xdeadbeef); + todo_wine ok(hRes == S_OK, "hRes=0x%lx\n", hRes); + todo_wine ok(CheckDPA(dpa, 0x123456, &dw), "dw=0x%lx\n", dw); + pDPA_Destroy(dpa); + + ret = IStream_Release(pStm); + ok(!ret, "ret=%d\n", ret); + + ret = IStorage_Release(pStg); + ok(!ret, "ret=%d\n", ret); + + CoUninitialize(); + } + else ok(0, "hResult: %ld\n", hRes); + +skip_stream_tests: + pDPA_Destroy(dpa); +} + START_TEST(dpa) { - HMODULE hdll; + HMODULE hcomctl32;
- hdll=GetModuleHandleA("comctl32.dll"); - pDPA_Create=(void*)GetProcAddress(hdll,(LPCSTR)328); - pDPA_Destroy=(void*)GetProcAddress(hdll,(LPCSTR)329); - pDPA_Grow=(void*)GetProcAddress(hdll,(LPCSTR)330); - pDPA_SetPtr=(void*)GetProcAddress(hdll,(LPCSTR)335); + hcomctl32 = GetModuleHandleA("comctl32.dll");
- DPA_test(); + if(!hcomctl32) + { + ok(0, "error=%ld\n", GetLastError()); + return; + } + + if(InitFunctionPtrs(hcomctl32)) + test_dpa(); + else + trace("skipping tests\n"); + + FreeLibrary(hcomctl32); } _____
Modified: trunk/reactos/regtests/winetests/comctl32/imagelist.c --- trunk/reactos/lib/comctl32/winetests/imagelist.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/imagelist.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -20,7 +20,7 @@
#include <assert.h> #include <windows.h> -#include <commctrl.h> +#include <wine/commctrl.h> #include <stdio.h>
#include "wine/test.h" @@ -469,7 +469,7 @@ return TRUE; }
-static void testMerge() +static void testMerge(void) { HIMAGELIST himl1, himl2, hmerge; HICON hicon1; _____
Modified: trunk/reactos/regtests/winetests/comctl32/mru.c --- trunk/reactos/lib/comctl32/winetests/mru.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/mru.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -224,11 +224,14 @@
iRet, GetLastError());
/* Add (NULL string) */ +#if 0 + /* Some native versions crash when passed NULL or fail to SetLastError() */ SetLastError(0); iRet = pAddMRUStringA(hMRU, NULL); ok(iRet == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "AddMRUStringA(NULL str) expected 0,ERROR_INVALID_PARAMETER got %d,%ld\n", iRet, GetLastError()); +#endif
/* Add 3 strings. Check the registry is correct after each add */ SetLastError(0); _____
Modified: trunk/reactos/regtests/winetests/comctl32/subclass.c --- trunk/reactos/lib/comctl32/winetests/subclass.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/subclass.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -134,7 +134,7 @@
sequence_cnt++; }
-static void flush_sequence() +static void flush_sequence(void) { HeapFree(GetProcessHeap(), 0, sequence); sequence = 0; @@ -215,7 +215,7 @@ return pDefSubclassProc(hwnd, message, wParam, lParam); }
-static void test_subclass() +static void test_subclass(void) { HWND hwnd = CreateWindowExA(0, "TestSubclass", "Test subclass", WS_OVERLAPPEDWINDOW, 100, 100, 200, 200, 0, 0, 0, NULL); _____
Modified: trunk/reactos/regtests/winetests/comctl32/tab.c --- trunk/reactos/lib/comctl32/winetests/tab.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/tab.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -29,6 +29,8 @@
#define TAB_PADDING_X 2 #define TAB_PADDING_Y 2
+#define TCS_BOTTOM 0x0002 + #ifdef VISIBLE #define WAIT Sleep (1000) #define REDRAW(hwnd) RedrawWindow (hwnd, NULL, 0, RDW_UPDATENOW) @@ -39,7 +41,7 @@ #define trace_tab(str) #endif
-HWND +static HWND create_tabcontrol (DWORD style) { HWND handle; @@ -76,7 +78,7 @@ return handle; }
-void CheckSize(HWND hwnd, INT width, INT height) +static void CheckSize(HWND hwnd, INT width, INT height) { RECT rTab, r1;
@@ -95,7 +97,7 @@ "Expected [%d,%d] got [%ld,%ld]\n", width, height, rTab.right - rTab.left, rTab.bottom - rTab.top); }
-void TabCheckSetSize(HWND hwnd, INT SetWidth, INT SetHeight, INT ExpWidth, INT ExpHeight) +static void TabCheckSetSize(HWND hwnd, INT SetWidth, INT SetHeight, INT ExpWidth, INT ExpHeight) { SendMessage (hwnd, TCM_SETITEMSIZE, 0, (LPARAM) MAKELPARAM((SetWidth >= 0) ? SetWidth:0, (SetHeight >= 0) ? SetHeight:0)); _____
Modified: trunk/reactos/regtests/winetests/comctl32/testlist.c --- trunk/reactos/lib/comctl32/winetests/testlist.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/comctl32/testlist.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -8,7 +8,6 @@
#include "winbase.h"
extern void func_dpa(void); -extern void func_imagelist(void); extern void func_mru(void); extern void func_subclass(void); extern void func_tab(void); @@ -22,7 +21,6 @@ static const struct test winetest_testlist[] = { { "dpa", func_dpa }, - { "imagelist", func_imagelist }, { "mru", func_mru }, { "subclass", func_subclass }, { "tab", func_tab }, _____
Copied: trunk/reactos/regtests/winetests/msvcrt (from rev 17052, trunk/reactos/lib/msvcrt/winetests) _____
Copied: trunk/reactos/regtests/winetests/version (from rev 17052, trunk/reactos/lib/version/winetests) _____
Copied: trunk/reactos/regtests/winetests/winetest (from rev 17052, trunk/reactos/apps/utils/winetest) _____
Modified: trunk/reactos/regtests/winetests/winetest/dist.rc --- trunk/reactos/apps/utils/winetest/dist.rc 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/winetest/dist.rc 2005-08-06 18:02:57 UTC (rev 17106) @@ -1,25 +1,25 @@
-/* - * Resources for the binary we distribute to testers - * - * Copyright 2004 Ferenc Wagner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "winetest.rc" - -WINE_BUILD STRINGRES "build.id" -BUILD_INFO STRINGRES "build.nfo" -TESTS_URL STRINGRES "tests.url" +/* + * Resources for the binary we distribute to testers + * + * Copyright 2004 Ferenc Wagner + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "winetest.rc" + +WINE_BUILD STRINGRES "build.id" +BUILD_INFO STRINGRES "build.nfo" +TESTS_URL STRINGRES "tests.url" _____
Modified: trunk/reactos/regtests/winetests/winetest/gui.c --- trunk/reactos/apps/utils/winetest/gui.c 2005-08-05 01:25:43 UTC (rev 17052) +++ trunk/reactos/regtests/winetests/winetest/gui.c 2005-08-06 18:02:57 UTC (rev 17106) @@ -26,32 +26,24 @@
/* Event object to signal successful window creation to main thread. */ -HANDLE initEvent; +static HANDLE initEvent;
/* Dialog handle */ -HWND dialog; +static HWND dialog;
/* Progress data for the text* functions and for scaling. */ -unsigned int progressMax, progressCurr; -double progressScale; +static unsigned int progressMax, progressCurr; +static double progressScale;
/* Progress group counter for the gui* functions. */ -int progressGroup; +static int progressGroup;
-char * -renderString (va_list ap) -{ - const char *fmt = va_arg (ap, char*); - static char buffer[128]; +static WNDPROC DefEditProc;
- vsnprintf (buffer, sizeof buffer, fmt, ap); - return buffer; -} - -int +static int MBdefault (int uType) { static const int matrix[][4] = {{IDOK, 0, 0, 0}, @@ -67,7 +59,7 @@ }
/* report (R_STATUS, fmt, ...) */ -int +static int textStatus (va_list ap) { char *str = vstrmake (NULL, ap); @@ -78,7 +70,7 @@ return 0; }
-int +static int guiStatus (va_list ap) { size_t len; @@ -91,7 +83,7 @@ }
/* report (R_PROGRESS, barnum, steps) */ -int +static int textProgress (va_list ap) { progressGroup = va_arg (ap, int); @@ -100,7 +92,7 @@ return 0; }
-int +static int guiProgress (va_list ap) { unsigned int max; @@ -121,7 +113,7 @@ }
/* report (R_STEP, fmt, ...) */ -int +static int textStep (va_list ap) { char *str = vstrmake (NULL, ap); @@ -133,12 +125,12 @@ return 0; }
-int +static int guiStep (va_list ap) { const int pgID = IDC_ST0 + progressGroup * 2; char *str = vstrmake (NULL, ap); - + progressCurr++; SetDlgItemText (dialog, pgID, str); SendDlgItemMessage (dialog, pgID+1, PBM_SETPOS, @@ -148,7 +140,7 @@ }
/* report (R_DELTA, inc, fmt, ...) */ -int +static int textDelta (va_list ap) { const int inc = va_arg (ap, int); @@ -161,7 +153,7 @@ return 0; }
-int +static int guiDelta (va_list ap) { const int inc = va_arg (ap, int); @@ -176,8 +168,25 @@ return 0; }
+/* report (R_TAG) */ +static int +textTag (va_list ap) +{ + fputs ("Tag: ", stderr); + fputs (tag, stderr); + fputc ('\n', stderr); + return 0; +} + +static int +guiTag (va_list ap) +{ + SetDlgItemText (dialog, IDC_TAG, tag); + return 0; +} + /* report (R_DIR, fmt, ...) */ -int +static int textDir (va_list ap) { char *str = vstrmake (NULL, ap); @@ -189,7 +198,7 @@ return 0; }
-int +static int guiDir (va_list ap) { char *str = vstrmake (NULL, ap); @@ -200,7 +209,7 @@ }
/* report (R_OUT, fmt, ...) */ -int +static int textOut (va_list ap) { char *str = vstrmake (NULL, ap); @@ -212,7 +221,7 @@ return 0; }
-int +static int guiOut (va_list ap) { char *str = vstrmake (NULL, ap); @@ -223,7 +232,7 @@ }
/* report (R_WARNING, fmt, ...) */ -int +static int textWarning (va_list ap) { fputs ("Warning: ", stderr); @@ -231,7 +240,7 @@ return 0; }
-int +static int guiWarning (va_list ap) { char *str = vstrmake (NULL, ap); @@ -242,7 +251,7 @@ }
/* report (R_ERROR, fmt, ...) */ -int +static int textError (va_list ap) { fputs ("Error: ", stderr); @@ -250,7 +259,7 @@ return 0; }
-int +static int guiError (va_list ap) { char *str = vstrmake (NULL, ap); @@ -261,14 +270,14 @@ }
/* report (R_FATAL, fmt, ...) */ -int +static int textFatal (va_list ap) { textError (ap); exit (1); }
-int +static int guiFatal (va_list ap) { guiError (ap); @@ -276,7 +285,7 @@ }
/* report (R_ASK, type, fmt, ...) */ -int +static int textAsk (va_list ap) { int uType = va_arg (ap, int); @@ -289,7 +298,7 @@ return ret; }
-int +static int guiAsk (va_list ap) { int uType = va_arg (ap, int); @@ -301,26 +310,73 @@ return ret; }
+static BOOL CALLBACK +EditTagProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_CHAR: + if (wParam == 8) break; /* backspace is OK */ + if (GetWindowTextLengthA (hwnd) == MAXTAGLEN || + !goodtagchar (wParam)) return TRUE; + break; + } + return CallWindowProcA (DefEditProc, hwnd, msg, wParam, lParam); +} + +static BOOL CALLBACK +AskTagProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + int len; + + switch (msg) { + case WM_INITDIALOG: + DefEditProc = (WNDPROC)SetWindowLongPtr + (GetDlgItem (hwnd, IDC_TAG), GWLP_WNDPROC, (LONG_PTR)EditTagProc); + return TRUE; + case WM_COMMAND: + switch (LOWORD (wParam)) { + case IDOK: + len = GetWindowTextLengthA (GetDlgItem (hwnd, IDC_TAG)); + tag = xmalloc (len+1); + GetDlgItemTextA (hwnd, IDC_TAG, tag, len+1); + EndDialog (hwnd, IDOK); + return TRUE; [truncated at 1000 lines; 873 more skipped]