TapReportParser
This gem parses a TAP report per the specifications listed on https://testanything.org/tap-specification.html. Each of the tests has six attributes: number, description, status, directive, diagnostic and passing.
- The
numberis test number. If thenumberis not present, the parser maintains its own count. - The
descriptionis the text describing the test. If thedescriptionis not present, then its value is empty string. - The
statusis represented by one of the four values:success(when test is passing),failure(when test is failing),skipped(when test is marked as skipped irrespective of success or failure), andignore(when test is marked as todo irrespective of success or failure). - The
directiveis either skipped or todo. - The
diagnosticis a YAML block or text. If it is YAML then its value is ruby Hash, otherwise string. If thediagnosticis not present, then its value is empty string. - The value of the
passingistrueif test status is eitherpassingorignored.
Installation
Add this line to your application's Gemfile:
gem 'tap_report_parser'And then execute:
$ bundle
Or install it yourself as:
$ gem install tap_report_parser
Usage
You can parse report either from file or text, i.e.,
report = TapReportParser::Report.from_text(text)
report = TapReportParser::Report.from_file(file)For example, consider the following TAP report:
TAP version 13
1..6
#
# Create a new Board and Tile, then place
# the Tile onto the board.
#
ok 1 - The object is a Board
ok 2 - Board size is zero
ok 3 - The object is a Tile
ok 4 - Get possible places to put the Tile
ok 5 - Placing the tile produces no error
ok 6 - Board size is 1
Parsing the report from text will return the TapReportParser::Report object, which has the following three attributes:
-
test_count: The test count -
tests: Array ofTapReportParser::Testobjects each describing the test. Each of the test object has six attributes:number,description,status,directive,diagnosticandpassing. -
passing: A boolean value which istrueif all the tests are passing, i.e., the status is eithersuccessorignored, otherwisefalse.
# Tests count
report.test_count
=> 6
# All the tests passing?
report.passing
=> true
# Tests
=> [#<TapReportParser::Test:0x00007f943a97d968 @status="success", @directive="", @passing=true, @number=1, @description="The object is a Board", @diagnostic="">, #<TapReportParser::Test:0x00007f943a97d580 @status="success", @directive="", @passing=true, @number=2, @description="Board size is zero", @diagnostic="">, #<TapReportParser::Test:0x00007f943a97d198 @status="success", @directive="", @passing=true, @number=3, @description="The object is a Tile", @diagnostic="">, #<TapReportParser::Test:0x00007f943a97cd88 @status="success", @directive="", @passing=true, @number=4, @description="Get possible places to put the Tile", @diagnostic="">, #<TapReportParser::Test:0x00007f943a97c978 @status="success", @directive="", @passing=true, @number=5, @description="Placing the tile produces no error", @diagnostic="">, #<TapReportParser::Test:0x00007f943a97c590 @status="success", @directive="", @passing=true, @number=6, @description="Board size is 1", @diagnostic="">]
# Test number
report.tests.first.number
=> 1
# Test description
report.tests.first.description
=> "The object is a Board"
# Test status
report.tests.first.status
=> "success"
# Test passing?
report.tests.first.passing
=> true
# Test directive
report.tests.first.directive
=> ""
# Test diagnostic
report.tests.first.diagnostic
=> ""Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/avmnu-sng/tap_report_parser. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the TapReportParser project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.