Exclude holidays token implemented.

This commit is contained in:
vincent 2016-01-04 16:06:47 +01:00
parent 48a21eded6
commit 30cf21b5f4
5 changed files with 67 additions and 2 deletions

@ -140,7 +140,8 @@ _parseNode(QString & str)
}
else if ('f' == c)
{
str.remove(0, 1);
node = new QCronNotHolidayNode();
}
}
if (NULL == node)

@ -335,7 +335,6 @@ QCronHolidayNode::
next(int t) const
{
Q_UNUSED(t)
//return Holiday::next(t);
return -1;
}
@ -374,3 +373,43 @@ match(const QDateTime & dt) const
/******************************************************************************/
/******************************************************************************/
int
QCronNotHolidayNode::
next(int t) const
{
Q_UNUSED(t)
return -1;
}
/******************************************************************************/
void
QCronNotHolidayNode::
process(QCron * cron,
QDateTime & dt,
EField field)
{
Q_UNUSED(cron);
if (DOM != field)
{
qFatal("Should not be in a NotHoliday node.");
}
if (Holiday::isHoliday(dt.date()))
{
dt = dt.addDays(1);
dt.setTime(QTime(0, 0, 0));
}
}
/******************************************************************************/
bool
QCronNotHolidayNode::
match(const QDateTime & dt) const
{
return !Holiday::isHoliday(dt.date());
}
/******************************************************************************/
/******************************************************************************/

@ -151,4 +151,18 @@ public:
/******************************************************************************/
class QCronNotHolidayNode : public QCronNode
{
public:
virtual int next(int t) const;
virtual bool match(const QDateTime & dt) const;
virtual void process(QCron * cron,
QDateTime & dt,
EField field);
};
/******************************************************************************/
#endif

@ -376,8 +376,18 @@ holidays()
QCOMPARE(actual(pattern), now().addSecs(3600 * 2));
_tnow.setHMS(23, 59, 59);
QCOMPARE(actual(pattern), QDateTime(QDate(2017, 1, 1), QTime(2, 0, 0)));
}
/******************************************************************************/
void
QCronTest::
excludeHolidays()
{
QString pattern = "* 2 f * * *";
_dnow.setDate(2016, 12, 24);
_tnow.setHMS(3, 0, 0);
QCOMPARE(actual(pattern), QDateTime(QDate(2016, 12, 26), QTime(2, 0, 0)));
}
/******************************************************************************/

@ -16,6 +16,7 @@ private slots:
void minutes();
void realLife();
void holidays();
void excludeHolidays();
private:
QDate _dnow;