File Coverage

blib/lib/XXX.pm
Criterion Covered Total %
statement 53 90 58.8
branch 17 44 38.6
condition 2 19 10.5
subroutine 11 15 73.3
pod 5 5 100.0
total 88 173 50.8


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