docs: private Throwable getResult(FutureTask<Throwable> task, Thread thread) {
          try {
              if (timeout > 0) {
                  return task.get(timeout, timeUnit);
              } else {
                  return task.get();
              }
          } catch (InterruptedException e) {
              return e; // caller will re-throw; no need to call Thread.interrupt()
          } catch (ExecutionException e) {
              // test failed; have caller re-throw the exception thrown by the test
              return e.getCause();
          } catch (TimeoutException e) {
              return createTimeoutException(thread);
          }
      }