Yitzchak Scott-Thoennes wrote: > On Thu, February 12, 2009 4:20 am, Gabor Szabo wrote: >> the one in the docs looks like this: >> >> # $foo isn't empty >> isnt( $foo, '', "Got some foo" ); >> >> which feels such a weak test I don't think I'd write it. > > Somewhat longer version of the same thing: > > my $warn = ''; > %SIG{__WARN__} = sub { $warn .= "@_" }; > ... > isnt( $warn, '', 'Unexpected warnings during test run' );
Shouldn't that be using is()? Before I go justifying it, really isnt() is there because then there can be isn't(). :) All interface concerns are trumped by cheap programming jokes. Going back historically, isnt() predates cmp_ok(). Prior to cmp_ok() there was no way to express "this is not that" and find out what *this* was. isnt() filled that gap. isnt() and unlike() are there because sometimes you don't know what a thing should be, but what it shouldn't be. isnt() is rather narrow, in fact the example is probably dangerous because of how is() (and thus isnt) treats undef. $foo = undef; isnt( $foo, '' ); # this passes, because '' isn't undef to is() In a lot of cases, cmp_ok() might be better. cmp_ok( $foo, 'ne', "" ); I think Erik's use case is strongest. But it should be paired with a test to verify that $next_seq and $seq are following the correct format. new_ok $obj, "Foo"; my $clone = $obj->clone; isa_ok $obj, "Foo", "Foo->clone"; isnt $obj, $clone, "clone() produces a different object"; Here's an example in the wild. http://cpansearch.perl.org/src/ZEFRAM/Data-ID-Maildir-0.002/t/id.t Sometimes really all you can say is there's a hunk of something there, like if your sequence was nothing more than a unique stream of bits. Or this: isnt $exit, 0, "expected abnormal exit"; A pedant might also check that $exit is, in fact, a number. And again, the undef isnt 0 gotcha strikes. So, who's going to try out the fabulous new github fork-and-patch mechanism and rewrite the isnt() docs? -- Defender of Lexical Encapsulation