Branch Coverage

blib/lib/WWW/Noss.pm
Criterion Covered Total %
branch 0 562 0.0


line true false branch
250 0 0 if (defined $rt)
271 0 0 if (defined $rt)
290 0 0 if (exists $ENV{'NOSS_DATA'}) { }
0 0 elsif (exists $ENV{'XDG_DATA_HOME'} and -d $ENV{'XDG_DATA_HOME'}) { }
0 0 elsif (-d $DOT_LOCAL) { }
308 0 0 if (exists $ENV{'NOSS_CONFIG'})
312 0 0 if (exists $ENV{'XDG_CONFIG_HOME'})
319 0 0 if -f $cf
325 0 0 if -f $cf
329 0 0 if (-d $DOT_CONFIG)
336 0 0 if -f $cf
342 0 0 if -f $cf
348 0 0 if -f $cf
358 0 0 if (exists $ENV{'NOSS_FEEDS'})
362 0 0 if (exists $ENV{'XDG_CONFIG_HOME'})
369 0 0 if -f $ff
375 0 0 if -f $ff
379 0 0 if (-d $DOT_CONFIG)
386 0 0 if -f $ff
392 0 0 if -f $ff
397 0 0 if -f $ff
410 0 0 unless open my $fh, "<", $self->{'ConfFile'}
417 0 0 unless (ref $json eq "HASH")
421 0 0 if (defined $json->{'feeds'})
422 0 0 if (not ref $json->{'feeds'}) { }
427 0 0 'File::Spec'->file_name_is_absolute($p) ? :
433 0 0 if (defined $json->{'data'})
434 0 0 if (not ref $json->{'data'}) { }
439 0 0 'File::Spec'->file_name_is_absolute($p) ? :
445 0 0 if (defined $json->{'downloads'})
446 0 0 if ($json->{'downloads'} =~ /^\d+$/u) { }
453 0 0 if (defined $json->{'pager'})
454 0 0 if (not ref $self->{'pager'}) { }
461 0 0 if (defined $json->{'browser'})
462 0 0 if (not ref $self->{'browser'}) { }
469 0 0 if (defined $json->{'limit_rate'})
470 0 0 if ($self->{'RateLimit'} =~ /$RATE_RX/u) { }
477 0 0 if (defined $json->{'user_agent'})
478 0 0 if (ref $json->{'user_agent'}) { }
485 0 0 if (defined $json->{'timeout'})
486 0 0 if ($json->{'timeout'} =~ /^\d+(\.\d+)?$/u) { }
493 0 0 if (defined $json->{'proxy'})
494 0 0 if (ref $json->{'proxy'}) { }
501 0 0 if (defined $json->{'proxy_user'})
502 0 0 if ($json->{'proxy_user'} =~ /^[^:]+:[^:]+$/u) { }
509 0 0 if (defined $json->{'sort'})
510 0 0 if (exists $VALID_SORTS{$json->{'sort'}}) { }
517 0 0 if (defined $json->{'line_width'})
518 0 0 if ($json->{'line_width'} =~ /^\d+$/u and $json->{'line_width'} > 0) { }
525 0 0 if (defined $json->{'list_format'})
526 0 0 if (ref $json->{'list_format'}) { }
533 0 0 if (defined $json->{'read_format'})
534 0 0 if (ref $json->{'read_format'}) { }
541 0 0 if (defined $json->{'post_format'})
542 0 0 if (ref $json->{'post_format'}) { }
549 0 0 if (defined $json->{'feeds_format'})
550 0 0 if (ref $json->{'feeds_format'}) { }
557 0 0 if (defined $json->{'autoclean'})
561 0 0 if (defined $json->{'time_format'})
562 0 0 if (ref $json->{'time_format'}) { }
569 0 0 if (defined $json->{'list_limit'})
570 0 0 if ($json->{'list_limit'} =~ /^-?\d+$/u) { }
577 0 0 if (defined $json->{'colors'})
578 0 0 if (ref $json->{'colors'} ne 'HASH') { }
582 0 0 unless (exists $self->{'ColorMap'}{$k})
591 0 0 if (defined $json->{'list_unread_format'})
592 0 0 if (ref $json->{'list_unread_format'}) { }
599 0 0 if (defined $json->{'colored_output'})
602 0 0 $json->{'colored_output'} ? :
623 0 0 if (defined $ref->{'limit'})
624 0 0 if ($ref->{'limit'} =~ /^\d+$/u) { }
631 0 0 if (defined $ref->{'respect_skip'})
635 0 0 if (defined $ref->{'include_title'})
636 0 0 if (ref $ref->{'include_title'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'include_title'}) { }
645 0 0 if (defined $ref->{'exclude_title'})
646 0 0 if (ref $ref->{'exclude_title'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'exclude_title'}) { }
655 0 0 if (defined $ref->{'include_content'})
656 0 0 if (ref $ref->{'include_content'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'include_content'}) { }
665 0 0 if (defined $ref->{'exclude_content'})
666 0 0 if (ref $ref->{'exclude_content'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'exclude_content'}) { }
675 0 0 if (defined $ref->{'include_tags'})
676 0 0 if (ref $ref->{'include_tags'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'include_tags'}) { }
685 0 0 if (defined $ref->{'exclude_tags'})
686 0 0 if (ref $ref->{'exclude_tags'} eq 'ARRAY') { }
0 0 elsif (not ref $ref->{'exclude_tags'}) { }
695 0 0 if (defined $ref->{'autoread'})
699 0 0 if (defined $ref->{'default_update'})
703 0 0 if (defined $ref->{'hidden'})
716 0 0 unless open my $fh, "<", $self->{'FeedFile'}
723 0 0 unless (ref $json eq "HASH")
727 0 0 unless (exists $json->{'feeds'})
735 0 0 unless (ref $feeds eq "HASH")
739 0 0 unless (ref $groups eq "HASH")
743 0 0 unless (ref $default eq "HASH")
748 0 0 unless ($k =~ /^\w+$/u)
752 0 0 if (exists $feeds->{$k})
758 0 0 unless ($k =~ /^\w+$/u)
765 0 0 if (%$default)
777 0 0 if (ref $g eq 'ARRAY') { }
0 0 elsif (ref $g ne 'HASH') { }
784 0 0 unless (ref $g->{'feeds'} eq "ARRAY")
802 0 0 if (not ref $f and defined $f) { }
0 0 elsif (ref $f ne 'HASH') { }
809 0 0 unless (exists $f->{'feed'})
814 0 0 if (ref $f->{'feed'} or not defined $f->{'feed'})
836 0 0 unless (%{$self->{'Feeds'};})
848 0 0 if ($str =~ m[^/(.*)/$]u) { }
861 0 0 unless $fmt =~ /\n$/u
867 0 0 if (defined $+{'Fmt'}) { }
870 0 0 unless (exists $codes->{$c})
877 0 0 if (not exists $colors->{$code}) { }
886 0 0 if ($colored)
908 0 0 if ($self->{'UseColor'} and -t STDERR) { }
920 0 0 if ($feed->feed =~ m[^file://]u) { }
0 0 elsif ($feed->feed =~ m[^shell://]u) { }
926 0 0 unless ("File::Spec"->file_name_is_absolute($f))
933 0 0 unless copy($f, $feed->path)
944 0 0 unless open my $fh, ">", $feed->path
952 0 0 unless chdir dirname($self->{'FeedFile'})
956 0 0 unless ($? >> 8 == 0)
957 0 0 unless chdir $cwd
965 0 0 unless chdir $cwd
985 0 0 -s $feed->etag ? :
0 0 !$self->{'Unconditional'} && -f $feed->path ? :
996 0 0 if (defined $resp and $resp->[1] eq 429)
998 0 0 if (defined $retry and $retry =~ /^\d+$/u)
1003 0 0 if ($rt != 0)
1005 0 0 if (defined $resp and $resp->[1] =~ /^[45]/u) { }
1026 0 0 if ($self->{'HardReload'})
1032 0 0 if (@{$self->{'Args'};}) { }
0 0 elsif ($self->{'NonDefaults'}) { }
1035 0 0 if (exists $self->{'Feeds'}{$arg}) { }
0 0 elsif ($self->{'Groups'}{$arg}) { }
1054 0 0 if ($self->{'NewOnly'})
1058 0 0 unless (@updates)
1068 0 0 if defined $_[5]
1072 0 0 if $pm->start
1077 0 0 if ($feed->respect_skip and not $self->{'Unconditional'} and $skip)
1083 0 0 if ($feed->respect_skip and not $self->{'Unconditional'} and not $feed->can_we_retry)
1091 0 0 -f $feed->path ? :
1095 0 0 if ($@ ne '' or not -f $feed->path) { }
1105 0 0 if ($self->{'HardReload'}) { }
1108 0 0 $changed ? :
1120 0 0 if ($self->{'HardReload'})
1126 0 0 if ($@ ne "")
1133 0 0 if $new == 0
1138 0 0 if (%feed_updates) { }
1156 0 0 if (@{$self->{'Args'};}) { }
1159 0 0 if (exists $self->{'Feeds'}{$arg}) { }
0 0 elsif (exists $self->{'Groups'}{$arg}) { }
1171 0 0 if (-f $self->{'Feeds'}{$f}->path) { }
1184 0 0 unless (@reloads)
1194 0 0 if ($self->{'HardReload'})
1200 0 0 unless (defined $new)
1203 0 0 if ($e ne '') { }
1211 0 0 if $new == 0
1216 0 0 if (%feed_updates) { }
1234 0 0 unless (defined $feed_name)
1238 0 0 unless (exists $self->{'Feeds'}{$feed_name})
1246 0 0 if (defined $id) { }
1247 0 0 unless ($id =~ /^-?\d+$/u)
1251 0 0 unless (defined $post)
1256 0 0 unless (defined $post)
1267 0 0 if $f eq "P"
1277 0 0 if ($self->{'ReadHtml'}) { }
1292 0 0 if ($self->{'Stdout'}) { }
1304 0 0 unless ($? >> 8 == 0)
1310 0 0 unless ($self->{'NoMark'})
1312 0 0 unless $self->{'DB'}->mark("read", $feed_name, $post->{'nossid'})
1326 0 0 unless (defined $feed_name)
1330 0 0 unless (exists $self->{'Feeds'}{$feed_name})
1339 0 0 if (not defined $id) { }
1341 0 0 unless (defined $feed_info)
1345 0 0 unless (defined $url)
1349 0 0 unless ($id =~ /^-?\d+$/u)
1353 0 0 unless (defined $post)
1357 0 0 unless (defined $url)
1364 0 0 unless ($? >> 8 == 0)
1368 0 0 if (defined $id and not $self->{'NoMark'})
1370 0 0 unless $self->{'DB'}->mark("read", $feed_name, $post->{'nossid'})
1394 0 0 if (@{$self->{'Args'};}) { }
0 0 elsif ($self->{'ShowHidden'}) { }
1397 0 0 if (exists $self->{'Feeds'}{$arg}) { }
0 0 elsif (exists $self->{'Groups'}{$arg}) { }
1419 0 0 defined $self->{'Title'} ? :
1422 0 0 unless (@feeds)
1431 0 0 unless (defined $fmt)
1434 0 0 unless ($self->{'UseColor'})
1441 0 0 unless (defined $fmt)
1442 0 0 if (defined $self->{'ListFmt'}) { }
1448 0 0 unless ($self->{'UseColor'})
1455 0 0 $_[0]{'status'} eq 'read' ? :
1494 0 0 unless (defined $status)
1498 0 0 unless ($status =~ /^(un)?read$/u)
1507 0 0 if (not defined $targ || $self->{'MarkAll'}) { }
0 0 elsif (defined $targ and $self->{'MarkAll'}) { }
1513 0 0 if ($self->{'MarkAll'}) { }
0 0 elsif (exists $self->{'Groups'}{$targ}) { }
0 0 elsif (exists $self->{'Feeds'}{$targ}) { }
1522 0 0 unless ($p =~ /^(?\d+)(-(?\d+))?$/u)
1551 0 0 unless (defined $feed and defined $id)
1555 0 0 unless (exists $self->{'Feeds'}{$feed})
1559 0 0 unless ($id =~ /^-?\d+$/u)
1565 0 0 unless (defined $post)
1569 0 0 unless ($self->{'UseColor'})
1591 0 0 if (@{$self->{'Args'};}) { }
1594 0 0 if (exists $self->{'Feeds'}{$a}) { }
0 0 elsif (exists $self->{'Groups'}{$a}) { }
1609 0 0 unless (@feeds)
1613 0 0 unless ($self->{'UseColor'})
1642 0 0 if (@{$self->{'Args'};}) { }
1644 0 0 if (exists $self->{'Groups'}{$a}) { }
1654 0 0 unless (@groups)
1664 0 0 unless @feeds
1668 0 0 unless ($self->{'Brief'})
1672 0 0 unless $i == $#groups
1687 0 0 unless $f =~ /\.feed$/u
1691 0 0 unless (exists $self->{'Feeds'}{$feed})
1692 0 0 unless unlink $f
1699 0 0 unless $f =~ /\.etag/u
1703 0 0 unless (exists $self->{'Feeds'}{$feed})
1704 0 0 unless unlink $f
1716 0 0 if (@clean)
1731 0 0 unless (defined $url)
1752 0 0 if ($rt != 0)
1757 0 0 unless (@feeds)
1780 0 0 if $f->feed =~ m[^(file|shell)://]u and not $self->{'ExportSpec'}
1793 0 0 if (defined $to) { }
1811 0 0 unless (defined $file)
1834 0 0 if (exists $json->{'feeds'}{$name} and $f->{'xml_url'} ne $json->{'feeds'}{$name})
1838 0 0 if (exists $groupset{$name})
1847 0 0 unless exists $groupset{$g}
1853 0 0 unless ($self->{'NoGroups'})
1861 0 0 if (defined $to) { }
1862 0 0 unless open my $fh, ">", $to
1881 0 0 unless (defined $cmd)
1896 0 0 unless (exists $COMMANDS{$cmd})
1982 0 0 if ($_[1] eq '' or $_[1] eq '1') { }
0 0 elsif ($_[1] eq '0') { }
1993 0 0 if ($_[1] eq '' or $_[1] eq '1') { }
0 0 elsif ($_[1] eq '0') { }
2050 0 0 if (not defined $self->{'Cmd'} || $_[0] =~ /^-/u) { }
2053 0 0 if ($_[0] =~ /^-\d+$/u) { }
0 0 elsif (not $_[0] =~ /^-/u) { }
2065 0 0 unless &GetOptionsFromArray(\@argv, "config|c=s", \$self->{'ConfFile'}, "data|D=s", \$self->{'DataDir'}, "feeds|f=s", \$self->{'FeedFile'}, "autoclean|A:s", sub { if ($_[1] eq "" or $_[1] eq 1) { $self->{'AutoClean'} = 1; } elsif ($_[1] eq 0) { $self->{'AutoClean'} = 0; } else { $self->{'AutoClean'} = 1; unshift @argv, $_[1]; } ; } , "time-format|z=s", \$self->{'TimeFmt'}, "color|C:s", sub { if ($_[1] eq "" or $_[1] eq 1) { $self->{'UseColor'} = 1; } elsif ($_[1] eq 0) { $self->{'UseColor'} = 0; } else { $self->{'UseColor'} = 1; unshift @argv, $_[1]; } ; } , "no-color", sub { $self->{'UseColor'} = 0; } , "new-only", \$self->{'NewOnly'}, "non-defaults", \$self->{'NonDefaults'}, "downloads=i", \$self->{'Forks'}, "unconditional", \$self->{'Unconditional'}, "limit-rate=s", \$self->{'RateLimit'}, "user-agent=s", \$self->{'UserAgent'}, "timeout=f", \$self->{'Timeout'}, "proxy=s", \$self->{'Proxy'}, "proxy-user=s", \$self->{'ProxyUser'}, "hard", \$self->{'HardReload'}, "pager=s", \$self->{'Pager'}, "no-mark", \$self->{'NoMark'}, "stdout", \$self->{'Stdout'}, "width=i", \$self->{'LineWidth'}, "read-format=s", \$self->{'ReadFmt'}, "html", \$self->{'ReadHtml'}, "browser=s", \$self->{'Browser'}, "title=s", \$self->{'Title'}, "tag=s", $self->{'Tags'}, "status=s", \$self->{'Status'}, "content=s", $self->{'Content'}, "sort=s", \$self->{'Sort'}, "reverse", \$self->{'Reverse'}, "list-limit=i", \$self->{'ListLimit'}, "hidden", \$self->{'ShowHidden'}, "list-format=s", sub { $self->{'ListFmt'} = $_[1]; $self->{'ListUnreadFmt'} = $_[1]; } , "all", \$self->{'MarkAll'}, "post-format=s", \$self->{'PostFmt'}, "brief", \$self->{'Brief'}, "feeds-format=s", \$self->{'FeedsFmt'}, "no-groups", \$self->{'NoGroups'}, "export-special", \$self->{'ExportSpec'}, "help|h", sub { _HELP(*STDOUT, 0); } , "version|v", sub { _VER(*STDOUT, 0); } , "<>", sub { if (not defined $self->{'Cmd'} || $_[0] =~ /^-/u) { $self->{'Cmd'} = $_[0]; } else { if ($_[0] =~ /^-\d+$/u) { push @{$$self{"Args"};}, $_[0]; } elsif (not $_[0] =~ /^-/u) { push @{$$self{"Args"};}, $_[0]; } else { warn "Unknown option: $_[0]\n"; _HELP(*STDERR, 1); } ; } ; } )
2069 0 0 unless (defined $self->{'Cmd'})
2073 0 0 unless (exists $COMMANDS{$self->{'Cmd'}})
2079 0 0 if ($self->{'Brief'} and $self->{'Cmd'} eq "feeds")
2083 0 0 if (defined $self->{'ConfFile'})
2089 0 0 unless (-d $self->{'DataDir'})
2091 0 0 unless mkdir $self->{'DataDir'}
2099 0 0 unless (-d $self->{'FeedDir'})
2101 0 0 unless mkdir $self->{'FeedDir'}
2107 0 0 unless (-d $self->{'EtagDir'})
2109 0 0 unless mkdir $self->{'EtagDir'}
2115 0 0 unless (-d $self->{'RetryDir'})
2116 0 0 if -f $self->{'RetryDir'}
2118 0 0 unless mkdir $self->{'RetryDir'}
2121 0 0 unless (exists $DOESNT_NEED_FEED{$self->{'Cmd'}})
2123 0 0 unless (defined $self->{'FeedFile'})
2126 0 0 unless (-f $self->{'FeedFile'})
2137 0 0 unless ($self->{'Forks'} > 0)
2151 0 0 unless ($self->{'LineWidth'} > 0)
2155 0 0 if (defined $self->{'Status'} and not $self->{'Status'} =~ /^(un)?read$/u)
2161 0 0 unless (exists $VALID_SORTS{$self->{'Sort'}})
2167 0 0 if (defined $self->{'RateLimit'} and not $self->{'RateLimit'} =~ /$RATE_RX/u)
2171 0 0 unless ($DOESNT_NEED_FEED{$self->{'Cmd'}})
2177 0 0 if (defined $self->{'TimeFmt'})
2181 0 0 unless (defined $self->{'UseColor'})
2182 0 0 if (-t STDOUT) { }
2190 0 0 if ($^O eq "MSWin32")
2194 0 0 unless (defined $self->{'Timeout'})
2208 0 0 if ($self->{'AutoClean'} and not $DOESNT_NEED_FEED{$self->{'Cmd'}})
2216 0 0 unless defined $retry
2217 0 0 if ($now >= $retry)
2218 0 0 unless unlink $f->retry_cache