I am building a SikuliX automation script in Java and confused about the behavior of the .close()
method.
Inside of Sikuli's App
class, the close method is as follows:
/**
* tries to close the app defined by this App instance, waits max given seconds for the app to no longer be running
*
* @return this or null on failure
*/
public boolean close(int waitTime) {
if (!isRunning()) {
log("App.close: not running: %s", this);
return false;
}
if (_osUtil.close(this)) {
int timeTowait = maxWait;
if (waitTime > 0) {
timeTowait = waitTime;
}
while (isRunning(0) && timeTowait > 0) {
timeTowait--;
}
}
if (!isValid()) {
log("App.close: %s", this);
} else {
log("App.close: did not work: %s", this);
return true;
}
return false;
}
The part in question for me is the return. My understanding is that, since it returns a boolean, it would be true if the close was a success, and false if the close failed. However, this code does the opposite. Based on my flawed(?) understanding of this logic, I initially wrote my code like so,
if (myApp.close()) {
System.out.println("closed.");
isAppClosed = true;
} else {
System.out.println("NOT closed!");
isAppClosed = false;
}
This is having the opposite result of what I want, as the application is successfully closing, BUT the test is failing because "NOT closed" is being printed.
Have I found a bug, or am I missing something?
Thanks.
Turns out it was a bug. The maintainer of the project has patched the issue in the lastest build of 1.1.4. https://bugs.launchpad.net/sikuli/+bug/1811938