This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Test-Simple from version 1.302096 to 1.302097
[perl5.git] / cpan / Test-Simple / lib / Test2 / Util / Facets2Legacy.pm
1 package Test2::Util::Facets2Legacy;
2 use strict;
3 use warnings;
4
5 our $VERSION = '1.302097';
6
7 use Carp qw/croak confess/;
8 use Scalar::Util qw/blessed/;
9
10 use base 'Exporter';
11 our @EXPORT_OK = qw{
12     causes_fail
13     diagnostics
14     global
15     increments_count
16     no_display
17     sets_plan
18     subtest_id
19     summary
20     terminate
21 };
22 our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
23
24 our $CYCLE_DETECT = 0;
25 sub _get_facet_data {
26     my $in = shift;
27
28     if (blessed($in) && $in->isa('Test2::Event')) {
29         confess "Cycle between Facets2Legacy and $in\->facet_data() (Did you forget to override the facet_data() method?)"
30             if $CYCLE_DETECT;
31
32         local $CYCLE_DETECT = 1;
33         return $in->facet_data;
34     }
35
36     return $in if ref($in) eq 'HASH';
37
38     croak "'$in' Does not appear to be either a Test::Event or an EventFacet hashref";
39 }
40
41 sub causes_fail {
42     my $facet_data = _get_facet_data(shift @_);
43
44     return 1 if $facet_data->{errors} && grep { $_->{fail} } @{$facet_data->{errors}};
45
46     if (my $control = $facet_data->{control}) {
47         return 1 if $control->{halt};
48         return 1 if $control->{terminate};
49     }
50
51     return 0 if $facet_data->{amnesty} && @{$facet_data->{amnesty}};
52     return 1 if $facet_data->{assert} && !$facet_data->{assert}->{pass};
53     return 0;
54 }
55
56 sub diagnostics {
57     my $facet_data = _get_facet_data(shift @_);
58     return 1 if $facet_data->{errors} && @{$facet_data->{errors}};
59     return 0 unless $facet_data->{info} && @{$facet_data->{info}};
60     return (grep { $_->{debug} } @{$facet_data->{info}}) ? 1 : 0;
61 }
62
63 sub global {
64     my $facet_data = _get_facet_data(shift @_);
65     return 0 unless $facet_data->{control};
66     return $facet_data->{control}->{global};
67 }
68
69 sub increments_count {
70     my $facet_data = _get_facet_data(shift @_);
71     return $facet_data->{assert} ? 1 : 0;
72 }
73
74 sub no_display {
75     my $facet_data = _get_facet_data(shift @_);
76     return 0 unless $facet_data->{about};
77     return $facet_data->{about}->{no_display};
78 }
79
80 sub sets_plan {
81     my $facet_data = _get_facet_data(shift @_);
82     my $plan = $facet_data->{plan} or return;
83     my @out = ($plan->{count} || 0);
84
85     if ($plan->{skip}) {
86         push @out => 'SKIP';
87         push @out => $plan->{details} if defined $plan->{details};
88     }
89     elsif ($plan->{none}) {
90         push @out => 'NO PLAN'
91     }
92
93     return @out;
94 }
95
96 sub subtest_id {
97     my $facet_data = _get_facet_data(shift @_);
98     return undef unless $facet_data->{parent};
99     return $facet_data->{parent}->{hid};
100 }
101
102 sub summary {
103     my $facet_data = _get_facet_data(shift @_);
104     return '' unless $facet_data->{about} && $facet_data->{about}->{details};
105     return $facet_data->{about}->{details};
106 }
107
108 sub terminate {
109     my $facet_data = _get_facet_data(shift @_);
110     return undef unless $facet_data->{control};
111     return $facet_data->{control}->{terminate};
112 }
113
114 1;