Part of the problem with have with 'Test::More' and friends is that there's not 
an easy way to attach diagnostics to any test.  This is largely because the 
interface is set in stone.  So I was thinking about a rewritten test interface 
which allows something like this (this code actually works, by the way):

    use Test::Fluent 'no_plan';

    my ( $have, $want ) = ( 1, 1 );
    have $have, want $want, reason 'Some test name';
    have [ 3, 4 ], want [ 4, 5 ], reason 'cuz I said so';   # fails
    true 3,  reason '3 had better be true';
    false 3, reason '3 had better still better be true';    # fails

 
At the end of each of those, you could append a 'diagnostics' tag which is 
required to take a hashref:

  my $armageddon = $world->destruction;
  false $armaggedon, 
      reason "World->destruction must never return true",
      diagnostic { world => $world };

I don't know that this is a brilliant interface, but just playing around with 
it works (the have/want pair automatically falls back to Test::Differences if 
$have or $want is a reference).  

It's a lot more explicit that Test::More and friends.  That means it's a lot 
more verbose.  However, it's something which could be played with.

Is this a bad idea?  Are there other suggestions people want?  If we had a dot 
operator, it would be clean to write this:

  have($have).want($want).reason($some_reason);

But we don't, so we'd have to fall back on the ugly:

  have($have)->want($want)->reason($some_reason);

Though I could easily overload the dot operator to get the first syntax.

Or if we needed delayed evaluation for some reason:

  have { $have }, want { $want }, reason $some_reason);

That's also ugly and requires the (&) prototype (and friends).

Thoughts?  Am I totally smoking crack here?  If there's a clean way to shoehorn 
diagnostics on the Test::More-style interface, I guess that would be ok.

Cheers,
Ovid
--
Buy the book         - http://www.oreilly.com/catalog/perlhks/
Tech blog            - http://use.perl.org/~Ovid/journal/
Twitter              - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6

Reply via email to