cronexpr/cronexpr_test.go

137 lines
3.5 KiB
Go
Raw Normal View History

2013-08-29 22:58:01 +00:00
/*!
* Copyright 2013 Raymond Hill
*
2013-08-31 13:00:12 +00:00
* Project: github.com/gorhill/cronexpr
* File: cronexpr_test.go
2013-08-29 22:58:01 +00:00
* Version: 1.0
* License: GPL v3 see <https://www.gnu.org/licenses/gpl.html>
*
*/
2013-08-31 13:00:12 +00:00
package cronexpr_test
2013-08-29 22:58:01 +00:00
/******************************************************************************/
import (
2013-08-31 13:00:12 +00:00
"cronexpr"
2013-08-29 22:58:01 +00:00
"testing"
"time"
)
/******************************************************************************/
type crontimes struct {
2013-08-30 15:09:36 +00:00
from string
next string
2013-08-29 22:58:01 +00:00
}
type crontest struct {
2013-08-30 15:09:36 +00:00
expr string
layout string
times []crontimes
2013-08-29 22:58:01 +00:00
}
var crontests = []crontest{
2013-08-30 15:09:36 +00:00
// Seconds
{
"* * * * * * *",
"2006-01-02 15:04:05",
[]crontimes{
{"2013-01-01 00:00:00", "2013-01-01 00:00:01"},
{"2013-01-01 00:00:59", "2013-01-01 00:01:00"},
{"2013-01-01 00:59:59", "2013-01-01 01:00:00"},
{"2013-01-01 23:59:59", "2013-01-02 00:00:00"},
{"2013-02-28 23:59:59", "2013-03-01 00:00:00"},
{"2016-02-28 23:59:59", "2016-02-29 00:00:00"},
{"2012-12-31 23:59:59", "2013-01-01 00:00:00"},
},
},
2013-08-29 22:58:01 +00:00
2013-08-30 15:09:36 +00:00
// Minutes
{
"* * * * *",
"2006-01-02 15:04:05",
[]crontimes{
{"2013-01-01 00:00:00", "2013-01-01 00:01:00"},
{"2013-01-01 00:00:59", "2013-01-01 00:01:00"},
{"2013-01-01 00:59:00", "2013-01-01 01:00:00"},
{"2013-01-01 23:59:00", "2013-01-02 00:00:00"},
{"2013-02-28 23:59:00", "2013-03-01 00:00:00"},
{"2016-02-28 23:59:00", "2016-02-29 00:00:00"},
{"2012-12-31 23:59:00", "2013-01-01 00:00:00"},
},
},
2013-08-29 22:58:01 +00:00
2013-08-30 15:09:36 +00:00
// Minutes with interval
{
"17-43/5 * * * *",
"2006-01-02 15:04:05",
[]crontimes{
{"2013-01-01 00:00:00", "2013-01-01 00:17:00"},
{"2013-01-01 00:16:59", "2013-01-01 00:17:00"},
{"2013-01-01 00:30:00", "2013-01-01 00:32:00"},
{"2013-01-01 00:50:00", "2013-01-01 01:17:00"},
{"2013-01-01 23:50:00", "2013-01-02 00:17:00"},
{"2013-02-28 23:50:00", "2013-03-01 00:17:00"},
{"2016-02-28 23:50:00", "2016-02-29 00:17:00"},
{"2012-12-31 23:50:00", "2013-01-01 00:17:00"},
},
},
2013-08-29 22:58:01 +00:00
2013-08-30 15:09:36 +00:00
// Minutes interval, list
{
"15-30/4,55 * * * *",
"2006-01-02 15:04:05",
[]crontimes{
{"2013-01-01 00:00:00", "2013-01-01 00:15:00"},
{"2013-01-01 00:16:00", "2013-01-01 00:19:00"},
{"2013-01-01 00:30:00", "2013-01-01 00:55:00"},
{"2013-01-01 00:55:00", "2013-01-01 01:15:00"},
{"2013-01-01 23:55:00", "2013-01-02 00:15:00"},
{"2013-02-28 23:55:00", "2013-03-01 00:15:00"},
{"2016-02-28 23:55:00", "2016-02-29 00:15:00"},
{"2012-12-31 23:54:00", "2012-12-31 23:55:00"},
{"2012-12-31 23:55:00", "2013-01-01 00:15:00"},
},
},
2013-08-29 22:58:01 +00:00
2013-08-30 15:09:36 +00:00
// Days of week
{
"0 0 * * MON",
"Mon 2006-01-02 15:04",
[]crontimes{
{"2013-01-01 00:00:00", "Mon 2013-01-07 00:00"},
{"2013-01-28 00:00:00", "Mon 2013-02-04 00:00"},
{"2013-12-30 00:30:00", "Mon 2014-01-06 00:00"},
},
},
2013-08-30 11:36:30 +00:00
2013-08-30 15:09:36 +00:00
// TODO: more tests
2013-08-29 22:58:01 +00:00
}
func TestExpressions(t *testing.T) {
2013-08-29 22:58:01 +00:00
for _, test := range crontests {
2013-08-30 15:09:36 +00:00
for _, times := range test.times {
from, _ := time.Parse("2006-01-02 15:04:05", times.from)
2013-08-31 13:00:12 +00:00
next := cronexpr.Parse(test.expr).Next(from)
2013-08-30 15:09:36 +00:00
nextstr := next.Format(test.layout)
if nextstr != times.next {
2013-08-31 19:05:03 +00:00
t.Errorf(`("%s").Next("%s") = "%s", got "%s"`, test.expr, times.from, times.next, nextstr)
2013-08-30 15:09:36 +00:00
}
2013-08-29 22:58:01 +00:00
}
}
}
2013-08-31 19:05:03 +00:00
func TestZero(t *testing.T) {
from, _ := time.Parse("2006-01-02", "2013-08-31")
next := cronexpr.Parse("* * * * * 1980").Next(from)
if next.IsZero() == false {
t.Error(`("* * * * * 1980").Next("2013-08-31") returned 'false', expected 'true'`)
}
next = cronexpr.Parse("* * * * * 2050").Next(from)
if next.IsZero() == true {
t.Error(`("* * * * * 2050").Next("2013-08-31") returned 'true', expected 'false'`)
}
}