Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verify if coderef is valid #9

Draft
wants to merge 11 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 7 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@ jobs:
FHEM_DIR: /opt/fhem
TEST_FILES: t/FHEM/Core/Timer/*.t
steps:
- uses: actions/checkout@master
- uses: shogo82148/actions-setup-perl@v1
- uses: actions/checkout@v2.4.0
- uses: shogo82148/actions-setup-perl@v1.14.2
with:
perl-version: ${{ matrix.perl }}
- run: |
cpanm --notest --installdeps .
cpanm --notest Devel::Cover::Report::Clover
install-modules-with: cpanm
install-modules-args: --no-interactive -v --installdeps
- name: install fhem via deb package
run: |
wget -qO - http://debian.fhem.de/archive.key | sudo apt-key add -
Expand All @@ -33,8 +32,6 @@ jobs:
sudo apt-get install fhem -y
sudo chown -R --reference=cpanfile /opt/fhem
sudo systemctl stop fhem
# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v1
- name: run prove fhem testsuite ${{ matrix.perl }}
run: |
cp -r ./lib ${FHEM_DIR}
Expand All @@ -43,7 +40,7 @@ jobs:
cp -r ./cover_db ${GITHUB_WORKSPACE}
- name: Create clover report
run: cover -report clover
- uses: codecov/codecov-action@v1
- uses: codecov/codecov-action@v2.1.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./cover_db/clover.xml
Expand All @@ -61,12 +58,12 @@ jobs:
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
- name: Checkout Repostory
uses: actions/checkout@master
uses: actions/checkout@v2.4.0
with:
fetch-depth: 0
persist-credentials: false
- name: update controls files
uses: fhem/fhem-controls-actions@master
uses: fhem/fhem-controls-actions@v2.0.3
with:
filename: controls_libtimer.txt
directory: lib/FHEM/Core/Timer
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"version":4,"vars":[{"defintion":1,"line":1,"name":"FHEM::Core::Timer::Helper","kind":2},{"name":"strict","kind":2,"containerName":"","line":2},{"name":"warnings","kind":2,"line":3,"containerName":""},{"kind":2,"name":"utf8","containerName":"","line":4},{"name":"Carp","kind":2,"containerName":"","line":5},{"containerName":"Time","line":6,"kind":2,"name":"HiRes"},{"containerName":"","line":8,"kind":2,"name":"version"},{"kind":13,"name":"$VERSION","containerName":"FHEM::Core::Timer::Helper","line":8,"defintion":"our"},{"name":"qv","kind":12,"line":8},{"kind":13,"localvar":"my","line":9,"name":"%LOT","defintion":"my","containerName":null},{"kind":2,"name":"Exporter","line":11,"containerName":""},{"defintion":"our","containerName":"FHEM::Core::Timer::Helper","line":13,"name":"@EXPORT_OK","kind":13},{"name":"addTimer","defintion":"sub","containerName":"FHEM::Core::Timer::Helper","kind":12,"range":{"end":{"character":9999,"line":32},"start":{"character":0,"line":15}},"line":15,"children":[{"name":"$defName","containerName":"addTimer","defintion":"my","kind":13,"localvar":"my","line":16},{"localvar":"my","line":17,"kind":13,"defintion":"my","containerName":"addTimer","name":"$time"},{"containerName":"addTimer","defintion":"my","name":"$func","localvar":"my","line":18,"kind":13},{"name":"$arg","defintion":"my","containerName":"addTimer","kind":13,"line":19,"localvar":"my"},{"name":"$initFlag","defintion":"my","containerName":"addTimer","kind":13,"line":20,"localvar":"my"},{"name":"%h","containerName":"addTimer","defintion":"my","kind":13,"localvar":"my","line":23},{"line":24,"containerName":"addTimer","name":"$arg","kind":13},{"containerName":"addTimer","line":25,"kind":13,"name":"$func"},{"containerName":"addTimer","line":26,"kind":13,"name":"$time"},{"kind":13,"name":"$time","containerName":"addTimer","line":30},{"kind":13,"name":"$func","line":30,"containerName":"addTimer"},{"containerName":"addTimer","line":30,"kind":13,"name":"$arg"},{"line":30,"containerName":"addTimer","kind":13,"name":"$initFlag"},{"kind":13,"name":"$LOT","containerName":"addTimer","line":32},{"name":"$defName","kind":13,"containerName":"addTimer","line":32}]},{"name":"carp","kind":12,"line":16},{"line":17,"kind":12,"name":"carp"},{"name":"carp","kind":12,"line":18},{"line":24,"kind":12,"name":"arg"},{"line":25,"name":"func","kind":12},{"line":26,"kind":12,"name":"calltime"},{"line":30,"containerName":"","name":"InternalTimer","kind":12},{"name":"%h","kind":13,"line":32,"containerName":null},{"name":"removeTimer","defintion":"sub","containerName":"FHEM::Core::Timer::Helper","kind":12,"children":[{"containerName":"removeTimer","defintion":"my","name":"$defName","localvar":"my","line":37,"kind":13},{"line":38,"localvar":"my","kind":13,"containerName":"removeTimer","defintion":"my","name":"$func"},{"kind":13,"localvar":"my","line":39,"name":"$arg","defintion":"my","containerName":"removeTimer"},{"kind":13,"name":"$LOT","line":41,"containerName":"removeTimer"},{"containerName":"removeTimer","line":41,"name":"$defName","kind":13},{"line":43,"localvar":"my","kind":13,"defintion":"my","containerName":"removeTimer","name":"$numRemoved"},{"containerName":"removeTimer","defintion":"my","name":"$index","line":44,"localvar":"my","kind":13},{"kind":13,"name":"$LOT","line":44,"containerName":"removeTimer"},{"containerName":"removeTimer","line":44,"name":"$defName","kind":13}],"range":{"end":{"character":9999,"line":44},"start":{"line":36,"character":0}},"line":36},{"line":37,"kind":12,"name":"carp"},{"containerName":null,"line":45,"kind":13,"name":"%LOT"},{"line":45,"containerName":null,"kind":13,"name":"@defName"},{"line":45,"containerName":null,"name":"$index","kind":13},{"kind":13,"name":"%LOT","containerName":null,"line":45},{"containerName":null,"line":45,"name":"@defName","kind":13},{"kind":13,"name":"%index","line":45,"containerName":null},{"line":45,"kind":12,"name":"func"},{"kind":13,"name":"$func","containerName":null,"line":46},{"name":"%LOT","kind":13,"containerName":null,"line":46},{"name":"@defName","kind":13,"containerName":null,"line":46},{"name":"%index","kind":13,"containerName":null,"line":46},{"name":"func","kind":12,"line":46},{"line":46,"containerName":null,"name":"$func","kind":13},{"kind":13,"name":"$arg","line":47,"containerName":null},{"name":"%LOT","kind":13,"containerName":null,"line":47},{"kind":13,"name":"@defName","line":47,"containerName":null},{"name":"%index","kind":13,"line":47,"containerName":null},{"kind":12,"name":"arg","line":47},{"line":47,"containerName":null,"kind":13,"name":"%arg"},{"name":"RemoveInternalTimer","kind":12,"line":49,"containerName":""},{"name":"%LOT","kind":13,"line":49,"containerName":null},{"containerName":null,"line":49,"name":"@defName","kind":13},{"containerName":null,"line":49,"kind":13,"name":"%index"},{"line":49,"kind":12,"name":"arg"},{"kind":13,"name":"%LOT","line":49,"containerName":null},{"kind":13,"name":"@defName","containerName":null,"line":49},{"line":49,"containerName":null,"name":"%index","kind":13},{"name":"func","kind":12,"line":49},{"containerName":null,"line":50,"name":"%LOT","kind":13},{"line":50,"containerName":null,"kind":13,"name":"@defName"},{"containerName":null,"line":50,"name":"$index","kind":13},{"name":"$numRemoved","kind":13,"containerName":null,"line":51},{"containerName":null,"line":54,"name":"$numRemoved","kind":13},{"kind":12,"range":{"start":{"character":0,"line":58},"end":{"line":64,"character":9999}},"children":[{"name":"$defName","containerName":"optimizeLOT","defintion":"my","kind":13,"localvar":"my","line":60},{"containerName":"optimizeLOT","line":61,"kind":13,"name":"$LOT"},{"line":61,"containerName":"optimizeLOT","name":"$defName","kind":13},{"line":63,"localvar":"my","kind":13,"defintion":"my","containerName":"optimizeLOT","name":"$now"},{"containerName":"optimizeLOT","line":64,"kind":13,"name":"$LOT"},{"kind":13,"name":"$defName","containerName":"optimizeLOT","line":64}],"line":58,"name":"optimizeLOT","containerName":"FHEM::Core::Timer::Helper","defintion":"sub"},{"line":60,"kind":12,"name":"carp"},{"containerName":"","line":63,"kind":12,"name":"gettimeofday"},{"line":64,"kind":12,"name":"calltime"},{"kind":13,"name":"$now","containerName":null,"line":64},{"name":"%LOT","kind":13,"line":64,"containerName":null},{"kind":13,"name":"$defName","containerName":null,"line":64},{"name":"%LOT","kind":13,"containerName":null,"line":66},{"name":"$defName","kind":13,"line":66,"containerName":null}]}
3 changes: 3 additions & 0 deletions CHANGED
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
2022-03-01 - cpanfile

update package
2020-06-11 - Dir change (#2)

Change namespace to FHEM::Core::Timer::Helper
Expand Down
2 changes: 1 addition & 1 deletion controls_libtimer.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPD 2020-06-12_01:05:22 1651 lib/FHEM/Core/Timer/Helper.pm
UPD 2022-03-01_21:58:44 1766 lib/FHEM/Core/Timer/Helper.pm
2 changes: 1 addition & 1 deletion cpanfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
requires 'Test2::Suite';
requires 'Devel::Cover';
requires 'Devel::Cover::Report::Coveralls';
requires 'Devel::Cover::Report::Clover';
6 changes: 5 additions & 1 deletion lib/FHEM/Core/Timer/Helper.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@ our @EXPORT_OK = qw(addTimer removeTimer optimizeLOT);
sub addTimer {
my $defName = shift // carp 'No definition name' && return;
my $time = shift // carp q[No time specified] && return;
my $func = shift // carp q[No function specified] && return;
my $func = shift // carp q[No function specified] && return;
my $arg = shift // q{};
my $initFlag = shift // 0;

if (! defined &{$func}) {
carp qq[coderef for Name: "$defName" with arg:"$arg" does not exists] ;
return;
}

my %h = (
arg => $arg,
Expand Down
23 changes: 14 additions & 9 deletions t/FHEM/Core/Timer/00_func.t
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use Test2::Tools::Compare qw{is};


use FHEM::Core::Timer::Helper qw(addTimer removeTimer);
use Time::HiRes;
use Time::HiRes qw( gettimeofday );


sub timerCallback
Expand All @@ -27,9 +27,9 @@ sub timerCallback2
my $count;

subtest 'Add two timers ' => sub {
$count = addTimer('myName',gettimeofday+2,\&timerCallback,'addTimer test',0);
$count = addTimer('myName',gettimeofday()+2,\&timerCallback,'addTimer test',0);
is ($count,1,'addtimer returned one');
$count = addTimer('myName',gettimeofday+1,\&timerCallback2,'remove timer test',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback2,'remove timer test',0);
is ($count,2,'addtimer returned two');
};

Expand All @@ -39,27 +39,32 @@ subtest 'Remove all timers for myName' => sub {
};

subtest 'add Timer for myName to end test in 2 secs' => sub {
is(addTimer('myName',gettimeofday+2,\&timerCallback,'timer called test',0),1,'one timer in list');
is(addTimer('myName',gettimeofday()+2,\&timerCallback,'timer called test',0),1,'one timer in list');
};


subtest 'add and remove timer by callback func' => sub {
$count = addTimer('myName',gettimeofday+1,\&timerCallback2,'addTimer test',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback2,'addTimer test',0);
is ($count,2,'addtimer returned two');
is(removeTimer('myName',\&timerCallback2),1,'check number of removed timers');
};

subtest 'add timer with undef coderef (func)' => sub {
$count = addTimer('myName',gettimeofday()+1,\&not_there,'addTimer not_there',0);
is ($count,U(),'addtimer returned undef');
is(removeTimer('myName',\&not_there),0,q[check timer can't be removed]);
};

subtest 'add and remove timer by arg' => sub {
$count = addTimer('myName',gettimeofday+1,\&timerCallback2,'addTimer test',0);
$count = addTimer('myName',gettimeofday+1,\&timerCallback,'addTimer test',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback2,'addTimer test',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback,'addTimer test',0);
is ($count,3,'addtimer returned three');
is(removeTimer('myName',undef,'addTimer test'),2,'check both added timers with arg are removed');
};

subtest 'add and remove timer by callback func and arg' => sub {
$count = addTimer('myName',gettimeofday+1,\&timerCallback2,'addTimer test',0);
$count = addTimer('myName',gettimeofday+1,\&timerCallback2,'other arg',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback2,'addTimer test',0);
$count = addTimer('myName',gettimeofday()+1,\&timerCallback2,'other arg',0);
is ($count,3,'addtimer returned three');
is(removeTimer('myName',\&timerCallback2,'addTimer test'),1,'check only one timer removed');
is(removeTimer('myName',\&timerCallback2,'other arg'),1,'check only one timer removed');
Expand Down