package cn.com.jautoitx;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Properties;
import org.apache.commons.lang3.StringUtils;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.omg.CORBA.BooleanHolder;
import org.omg.CORBA.IntHolder;
import cn.com.jautoitx.Process.ProcPriority;
import cn.com.jautoitx.Process.RunLogonFlag;
import cn.com.jautoitx.Process.RunShowFlag;
import cn.com.jautoitx.Process.RunWaitResult;
import cn.com.jautoitx.Process.ShutdownCode;
public class ProcessTest extends BaseTest {
private static final String USER_NAME;
private static final String USER_PASSWORD;
private static final String USER_ERROR_PASSWORD = "~AdminiPassword~";
private static Sigar sigar = null;
static {
Properties props = new Properties();
File propsFile = new File("test/account.conf");
try {
props.load(new FileInputStream(propsFile));
} catch (Exception e) {
Assert.fail(String.format("Unable to load file %s.",
propsFile.getAbsolutePath()));
}
USER_NAME = props.getProperty("user");
Assert.assertTrue(StringUtils.isNotBlank(USER_NAME));
USER_PASSWORD = props.getProperty("password");
Assert.assertNotNull(USER_ERROR_PASSWORD);
}
@BeforeClass
public static void beforeClass() {
sigar = new Sigar();
}
@Test
public void close() {
int pid = runNotepad();
// close process by name
Process.close(NOTEPAD_PROC_NAME);
sleep(500);
Assert.assertNull(Process.exists(NOTEPAD_PROC_NAME));
pid = runNotepad();
// close process by pid
Process.close(pid);
sleep(500);
Assert.assertNull(Process.exists(NOTEPAD_PROC_NAME));
}
@Test
public void exists() {
Assert.assertNull(Process.exists("notepad.exe"));
// run notepad
int pid = Process.run(NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
Assert.assertEquals(pid, Process.exists("notepad.exe").intValue());
Assert.assertTrue(Process.exists(pid));
// close notepad
Process.close(pid);
sleep(500);
Assert.assertNull(Process.exists("notepad.exe"));
Assert.assertFalse(Process.exists(pid));
Assert.assertNull(Process.exists("System Idle Process"));
Assert.assertFalse(Process.exists(0));
}
@Test
public void getPriority() {
// run notepad
int pid = runNotepad();
for (ProcPriority priority : ProcPriority.values()) {
Assert.assertTrue(Process.setPriority(pid, priority));
Assert.assertEquals(priority, Process.getPriority(pid));
}
// close notepad
closeNotepad(pid);
Assert.assertNull(Process.getPriority(pid));
}
@Test
public void run() throws SigarException, IOException {
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in default mode
int pid = Process.run(NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in hide mode
pid = Process.run(NOTEPAD_PROC_NAME, RunShowFlag.HIDE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertFalse(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in minimize mode
pid = Process.run(NOTEPAD_PROC_NAME, RunShowFlag.MINIMIZE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertTrue(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in maximize mode
pid = Process.run(NOTEPAD_PROC_NAME, "C:/", RunShowFlag.MAXIMIZE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertTrue(Win.maximized(NOTEPAD_TITLE));
Assert.assertEquals("C:", sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in normal mode
final String workingDir = (new File(".")).getCanonicalPath();
pid = Process.run(NOTEPAD_PROC_NAME, workingDir, RunShowFlag.NORMAL);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertEquals(workingDir, sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in normal mode
Assert.assertNull(Process.run(NOTEPAD_PROC_NAME + "xxx", RunShowFlag.NORMAL));
}
@Test
public void runAs() throws SigarException, IOException {
final String domain = InetAddress.getLocalHost().getHostName();
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
Assert.assertNull(Process.runAs(USER_NAME, domain, USER_ERROR_PASSWORD,
(Integer) null, NOTEPAD_PROC_NAME));
// run notepad in default mode
int pid = Process.runAs(USER_NAME, domain, USER_PASSWORD,
(Integer) null, NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in hide mode
pid = Process.runAs(USER_NAME, domain, USER_PASSWORD,
(RunLogonFlag) null, NOTEPAD_PROC_NAME, RunShowFlag.HIDE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertFalse(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in minimize mode
pid = Process.runAs(USER_NAME, domain, USER_PASSWORD,
(RunLogonFlag) null, NOTEPAD_PROC_NAME, RunShowFlag.MINIMIZE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertTrue(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in maximize mode
pid = Process.runAs(USER_NAME, domain, USER_PASSWORD,
(RunLogonFlag) null, NOTEPAD_PROC_NAME, "C:/", RunShowFlag.MAXIMIZE);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertTrue(Win.maximized(NOTEPAD_TITLE));
Assert.assertEquals("C:", sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in normal mode
final String workingDir = (new File(".")).getCanonicalPath();
pid = Process.runAs(USER_NAME, domain, USER_PASSWORD,
(RunLogonFlag) null, NOTEPAD_PROC_NAME, workingDir, RunShowFlag.NORMAL);
Assert.assertTrue(pid > 0);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertEquals(workingDir, sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in normal mode
Assert.assertNull(Process.runAs(USER_NAME, domain, USER_PASSWORD,
(RunLogonFlag) null, NOTEPAD_PROC_NAME + "xxx", RunShowFlag.NORMAL));
}
@Test
public void runAsWait() throws SigarException, IOException {
final String domain = InetAddress.getLocalHost().getHostName();
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in default mode
final IntHolder exitCodeHolder = new IntHolder(Integer.MIN_VALUE);
Thread thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, NOTEPAD_PROC_NAME).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in hide mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, null, NOTEPAD_PROC_NAME, RunShowFlag.HIDE)
.getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertFalse(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in minimize mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, null, NOTEPAD_PROC_NAME, RunShowFlag.MINIMIZE)
.getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertTrue(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in maximize mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, null, NOTEPAD_PROC_NAME, "C:/",
RunShowFlag.MAXIMIZE).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertTrue(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
int pid = Win.getProcess(NOTEPAD_TITLE);
Assert.assertTrue(pid > 0);
Assert.assertEquals("C:", sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in normal mode
final String workingDir = (new File(".")).getCanonicalPath();
exitCodeHolder.value = Integer.MIN_VALUE;
final BooleanHolder errorHolder = new BooleanHolder(true);
thread = new Thread(new Runnable() {
public void run() {
RunWaitResult result = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, null, NOTEPAD_PROC_NAME, workingDir,
RunShowFlag.NORMAL);
exitCodeHolder.value = result.getExitCode();
errorHolder.value = result.hasError();
}
});
thread.start();
sleep(2000);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
pid = Win.getProcess(NOTEPAD_TITLE);
Assert.assertTrue(pid > 0);
Assert.assertEquals(workingDir, sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(2000);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
Assert.assertFalse(errorHolder.value);
// run notepad in normal mode
exitCodeHolder.value = Integer.MIN_VALUE;
errorHolder.value = false;
thread = new Thread(new Runnable() {
public void run() {
RunWaitResult result = Process.runAsWait(USER_NAME, domain,
USER_PASSWORD, null, NOTEPAD_PROC_NAME + "xxx",
RunShowFlag.NORMAL);
exitCodeHolder.value = result.getExitCode();
errorHolder.value = result.hasError();
}
});
thread.start();
sleep(2000);
Assert.assertFalse(thread.isAlive());
Assert.assertTrue(errorHolder.value);
}
@Test
public void runWait() throws SigarException, IOException {
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
// run notepad in default mode
final IntHolder exitCodeHolder = new IntHolder(Integer.MIN_VALUE);
Thread thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runWait(NOTEPAD_PROC_NAME).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in hide mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runWait(NOTEPAD_PROC_NAME,
RunShowFlag.HIDE).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertFalse(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in minimize mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runWait(NOTEPAD_PROC_NAME,
RunShowFlag.MINIMIZE).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertTrue(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in maximize mode
exitCodeHolder.value = Integer.MIN_VALUE;
thread = new Thread(new Runnable() {
public void run() {
exitCodeHolder.value = Process.runWait(NOTEPAD_PROC_NAME, "C:/",
RunShowFlag.MAXIMIZE).getExitCode();
}
});
thread.start();
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertTrue(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
int pid = Win.getProcess(NOTEPAD_TITLE);
Assert.assertTrue(pid > 0);
Assert.assertEquals("C:", sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(500);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
// run notepad in normal mode
final String workingDir = (new File(".")).getCanonicalPath();
exitCodeHolder.value = Integer.MIN_VALUE;
final BooleanHolder errorHolder = new BooleanHolder(true);
thread = new Thread(new Runnable() {
public void run() {
RunWaitResult result = Process.runWait(NOTEPAD_PROC_NAME, workingDir,
RunShowFlag.NORMAL);
exitCodeHolder.value = result.getExitCode();
errorHolder.value = result.hasError();
}
});
thread.start();
sleep(2000);
Assert.assertTrue(Win.wait(NOTEPAD_TITLE, 3));
Assert.assertTrue(Win.exists(NOTEPAD_TITLE));
Assert.assertTrue(Win.visible(NOTEPAD_TITLE));
Assert.assertFalse(Win.minimized(NOTEPAD_TITLE));
Assert.assertFalse(Win.maximized(NOTEPAD_TITLE));
Assert.assertTrue(thread.isAlive());
pid = Win.getProcess(NOTEPAD_TITLE);
Assert.assertTrue(pid > 0);
Assert.assertEquals(workingDir, sigar.getProcExe(pid).getCwd());
// close notepad
Win.close(NOTEPAD_TITLE);
Assert.assertFalse(Win.exists(NOTEPAD_TITLE));
sleep(2000);
Assert.assertFalse(thread.isAlive());
Assert.assertEquals(0, exitCodeHolder.value);
Assert.assertFalse(errorHolder.value);
// run notepad in normal mode
exitCodeHolder.value = Integer.MIN_VALUE;
errorHolder.value = false;
thread = new Thread(new Runnable() {
public void run() {
RunWaitResult result = Process.runWait(NOTEPAD_PROC_NAME + "xxx",
RunShowFlag.NORMAL);
exitCodeHolder.value = result.getExitCode();
errorHolder.value = result.hasError();
}
});
thread.start();
sleep(2000);
Assert.assertFalse(thread.isAlive());
Assert.assertTrue(errorHolder.value);
}
@Test
public void setPriority() {
// run notepad
int pid = runNotepad();
for (ProcPriority priority : ProcPriority.values()) {
Assert.assertTrue(Process.setPriority(pid, priority));
Assert.assertEquals(priority, Process.getPriority(pid));
}
// close notepad
closeNotepad(pid);
Assert.assertFalse(Process.setPriority(pid, ProcPriority.NORMAL));
}
@Ignore
@Test
public void shutdown() {
Assert.assertTrue(Process.shutdown(ShutdownCode.LOGOFF));
}
@Test
public void testWait() {
Thread thread = new Thread(new Runnable() {
public void run() {
Process.wait(NOTEPAD_PROC_NAME);
}
});
thread.start();
sleep(2000);
Assert.assertTrue(thread.isAlive());
// run notepad
int pid = runNotepad();
Assert.assertFalse(thread.isAlive());
// close notepad
Process.close(pid);
sleep(500);
Assert.assertFalse(Process.exists(pid));
final IntHolder timeHolder = new IntHolder();
thread = new Thread(new Runnable() {
public void run() {
long start = System.currentTimeMillis();
Process.wait(NOTEPAD_PROC_NAME, 2);
long end = System.currentTimeMillis();
timeHolder.value = (int) (end - start);
}
});
thread.start();
sleep(3000);
Assert.assertFalse(thread.isAlive());
Assert.assertTrue("Assert timeHolder.value >= 2000, but actual is "
+ timeHolder.value + ".", timeHolder.value >= 2000);
Assert.assertTrue("Assert timeHolder.value <= 3000, but actual is "
+ timeHolder.value + ".", timeHolder.value <= 3000);
}
@Test
public void waitClose() {
// run notepad
int pid = Process.run(NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
sleep(500);
Assert.assertTrue(Win.active(NOTEPAD_TITLE));
final int notepadPid = pid;
Thread thread = new Thread(new Runnable() {
public void run() {
Process.waitClose(notepadPid);
}
});
thread.start();
sleep(2000);
Assert.assertTrue(thread.isAlive());
Process.close(pid);
sleep(500);
Assert.assertFalse(thread.isAlive());
// run notepad
pid = Process.run(NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
sleep(500);
Assert.assertTrue(Win.active(NOTEPAD_TITLE));
thread = new Thread(new Runnable() {
public void run() {
Process.waitClose(NOTEPAD_PROC_NAME);
}
});
thread.start();
sleep(2000);
Assert.assertTrue(thread.isAlive());
Process.close(pid);
sleep(500);
Assert.assertFalse(thread.isAlive());
// run notepad
pid = Process.run(NOTEPAD_PROC_NAME);
Assert.assertTrue(pid > 0);
sleep(500);
Assert.assertTrue(Win.active(NOTEPAD_TITLE));
long start = System.currentTimeMillis();
Process.waitClose(pid, 2);
long end = System.currentTimeMillis();
Assert.assertTrue((end - start) >= 2000);
Assert.assertTrue((end - start) <= 3000);
Assert.assertTrue(Process.exists(pid));
// close notepad
Process.close(pid);
sleep(500);
Assert.assertFalse(Process.exists(pid));
start = System.currentTimeMillis();
Process.waitClose(pid, 2);
end = System.currentTimeMillis();
Assert.assertTrue((end - start) >= 0);
Assert.assertTrue((end - start) <= 500);
}
}