blob: eceeadd001187aa18f9fab441d77e8592905399e [file] [log] [blame] [edit]
package jnr.posix;
import jnr.posix.util.Platform;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class HANDLETest {
private static POSIX posix;
@BeforeClass
public static void setUpClass() throws Exception {
posix = POSIXFactory.getPOSIX(new DummyPOSIXHandler(), true);
}
@Test
public void invalidHandleIsInValid() {
assertFalse(HANDLE.valueOf(-1L).isValid());
}
private static WindowsLibC kernel32() {
return (WindowsLibC) posix.libc();
}
// This really is matching pipe for the sake of these unit tests but in general the
// in/out/error handle will vary depending on how a CLI supplies it:
// http://stackoverflow.com/questions/9021916/how-do-i-check-if-my-delphi-console-app-is-redirected-to-a-file-or-pipe
private boolean isValidHandleType(HANDLE handle) {
int type = kernel32().GetFileType(handle);
return type == WindowsLibC.FILE_TYPE_DISK || type == WindowsLibC.FILE_TYPE_PIPE;
}
@Test
public void stdinHandle() {
if (Platform.IS_WINDOWS) {
assertTrue(kernel32().GetStdHandle(WindowsLibC.STD_INPUT_HANDLE).isValid());
assertTrue(isValidHandleType(kernel32().GetStdHandle(WindowsLibC.STD_INPUT_HANDLE)));
}
}
@Test
public void stdoutHandle() {
if (Platform.IS_WINDOWS) {
assertTrue(kernel32().GetStdHandle(WindowsLibC.STD_OUTPUT_HANDLE).isValid());
assertTrue(isValidHandleType(kernel32().GetStdHandle(WindowsLibC.STD_OUTPUT_HANDLE)));
}
}
@Test
public void stderrHandle() {
if (Platform.IS_WINDOWS) {
assertTrue(kernel32().GetStdHandle(WindowsLibC.STD_ERROR_HANDLE).isValid());
assertTrue(isValidHandleType(kernel32().GetStdHandle(WindowsLibC.STD_ERROR_HANDLE)));
}
}
}