[crap, accidentally replied only to Ovid .... trying again] Ovid,
> If someone uses Test::Most and either has the environment DIE_ON_FAIL or > BAIL_ON_FAIL set to true, or has 'die' or 'bail' in the import list, they'll > likely be disappointed by failing test results sent back as they'll likely be > incomplete. You know, we've just run into this in our $work environment as well. I was setting up a test module to encourage test first development, and my co-worker (Liz Cortell, a.k.a. zrusilla; I believe some of you might know her) was setting up a test module for smoke testing ... so my module using Test::Most with 'die' was somewhat antithetical to her efforts. <g> > What's the 'canonical' way to check to see if my tests are being run by a > smoker? I can't find anything in Test::Smoke about this (I might be blind). Are you considering changing Test::Most to try to solve this? That would be cool. The solution I've implemented so far has just been to take the 'die' out of Test::Most's import list and rely on the environment variable. I made a script which will run prove for me (attached below for the curious); besides setting the env var for me, it does a few other niceties. But if you have an alternative solution, I'm all ears. -- Buddy [This is my script, which I call just "t". It's meant to be run something either like "t testdir/", or "t SomeModule.pm" and then it tries various schemes to figure out where the corresponding .t files are. It's also currently *nix-specific, just because I was too lazy with the -n switch. The extra blank lines at the top just help keep the test runs separate. It runs prove separately for each .t file because otherwise the die-on-fail feature of Test::Most doesn't help me much ... I would certainly welcome alternate solutions to _that_, though, since obviously spawning a separate prove for each .t is costly.] #! /usr/bin/perl use strict; use warnings; use Getopt::Std; my $opt = {}; getopts("nh", $opt); # help message if ($opt->{h}) { my $me = $0; $me =~ [EMAIL PROTECTED]/@@; print STDERR "usage: $me -h | [-n] perl_module\n"; print STDERR " run tests associated with perl_module\n"; print STDERR " -h: this help message\n"; print STDERR " -n: only run the newest (most recently modified) test\n"; exit 2; } my $arg = shift; my $dir; if (-d $arg) { $dir = $arg; } elsif ($arg =~ /^(.*)\.pm$// and -d "t/$1") { $dir = "t/$1"; } elsif ($arg = get_pkgname($arg) and -d "t/$arg") { close(IN); $dir = "t/$arg"; } else { die("$0: cannot figure out where test files are\n"); } $ENV{DIE_ON_FAIL} = 1; print "\n" x 10; chdir $dir or die "can't go to $dir"; if ($opt->{n}) { my $latest = `/bin/ls -1t *.t | head -n1`; chomp $latest; !system("prove $latest") or exit 1; } else { foreach (glob("*.t")) { !system("prove $_") or exit 1; } } sub get_pkgname { my $pkg; open(IN, $_[0]); while ( <IN> ) { if ( /package\s+(.*?);/ ) { $pkg = $1; $pkg =~ s/::/-/g; last; } } close(IN); return $pkg; }