code: public void assertAll() {
          if (allErrors.isEmpty()) {
              return;
          }
  
          StringBuilder sb = new StringBuilder();
          if (1 == allErrors.size()) {
              sb.append("A soft assertion failure occurred [\n");
          } else {
              sb.append("Multiple (").append(allErrors.size()).append(") soft assertion failures occurred [\n");
          }
  
          int counter = 0;
          AssertionError eachError;
          for (Entry<AssertionError, IAssert<?>> eachEntry : allErrors.entrySet()) {
              eachError = eachEntry.getKey();
              sb.append("\t")
                      .append(counter += 1)
                      .append(". ")
                      .append(ExceptionUtils.getRootCauseMessage(eachError))
                      .append("\n");
              
              if (Reporter.getCurrentTestResult() != null) {
                      // Get stacktrace up to 'at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)'
                      sb.append(StringUtils.substringBetween(ExceptionUtils.getStackTrace(eachError), "\n",
                              "\tat sun.reflect").replace("\t", "\t\t"));
              }
              else {
                  sb.append(StringUtils.substringAfter(ExceptionUtils.getStackTrace(eachError),"\n").replace("\t", "\t\t"));
              }
          }
          sb.append("\t]");
          if (Reporter.getCurrentTestResult() != null) {
              Reporter.getCurrentTestResult().setThrowable(new AssertionError(sb.toString()));
              Reporter.getCurrentTestResult().setStatus(ITestResult.FAILURE);
          } else {
              throw new AssertionError(sb.toString());
          }
      }
docs: This method should be called in order for all the soft asserts to be evaluated.
  This is also called by {@link SeLionAssertsListener#afterInvocation(org.testng.IInvokedMethod, ITestResult)}.