// Copyright � 2002-2005 Canoo Engineering AG, Switzerland. package com.canoo.webtest.engine; import org.apache.tools.ant.BuildException; import com.canoo.webtest.steps.Step; public final class StepFailedException extends WebTestException { public StepFailedException(String message) { super(message, (Exception) null); } public StepFailedException(final String message, final String expectedValue, final String actualValue, final Step failedStep) { super(message, ". Expected value \"" + expectedValue + "\" but got \"" + actualValue + "\"", failedStep); addDetail("expected value", expectedValue); addDetail("actual value", actualValue); } public StepFailedException(final String message, final int expectedValue, final int actualValue) { this(message, String.valueOf(expectedValue), String.valueOf(actualValue)); } public StepFailedException(final String message, final String expectedValue, final String actualValue) { this(message, expectedValue, actualValue, null); } public StepFailedException(final String message, final Step failedStep) { super(message, failedStep); } public StepFailedException(final String message, final Exception cause) { super(message, cause); } /** * Indicates if the provided exception is caused by a {@link StepFailedException}. * Even if {@link StepFailedException} extends {@link BuildException} in some cases * (for instance failed macro) the original {@link StepFailedException} is wrapped * within a {@link BuildException}. * @param e the exception to analyze * @return <code>true</code> if the cause is a {@link StepFailedException} */ public static boolean isCausedByStepFailedException(final Throwable e) { Throwable cause = e; while (cause != null) { if (cause instanceof StepFailedException) return true; cause = cause.getCause(); } return false; } }