public class TimeCrontabUnitTests
{
[Theory]
[InlineData("* * * * *", "* * * * *", CronStringFormat.Default)]
[InlineData("0 0 31W * *", "0 0 31W * *", CronStringFormat.Default)]
[InlineData("0 23 ? * MON-FRI", "0 23 ? * 1-5", CronStringFormat.Default)]
[InlineData("*/5 * * * *", "*/5 * * * *", CronStringFormat.Default)]
[InlineData("30 11 * * 1-5", "30 11 * * 1-5", CronStringFormat.Default)]
[InlineData("23 12 * JAN *", "23 12 * 1 *", CronStringFormat.Default)]
[InlineData("* * * * MON#3", "* * * * 1#3", CronStringFormat.Default)]
[InlineData("*/5 * L JAN *", "*/5 * L 1 *", CronStringFormat.Default)]
[InlineData("0 0 ? 1 MON#1", "0 0 ? 1 1#1", CronStringFormat.Default)]
[InlineData("0 0 LW * *", "0 0 LW * *", CronStringFormat.Default)]
[InlineData("0 30 10-13 ? * WED,FRI", "0 30 10-13 ? * 3,5", CronStringFormat.WithSeconds)]
[InlineData("0 */5 * * * *", "0 */5 * * * *", CronStringFormat.WithSeconds)]
[InlineData("0 0/1 * * * ?", "0 */1 * * * ?", CronStringFormat.WithSeconds)]
[InlineData("5-10 30-35 10-12 * * *", "5-10 30-35 10-12 * * *", CronStringFormat.WithSeconds)]
public void TestParse(string expression, string outputString, CronStringFormat format)
{
var output = Crontab.Parse(expression, format).ToString();
Assert.Equal(outputString, output);
}
[Theory]
[InlineData("* * * * *", "2022-01-01 00:01:00", CronStringFormat.Default)]
[InlineData("0 0 31W * *", "2022-01-31 00:00:00", CronStringFormat.Default)]
[InlineData("0 23 ? * MON-FRI", "2022-01-03 23:00:00", CronStringFormat.Default)]
[InlineData("*/5 * * * *", "2022-01-01 00:05:00", CronStringFormat.Default)]
[InlineData("30 11 * * 1-5", "2022-01-03 11:30:00", CronStringFormat.Default)]
[InlineData("23 12 * JAN *", "2022-01-01 12:23:00", CronStringFormat.Default)]
[InlineData("* * * * MON#3", "2022-01-17 00:00:00", CronStringFormat.Default)]
[InlineData("*/5 * L JAN *", "2022-01-31 00:00:00", CronStringFormat.Default)]
[InlineData("0 0 ? 1 MON#1", "2022-01-03 00:00:00", CronStringFormat.Default)]
[InlineData("0 0 LW * *", "2022-01-31 00:00:00", CronStringFormat.Default)]
[InlineData("0 30 10-13 ? * WED,FRI", "2022-01-05 10:30:00", CronStringFormat.WithSeconds)]
[InlineData("0 */5 * * * *", "2022-01-01 00:05:00", CronStringFormat.WithSeconds)]
[InlineData("0 0/1 * * * ?", "2022-01-01 00:01:00", CronStringFormat.WithSeconds)]
[InlineData("5-10 30-35 10-12 * * *", "2022-01-01 10:30:05", CronStringFormat.WithSeconds)]
public void TestGetNextOccurence(string expression, string nextOccurenceString, CronStringFormat format)
{
var beginTime = new DateTime(2022, 1, 1, 0, 0, 0);
var crontab = Crontab.Parse(expression, format);
var nextOccurence = crontab.GetNextOccurrence(beginTime);
Assert.Equal(nextOccurenceString, nextOccurence.ToString("yyyy-MM-dd HH🇲🇲ss"));
}
}