1 /* 2 * PROJECT: ReactOS Print Spooler DLL API Tests 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Tests for GetDefaultPrinterA/GetDefaultPrinterW/SetDefaultPrinterA/SetDefaultPrinterW 5 * COPYRIGHT: Copyright 2017 Colin Finck (colin@reactos.org) 6 */ 7 8 #include <apitest.h> 9 10 #define WIN32_NO_STATUS 11 #include <windef.h> 12 #include <winbase.h> 13 #include <wingdi.h> 14 #include <winspool.h> 15 16 START_TEST(GetDefaultPrinterA) 17 { 18 DWORD cchDefaultPrinter; 19 PSTR pszDefaultPrinter; 20 21 // Don't supply any parameters, this has to fail with ERROR_INVALID_PARAMETER. 22 SetLastError(0xDEADBEEF); 23 ok(!GetDefaultPrinterA(NULL, NULL), "GetDefaultPrinterA returns TRUE!\n"); 24 ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetDefaultPrinterA returns error %lu!\n", GetLastError()); 25 26 // Determine the size of the required buffer. This has to bail out with ERROR_INSUFFICIENT_BUFFER. 27 cchDefaultPrinter = 0; 28 SetLastError(0xDEADBEEF); 29 ok(!GetDefaultPrinterA(NULL, &cchDefaultPrinter), "GetDefaultPrinterA returns TRUE!\n"); 30 ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetDefaultPrinterA returns error %lu!\n", GetLastError()); 31 32 // Try with a buffer large enough. 33 pszDefaultPrinter = HeapAlloc(GetProcessHeap(), 0, cchDefaultPrinter); 34 SetLastError(0xDEADBEEF); 35 ok(GetDefaultPrinterA(pszDefaultPrinter, &cchDefaultPrinter), "GetDefaultPrinterA returns FALSE!\n"); 36 37 // SetDefaultPrinterA with NULL needs to succeed and leave the default printer unchanged. 38 SetLastError(0xDEADBEEF); 39 ok(SetDefaultPrinterA(NULL), "SetDefaultPrinterA returns FALSE!\n"); 40 41 // SetDefaultPrinterA with the previous default printer also needs to succeed. 42 SetLastError(0xDEADBEEF); 43 ok(SetDefaultPrinterA(pszDefaultPrinter), "SetDefaultPrinterA returns FALSE!\n"); 44 45 // SetDefaultPrinterA with an invalid printer name needs to fail with ERROR_INVALID_PRINTER_NAME. 46 SetLastError(0xDEADBEEF); 47 ok(!SetDefaultPrinterA("INVALID PRINTER NAME!!!"), "SetDefaultPrinterA returns TRUE!\n"); 48 ok(GetLastError() == ERROR_INVALID_PRINTER_NAME, "SetDefaultPrinterA returns error %lu!\n", GetLastError()); 49 50 HeapFree(GetProcessHeap(), 0, pszDefaultPrinter); 51 } 52 53 START_TEST(GetDefaultPrinterW) 54 { 55 DWORD cchDefaultPrinter; 56 PWSTR pwszDefaultPrinter; 57 58 // Don't supply any parameters, this has to fail with ERROR_INVALID_PARAMETER. 59 SetLastError(0xDEADBEEF); 60 ok(!GetDefaultPrinterW(NULL, NULL), "GetDefaultPrinterW returns TRUE!\n"); 61 ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetDefaultPrinterW returns error %lu!\n", GetLastError()); 62 63 // Determine the size of the required buffer. This has to bail out with ERROR_INSUFFICIENT_BUFFER. 64 cchDefaultPrinter = 0; 65 SetLastError(0xDEADBEEF); 66 ok(!GetDefaultPrinterW(NULL, &cchDefaultPrinter), "GetDefaultPrinterW returns TRUE!\n"); 67 ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetDefaultPrinterW returns error %lu!\n", GetLastError()); 68 69 // Try with a buffer large enough. 70 pwszDefaultPrinter = HeapAlloc(GetProcessHeap(), 0, cchDefaultPrinter * sizeof(WCHAR)); 71 SetLastError(0xDEADBEEF); 72 ok(GetDefaultPrinterW(pwszDefaultPrinter, &cchDefaultPrinter), "GetDefaultPrinterW returns FALSE!\n"); 73 74 // SetDefaultPrinterW with NULL needs to succeed and leave the default printer unchanged. 75 SetLastError(0xDEADBEEF); 76 ok(SetDefaultPrinterW(NULL), "SetDefaultPrinterW returns FALSE!\n"); 77 78 // SetDefaultPrinterW with the previous default printer also needs to succeed. 79 SetLastError(0xDEADBEEF); 80 ok(SetDefaultPrinterW(pwszDefaultPrinter), "SetDefaultPrinterW returns FALSE!\n"); 81 82 // SetDefaultPrinterW with an invalid printer name needs to fail with ERROR_INVALID_PRINTER_NAME. 83 SetLastError(0xDEADBEEF); 84 ok(!SetDefaultPrinterW(L"INVALID PRINTER NAME!!!"), "SetDefaultPrinterW returns TRUE!\n"); 85 ok(GetLastError() == ERROR_INVALID_PRINTER_NAME, "SetDefaultPrinterW returns error %lu!\n", GetLastError()); 86 87 HeapFree(GetProcessHeap(), 0, pwszDefaultPrinter); 88 } 89