File Coverage

blib/lib/YAML/PP/Exception.pm
Criterion Covered Total %
statement 43 43 100.0
branch 6 8 75.0
condition 2 3 66.6
subroutine 5 5 100.0
pod 0 2 0.0
total 56 61 91.8


line stmt bran cond sub pod time code
1 52     52   140903 use strict;
  52         85  
  52         1678  
2 52     52   190 use warnings;
  52         71  
  52         4242  
3             package YAML::PP::Exception;
4              
5             our $VERSION = 'v0.41.1'; # TRIAL VERSION
6              
7 52     52   22864 use overload '""' => \&to_string;
  52         61819  
  52         433  
8              
9             sub new {
10 124     124 0 560 my ($class, %args) = @_;
11             my $self = bless {
12             line => $args{line},
13             msg => $args{msg},
14             next => $args{next},
15             where => $args{where},
16             yaml => $args{yaml},
17             got => $args{got},
18             expected => $args{expected},
19             column => $args{column},
20 124         644 }, $class;
21 124         371 return $self;
22             }
23              
24             sub to_string {
25 372     372 0 470 my ($self) = @_;
26 372         426 my $next = $self->{next};
27 372         388 my $line = $self->{line};
28 372         358 my $column = $self->{column};
29              
30 372         398 my $yaml = '';
31 372         479 for my $token (@$next) {
32 429 100       553 last if $token->{name} eq 'EOL';
33 363         448 $yaml .= $token->{value};
34             }
35 372 50       520 $column = '???' unless defined $column;
36              
37 372         425 my $remaining_yaml = $self->{yaml};
38 372 50       513 $remaining_yaml = '' unless defined $remaining_yaml;
39 372         382 $yaml .= $remaining_yaml;
40             {
41 372         337 local $@; # avoid bug in old Data::Dumper
  372         364  
42 372         2215 require Data::Dumper;
43 372         8224 local $Data::Dumper::Useqq = 1;
44 372         421 local $Data::Dumper::Terse = 1;
45 372         985 $yaml = Data::Dumper->Dump([$yaml], ['yaml']);
46 372         10678 chomp $yaml;
47             }
48              
49 372         422 my $lines = 5;
50 372         372 my @fields;
51              
52 372 100 66     871 if ($self->{got} and $self->{expected}) {
53 144         148 $lines = 6;
54 144         185 $line = $self->{got}->{line};
55 144         153 $column = $self->{got}->{column} + 1;
56             @fields = (
57             "Line" => $line,
58             "Column" => $column,
59 144         439 "Expected", join(" ", @{ $self->{expected} }),
60             "Got", $self->{got}->{name},
61             "Where", $self->{where},
62 144         152 "YAML", $yaml,
63             );
64             }
65             else {
66             @fields = (
67             "Line" => $line,
68             "Column" => $column,
69             "Message", $self->{msg},
70             "Where", $self->{where},
71 228         525 "YAML", $yaml,
72             );
73             }
74 372         674 my $fmt = join "\n", ("%-10s: %s") x $lines;
75 372         1217 my $string = sprintf $fmt, @fields;
76 372         14548 return $string;
77             }
78              
79             1;