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