/* Copyright (c) 2007 Timothy Wall, All Rights Reserved * * 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. */ package com.sun.jna.platform.win32; import org.junit.Ignore; import org.junit.Test; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.IntByReference; /** * @author lgoldstein */ public class Kernel32ConsoleTest extends AbstractWin32TestSupport { private static final Wincon INSTANCE=Kernel32.INSTANCE; @Test public void testGetConsoleDisplayMode() { IntByReference curMode=new IntByReference(); assertCallSucceeded("Initial display mode value retrieval", INSTANCE.GetConsoleDisplayMode(curMode)); } @Test public void testConsoleCP() { int curCP=INSTANCE.GetConsoleCP(); // NOTE: we use the same code page value just in case the "SetConsoleCP" call fails assertCallSucceeded("Restore CP=" + curCP, INSTANCE.SetConsoleCP(curCP)); } @Test public void testConsoleOutputCP() { int curCP=INSTANCE.GetConsoleOutputCP(); // NOTE: we use the same code page value just in case the "SetConsoleOutputCP" call fails assertCallSucceeded("Restore CP=" + curCP, INSTANCE.SetConsoleOutputCP(curCP)); } @Test public void testGetConsoleWindow() { // Only the call is done -- the prior test checked for not-null // but running this test from netbeans IDE or console // always resulted in NULL and this is a valid value // (if there is no console attached) HWND hwnd=INSTANCE.GetConsoleWindow(); } @Test public void testGetNumberOfConsoleMouseButtons() { IntByReference numButtons=new IntByReference(0); assertCallSucceeded("Initial display mode value retrieval", INSTANCE.GetNumberOfConsoleMouseButtons(numButtons)); } @Test public void testGetStdHandle() { for (int nHandle : new int[] { Wincon.STD_INPUT_HANDLE, Wincon.STD_OUTPUT_HANDLE, Wincon.STD_ERROR_HANDLE }) { HANDLE hndl=INSTANCE.GetStdHandle(nHandle); assertNotEquals("Bad handle value for std handle=" + nHandle, WinBase.INVALID_HANDLE_VALUE, hndl); // don't really care what the handle value is - just ensure that API can be called /* * According to the API documentation: * * If an application does not have associated standard handles, * such as a service running on an interactive desktop, and has * not redirected them, the return value is NULL. */ Pointer ptr=hndl.getPointer(); if (ptr == Pointer.NULL) { continue; } else { assertCallSucceeded("SetStdHandle(" + nHandle + ")", INSTANCE.SetStdHandle(nHandle, hndl)); } } } @Test @Ignore("For some reason we get hr=6 - ERROR_INVALID_HANDLE - even though the documentation stipulates that GetStdHandle can be used") public void testGetConsoleMode() { for (int nHandle : new int[] { Wincon.STD_INPUT_HANDLE, Wincon.STD_OUTPUT_HANDLE, Wincon.STD_ERROR_HANDLE }) { HANDLE hndl=INSTANCE.GetStdHandle(nHandle); Pointer ptr=hndl.getPointer(); if (ptr == Pointer.NULL) { continue; // can happen for interactive desktop application } IntByReference lpMode=new IntByReference(0); assertCallSucceeded("GetConsoleMode(" + nHandle + ")", INSTANCE.GetConsoleMode(hndl, lpMode)); int dwMode=lpMode.getValue(); // don't really care what the mode is just want to make sure API can be called assertCallSucceeded("SetConsoleMode(" + nHandle + "," + dwMode + ")", INSTANCE.SetConsoleMode(hndl, dwMode)); } } @Test public void testGetConsoleTitle() { char[] lpConsoleTitle=new char[WinNT.MAX_PATH]; int len=INSTANCE.GetConsoleTitle(lpConsoleTitle, lpConsoleTitle.length); assertCallSucceeded("GetConsoleTitle", (len > 0)); String title=Native.toString(lpConsoleTitle); assertCallSucceeded("SetConsoleTitle", INSTANCE.SetConsoleTitle(title)); } @Test public void testGetConsoleOriginalTitle() { char[] lpConsoleTitle=new char[WinNT.MAX_PATH]; int len=INSTANCE.GetConsoleOriginalTitle(lpConsoleTitle, lpConsoleTitle.length); if (len <= 0) { int hr=Kernel32.INSTANCE.GetLastError(); if (hr == 0) { // don't fail the test - we just want to see if the API can be called fail("Buffer not large enough to hold the title"); } else { fail("Call failed: hr=0x" + Integer.toHexString(hr)); } } } }