code: @Cmd
  	public void exceptional(final List<Class<? extends Exception>> exceptionsList, final Closure<Void> closure) {
  		boolean noExceptionOccurred = false;
  
  		try {
  			closure.call();
  			noExceptionOccurred = true;
  		} catch (final RuntimeException ex) {
  			if (exceptionsList.isEmpty()) {
  				log.info("Exception " + ex.getClass().getName() + " was thrown but not expected in exceptional block.", ex);
  			} else {
  				for (Class<? extends Exception> exceptionClass : exceptionsList) {
  					Throwable th = ex;
  					while (th != null) {
  						if (th.getClass() == exceptionClass) {
  							log.info("Expected Exception '{}' was thrown", exceptionClass.getName());
  							return;
  						}
  						th = th.getCause();
  					}
  					log.info("Expected Exception '{}' was not thrown", exceptionClass.getName());
  				}
  				log.error("None of the expected exceptions were thrown.", ex);
  				throw ex;
  			}
  		}
  
  		if (noExceptionOccurred) {
  			throw new IllegalStateException("No exception occurred within exceptional block.");
  		}
  	}
docs: Executes a {@link Closure} instance representing a block in a Groovy script and expects one
  of the specified exceptions to be thrown. If no exception is thrown, an
  {@link IllegalStateException} is thrown, any unexpected exception is re-thrown. If the list
  of excepted exceptions is empty, any thrown exception is considered a success.
  
  @param exceptionsList
  the list of exception classes
  @param closure
  the {@link Closure} representing a Groovy block