Usage:
  tap [options] <files>

Executes all the files and interprets their output as TAP
formatted test result data.

To parse TAP data from stdin, specify "-" as a filename.

Short options are parsed gnu-style, so for example '-bCRspec' would be
equivalent to '--bail --no-color --reporter=spec'

If the --check-coverage or --coverage-report options are provided, but
no test files are specified, then a coverage report or coverage check
will be run on the data from the last test run.

Coverage is never enabled for stdin.

Options:

  -j<n> --jobs=<n>            Run up to <n> test files in parallel
                              Note that this causes tests to be run in
                              "buffered" mode, so line-by-line results
                              cannot be reported, and older TAP
                              parsers may get upset.

  -J --jobs-auto              Run test files in parallel (auto calculated)
                              Note that this causes tests to be run in
                              "buffered" mode, so line-by-line results
                              cannot be reported, and older TAP
                              parsers may get upset.

  -g<pattern>                 Only run subtests tests matching the specified
  --grep=<pattern>            pattern.

                              Patterns are matched against top-level
                              subtests in each file.  To filter tests
                              at subsequent levels, specify this
                              option multiple times.

                              To specify regular expression flags,
                              format pattern like a JavaScript RegExp
                              literal.  For example: '/xyz/i' for
                              case-insensitive matching.

  -i --invert                 Invert the matches to --grep patterns.
                              (Like grep -v)

  -c --color                  Use colors (Default for TTY)

  -C --no-color               Do not use colors (Default for non-TTY)

  -b --bail                   Bail out on first failure

  -B --no-bail                Do not bail out on first failure (Default)

  -O --only                   Only run tests with {only: true} option

  -R<type> --reporter=<type>  Use the specified reporter.  Defaults to
                              'classic' when colors are in use, or 'tap'
                              when colors are disabled.

                              Available reporters:
@@REPORTERS@@

  -o<file>                    Send the raw TAP output to the specified
  --output-file=<file>        file.  Reporter output will still be
                              printed to stdout, but the file will
                              contain the raw TAP for later reply or
                              analysis.

  -s<file> --save=<file>      If <file> exists, then it should be a line-
                              delimited list of test files to run.  If
                              <file> is not present, then all command-line
                              positional arguments are run.

                              After the set of test files are run, any
                              failed test files are written back to the
                              save file.

                              This way, repeated runs with -s<file> will
                              re-run failures until all the failures are
                              passing, and then once again run all tests.

                              It's a good idea to .gitignore the file
                              used for this purpose, as it will churn a
                              lot.

  --coverage --cov            Capture coverage information using 'nyc'

                              If a COVERALLS_REPO_TOKEN environment
                              variable is set, then coverage is
                              captured by default and sent to the
                              coveralls.io service.

  --no-coverage --no-cov      Do not capture coverage information.
                              Note that if nyc is already loaded, then
                              the coverage info will still be captured.

  --coverage-report=<type>    Output coverage information using the
                              specified istanbul/nyc reporter type.

                              Default is 'text' when running on the
                              command line, or 'text-lcov' when piping
                              to coveralls.

                              If 'html' is used, then the report will
                              be opened in a web browser after running.

                              This can be run on its own at any time
                              after a test run that included coverage.

  --no-coverage-report        Do not output a coverage report.

  --no-browser                Do not open a web browser after
                              generating an html coverage report.

  -t<n> --timeout=<n>         Time out test files after <n> seconds.
                              Defaults to 30, or the value of the
                              TAP_TIMEOUT environment variable.
                              Setting to 0 allows tests to run
                              forever.

  -T --no-timeout             Do not time out tests.
                              Equivalent to --timeout=0

  -h --help                   print this thing you're looking at

  -v --version                show the version of this program

  --node-arg=<arg>            Pass an argument to Node binary in all
                              child processes.  Run 'node --help' to
                              see a list of all relevant arguments.
                              This can be specified multiple times to
                              pass multiple args to Node.

  -gc --expose-gc             Expose the gc() function to Node tests

  --debug                     Run JavaScript tests with node --debug

  --debug-brk                 Run JavaScript tests with node --debug-brk

  --harmony                   Enable all Harmony flags in JavaScript tests

  --strict                    Run JS tests in 'use strict' mode

  --test-arg=<arg>            Pass an argument to test files spawned
                              by the tap command line executable.
                              This can be specified multiple times to
                              pass multiple args to test scripts.

  --nyc-arg=<arg>             Pass an argument to nyc when running
                              child processes with coverage enabled.
                              This can be specified multiple times to
                              pass multiple args to nyc.

  --check-coverage            Check whether coverage is within
                              thresholds provided.  Setting this
                              explicitly will default --coverage to
                              true.

                              This can be run on its own any time
                              after a test run that included coverage.

  --branches                  what % of branches must be covered?
                              Setting this will default both
                              --check-coverage and --coverage to true.
                              [default: 0]

  --functions                 what % of functions must be covered?
                              Setting this explicitly will default both
                              --check-coverage and --coverage to true.
                              [default: 0]

  --lines                     what % of lines must be covered?
                              Setting this explicitly will default both
                              --check-coverage and --coverage to true.
                              [default: 90]

  --statements                what % of statements must be covered?
                              Setting this explicitly will default both
                              --check-coverage and --coverage to true.
                              [default: 0]

  --100                       Full coverage, 100%.
                              Sets branches, statements, functions,
                              and lines to 100.

  --nyc-help                  Print nyc usage banner.  Useful for
                              viewing options for --nyc-arg.

  --nyc-version               Print version of nyc used by tap.

  --dump-config               Dump the config options in JSON format.

  --                          Stop parsing flags, and treat any additional
                              command line arguments as filenames.

Environment Variables:

  TAP_SNAPSHOT                Set to '1' to generate snapshot files
                              for `t.matchSnapshot()` assertions.

  TAP_RCFILE                  A yaml formatted file which can set any
                              of the above options.  Defaults to
                              $HOME/.taprc

  TAP_TIMEOUT                 Default value for --timeout option.

  TAP_COLORS                  Set to '1' to force color output, or '0'
                              to prevent color output.

  TAP_BAIL                    Bail out on the first test failure.
                              Used internally when '--bailout' is set.

  TAP                         Set to '1' to force standard TAP output,
                              and suppress any reporters.  Used when
                              running child tests so that their output
                              is parseable by the test harness.

  TAP_DIAG                    Set to '1' to show diagnostics by
                              default for passing tests.  Set to '0'
                              to NOT show diagnostics by default for
                              failing tests.  If not one of these two
                              values, then diagnostics are printed by
                              default for failing tests, and not for
                              passing tests.

  TAP_BUFFER                  Set to '1' to run subtests in buffered
                              mode by default.

  TAP_DEV_LONGSTACK           Set to '1' to include node-tap internals
                              in stack traces.  By default, these are
                              included only when the current working
                              directory is the tap project itself.
                              Note that node internals are always
                              excluded.

  TAP_DEV_SHORTSTACK          Set to '1' to exclude node-tap internals
                              in stack traces, even if the current
                              working directory is the tap project
                              itself.

  _TAP_COVERAGE_              Reserved for internal use.

  TAP_DEBUG                   Set to '1' to turn on debug mode.

  NODE_DEBUG                  Include 'tap' to turn on debug mode.

  TAP_GREP                    A '\n'-delimited list of grep patterns
                              to apply to root level test objects.
                              (This is an implementation detail for how
                              the '--grep' option works.)

  TAP_GREP_INVERT             Set to '1' to invert the meaning of the
                              patterns in TAP_GREP.  (Implementation
                              detail for how the '--invert' flag
                              works.)

Config Files:

You can create a yaml file with any of the options above.  By default,
the file at ~/.taprc will be loaded, but the TAP_RCFILE environment
variable can modify this.

Run 'tap --dump-config' for a listing of what can be set in that file.
Each of the keys corresponds to one of the options above.
