I've uploaded an alpha of this as Test-Verbose-0.000_1.tar.gz.  It's a
perl script (bin/tv) that wraps around a module (Test::Verbose).
Comments?

- Barrie

NAME
       tv - Run 'make TEST_VERBOSE=1' on one or more test files

SYNOPSIS
       $ tv t/foo.t         ## make TEST_VERBOSE=1 TEST_FILES=t/foo.t
       $ tv Foo.pm          ## Run all t/*.t test scripts for Foo.pm
       $ tv t/foo.t t/bar.t ## make TEST_VERBOSE=1 "TEST_FILES=t/foo.t t/bar.t"
       $ tv t/*             ## Run all test scripts in t
       $ tv lib             ## Test all modules in lib

DESCRIPTION
    Given one or more test scripts, Perl source code files, directories
    containing them, or Perl package names, tv tries to select and run the
    appropriate test scripts using "make test TEST_VERBOSE=1 TEST_FILES=..."
    where the "..." are the selected test scripts.

    This is especially useful in an editor when mapped to a key that saves
    and runs tv on the current file or just as shorthand for a frequent but
    laborious make incantation.

  Test scripts

    When a test script is given as a parameter, it is selected, so

        tv t/foo.t
    
    and

        tv t/*.t

    do the obvious things.

    When something other than a test script (a file whose name ends in ".t")
    is specified, source files and test scripts are scanned to figure out
    what test scripts to run.

  Source Files

    If a source file name (or directory hierarchy of them) is given, then
    those files and all test scripts are scanned, and any test scripts
    pertaining to the named source files and any packages it defines are
    selected. This allows

        tv Foo.pm
        tv lib/Bar/Bash.pm
        cd lib/Bar; tv Bash.pm

    to DWIM (see the upcoming description of how tv finds the main project
    directory to see how that last one DWIMs).

  Packages

    If a package name is given, then all source files and test scripts
    mentioned are scanned as well as all source files in the main project
    directory and its lib/ and t/ subdirectories are scanned, then any test
    scripts pertaining to the named packages are selected. This allows

        tv Foo

    to work.

  Untestable items

    It is a fatal error if a named item cannot be tested. In this case,
    nothing is tested and tv prints a messages to STDERR and exits with a
    non-zero exit code.

  Finding the main project directory

    The main project directory is found by looking for "./t", "../t",
    "../../t" and so on until a directory containing a "t" directory is
    found.

  Code Scanner Details

    In source files, things that look like "package" statements and some
    special POD are used to infer what test scripts to run. In test scripts,
    some other special POD and things that look like "use" or "require"
    statements are used to infer what files and packages are being tested.
    This is only performed if something other than a test script (or
    directory hierarchy containing test scripts and no source files) are
    given.

    The special POD to be used in source files is:

        =for test_script foo.t bar.t

    and for test scripts is

        =for file Foo.pm lib/Bar.pm

    and

        =for package Foo

    The "=for" paragraphs may span more than one line and define whitespace
    separated lists of items. The filenames in the "=for file" directive
    must be relative to the main project directory and not contain ".."
    names.

    The scanning for "use", "require", and "package" statements is quite
    naive, but usually sufficient. Things like POD documentation and
    multiline strings can fool the scanners, but this is not usually a
    problem.

OPTIONS
    -n, --dry-run, --just-print, --recon
        Print out the make command but don't run it.

    -h, -?, --help
        Print out full help text (this page).

    See Test::Verbose for details.

COPYRIGHT
        Copyright 2002, R. Barrie Slaymaker, Jr.  All Rights Reserved.

LICENSE
    You may use this under the terms of any of the BSD, Artistic, or GPL
    licenses.

AUTHOR
        Barrie Slaymaker <[EMAIL PROTECTED]>

Reply via email to