fleshing out
This commit is contained in:
		
							parent
							
								
									e0efb2872b
								
							
						
					
					
						commit
						e15b9a67de
					
				| 
						 | 
				
			
			@ -5,7 +5,7 @@ Go language (golang) cron expression parser. Given a cron expression and a time
 | 
			
		|||
 | 
			
		||||
The reference documentation for this implementation is found at
 | 
			
		||||
https://en.wikipedia.org/wiki/Cron#CRON_expression, with the following
 | 
			
		||||
difference:
 | 
			
		||||
differences:
 | 
			
		||||
 | 
			
		||||
* Supports the second field (before minute field)
 | 
			
		||||
* If five fields are present, a wildcard year field is appended
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*!
 | 
			
		||||
 * Copyright 2013 Raymond Hill
 | 
			
		||||
 *
 | 
			
		||||
 * Project: github.com/gorhill/gocronexpression
 | 
			
		||||
 * Project: github.com/gorhill/cronexpression
 | 
			
		||||
 * File: cronexpression.go
 | 
			
		||||
 * Version: 1.0
 | 
			
		||||
 * License: GPL v3 see <https://www.gnu.org/licenses/gpl.html>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
/*!
 | 
			
		||||
 * Copyright 2013 Raymond Hill
 | 
			
		||||
 *
 | 
			
		||||
 * Project: github.com/gorhill/cronexpression
 | 
			
		||||
 * File: cronexpression_test.go
 | 
			
		||||
 * Version: 1.0
 | 
			
		||||
 * License: GPL v3 see <https://www.gnu.org/licenses/gpl.html>
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package cronexpression_test
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"cronexpression"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
type crontimes struct {
 | 
			
		||||
    from string
 | 
			
		||||
    next string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type crontest struct {
 | 
			
		||||
	expr string
 | 
			
		||||
    layout string
 | 
			
		||||
    times []crontimes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var crontests = []crontest{
 | 
			
		||||
    // 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 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"},
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // 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"},
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Minutes with intervals
 | 
			
		||||
    {
 | 
			
		||||
        "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"},
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // 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:55:00", "2013-01-01 00:15:00"},
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // TODO: more tests
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCronExpressions(t *testing.T) {
 | 
			
		||||
	for _, test := range crontests {
 | 
			
		||||
        for _, times := range test.times {
 | 
			
		||||
		    from, _ := time.Parse("2006-01-02 15:04:05", times.from)
 | 
			
		||||
		    next := cronexpression.NextTimeFromCronString(test.expr, from)
 | 
			
		||||
		    if next.Format(test.layout) != times.next {
 | 
			
		||||
			    t.Errorf("(\"%s\").NextTime(\"%s\") = \"%s\", got \"%s\"", test.expr, times.from, times.next, next.Format(test.layout))
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue