App-Prove-Plugin-Elasticsearch
view release on metacpan or search on metacpan
lib/App/Prove/Elasticsearch/Parser.pm view on Meta::CPAN
# PODNAME: App::Prove::Elasticsearch::Parser
# ABSTRACT: Capture the output of prove, and upload the results of the test to elasticsearch
package App::Prove::Elasticsearch::Parser;
$App::Prove::Elasticsearch::Parser::VERSION = '0.001';
use strict;
use warnings;
use parent qw/TAP::Parser/;
use Clone qw{clone};
use File::Basename qw{basename dirname};
use POSIX qw{strftime};
use App::Prove::Elasticsearch::Utils();
sub new {
my ($class, $opts) = @_;
$opts = clone $opts; #Convenience, if we are passing over and over again...
#Load our callbacks
$opts->{'callbacks'} = {
'test' => \&testCallback,
'comment' => \&commentCallback,
'unknown' => \&unknownCallback,
'bailout' => \&bailoutCallback,
'EOF' => \&EOFCallback,
'plan' => \&planCallback,
};
my $esopts = {
'server.host' => delete $opts->{'server.host'},
'server.port' => delete $opts->{'server.port'},
'client.indexer' => delete $opts->{'client.indexer'},
'client.versioner' => delete $opts->{'client.versioner'} // 'Default',
'client.blamer' => delete $opts->{'client.blamer'} // 'Default',
'client.platformer' => delete $opts->{'client.platformer'} // 'Default',
'client.autodiscover' => delete $opts->{'client.autodiscover'},
};
my $self = $class->SUPER::new($opts);
if (ref($self->{'_iterator'}->{'command'}) eq 'ARRAY') {
$self->{'file'} = $self->{'_iterator'}->{'command'}->[-1];
print "# PROCESSING RESULTS FROM TEST FILE: $self->{'file'}\n";
}
my $indexer = $esopts->{'client.indexer'};
_require_indexer($indexer);
my $versioner =
App::Prove::Elasticsearch::Utils::require_versioner($esopts);
my $platformer =
App::Prove::Elasticsearch::Utils::require_platformer($esopts);
my $blamer = App::Prove::Elasticsearch::Utils::require_blamer($esopts);
$self->{executor} =
&{\&{$blamer . "::get_responsible_party"}}($self->{file});
$self->{sut_version} = &{\&{$versioner . "::get_version"}}($self->{file});
$self->{platform} = &{\&{$platformer . "::get_platforms"}}();
$self->{indexer} = $indexer;
$self->{test_version} =
&{\&{$versioner . "::get_file_version"}}($self->{file});
$self->{steps} = [];
$self->{starttime} = [ Time::HiRes::gettimeofday() ];
$self->{es_opts} = $esopts;
return $self;
}
sub _require_indexer {
my $indexer = shift;
eval "require $indexer" or die "cannot find needed indexer $indexer";
}
# Look for file boundaries, etc.
sub unknownCallback {
my ($test) = @_;
my $self = $test->{'parser'};
my $line = $test->as_string;
$self->{'raw_output'} .= "$line\n";
#Unofficial "Extensions" to TAP
my ($status_override) = $line =~ m/^% mark_status=([A-Z|_]*)/;
( run in 0.705 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )