diff --git a/configure b/configure index 6484f8b5871..73d6b77d5e7 100755 --- a/configure +++ b/configure @@ -14840,6 +14840,14 @@ ALL_MAKEFILE_DEPENDS="$ALL_MAKEFILE_DEPENDS dlls/dxdiagn/Makefile: dlls/dxdiagn/Makefile.in dlls/Makedll.rules" ac_config_files="$ac_config_files dlls/dxdiagn/Makefile" +ALL_MAKEFILES="$ALL_MAKEFILES \\ + dlls/dxdiagn/tests/Makefile" +test "x$enable_tests" != xno && ALL_TEST_DIRS="$ALL_TEST_DIRS \\ + dxdiagn/tests" +ALL_MAKEFILE_DEPENDS="$ALL_MAKEFILE_DEPENDS +dlls/dxdiagn/tests/Makefile: dlls/dxdiagn/tests/Makefile.in dlls/Maketest.rules" +ac_config_files="$ac_config_files dlls/dxdiagn/tests/Makefile" + ALL_MAKEFILES="$ALL_MAKEFILES \\ dlls/dxerr8/Makefile" test "x$enable_dxerr8" != xno && ALL_IMPLIB_DIRS="$ALL_IMPLIB_DIRS \\ @@ -19001,6 +19009,7 @@ do "dlls/dswave/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dswave/Makefile" ;; "dlls/dwmapi/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dwmapi/Makefile" ;; "dlls/dxdiagn/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dxdiagn/Makefile" ;; + "dlls/dxdiagn/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dxdiagn/tests/Makefile" ;; "dlls/dxerr8/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dxerr8/Makefile" ;; "dlls/dxerr9/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dxerr9/Makefile" ;; "dlls/dxgi/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/dxgi/Makefile" ;; diff --git a/configure.ac b/configure.ac index 99fb6b9040a..62ea51f69d2 100644 --- a/configure.ac +++ b/configure.ac @@ -2240,6 +2240,7 @@ WINE_CONFIG_MAKEFILE([dlls/dssenh/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL WINE_CONFIG_MAKEFILE([dlls/dswave/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/dwmapi/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/dxdiagn/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) +WINE_CONFIG_MAKEFILE([dlls/dxdiagn/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests]) WINE_CONFIG_MAKEFILE([dlls/dxerr8/Makefile],[dlls/Makeimplib.rules],[dlls],[ALL_IMPLIB_DIRS]) WINE_CONFIG_MAKEFILE([dlls/dxerr9/Makefile],[dlls/Makeimplib.rules],[dlls],[ALL_IMPLIB_DIRS]) WINE_CONFIG_MAKEFILE([dlls/dxgi/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) diff --git a/dlls/dxdiagn/tests/Makefile.in b/dlls/dxdiagn/tests/Makefile.in new file mode 100644 index 00000000000..720e38269b5 --- /dev/null +++ b/dlls/dxdiagn/tests/Makefile.in @@ -0,0 +1,13 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +TESTDLL = dxdiagn.dll +IMPORTS = ole32 kernel32 + +CTESTS = \ + provider.c + +@MAKE_TEST_RULES@ + +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/dxdiagn/tests/provider.c b/dlls/dxdiagn/tests/provider.c new file mode 100644 index 00000000000..a893842221d --- /dev/null +++ b/dlls/dxdiagn/tests/provider.c @@ -0,0 +1,152 @@ +/* + * Unit tests for IDxDiagProvider + * + * Copyright (C) 2009 Andrew Nguyen + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include "initguid.h" +#include "dxdiag.h" +#include "wine/test.h" + +static void test_Initialize(void) +{ + HRESULT hr; + IDxDiagProvider *pddp; + DXDIAG_INIT_PARAMS params; + + hr = CoCreateInstance(&CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, + &IID_IDxDiagProvider, (LPVOID*)&pddp); + ok(hr == S_OK, "Creating a IDxDiagProvider instance failed with %x\n", hr); + if (FAILED(hr)) + { + skip("Failed to create a IDxDiagProvider instance\n"); + return; + } + + /* Test passing a NULL DXDIAG_INIT_PARAMS pointer. */ + hr = IDxDiagProvider_Initialize(pddp, NULL); + ok(hr == E_POINTER, + "Expected IDxDiagProvider::Initialize to return E_POINTER, got %x\n", hr); + + /* Test passing invalid dwSize values. */ + params.dwSize = 0; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + ok(hr == E_INVALIDARG, + "Expected IDxDiagProvider::Initialize to return E_INVALIDARG, got %x\n", hr); + + params.dwSize = sizeof(params) + 1; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + ok(hr == E_INVALIDARG, + "Expected IDxDiagProvider::Initialize to return E_INVALIDARG, got %x\n", hr); + + /* Test passing an unexpected dwDxDiagHeaderVersion value. */ + params.dwSize = sizeof(params); + params.dwDxDiagHeaderVersion = 0; + params.bAllowWHQLChecks = FALSE; + params.pReserved = NULL; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + todo_wine + ok(hr == E_INVALIDARG, + "Expected IDxDiagProvider::Initialize to return E_INVALIDARG, got %x\n", hr); + + /* Setting pReserved to a non-NULL value causes a crash on Windows. */ + if (0) + { + params.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; + params.bAllowWHQLChecks = FALSE; + params.pReserved = (VOID*)0xdeadbeef; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + trace("IDxDiagProvider::Initialize returned %x\n", hr); + } + + /* Test passing an appropriately initialized DXDIAG_INIT_PARAMS. */ + params.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; + params.bAllowWHQLChecks = FALSE; + params.pReserved = NULL; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + ok(hr == S_OK, "Expected IDxDiagProvider::Initialize to return S_OK, got %x\n", hr); + + /* Test initializing multiple times. */ + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + ok(hr == S_OK, "Expected IDxDiagProvider::Initialize to return S_OK, got %x\n", hr); + + IDxDiagProvider_Release(pddp); +} + +static void test_GetRootContainer(void) +{ + HRESULT hr; + IDxDiagProvider *pddp; + IDxDiagContainer *pddc; + DXDIAG_INIT_PARAMS params; + + hr = CoCreateInstance(&CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, + &IID_IDxDiagProvider, (LPVOID*)&pddp); + ok(hr == S_OK, "Creating a IDxDiagProvider instance failed with %x\n", hr); + if (FAILED(hr)) + { + skip("Failed to create a IDxDiagProvider instance\n"); + return; + } + + /* Test calling IDxDiagProvider::GetRootContainer before initialization. */ + hr = IDxDiagProvider_GetRootContainer(pddp, NULL); + todo_wine + ok(hr == CO_E_NOTINITIALIZED, + "Expected IDxDiagProvider::GetRootContainer to return CO_E_NOTINITIALIZED, got %x\n", hr); + + hr = IDxDiagProvider_GetRootContainer(pddp, &pddc); + todo_wine + ok(hr == CO_E_NOTINITIALIZED, + "Expected IDxDiagProvider::GetRootContainer to return CO_E_NOTINITIALIZED, got %x\n", hr); + + params.dwSize = sizeof(params); + params.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; + params.bAllowWHQLChecks = FALSE; + params.pReserved = NULL; + hr = IDxDiagProvider_Initialize(pddp, ¶ms); + ok(hr == S_OK, "Expected IDxDiagProvider::Initialize to return S_OK, got %x\n", hr); + if (FAILED(hr)) + { + skip("IDxDiagProvider::Initialize failed\n"); + IDxDiagProvider_Release(pddp); + return; + } + + /* Passing NULL causes a crash on Windows. */ + if (0) + { + hr = IDxDiagProvider_GetRootContainer(pddp, NULL); + trace("IDxDiagProvider::GetRootContainer returned %x\n", hr); + } + + hr = IDxDiagProvider_GetRootContainer(pddp, &pddc); + ok(hr == S_OK, "Expected IDxDiagProvider::GetRootContainer to return S_OK, got %x\n", hr); + + IDxDiagContainer_Release(pddc); + IDxDiagProvider_Release(pddp); +} + +START_TEST(provider) +{ + CoInitialize(NULL); + test_Initialize(); + test_GetRootContainer(); + CoUninitialize(); +}