From aa03c8244f96a7aab3b6bba95e97f07861964161 Mon Sep 17 00:00:00 2001 From: herrmannj <> Date: Tue, 22 Aug 2023 23:46:51 +0000 Subject: [PATCH] Cron.pm: wip git-svn-id: https://svn.fhem.de/fhem/trunk@27877 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/t/FHEM/90_Cron/10_Cronlib.t | 46 +++++++++++------------- fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.cfg | 0 fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.t | 35 ++++++++++++++++++ 3 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.cfg create mode 100644 fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.t diff --git a/fhem/t/FHEM/90_Cron/10_Cronlib.t b/fhem/t/FHEM/90_Cron/10_Cronlib.t index 9efc14546..ded9809c5 100644 --- a/fhem/t/FHEM/90_Cron/10_Cronlib.t +++ b/fhem/t/FHEM/90_Cron/10_Cronlib.t @@ -1,31 +1,30 @@ # perl fhem.pl -t t/FHEM/90_Cron/10_Cronlib.t +use v5.14; use strict; use warnings; use Test::More; use FHEM::Scheduler::Cron; -$ENV{EXTENDED_DEBUG} = 1; +$ENV{EXTENDED_DEBUG} = 0; # syntax of list -# description of test | cron expr | from | next, (more next.., ..) | err expected (regex) | +# description of test | cron expr | err expected (regex) | from | next (more next.., ..) my $test = [ - #['must throw an error if no cron text given', '', 0, 0, qr(no cron expression)], - #['must throw an error if cron expression exceeds 255 chars', q(0) x 256, 0, 0, qr(cron expression exceeds limit)], - - # [q(accept '$cron_text'), '* * * * *', 0, 0, qr(^$)], + ['must throw an error if no cron text given', '', qr(no cron expression), 20230101000000 ], + ['must throw an error if cron expression exceeds 255 chars', q(0) x 256, qr(cron expression exceeds limit), 20230101000000 ], + [q(accept '$cron_text'), '* * * * *', qr(^$), 20230101000000, 20230101000100 ], # [q(precedence mday '$cron_text'), '* * 1 * *', 0, 0, qr(^$)], # [q(precedence wday '$cron_text'), '* * * * 2', 0, 0, qr(^$)], # [q(mday OR wday logic '$cron_text'), '* * 1 * 2', 0, 0, qr(^$)], - [q(mday AND wday logic '$cron_text'), '5/5 10 * * *', 20230101120000, 20230101000000, qr(^$)], + # [q(mday AND wday logic '$cron_text'), '5/5 10 * * *', 20230101105500, 20230102100500, 20230102101000, 20230102101500, qr(^$)], # [q(RULE4 logic '$cron_text'), '* * * * 1,&2', 0, 0, qr(^$)], # [q(validate date '$cron_text'), '* * 30 2 *', 0, 0, qr(^$)], -]; # # positive tests for minute -# [q(accept '$cron_text'), '* * * * *', 0, 0, qr(^$)], -# [q(accept '$cron_text'), '1 * * * *', 0, 0, qr(^$)], + [q(accept '$cron_text'), '* * * * *', qr(^$), 20230101000000, 20230101000100], + [q(accept '$cron_text'), '1 * * * *', qr(^$), 20230101000000, 20230101000100], # [q(accept '$cron_text'), '1-5 * * * *', 0, 0, qr(^$)], # [q(accept '$cron_text'), '1-5/1 * * * *', 0, 0, qr(^$)], # [q(accept '$cron_text'), '*/1 * * * *', 0, 0, qr(^$)], @@ -52,7 +51,7 @@ my $test = [ # [q(must throw an error '$cron_text'), '0-59/60 * * * *', 0, 0, qr(^syntax error in minute item:)], # [q(must throw an error '$cron_text'), '20~10 * * * *', 0, 0, qr(^syntax error in minute item:)], # # negative tests for minute / value range -# ]; +]; # print join ",", (20200101120000 .. 20200101120010 ), (20200101120100 .. 20200101120110 ); # print "\n"; @@ -61,24 +60,19 @@ my $test = [ # ok($cron_lib_loadable, "FHEM::Scheduler::Cron loaded"); foreach my $test (@$test) { - my ($desc, $cron_text, $from, $next, $err_expected) = @$test; - # print "$desc, $cron_text, $from, $next, $err_expected \n"; - my $cron_obj = FHEM::Scheduler::Cron->new($cron_text); - my $err = $cron_obj->{error} // ''; - + my ($desc, $cron_text, $err_expected, @series) = @$test; + my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text); my $ok = 1; - my @r = split(',', $next); - for my $iter (0 .. $#r) { - next unless ($r[$iter]); - # next; - print "iteration $iter $#r "; - print "$r[$iter]\n"; - $cron_obj->next($r[$iter]); - #print "\n"; + + for my $iter (0 .. $#series -1) { + # next unless ($series[$iter]); + my $got = $cron_obj->next($series[$iter]); + $ok = 0 if ($got ne $series[$iter +1]); + say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG}; } - $ok &&= ($err =~ /$err_expected/); + $ok &&= ($err // '' =~ /$err_expected/); ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":'')); -} +}; done_testing; exit(0); diff --git a/fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.cfg b/fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.cfg new file mode 100644 index 000000000..e69de29bb diff --git a/fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.t b/fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.t new file mode 100644 index 000000000..4f0b634f2 --- /dev/null +++ b/fhem/t/FHEM/90_Cron/99_Cronlib_DEBUG.t @@ -0,0 +1,35 @@ +# perl fhem.pl -t t/FHEM/90_Cron/99_Cronlib_DEBUG.t +use v5.14; + +use strict; +use warnings; +use Test::More; +use FHEM::Scheduler::Cron; + +$ENV{EXTENDED_DEBUG} = 1; + +# syntax of list +# description of test | cron expr | err expected (regex) | from | next (more next.., ..) + +my $test = [ + #[q(Timeseries '$cron_text'), '0 12 3,4,5 2 0,2,3,4', qr(^$), 20230102150000, 20230201120000, 20230202120000, 20230203120000, 20230204120000], + [q(Timeseries '$cron_text'), '0 12 29 2 &7', qr(^$), 20230102150000, 20320229120000], +]; + +foreach my $test (@$test) { + my ($desc, $cron_text, $err_expected, @series) = @$test; + my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text); + my $ok = 1; + + for my $iter (0 .. $#series -1) { + # next unless ($series[$iter]); + my $got = $cron_obj->next($series[$iter]); + $ok = 0 if ($got ne $series[$iter +1]); + say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG}; + } + $ok &&= ($err // '' =~ /$err_expected/); + ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":'')); +}; + +done_testing; +exit(0);