The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

TAP::Tree - TAP (Test Anything Protocol) parser which supported the subtest

SYNOPSIS

Parses a TAP output.

  use v5.10.1;
  require TAP::Tree;
  my $tap = <<'END';
  1..2
      ok 1 - sub test 1
      1..1
  ok 1 - test 1
  not ok 2 - test 2
  END

  my $taptree = TAP::Tree->new( tap_ref => \$tap );
  my $tree = $taptree->parse;   # return value is hash reference simply.

  say $tree->{plan}{number};             # -> print 2
  say $tree->{testline}[0]{description}; # -> print test 1
  say $tree->{testline}[1]{description}; # -> print test 2

  say $tree->{testline}[0]{subtest}{testline}[0]{description};
  # -> print sub test 1

Summarises the parsed TAP output

  my $summary = $taptree->summary;
  say $summary->{planned_tests}; # -> print 2
  say $summary->{ran_tests};     # -> print 2
  say $summary->{failed_tests};  # -> print 1 ... number of failed tests.
                                # 'TODO' tests are counted as 'ok', not 'not ok'

Iterates the parsed TAP

  my $iterator = $taptree->create_tap_tree_iterator( subtest => 1 );
  
  while ( my $result = $iterator->next ) {
      say '>' x $result->{indent} . $result->{testline}{description};
  }

  # -> print
  #   test 1
  #   >sub test 1
  #   test 2

DESCRIPTION

TAP::Tree is a simple parser of TAP which supported the subtest.

It parses the data of a TAP format to the data of tree structure.

Moreover, the iterator for complicated layered tree structure is also prepared.

METHODS

  • new

      require TAP::Tree;
      my $taptree = TAP::Tree->new( tap_ref => $tap_ref );

    Creates the instance of TAP::Tree.

    Specify the reference to the scalar variable which stored the outputs of TAP as tap_ref of an arguments.

    The arguments can be specified tap_file and tap_tree in addition to tap_ref.

    tap_file is specified the path to file which stored the outputs of TAP.

      my $taptree = TAP::Tree->new( tap_file => $path );

    tap_tree is specified the data of the tree structure which TAP::Tree parsed.

      my $taptree = TAP::Tree->new( tap_tree => $parsed_tap );

    utf8 is specified, when TAP is encoded by UTF-8.

      my $taptree = TAP::Tree->new( tap_ref => $tap_ref, utf8 => 1 );
  • parse

      require TAP::Tree;
      my $taptree = TAP::Tree->new( tap_ref => $tap_ref );
      my $tree    = $taptree->parse;
    
      say $tree->{plan}{number};
      say $tree->{testline}[0]->{description};

    Parses a output of TAP and returns the tree structure data. The return value is a hash reference and all of the parsed result of TAP are stored.

    Please dump the detailed content of inclusion :)

      {
          version   => {},  # the version number of TAP (usually 12). 
          plan      => {},  # the hash reference in which the numbers of tests.
          testline  => [],  # the array reference in which the result of each tests.
          bailout   => {},  # the hash reference in which an informational about Bailout.
      }
  • summary

    Returns the summary of the TAP output.

    The contents of a summary is below ( hash reference ).

      version          -> the version number of TAP (usually 12).
      is_skipped_all   -> the flag that shows whether all the tests were skipped.
      skip_all_msg     -> the message that shows the reason of skip tests.
      is_bailout       -> the flag that shows whether bailout the tests.
      bailout_msg      -> the message that shows the reason of bailout.
      planned_tests    -> the number of the planned tests.
      ran_tests        -> the number of the ran tests.
      failed_tests     -> the number of the failed tests.
      is_good_plan     -> the flag that shows whether the number of plan is set.
      is_ran_all_tests -> the flag that shows whether the all tests are ran.
  • create_tap_tree_iterator

    TAP::Tree makes becomes the complicated structure where a hierarchy is deep, when there is a subtest.

    Therefore, the iterator which can follow a tree strucutre data easily is prepared for TAP::Tree.

      my $taptree = TAP::Tree->new( tap_ref => $tap_ref );
      $taptree->parse;
      my $iterator = $taptree->create_tap_tree_iterator( subtest => 1);
    
      my $test = $iterator->next;
      say $test->{testline}{description};

    Specify arguments subtest, when following subtest.

ISSUE REPORT

https://github.com/magnolia-k/p5-TAP-Tree/issues

COPYRIGHT

copyright 2014- Magnolia <magnolia.k@me.com>.

LICENSE

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.