Nicholas Clark wrote:
> On Sat, Feb 14, 2009 at 12:57:45PM +0200, Gabor Szabo wrote:
>> On Thu, Feb 12, 2009 at 3:18 PM, Nicholas Clark <[email protected]> wrote:
>>> I find
>>>
>>> isnt($foo, undef);
>>>
>>> useful as it gives better failure diagnostics than
>>>
>>> ok(defined $foo);
>>>
>> Wouldn't it be better to write this
>>
>> is_defined($foo);
>>
>> Which, on failure would print
>> # got: undef
>> # expected: anything else
>>
>> as it does your example.
>>
>> Schwern, can this be added to Test::More ?
>
> Assuming that isnt() isn't going to be removed from Test::More, I don't see
> this as a good idea. Your proposed is_defined($foo) is the same amount of
> typing as isnt($foo, undef), gives no better diagnostics, is no clearer in
> its intent than isnt($foo, undef), and increases the complexity of the
> interface to Test::More by 1 function. It feels like:
>
> Although the Perl Slogan is There's More Than One Way to Do It, I
> hesitate to make 10 ways to do something. :-)
>
> http://groups.google.com/group/comp.lang.perl/msg/b7b1650e90b89c0b
Pretty much my feeling.
isnt($foo, undef); is doing exactly its job. It's flexible, gives good
diagnostics and reads much like English. Also it means we don't have to have
a smattering of is_blank(), is_not_blank(), is_empty_string(), is_zero(),
is_not_zero(), etc...
If you prefer that sort of thing, knock yourself out.
package My::Test;
use base "Test::Builder::Module";
our @EXPORT = qw(is_defined);
sub is_defined {
my($thing, name) = @_;
my $tb = __PACKAGE__->builder;
return $tb->isnt_eq($thing, undef, $name);
}
--
3. Not allowed to threaten anyone with black magic.
-- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
http://skippyslist.com/list/