I finally got round to trying assert_deep_equals(). Unfortunately, I
don't get the kind of nice diagnostic message you mentioned in your
message of a week ago. Attached is a sample test program. When I run it,
all I get is the following error message:

---- 
!!!FAILURES!!!
Test Results:
Run: 1, Failures: 1, Errors: 0

There was 1 failure:
1) test_blah: Test failed

Test was not successful.
----

Which is not very helpful for finding where in the structure the
difference was found.

Am I missing some important configuration for my test harness?

Thx.

Alain



> -----Original Message-----
> From: Desilets, Alain 
> Sent: May 16, 2007 7:35 PM
> To: 'Adrian Howard'; [email protected]
> Cc: Farley, Benoit
> Subject: RE: [Perlunit-users] Comparing deeply nested data structures.
> 
> Great, thanks Adrian. That sounds exactly like what we're looking for.
> 
> Alain
>  
> 
> > -----Original Message-----
> > From: Adrian Howard [mailto:[EMAIL PROTECTED]
> > Sent: May 16, 2007 7:26 PM
> > To: [email protected]; Desilets, Alain
> > Cc: Farley, Benoit
> > Subject: Re: [Perlunit-users] Comparing deeply nested data 
> structures.
> > 
> > 
> > On 16 May 2007, at 18:17, Desilets, Alain wrote:
> > [snip]
> > > I want to easily compare the output of that method to
> > expected output,
> > > and if the two differ, get a good diagnostic message that 
> describes 
> > > exactly how the two differ.
> > [snip]
> > > Is there something in Perl that would allow me to do this?
> > 
> > In Test::Unit there's assert_deep_equals() - for example:
> > 
> >      sub test_using_assert_deep_equals {
> >          my $self = shift;
> >          $self->assert_deep_equals(
> >              [ { hello =>1}, { world => 1 } ],
> >              [ { hello =>1}, { earth => 1 } ]
> >          );
> >      }
> > 
> > that gives you a diagnostic like
> > 
> > 1) /Users/adrianh/Desktop/test.pl:53 - test_using_assert_deep_equals
> > (Comparison::Test)
> > Structures begin differing at:
> >    $a->[1]{earth} = Does not exist
> >    $b->[1]{earth} = '1'
> > 
> > > I stumbled across cmp_deeply(), but I can't figure out how
> > to use it. 
> > > It's part of a testing framework different from PerlUnit,
> > and I can't
> > > seem to be able to use it without running it inside that
> > other testing
> > > framework (which I don't have time to learn).
> > 
> > It's not that hard to shim the more popular Test::Builder based 
> > "assertion" modules into Test::Unit. The 
> off-the-top-of-my-head greasy 
> > hack of:
> > 
> > {   package Test::Unit::MyTestCase;
> >      use base qw( Test::Unit::TestCase );
> >      use Test::Builder '0.7';
> >      use Carp qw( confess );
> > 
> >      sub assert_using {
> >          my ( $self, $test_coderef ) = @_;
> >          my $builder = Test::Builder->new;
> >          $builder->reset;
> >          $builder->plan( 'no_plan' );
> >          my $output = '';
> >          open my $output_fh, '>', \$output or die;
> >          $builder->output( $output_fh );
> >          $builder->failure_output( $output_fh );
> >          $builder->todo_output( $output_fh );
> >          $self->assert( $test_coderef->(), $output );
> >      }
> > }
> > 
> > would allow you to do things like:
> > 
> > {   package Comparison::Test;
> >      use base qw( Test::Unit::MyTestCase );
> > 
> >      use Test::More; # provides is_deeply
> > 
> >      sub test_using_is_deeply {
> >          my $self = shift;
> >          $self->assert_using( sub {
> >              is_deeply   [ { hello =>1}, { world => 1 } ],
> >                          [ { hello =>1}, { earth => 1 } ];
> >          } );
> >      }
> > 
> >      use Test::Deep; # provides cmp_deeply
> > 
> >      sub test_using_cmp_deeply {
> >          my $self = shift;
> >          $self->assert_using( sub {
> >              cmp_deeply(   [ { hello =>1}, { world => 1 } ],
> >                          [ { hello =>1}, { earth => 1 } ]
> >              );
> >          } );
> >      }
> > }
> > 
> > giving you diagnostics like
> > 
> > 2) /private/var/tmp/folders.502/Cleanup At Startup/
> > test-201050484.793.pl:21 - test_using_cmp_deeply(Comparison::Test)
> > not ok 1
> > #   Failed test at /private/var/tmp/folders.502/Cleanup At Startup/ 
> > test-201050484.793.pl line 43.
> > # Comparing hash keys of $data->[1]
> > # Missing: 'earth'
> > # Extra: 'world'
> > 
> > 3) /private/var/tmp/folders.502/Cleanup At Startup/
> > test-201050484.793.pl:21 - test_using_is_deeply(Comparison::Test)
> > not ok 1
> > #   Failed test at /private/var/tmp/folders.502/Cleanup At Startup/ 
> > test-201050484.793.pl line 33.
> > #     Structures begin differing at:
> > #          $got->[1]{earth} = Does not exist
> > #     $expected->[1]{earth} = '1'
> > 
> > However if you're going to be using a bunch of Test::Builder based 
> > assertions it might be easier to use Test::Group or <bias 
> > class="author"> Test::Class </bias> instead.
> > 
> > Cheers,
> > 
> > Adrian
> > 
> > 
> 

Attachment: BlahTest.pm
Description: BlahTest.pm

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Perlunit-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perlunit-users

Reply via email to