1 HWND CreateBasicWindow (VOID); 2 3 LPDIRECTDRAW7 DirectDraw; 4 5 BOOL TestCaps (const char* dummy, DWORD Caps, HRESULT test1, HRESULT test2) 6 { 7 LPDIRECTDRAWSURFACE7 Surface = NULL; 8 DDSURFACEDESC2 Desc = { 0 }; 9 Desc.dwHeight = 200; 10 Desc.dwWidth = 200; 11 Desc.dwSize = sizeof (DDSURFACEDESC2); 12 Desc.ddsCaps.dwCaps = Caps; 13 14 Desc.dwFlags = DDSD_CAPS; 15 BOOL ret = DirectDraw->CreateSurface(&Desc, &Surface, NULL) == test1; 16 17 Desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; 18 ret = ret && DirectDraw->CreateSurface(&Desc, &Surface, NULL) == test2; 19 20 if ( Surface ) 21 Surface->Release(); 22 23 return ret; 24 } 25 26 BOOL Test_CreateSurface (INT* passed, INT* failed) 27 { 28 LPDIRECTDRAWSURFACE7 Surface = NULL; 29 HWND hwnd; 30 31 /* Preparations */ 32 if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) 33 { 34 printf("ERROR: Failed to set up ddraw\n"); 35 return FALSE; 36 } 37 38 TEST ( DirectDraw->CreateSurface(NULL, NULL, NULL) == DDERR_NOCOOPERATIVELEVELSET); 39 40 if(!( hwnd = CreateBasicWindow() )) 41 { 42 printf("ERROR: Failed to create window\n"); 43 DirectDraw->Release(); 44 return FALSE; 45 } 46 47 if (DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) != DD_OK) 48 { 49 printf("ERROR: Could not set cooperative level\n"); 50 DirectDraw->Release(); 51 return 0; 52 } 53 54 /* The Test */ 55 DDSURFACEDESC2 Desc = { 0 }; 56 Desc.dwSize = sizeof (DDSURFACEDESC2); 57 Desc.dwHeight = 200; 58 Desc.dwWidth = 200; 59 60 TEST ( DirectDraw->CreateSurface(&Desc, &Surface, (IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION ); 61 TEST ( DirectDraw->CreateSurface(NULL, &Surface, NULL) == DDERR_INVALIDPARAMS ); 62 TEST ( DirectDraw->CreateSurface(&Desc, NULL, NULL) == DDERR_INVALIDPARAMS ); 63 TEST ( DirectDraw->CreateSurface(&Desc, &Surface, NULL) == DDERR_INVALIDPARAMS ); 64 65 // Test (nearly) all possible cap combinations 66 #include "caps_tests.h" 67 68 DirectDraw->Release(); 69 70 return TRUE; 71 } 72