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

Reply via email to