File Coverage

blib/lib/Test2/Tools/OpenTelemetry.pm
Criterion Covered Total %
statement 17 19 89.4
branch n/a
condition n/a
subroutine 7 9 77.7
pod 0 4 0.0
total 24 32 75.0


line stmt bran cond sub pod time code
1             package
2             Test2::Tools::OpenTelemetry;
3              
4             our $VERSION = '0.033';
5              
6 13     13   174233 use Exporter 'import';
  13         31  
  13         1118  
7             our @EXPORT = qw(
8             messages no_messages
9             metrics no_metrics
10             );
11              
12 13     13   6953 use Feature::Compat::Defer;
  13         5909  
  13         63  
13 13     13   2207 use Test2::API 'context';
  13         34  
  13         904  
14 13     13   84 use Test2::Compare qw( compare strict_convert );
  13         25  
  13         851  
15              
16             # TODO: Cannot lexically set a metrics adapter
17 13     13   7009 use Metrics::Any::Adapter 'Test';
  13         14828  
  13         97  
18              
19             require Log::Any::Adapter;
20              
21             my $messages = sub {
22             my $code = shift;
23              
24             Log::Any::Adapter->set(
25             { lexically => \my $guard },
26             Capture => to => \my @messages,
27             );
28              
29             $code->();
30              
31             \@messages;
32             };
33              
34             my $metrics = sub {
35             my $code = shift;
36              
37             Metrics::Any::Adapter::Test->clear;
38             defer { Metrics::Any::Adapter::Test->clear }
39              
40             $code->();
41              
42             [ split /\n/, Metrics::Any::Adapter::Test->metrics ];
43             };
44              
45             my $no = sub {
46             my ( $code, $capture, $name ) = @_;
47              
48             my $context = context;
49             my $data = $code->$capture;
50             my $delta = compare $data, [], \&strict_convert;
51              
52             return $context->pass_and_release($name) unless $delta;
53             $context->fail_and_release( $name, $delta->diag );
54             };
55              
56 29     29 0 397707 sub messages (&) { goto $messages }
57 0     0 0 0 sub metrics (&) { goto $metrics }
58              
59 14     14 0 722868 sub no_messages (&) { shift->$no( $messages, 'No messages logged' ) }
60 0     0 0   sub no_metrics (&) { shift->$no( $metrics, 'No metrics collected' ) }
61              
62             1;