All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.testng.TimeBombSkipException Maven / Gradle / Ivy

There is a newer version: 7.10.1
Show newest version
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 {@link 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 {@code SimpleDateFormat}). * You can customize this by using the specialized constructors. Suppported date * formats are according to the {@code SimpleDateFormat}. * * @author Alex Popescu * @since 5.6 */ public class TimeBombSkipException extends SkipException { private static final long serialVersionUID = -8599821478834048537L; private static final SimpleDateFormat SDF= new SimpleDateFormat("yyyy/MM/dd"); private Calendar m_expireDate; private DateFormat m_inFormat= SDF; private DateFormat m_outFormat= SDF; /** * Creates a {@code TimeBombedSkipException} using the expirationDate. * The format used for date comparison is yyyy/MM/dd * @param msg exception message * @param expirationDate time limit after which the SKIP becomes a FAILURE */ public TimeBombSkipException(String msg, Date expirationDate) { super(msg); initExpireDate(expirationDate); } /** * Creates a {@code TimeBombedSkipException} using the expirationDate. * The format 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 {@code TimeBombedSkipException} using the date * in the format yyyy/MM/dd. * @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 {@code TimeBombedSkipException} using the date * in the specified format format. 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 date and of the time comparison */ public TimeBombSkipException(String msg, String date, String format) { this(msg, date, format, format); } /** * Creates a {@code TimeBombedSkipException} using the date * in the specified format inFormat. The outFormat 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 date * @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 {@code TimeBombedSkipException} using the expirationDate. * The format used for date comparison is yyyy/MM/dd * @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 null 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 {@code TimeBombedSkipException} using the expirationDate. * The format 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 null 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 {@code TimeBombedSkipException} using the date * in the format yyyy/MM/dd. * @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 null 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 {@code TimeBombedSkipException} using the date * in the specified format format. 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 date and of the time comparison * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). (A null 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 {@code TimeBombedSkipException} using the date * in the specified format inFormat. The outFormat 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 date * @param outFormat format of the time comparison * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). (A null 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 { // SimpleDateFormat is not thread-safe, and m_inFormat // is, by default, connected to the static SDF variable synchronized( m_inFormat ){ 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); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy