{"id":22980983,"url":"https://github.com/rubyworks/tapout","last_synced_at":"2025-08-13T17:33:41.988Z","repository":{"id":1257637,"uuid":"1196419","full_name":"rubyworks/tapout","owner":"rubyworks","description":"TAP-Y/J Test Harness","archived":false,"fork":false,"pushed_at":"2014-12-16T17:19:25.000Z","size":3498,"stargazers_count":53,"open_issues_count":3,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-12-01T02:22:40.636Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://rubyworks.github.com/tapout","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rubyworks.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"COPYING.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-12-25T01:54:15.000Z","updated_at":"2023-08-01T19:56:13.000Z","dependencies_parsed_at":"2022-08-16T12:45:30.705Z","dependency_job_id":null,"html_url":"https://github.com/rubyworks/tapout","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyworks%2Ftapout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyworks%2Ftapout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyworks%2Ftapout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyworks%2Ftapout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubyworks","download_url":"https://codeload.github.com/rubyworks/tapout/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229773540,"owners_count":18122031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-15T01:46:30.071Z","updated_at":"2024-12-15T01:46:30.480Z","avatar_url":"https://github.com/rubyworks.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TAPOUT\n\n[Website](http://rubyworks.github.com/tapout) |\n[User Guide](http://github.com/rubyworks/tapout/wiki) |\n[Report Issue](http://github.com/rubyworks/tapout/issues) |\n[Development](http://github.com/rubyworks/tapout)\n\n[![Build Status](https://secure.travis-ci.org/rubyworks/tapout.png)](http://travis-ci.org/rubyworks/tapout)\n[![Gem Version](https://badge.fury.io/rb/tapout.png)](http://badge.fury.io/rb/tapout) \u0026nbsp; \u0026nbsp;\n[![Flattr Me](http://api.flattr.com/button/flattr-badge-large.png)](http://flattr.com/thing/324911/Rubyworks-Ruby-Development-Fund)\n\n\n## About\n\n*TAPOUT* is the next generation in test results viewing. You may have heard\nof Turn or minitest-reporters. TAPOUT is the conceptual successor to these\ngems by virtue of its use of TAP, a standardized intermediate test results\nprotocol.\n\nTAPOUT works as a TAP handler which supports TAP-Y/J as well as traditional\nTAP streams. TAP-Y/J is a modernization of TAP using pure YAML/JSON streams.\nTraditional TAP has less detail than TAP-Y/J, but it can still be translated\nwith fairly good results. TAPOUT includes a TAP adapter to handle the\ntranslation transparently. Currently TAPOUT supports TAP v12 with some minor\nlimitations.\n\nTo learn about the TAP-Y/J specification, see the [TAP-Y/J Specification](https://github.com/rubyworks/tapout/wiki/TAP-Y-J-Specification) document.\n\nFor information about TAP, see http://testanything.org/\n\n\n## Usage\n\nTo learn more about using Tapout, please see the [wiki](https://github.com/rubyworks/tapout/wiki).\nIt provides more detailed information on how to put Tapout to work for you using your preferred\ntesting framework and build tool. What follows here is a very general overview of usage.\n\nTo use TAPOUT you need either a plugin for your current test framework, or use of\na test framework that supports TAP-Y/J out of the box. You can find a\n[list of plugins here](https://github.com/rubyworks/tapout/wiki#producers)\nunder the section \"Producers\".\n\nWith a test framework that produces a TAP-Y/J output stream in hand pipe the\noutput stream into the `tapout` command by using a standard command line pipe.\n\n    $ rubytest -y -Ilib test/foo.rb | tapout\n\nTAPOUT supports a variety of output formats. The default is the common\ndot-progress format (simply called `dot`). Other formats are selectable\nvia the `tapout` command's first argument.\n\n    $ rubytest -y -Ilib test/foo.rb | tapout progressbar\n\nTAPOUT is smart enough to match the closest matching format name. So, for\nexample, the above could be written as:\n\n    $ rubytest -y -Ilib test/foo.rb | tapout pro\n\nAnd tapout will know to use the `progressbar` format.\n\nTo see a list of supported formats use the list subcommand:\n\n    $ tapout --help\n\nIf your test framework does not support TAP-Y/J, but does support traditional\nTAP, TAPOUT will automatically recognize the difference by TAP's `1..N` header\nand automatically translate it.\n\n    $ rubytest -ftap -Ilib test/foo.rb | tapout progressbar\n\n\n## Bypassing\n\nSince tapout receives test results via a pipe, it has no direct control over\nthe producer, i.e the test runner. If you need to tell tapout to stop processing\nthe output then you can send a *PAUSE DOCUMENT* code. Likewise you can restart\nprocessing by sending a *RESUME DOCUMENT* code. These codes are taken\nfrom ASCII codes for DLE (Data Link Escape) and ETB (End of Transmission Block),\nrespectively. When tapout receives a *PAUSE DOCUMENT* code, it stops interpreting\nany data it receives as test results and instead just routes `$stdin` back\nto `$stdout` unmodified.\n\nA good example of this is debugging with Pry using `binding.pry`.\n\n    def test_something\n      STDOUT.puts 16.chr  # tells tapout to pause processing\n      binding.pry\n      STDOUT.puts 23.char # tells tapout to start again\n      assert something\n    end\n\nAs it turns out, if your are using TAP-Y (not TAP-J) then you can also\nuse YAML's *END DOCUMENT* marker to acheive a similar result.\n\n    def test_something\n      STDOUT.puts \"...\"  # tells tapout to pause processing\n      binding.pry\n      assert something\n    end\n\nBut this **only works for YAML** and if you happened to be debugging code\nthat emits YAML you might accidentally trigger tapout to resume. Therefore\nit is recommended that the ASCII codes be used.\n\nNote: When sending these codes, be sure to send a newline character as well.\n\n\n## Legal\n\nCopyright (c) 2010 Rubyworks\n\nTAPOUT is modifiable and redistributable in accordance with the *BSD-2-Clause* license.\n\nSee COPYING.md for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubyworks%2Ftapout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frubyworks%2Ftapout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubyworks%2Ftapout/lists"}