package org.testng;

import java.io.PrintStream;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

A SkipException extension that transforms a skipped method into a failed method based on a time trigger.

By default the time format is yyyy/MM/dd (according to SimpleDateFormat). You can customize this by using the specialized constructors. Suppported date formats are according to the SimpleDateFormat.

Since:5.6
/** * A {@link SkipException} extension that transforms a skipped method into a failed method based on * a time trigger. * * <p>By default the time format is yyyy/MM/dd (according to {@code SimpleDateFormat}). You can * customize this by using the specialized constructors. Suppported date formats are according to * the {@code SimpleDateFormat}. * * @since 5.6 */
public class TimeBombSkipException extends SkipException { private static final long serialVersionUID = -8599821478834048537L; private static final String FORMAT = "yyyy/MM/dd"; private final SimpleDateFormat sdf = new SimpleDateFormat(FORMAT); private Calendar m_expireDate; private DateFormat m_inFormat = sdf; private DateFormat m_outFormat = sdf;
Creates a TimeBombedSkipException using the expirationDate. The format used for date comparison is yyyy/MM/dd
Params:
  • msg – exception message
  • expirationDate – time limit after which the SKIP becomes a FAILURE
/** * Creates a {@code TimeBombedSkipException} using the <code>expirationDate</code>. The format used * for date comparison is <code>yyyy/MM/dd</code> * * @param msg exception message * @param expirationDate time limit after which the SKIP becomes a FAILURE */
public TimeBombSkipException(String msg, Date expirationDate) { this(msg, expirationDate, FORMAT); }
Creates a TimeBombedSkipException using the expirationDate. The format parameter wiil be used for performing the time comparison.
Params:
  • msg – exception message
  • expirationDate – time limit after which the SKIP becomes a FAILURE
  • format – format for the time comparison
/** * Creates a {@code TimeBombedSkipException} using the <code>expirationDate</code>. The * <code>format</code> parameter wiil be used for performing the time comparison. * * @param msg exception message * @param expirationDate time limit after which the SKIP becomes a FAILURE * @param format format for the time comparison */
public TimeBombSkipException(String msg, Date expirationDate, String format) { super(msg); m_inFormat = new SimpleDateFormat(format); m_outFormat = new SimpleDateFormat(format); initExpireDate(expirationDate); }
Creates a TimeBombedSkipException using the date in the format yyyy/MM/dd.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the format * <code>yyyy/MM/dd</code>. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE */
public TimeBombSkipException(String msg, String date) { super(msg); initExpireDate(date); }
Creates a TimeBombedSkipException using the date in the specified format format. The same format is used when performing the time comparison.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
  • format – format of the passed in date and of the time comparison
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the specified format * <code>format</code>. The same format is used when performing the time comparison. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE * @param format format of the passed in <code>date</code> and of the time comparison */
public TimeBombSkipException(String msg, String date, String format) { this(msg, date, format, format); }
Creates a TimeBombedSkipException using the date in the specified format inFormat. The outFormat will be used to perform the time comparison and display.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
  • inFormat – format of the passed in date
  • outFormat – format of the time comparison
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the specified format * <code>inFormat</code>. The <code>outFormat</code> will be used to perform the time comparison and * display. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE * @param inFormat format of the passed in <code>date</code> * @param outFormat format of the time comparison */
public TimeBombSkipException(String msg, String date, String inFormat, String outFormat) { super(msg); m_inFormat = new SimpleDateFormat(inFormat); m_outFormat = new SimpleDateFormat(outFormat); initExpireDate(date); }
Creates a TimeBombedSkipException using the expirationDate. The format used for date comparison is yyyy/MM/dd
Params:
  • msg – exception message
  • expirationDate – time limit after which the SKIP becomes a FAILURE
  • cause – the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
/** * Creates a {@code TimeBombedSkipException} using the <code>expirationDate</code>. The format used * for date comparison is <code>yyyy/MM/dd</code> * * @param msg exception message * @param expirationDate time limit after which the SKIP becomes a FAILURE * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). * (A <code>null</code> value is permitted, and indicates that the cause is nonexistent or * unknown.) */
public TimeBombSkipException(String msg, Date expirationDate, Throwable cause) { super(msg, cause); initExpireDate(expirationDate); }
Creates a TimeBombedSkipException using the expirationDate. The format parameter wiil be used for performing the time comparison.
Params:
  • msg – exception message
  • expirationDate – time limit after which the SKIP becomes a FAILURE
  • format – format for the time comparison
  • cause – the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
/** * Creates a {@code TimeBombedSkipException} using the <code>expirationDate</code>. The * <code>format</code> parameter wiil be used for performing the time comparison. * * @param msg exception message * @param expirationDate time limit after which the SKIP becomes a FAILURE * @param format format for the time comparison * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). * (A <code>null</code> value is permitted, and indicates that the cause is nonexistent or * unknown.) */
public TimeBombSkipException(String msg, Date expirationDate, String format, Throwable cause) { super(msg, cause); m_inFormat = new SimpleDateFormat(format); m_outFormat = new SimpleDateFormat(format); initExpireDate(expirationDate); }
Creates a TimeBombedSkipException using the date in the format yyyy/MM/dd.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
  • cause – the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the format * <code>yyyy/MM/dd</code>. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). * (A <code>null</code> value is permitted, and indicates that the cause is nonexistent or * unknown.) */
public TimeBombSkipException(String msg, String date, Throwable cause) { super(msg, cause); initExpireDate(date); }
Creates a TimeBombedSkipException using the date in the specified format format. The same format is used when performing the time comparison.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
  • format – format of the passed in date and of the time comparison
  • cause – the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the specified format * <code>format</code>. The same format is used when performing the time comparison. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE * @param format format of the passed in <code>date</code> and of the time comparison * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). * (A <code>null</code> value is permitted, and indicates that the cause is nonexistent or * unknown.) */
public TimeBombSkipException(String msg, String date, String format, Throwable cause) { this(msg, date, format, format, cause); }
Creates a TimeBombedSkipException using the date in the specified format inFormat. The outFormat will be used to perform the time comparison and display.
Params:
  • msg – exception message
  • date – time limit after which the SKIP becomes a FAILURE
  • inFormat – format of the passed in date
  • outFormat – format of the time comparison
  • cause – the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
/** * Creates a {@code TimeBombedSkipException} using the <code>date</code> in the specified format * <code>inFormat</code>. The <code>outFormat</code> will be used to perform the time comparison and * display. * * @param msg exception message * @param date time limit after which the SKIP becomes a FAILURE * @param inFormat format of the passed in <code>date</code> * @param outFormat format of the time comparison * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). * (A <code>null</code> value is permitted, and indicates that the cause is nonexistent or * unknown.) */
public TimeBombSkipException( String msg, String date, String inFormat, String outFormat, Throwable cause) { super(msg, cause); m_inFormat = new SimpleDateFormat(inFormat); m_outFormat = new SimpleDateFormat(outFormat); initExpireDate(date); } private void initExpireDate(Date expireDate) { m_expireDate = Calendar.getInstance(); m_expireDate.setTime(expireDate); } private void initExpireDate(String date) { try { Date d = m_inFormat.parse(date); initExpireDate(d); } catch (ParseException pex) { throw new TestNGException("Cannot parse date:" + date + " using pattern: " + m_inFormat, pex); } } @Override public boolean isSkip() { if (null == m_expireDate) { return false; } try { Calendar now = Calendar.getInstance(); Date nowDate = m_inFormat.parse(m_inFormat.format(now.getTime())); now.setTime(nowDate); return !now.after(m_expireDate); } catch (ParseException pex) { throw new TestNGException("Cannot compare dates."); } } @Override public String getMessage() { if (isSkip()) { return super.getMessage(); } else { return super.getMessage() + "; Test must have been enabled by: " + m_outFormat.format(m_expireDate.getTime()); } } @Override public void printStackTrace(PrintStream s) { reduceStackTrace(); super.printStackTrace(s); } @Override public void printStackTrace(PrintWriter s) { reduceStackTrace(); super.printStackTrace(s); } }