← Back to team overview

sikuli-driver team mailing list archive

[Bug 1811938] [NEW] [1.1.4] App::close(): should return true if success, false in other cases --- fixed 2019-01-16 build#186

 

Public bug reported:

I am building a SikuliX automation script in Java and confused about the
expected results 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.

I cross-posted on Stackoverflow here:
https://stackoverflow.com/q/54201161/185967

** Affects: sikuli
     Importance: Critical
     Assignee: RaiMan (raimund-hocke)
         Status: Fix Committed

** Changed in: sikuli
       Status: New => Fix Committed

** Changed in: sikuli
   Importance: Undecided => Critical

** Changed in: sikuli
     Assignee: (unassigned) => RaiMan (raimund-hocke)

** Changed in: sikuli
    Milestone: None => 1.1.4

** Summary changed:

- [1.1.4] App::close(): should return true if success, false in other cases
+ [1.1.4] App::close(): should return true if success, false in other cases --- fixed 2019-01-16 build#186

-- 
You received this bug notification because you are a member of Sikuli
Drivers, which is subscribed to Sikuli.
https://bugs.launchpad.net/bugs/1811938

Title:
  [1.1.4] App::close(): should return true if success, false in other
  cases --- fixed 2019-01-16 build#186

Status in Sikuli:
  Fix Committed

Bug description:
  I am building a SikuliX automation script in Java and confused about
  the expected results 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.

  I cross-posted on Stackoverflow here:
  https://stackoverflow.com/q/54201161/185967

To manage notifications about this bug go to:
https://bugs.launchpad.net/sikuli/+bug/1811938/+subscriptions


Follow ups