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 <tt>expirationDate</tt>.
* The format used for date comparison is <tt>yyyy/MM/dd</tt>
* @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 <tt>expirationDate</tt>.
* The <tt>format</tt> 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 <tt>date</tt>
* in the format <tt>yyyy/MM/dd</tt>.
* @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 <tt>date</tt>
* in the specified format <tt>format</tt>. 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 <tt>date</tt> 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 <tt>date</tt>
* in the specified format <tt>inFormat</tt>. The <tt>outFormat</tt> 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 <tt>date</tt>
* @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 <tt>expirationDate</tt>.
* The format used for date comparison is <tt>yyyy/MM/dd</tt>
* @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 <tt>null</tt> 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 <tt>expirationDate</tt>.
* The <tt>format</tt> 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 <tt>null</tt> 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 <tt>date</tt>
* in the format <tt>yyyy/MM/dd</tt>.
* @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 <tt>null</tt> 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 <tt>date</tt>
* in the specified format <tt>format</tt>. 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 <tt>date</tt> and of the time comparison
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> 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 <tt>date</tt>
* in the specified format <tt>inFormat</tt>. The <tt>outFormat</tt> 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 <tt>date</tt>
* @param outFormat format of the time comparison
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> 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);
}
}