Author: mbosma
Date: Sun May 13 16:09:44 2007
New Revision: 26750
URL: 
http://svn.reactos.org/svn/reactos?rev=26750&view=rev
Log:
Add debugging macro to get error code and test for display modes (commented out because it
checks every single display mode and thus takes fairly long).
Added:
    trunk/rostests/dxtest/ddraw/debug.cpp   (with props)
    trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp   (with props)
Modified:
    trunk/rostests/dxtest/ddraw/testlist.cpp
    trunk/rostests/dxtest/ddraw/tests/CreateDDraw.cpp
Added: trunk/rostests/dxtest/ddraw/debug.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/dxtest/ddraw/debug.cpp?re…
==============================================================================
--- trunk/rostests/dxtest/ddraw/debug.cpp (added)
+++ trunk/rostests/dxtest/ddraw/debug.cpp Sun May 13 16:09:44 2007
@@ -1,0 +1,111 @@
+
+#define GetCode(X) printf("%s\n", DDErrorString(X));
+
+PCHAR DDErrorString (HRESULT hResult)
+{
+       switch (hResult)
+       {
+               case DD_OK:
return "DD_OK";
+               case DDERR_ALREADYINITIALIZED:           return
"DDERR_ALREADYINITIALIZED";
+               case DDERR_CANNOTATTACHSURFACE:          return
"DDERR_CANNOTATTACHSURFACE";
+               case DDERR_CANNOTDETACHSURFACE:          return
"DDERR_CANNOTDETACHSURFACE";
+               case DDERR_CURRENTLYNOTAVAIL:            return
"DDERR_CURRENTLYNOTAVAIL";
+               case DDERR_EXCEPTION:                    return
"DDERR_EXCEPTION";
+               case DDERR_GENERIC:                      return "DDERR_GENERIC";
+               case DDERR_HEIGHTALIGN:                  return
"DDERR_HEIGHTALIGN";
+               case DDERR_INCOMPATIBLEPRIMARY:          return
"DDERR_INCOMPATIBLEPRIMARY";
+               case DDERR_INVALIDCAPS:                  return
"DDERR_INVALIDCAPS";
+               case DDERR_INVALIDCLIPLIST:              return
"DDERR_INVALIDCLIPLIST";
+               case DDERR_INVALIDMODE:                  return
"DDERR_INVALIDMODE";
+               case DDERR_INVALIDOBJECT:                return
"DDERR_INVALIDOBJECT";
+               case DDERR_INVALIDPARAMS:                return
"DDERR_INVALIDPARAMS";
+               case DDERR_INVALIDPIXELFORMAT:           return
"DDERR_INVALIDPIXELFORMAT";
+               case DDERR_INVALIDRECT:                  return
"DDERR_INVALIDRECT";
+               case DDERR_LOCKEDSURFACES:               return
"DDERR_LOCKEDSURFACES";
+               case DDERR_NO3D:                         return "DDERR_NO3D";
+               case DDERR_NOALPHAHW:                    return
"DDERR_NOALPHAHW";
+               case DDERR_NOCLIPLIST:                   return
"DDERR_NOCLIPLIST";
+               case DDERR_NOCOLORCONVHW:                return
"DDERR_NOCOLORCONVHW";
+               case DDERR_NOCOOPERATIVELEVELSET:        return
"DDERR_NOCOOPERATIVELEVELSET";
+               case DDERR_NOCOLORKEY:                   return
"DDERR_NOCOLORKEY";
+               case DDERR_NOCOLORKEYHW:                 return
"DDERR_NOCOLORKEYHW";
+               case DDERR_NODIRECTDRAWSUPPORT:          return
"DDERR_NODIRECTDRAWSUPPORT";
+               case DDERR_NOEXCLUSIVEMODE:              return
"DDERR_NOEXCLUSIVEMODE";
+               case DDERR_NOFLIPHW:                     return
"DDERR_NOFLIPHW";
+               case DDERR_NOGDI:                        return "DDERR_NOGDI";
+               case DDERR_NOMIRRORHW:                   return
"DDERR_NOMIRRORHW";
+               case DDERR_NOTFOUND:                     return
"DDERR_NOTFOUND";
+               case DDERR_NOOVERLAYHW:                  return
"DDERR_NOOVERLAYHW";
+               case DDERR_NORASTEROPHW:                 return
"DDERR_NORASTEROPHW";
+               case DDERR_NOROTATIONHW:                 return
"DDERR_NOROTATIONHW";
+               case DDERR_NOSTRETCHHW:                  return
"DDERR_NOSTRETCHHW";
+               case DDERR_NOT4BITCOLOR:                 return
"DDERR_NOT4BITCOLOR";
+               case DDERR_NOT4BITCOLORINDEX:            return
"DDERR_NOT4BITCOLORINDEX";
+               case DDERR_NOT8BITCOLOR:                 return
"DDERR_NOT8BITCOLOR";
+               case DDERR_NOTEXTUREHW:                  return
"DDERR_NOTEXTUREHW";
+               case DDERR_NOVSYNCHW:                    return
"DDERR_NOVSYNCHW";
+               case DDERR_NOZBUFFERHW:                  return
"DDERR_NOZBUFFERHW";
+               case DDERR_NOZOVERLAYHW:                 return
"DDERR_NOZOVERLAYHW";
+               case DDERR_OUTOFCAPS:                    return
"DDERR_OUTOFCAPS";
+               case DDERR_OUTOFMEMORY:                  return
"DDERR_OUTOFMEMORY";
+               case DDERR_OUTOFVIDEOMEMORY:             return
"DDERR_OUTOFVIDEOMEMORY";
+               case DDERR_OVERLAYCANTCLIP:              return
"DDERR_OVERLAYCANTCLIP";
+               case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: return
"DDERR_OVERLAYCOLORKEYONLYONEACTIVE";
+               case DDERR_PALETTEBUSY:                  return
"DDERR_PALETTEBUSY";
+               case DDERR_COLORKEYNOTSET:               return
"DDERR_COLORKEYNOTSET";
+               case DDERR_SURFACEALREADYATTACHED:       return
"DDERR_SURFACEALREADYATTACHED";
+               case DDERR_SURFACEALREADYDEPENDENT:      return
"DDERR_SURFACEALREADYDEPENDENT";
+               case DDERR_SURFACEBUSY:                  return
"DDERR_SURFACEBUSY";
+               case DDERR_CANTLOCKSURFACE:              return
"DDERR_CANTLOCKSURFACE";
+               case DDERR_SURFACEISOBSCURED:            return
"DDERR_SURFACEISOBSCURED";
+               case DDERR_SURFACELOST:                  return
"DDERR_SURFACELOST";
+               case DDERR_SURFACENOTATTACHED:           return
"DDERR_SURFACENOTATTACHED";
+               case DDERR_TOOBIGHEIGHT:                 return
"DDERR_TOOBIGHEIGHT";
+               case DDERR_TOOBIGSIZE:                   return
"DDERR_TOOBIGSIZE";
+               case DDERR_TOOBIGWIDTH:                  return
"DDERR_TOOBIGWIDTH";
+               case DDERR_UNSUPPORTED:                  return
"DDERR_UNSUPPORTED";
+               case DDERR_UNSUPPORTEDFORMAT:            return
"DDERR_UNSUPPORTEDFORMAT";
+               case DDERR_UNSUPPORTEDMASK:              return
"DDERR_UNSUPPORTEDMASK";
+               case DDERR_VERTICALBLANKINPROGRESS:      return
"DDERR_VERTICALBLANKINPROGRESS";
+               case DDERR_WASSTILLDRAWING:              return
"DDERR_WASSTILLDRAWING";
+               case DDERR_XALIGN:                       return "DDERR_XALIGN";
+               case DDERR_INVALIDDIRECTDRAWGUID:        return
"DDERR_INVALIDDIRECTDRAWGUID";
+               case DDERR_DIRECTDRAWALREADYCREATED:     return
"DDERR_DIRECTDRAWALREADYCREATED";
+               case DDERR_NODIRECTDRAWHW:               return
"DDERR_NODIRECTDRAWHW";
+               case DDERR_PRIMARYSURFACEALREADYEXISTS:  return
"DDERR_PRIMARYSURFACEALREADYEXISTS";
+               case DDERR_NOEMULATION:                  return
"DDERR_NOEMULATION";
+               case DDERR_REGIONTOOSMALL:               return
"DDERR_REGIONTOOSMALL";
+               case DDERR_CLIPPERISUSINGHWND:           return
"DDERR_CLIPPERISUSINGHWND";
+               case DDERR_NOCLIPPERATTACHED:            return
"DDERR_NOCLIPPERATTACHED";
+               case DDERR_NOHWND:                       return "DDERR_NOHWND";
+               case DDERR_HWNDSUBCLASSED:               return
"DDERR_HWNDSUBCLASSED";
+               case DDERR_HWNDALREADYSET:               return
"DDERR_HWNDALREADYSET";
+               case DDERR_NOPALETTEATTACHED:            return
"DDERR_NOPALETTEATTACHED";
+               case DDERR_NOPALETTEHW:                  return
"DDERR_NOPALETTEHW";
+               case DDERR_BLTFASTCANTCLIP:              return
"DDERR_BLTFASTCANTCLIP";
+               case DDERR_NOBLTHW:                      return "DDERR_NOBLTHW";
+               case DDERR_NODDROPSHW:                   return
"DDERR_NODDROPSHW";
+               case DDERR_OVERLAYNOTVISIBLE:            return
"DDERR_OVERLAYNOTVISIBLE";
+               case DDERR_NOOVERLAYDEST:                return
"DDERR_NOOVERLAYDEST";
+               case DDERR_INVALIDPOSITION:              return
"DDERR_INVALIDPOSITION";
+               case DDERR_NOTAOVERLAYSURFACE:           return
"DDERR_NOTAOVERLAYSURFACE";
+               case DDERR_EXCLUSIVEMODEALREADYSET:      return
"DDERR_EXCLUSIVEMODEALREADYSET";
+               case DDERR_NOTFLIPPABLE:                 return
"DDERR_NOTFLIPPABLE";
+               case DDERR_CANTDUPLICATE:                return
"DDERR_CANTDUPLICATE";
+               case DDERR_NOTLOCKED:                    return
"DDERR_NOTLOCKED";
+               case DDERR_CANTCREATEDC:                 return
"DDERR_CANTCREATEDC";
+               case DDERR_NODC:                         return "DDERR_NODC";
+               case DDERR_WRONGMODE:                    return
"DDERR_WRONGMODE";
+               case DDERR_IMPLICITLYCREATED:            return
"DDERR_IMPLICITLYCREATED";
+               case DDERR_NOTPALETTIZED:                return
"DDERR_NOTPALETTIZED";
+               case DDERR_UNSUPPORTEDMODE:              return
"DDERR_UNSUPPORTEDMODE";
+               case DDERR_NOMIPMAPHW:                   return
"DDERR_NOMIPMAPHW";
+               case DDERR_INVALIDSURFACETYPE:           return
"DDERR_INVALIDSURFACETYPE";
+               case DDERR_DCALREADYCREATED:             return
"DDERR_DCALREADYCREATED";
+               case DDERR_CANTPAGELOCK:                 return
"DDERR_CANTPAGELOCK";
+               case DDERR_CANTPAGEUNLOCK:               return
"DDERR_CANTPAGEUNLOCK";
+               case DDERR_NOTPAGELOCKED:                return
"DDERR_NOTPAGELOCKED";
+               case DDERR_NOTINITIALIZED:               return
"DDERR_NOTINITIALIZED";
+       }
+       return "Unknown Error";
+}
Propchange: trunk/rostests/dxtest/ddraw/debug.cpp
------------------------------------------------------------------------------
    svn:eol-style = native
Propchange: trunk/rostests/dxtest/ddraw/debug.cpp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision
Modified: trunk/rostests/dxtest/ddraw/testlist.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/dxtest/ddraw/testlist.cpp…
==============================================================================
--- trunk/rostests/dxtest/ddraw/testlist.cpp (original)
+++ trunk/rostests/dxtest/ddraw/testlist.cpp Sun May 13 16:09:44 2007
@@ -2,15 +2,18 @@
 #define _DDRAWTESTLIST_H
 #include "ddrawtest.h"
+#include "debug.cpp"
 /* include the tests */
 #include "tests/CreateDDraw.cpp"
+#include "tests/DisplayModes.cpp"
 /* The List of tests */
 TEST TestList[] =
 {
        { "DirectDrawCreate(Ex)", Test_CreateDDraw },
-       { "IDirectDraw::SetCooperativeLevel", Test_SetCooperativeLevel }
+       { "IDirectDraw::SetCooperativeLevel", Test_SetCooperativeLevel },
+       // { "IDirectDraw::EnumDisplayModes/SetDisplayMode", Test_DisplayModes }
// uncomment this test if you have enough time and patience
 };
 /* The function that gives us the number of tests */
Modified: trunk/rostests/dxtest/ddraw/tests/CreateDDraw.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/dxtest/ddraw/tests/Create…
==============================================================================
--- trunk/rostests/dxtest/ddraw/tests/CreateDDraw.cpp (original)
+++ trunk/rostests/dxtest/ddraw/tests/CreateDDraw.cpp Sun May 13 16:09:44 2007
@@ -7,7 +7,7 @@
        LPDIRECTDRAW7 DirectDraw;
        IDirectDraw* DirectDraw2;
-       /*** FIXME: Test first parameter  ***/
+       /*** FIXME: Test first parameter using EnumDisplayDrivers  ***/
        TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7,
(IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION);
        TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw4, NULL) ==
DDERR_INVALIDPARAMS);
@@ -36,16 +36,16 @@
                DirectDraw->Release();
                return FALSE;
        }
-
+
        /* The Test */
        TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN) ==
DDERR_INVALIDPARAMS );
        TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN |
DDSCL_EXCLUSIVE) == DDERR_INVALIDPARAMS );
+       TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN) ==
DDERR_INVALIDPARAMS);
        TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL | DDSCL_ALLOWMODEX)
== DDERR_INVALIDPARAMS );
        TEST ( DirectDraw->SetCooperativeLevel ((HWND)0xdeadbeef, DDSCL_NORMAL) ==
DDERR_INVALIDPARAMS);
        TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN |
DDSCL_EXCLUSIVE) == DD_OK);
        TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN |
DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX) == DD_OK);
-       TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL | DDSCL_FULLSCREEN)
== DD_OK);
        TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_NORMAL) == DD_OK );
        TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) == DD_OK );
Added: trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/dxtest/ddraw/tests/Displa…
==============================================================================
--- trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp (added)
+++ trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp Sun May 13 16:09:44 2007
@@ -1,0 +1,55 @@
+typedef struct
+{
+       INT* passed;
+       INT* failed;
+       LPDIRECTDRAW7 DirectDraw;
+} ENUMCONTEXT;
+
+HRESULT CALLBACK DummyEnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context )
+{
+       return DDENUMRET_OK;
+}
+
+HRESULT CALLBACK EnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context )
+{
+       INT* passed = Context->passed;
+       INT* failed = Context->failed;
+       TEST ( Context->DirectDraw->SetDisplayMode (pDDSD->dwWidth,
pDDSD->dwHeight, pDDSD->ddpfPixelFormat.dwRGBBitCount, pDDSD->dwRefreshRate, 0)
== DD_OK);
+       return DDENUMRET_OK;
+}
+
+BOOL Test_DisplayModes (INT* passed, INT* failed)
+{
+       /*** FIXME: Also test with surface as parameter; try busy/locked surface as well
***/
+       LPDIRECTDRAW7 DirectDraw;
+
+       /* Preparations */
+       if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) !=
DD_OK)
+       {
+               printf("ERROR: Failed to set up ddraw\n");
+               return FALSE;
+       }
+
+       ENUMCONTEXT Context = {passed, failed, DirectDraw};
+
+       /* The Test */
+
+       // First try with some generic display modes
+       TEST ( DirectDraw->SetDisplayMode (1586, 895, 0, 0, 0) == DDERR_UNSUPPORTED );
+       TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0x123) == DDERR_INVALIDPARAMS );
+
+       TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0) == DD_OK );
+       TEST ( DirectDraw->SetDisplayMode (800, 600, 0, 0, 0) == DD_OK );
+       TEST ( DirectDraw->SetDisplayMode (0, 0, 16, 0, 0) == DD_OK );
+
+       // Now try getting vaild modes from driver
+       TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL,
(PVOID)&Context, NULL) == DDERR_INVALIDPARAMS);
+       TEST (DirectDraw->EnumDisplayModes(0, NULL, (PVOID)&Context,
(LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK );
+       TEST (DirectDraw->EnumDisplayModes(DDEDM_REFRESHRATES, NULL,
(PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK );
+       TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL,
(PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK );
+       TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES|DDEDM_REFRESHRATES,
NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)EnumDisplayModes) == DD_OK);
+
+       DirectDraw->Release();
+
+       return TRUE;
+}
Propchange: trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp
------------------------------------------------------------------------------
    svn:eol-style = native
Propchange: trunk/rostests/dxtest/ddraw/tests/DisplayModes.cpp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision