Ovid wrote:
> Schwern: you're specifically copied on this as you maintain
> Test::Simple. If we get this working, how would you feel about a patch
> to Test::Simple that makes this automatically incorporated into new
> test suites which upgrade Test::Simple? The obvious problem is that
> this would create a dependency on TAP::Diagnostics (which I'm hoping
> will have no non-core dependencies and work on Perl back to 5.005.) It
> could also be included with Test::Simple as Test::Diagnostics, if you
> prefer.
As Test::More cannot have any dependencies, I'd rather incorporate TAP
diagnostic functionality directly into Test::Builder. Besides, spitting out
some YAML isn't hard.
> Here's what I currently have, based on thoughts from Adrian Howard and
> Schwern, Andy Armstrong and my own imagination:
>
> A stub module named "TAP::Diagnostics". I currently have three poorly
> named functions.
>
> is_new_tap()
>
> The author of a test module can call this to find out if new-style TAP
> diagnostics are supported. This is done internally by checking the
> TAP_VERSION environment variable. This might get internalized in the
> following two functions (though it shouldn't matter if indented YAML is
> encountered by older TAP parsers. It just means that running tests in
> verbose mode will spit out more info).
is_new_tap() sounds more like its testing a TAP stream, not the TAP harness.
"new", like "fast" or "lite", is one of those subjective, context-sensitive
adjectives that make for a bad routine name.
How about something more direct: harness_supports_tap_diagnostics();
> diagnostic( {
> found => $found, # can be stand-alone
> wanted => $wanted, # must always be present with 'found'
> display => $display, # optional human-readable presentation
> extra => $extra, # anything else. Useful for custom harnesses
> meta => 0,
> } );
>
> The 'meta' information defaults to true but can be suppressed.
> Currently this allows the line number and filename to be inserted into
> the TAP.
How does it determine the file and line number? Is it the point where
diagnostic() is called or one call level up? Consider...
# diagnostic() should report where test() was called
sub test {
my $test = shift;
print "not " unless $test;
print "ok 1\n";
diagnostic( { ... } );
}
But then there's the problem of how far up the call stack to go?
# diagnostic() should report where get_ok() was called
sub get_ok {
my $thing = shift;
test(get($thing));
}
You're pretty much reimplementing Test::Builder's "level".
> meta()
>
> This spits out meta informaton. Currently looks like this:
>
> ---
> executable: perl
> inc:
> - lib
> - t/lib
> - /System/Library/Perl/5.8.6/darwin-thread-multi-2level
> - /System/Library/Perl/5.8.6
> - /Library/Perl/5.8.6/darwin-thread-multi-2level
> - /Library/Perl/5.8.6
> - /Library/Perl
> - /Network/Library/Perl/5.8.6/darwin-thread-multi-2level
> - /Network/Library/Perl/5.8.6
> - /Network/Library/Perl
> - /System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level
> - /System/Library/Perl/Extras/5.8.6
> - /Library/Perl/5.8.1
> - .
> os: darwin
> perl: 5.008006
> tap_version: 13
> ...
>
> Some of that is Perl-specific and therefore is wrong. However, it can
> be very useful for debugging information.
It's a module for TAP producers so it can go ahead and produce Perl specific
stuff. Non-perl TAP readers will simply ignore it.
A timestamp would be helpful. The ISO 8601 is easy to machine parse but a
little hard on humans.
timestamp: 2007-09-01T07:09:54-0700
RFC 3339 is a little easier to read. I'm inclined towards this.
timestamp: 2007-09-01 07:09:54-0700
RFC 2882 format is easier on humans but harder to parse and sort.
timestamp: Mon, 01 Sep 2007 07:09:54 -0700
--
Hating the web since 1994.