File Coverage

blib/lib/XXX.pm
Criterion Covered Total %
statement 53 79 67.0
branch 17 44 38.6
condition 2 17 11.7
subroutine 11 14 78.5
pod 4 4 100.0
total 87 158 55.0


line stmt bran cond sub pod time code
1 4     4   159783 use strict; use warnings;
  4     4   24  
  4         162  
  4         22  
  4         7  
  4         207  
2             package XXX;
3             our $VERSION = '0.36';
4 4     4   23 use base 'Exporter';
  4         7  
  4         2204  
5              
6             our @EXPORT = qw( WWW XXX YYY ZZZ );
7              
8             our $DumpModule = 'YAML::PP';
9              
10             if ($ENV{PERL_XXX_DUMPER}) {
11             _set_dump_module($ENV{PERL_XXX_DUMPER});
12             }
13              
14             sub import {
15 3     3   26 my ($package, @args) = @_;
16 3         15 for (my $i = 0; $i < @args; $i++) {
17 1         3 my $arg = $args[$i];
18 1 50       4 if ($arg eq '-with') {
19 1 50       5 die "-with requires another argument"
20             unless $i++ < @args;
21 1         3 _set_dump_module($args[ $i ]);
22             }
23             else {
24 0         0 next;
25             }
26 1         4 last;
27             }
28 3 50       13 if (grep /^-?global$/, @args) {
29 0         0 *main::WWW = \&WWW;
30 0         0 *main::XXX = \&XXX;
31 0         0 *main::YYY = \&YYY;
32 0         0 *main::ZZZ = \&ZZZ;
33             }
34 3         8 @_ = ($package);
35 3         3382 goto &Exporter::import;
36             }
37              
38             sub _set_dump_module {
39 1     1   3 my ($module) = @_;
40 1         2 $DumpModule = $module;
41 1 50       16 die "Don't know how to use XXX -with '$DumpModule'"
42             unless $DumpModule =~ /^(
43             (?:YAML|JSON)(?:::.*)?|
44             Data::Dumper|
45             Data::Dump(?:::Color)?
46             )$/x;
47             }
48              
49             sub _xxx_dump {
50 4     4   48 no strict 'refs';
  4         7  
  4         137  
51 4     4   20 no warnings;
  4         7  
  4         1674  
52 3   50 3   12 $DumpModule ||= 'YAML::PP';
53 3 0       23 my $dump_type =
    0          
    50          
    50          
    100          
54             (substr($DumpModule, 0, 4) eq 'YAML') ? 'yaml' :
55             (substr($DumpModule, 0, 4) eq 'JSON') ? 'json' :
56             ($DumpModule eq 'Data::Dumper') ? 'dumper' :
57             ($DumpModule eq 'Data::Dump') ? 'dump' :
58             ($DumpModule eq 'Data::Dump::Color') ? 'dumpcolor' :
59             die 'Invalid dump module in $DumpModule';
60 3 100       4 if (not defined ${"$DumpModule\::VERSION"}) {
  3         15  
61 2 50       144 eval "require $DumpModule; 1" or die $@;
62             }
63 3 100       24 if ($DumpModule eq 'YAML::PP') {
64 2         46 return YAML::PP->new(schema => ['Core', 'Perl'])->dump_string(@_) . "...\n";
65             }
66 1 50       5 if ($dump_type eq 'yaml') {
67 0         0 return &{"$DumpModule\::Dump"}(@_) . "...\n";
  0         0  
68             }
69 1 50       4 if ($dump_type eq 'json') {
70 0         0 return &{"$DumpModule\::encode_json"}(@_);
  0         0  
71             }
72 1 50       3 if ($dump_type eq 'dumper') {
73 1         3 local $Data::Dumper::Sortkeys = 1;
74 1         2 local $Data::Dumper::Indent = 2;
75 1         5 return Data::Dumper::Dumper(@_);
76             }
77 0 0       0 if ($dump_type eq 'dump') {
78 0         0 return Data::Dump::dump(@_) . "\n";
79             }
80 0 0       0 if ($dump_type eq 'dumpcolor') {
81 0         0 return Data::Dump::Color::dump(@_) . "\n";
82             }
83 0         0 die "XXX had an internal error";
84             }
85              
86             sub _at_line_number {
87 3     3   21439 my ($file_path, $line_number);
88 3         9 my $caller = 0;
89 3         12 while (++$caller) {
90 4     4   31 no strict 'refs';
  4         7  
  4         1594  
91 3         51 my $skipper = (caller($caller))[0] . "::XXX_skip";
92 3 50 33     35 next if defined &$skipper and &$skipper();
93 3         15 ($file_path, $line_number) = (caller($caller))[1,2];
94 3         8 last;
95             }
96 3         25 " at $file_path line $line_number\n";
97             }
98              
99             sub WWW {
100 0     0 1 0 my $dump = _xxx_dump(@_) . _at_line_number();
101 0 0 0     0 if (defined &main::diag and
      0        
102             defined &Test::More::diag and
103             \&main::diag eq \&Test::More::diag
104             ) {
105 0         0 main::diag($dump);
106             }
107             else {
108 0         0 warn($dump);
109             }
110 0 0       0 return wantarray ? @_ : $_[0];
111             }
112              
113             sub XXX {
114 3     3 1 991 die _xxx_dump(@_) . _at_line_number();
115             }
116              
117             sub YYY {
118 0     0 1   my $dump = _xxx_dump(@_) . _at_line_number();
119 0 0 0       if (defined &main::note and
      0        
120             defined &Test::More::note and
121             \&main::note eq \&Test::More::note
122             ) {
123 0           main::note($dump);
124             }
125             else {
126 0           print($dump);
127             }
128 0 0         return wantarray ? @_ : $_[0];
129             }
130              
131             sub ZZZ {
132 0     0 1   require Carp;
133 0           Carp::confess(_xxx_dump(@_));
134             }
135              
136             1;