From e7657c026bcff696ed45131d6a75d8e2a2c1f0af Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 11 May 2008 21:49:56 +0000 Subject: [PATCH] - a bunch of tests for NtUserEnumDisplaySettings - one test for NtGdiGetFontResourceInfoInternalW svn path=/trunk/; revision=33452 --- .../ntgdi/NtGdiGetFontResourceInfoInternalW.c | 43 ++++++++ .../ntuser/NtUserEnumDisplaySettings.c | 99 +++++++++++++++++++ rostests/apitests/w32knapi/testlist.c | 6 +- rostests/apitests/w32knapi/w32knapi.rbuild | 1 + 4 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c new file mode 100644 index 00000000000..0effcc8b247 --- /dev/null +++ b/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c @@ -0,0 +1,43 @@ + +INT +Test_NtGdiGetFontResourceInfoInternalW(PTESTINFO pti) +{ + WCHAR szFullFileName[MAX_PATH+1]; + BOOL bRet; + DWORD dwBufSize; + LOGFONTW logfont; + UNICODE_STRING NtFileName; + + GetCurrentDirectoryW(MAX_PATH, szFullFileName); + wcscat(szFullFileName, L"\\test.otf"); + + ASSERT(AddFontResourceW(szFullFileName) != 0); + + ASSERT(RtlDosPathNameToNtPathName_U(szFullFileName, + &NtFileName, + NULL, + NULL)); + + dwBufSize = sizeof(logfont); + memset(&logfont, 0x0, dwBufSize); + + bRet = NtGdiGetFontResourceInfoInternalW( + NtFileName.Buffer, + (NtFileName.Length / sizeof(WCHAR)) +1, + 1, + dwBufSize, + &dwBufSize, + &logfont, + 2); + + TEST(bRet != FALSE); + + printf("lfHeight = %ld\n", logfont.lfHeight); + printf("lfWidth = %ld\n", logfont.lfWidth); + printf("lfFaceName = %ls\n", logfont.lfFaceName); + + RemoveFontResourceW(szFullFileName); + + return APISTATUS_NORMAL; +} + diff --git a/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c b/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c new file mode 100644 index 00000000000..2b741277599 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c @@ -0,0 +1,99 @@ + +static struct +{ + DEVMODEW devmode; + CHAR buffer[0xffff]; +} data; + +INT +TEST_NtUserEnumDisplaySettings(PTESTINFO pti) +{ + UNICODE_STRING usDeviceName; + WCHAR szName[] = L"DISPLAY"; + NTSTATUS Status; + INT i; + + SetLastError(ERROR_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 0, 0, 0); + TEST(Status == STATUS_ACCESS_VIOLATION); + TEST(GetLastError() == ERROR_SUCCESS); + + data.devmode.dmDriverExtra = 0; + for (i = 0; i < 2 * sizeof(DEVMODEW); i++) + { + data.devmode.dmSize = i; + Status = NtUserEnumDisplaySettings(NULL, 1000, (DEVMODEW*)&data, 0); + if (i != sizeof(DEVMODEW)) + { + TEST(Status == STATUS_BUFFER_TOO_SMALL); + } + } + TEST(GetLastError() == ERROR_SUCCESS); + + usDeviceName.Buffer = NULL; + usDeviceName.Length = 0; + usDeviceName.MaximumLength = 0; + Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_BUFFER_TOO_SMALL); + Status = NtUserEnumDisplaySettings(&usDeviceName, -4, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_BUFFER_TOO_SMALL); + + data.devmode.dmSize = sizeof(DEVMODEW); + data.devmode.dmDriverExtra = 0xffff; + Status = NtUserEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + + data.devmode.dmSize = sizeof(DEVMODEW); + data.devmode.dmDriverExtra = 0; + Status = NtUserEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + + usDeviceName.Buffer = NULL; + usDeviceName.Length = 0; + usDeviceName.MaximumLength = 0; + Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_1); + Status = NtUserEnumDisplaySettings(&usDeviceName, -4, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_1); + + Status = NtUserEnumDisplaySettings(NULL, 0, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 1, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 2, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 4, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 8, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + + Status = NtUserEnumDisplaySettings(NULL, 247, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, 248, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_2); + + Status = NtUserEnumDisplaySettings(NULL, -1, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, -2, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, -3, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_SUCCESS); + Status = NtUserEnumDisplaySettings(NULL, -4, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_2); + + Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_1); + + usDeviceName.Buffer = szName; + usDeviceName.Length = wcslen(szName); + usDeviceName.MaximumLength = usDeviceName.Length; + Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); + TEST(Status == STATUS_INVALID_PARAMETER_1); + + Status = NtUserEnumDisplaySettings(&usDeviceName, 1000, (DEVMODEW*)&data, 123456); + TEST(Status == STATUS_INVALID_PARAMETER_1); + + TEST(GetLastError() == ERROR_SUCCESS); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/testlist.c b/rostests/apitests/w32knapi/testlist.c index be350aa31f2..753291fe8ed 100644 --- a/rostests/apitests/w32knapi/testlist.c +++ b/rostests/apitests/w32knapi/testlist.c @@ -15,6 +15,7 @@ //#include "ntgdi/NtGdiEnumFontChunk.c" #include "ntgdi/NtGdiEnumFontOpen.c" #include "ntgdi/NtGdiGetBitmapBits.c" +#include "ntgdi/NtGdiGetFontResourceInfoInternalW.c" #include "ntgdi/NtGdiGetRandomRgn.c" #include "ntgdi/NtGdiSelectBitmap.c" #include "ntgdi/NtGdiSelectBrush.c" @@ -34,6 +35,7 @@ #include "ntuser/NtUserCallOneParam.c" #include "ntuser/NtUserCountClipboardFormats.c" //#include "ntuser/NtUserCreateWindowEx.c" +#include "ntuser/NtUserEnumDisplaySettings.c" #include "ntuser/NtUserFindExistingCursorIcon.c" #include "ntuser/NtUserRedrawWindow.c" #include "ntuser/NtUserScrollDC.c" @@ -51,13 +53,14 @@ TESTENTRY TestList[] = /* ntgdi */ { L"NtGdiArcInternal", Test_NtGdiArcInternal }, { L"NtGdiBitBlt", Test_NtGdiBitBlt }, -{ L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap }, + { L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap }, { L"NtGdiCreateCompatibleBitmap", Test_NtGdiCreateCompatibleBitmap }, { L"NtGdiDoPalette", Test_NtGdiDoPalette }, { L"NtGdiEngCreatePalette", Test_NtGdiEngCreatePalette }, // { L"NtGdiEnumFontChunk", Test_NtGdiEnumFontChunk }, { L"NtGdiEnumFontOpen", Test_NtGdiEnumFontOpen }, { L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits }, + { L"NtGdiGetFontResourceInfoInternalW", Test_NtGdiGetFontResourceInfoInternalW }, { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn }, { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits }, { L"NtGdiSelectBitmap", Test_NtGdiSelectBitmap }, @@ -78,6 +81,7 @@ TESTENTRY TestList[] = { L"NtUserCallOneParam", Test_NtUserCallOneParam }, { L"NtUserCountClipboardFormats", Test_NtUserCountClipboardFormats }, // { L"NtUserCreateWindowEx", Test_NtUserCreateWindowEx }, + { L"NtUserEnumDisplaySettings", TEST_NtUserEnumDisplaySettings }, { L"NtUserFindExistingCursorIcon", Test_NtUserFindExistingCursoricon }, { L"NtUserRedrawWindow", Test_NtUserRedrawWindow }, { L"NtUserScrollDC", Test_NtUserScrollDC }, diff --git a/rostests/apitests/w32knapi/w32knapi.rbuild b/rostests/apitests/w32knapi/w32knapi.rbuild index 19497cb2141..2ab7793af34 100644 --- a/rostests/apitests/w32knapi/w32knapi.rbuild +++ b/rostests/apitests/w32knapi/w32knapi.rbuild @@ -4,6 +4,7 @@ 0x0501 0x501 apitest + ntdll kernel32 user32 gdi32