On Thu, Feb 12, 2009 at 11:36 PM, Michael G Schwern <schw...@pobox.com> wrote: > 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?
Thanks for all the examples and links! I tried to do it but this is the first time I am forking something on github and I am very new to git so pls let me know if you can use it. Gabor