1 HWND CreateBasicWindow (VOID);
2
3 LPDIRECTDRAW7 DirectDraw;
4
TestCaps(const char * dummy,DWORD Caps,HRESULT test1,HRESULT test2)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
Test_CreateSurface(INT * passed,INT * failed)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