r10341 - in /branches/upstream/libtest-differences-perl: ./ current/ current/eg/ current/t/
vdanjean at users.alioth.debian.org
vdanjean at users.alioth.debian.org
Sat Dec 1 12:17:34 UTC 2007
Author: vdanjean
Date: Sat Dec 1 12:17:34 2007
New Revision: 10341
URL: http://svn.debian.org/wsvn/?sc=1&rev=10341
Log:
[svn-inject] Installing original source of libtest-differences-perl
Added:
branches/upstream/libtest-differences-perl/
branches/upstream/libtest-differences-perl/current/
branches/upstream/libtest-differences-perl/current/Changes
branches/upstream/libtest-differences-perl/current/Differences.pm
branches/upstream/libtest-differences-perl/current/MANIFEST
branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP (with props)
branches/upstream/libtest-differences-perl/current/Makefile.PL
branches/upstream/libtest-differences-perl/current/eg/
branches/upstream/libtest-differences-perl/current/eg/to_diff_or_not_to_diff
branches/upstream/libtest-differences-perl/current/t/
branches/upstream/libtest-differences-perl/current/t/00flatten.t
branches/upstream/libtest-differences-perl/current/t/01text_vs_data.t
branches/upstream/libtest-differences-perl/current/t/02pass.t
branches/upstream/libtest-differences-perl/current/t/03struct.t
branches/upstream/libtest-differences-perl/current/t/10test.t
branches/upstream/libtest-differences-perl/current/t/20test_more.t
branches/upstream/libtest-differences-perl/current/t/99example.t
Added: branches/upstream/libtest-differences-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/Changes?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/Changes (added)
+++ branches/upstream/libtest-differences-perl/current/Changes Sat Dec 1 12:17:34 2007
@@ -1,0 +1,47 @@
+Changes file for Test::Differences
+
+0.47 Tue Jun 17 08:54:59 EDT 2003
+ - Add context option (reworked patch from fetko at slaysys.com)
+ - Improve options handling for eq_or_diff(), $name is no longer
+ required before \%options
+ - Use **, not ^, for exponentiation
+ ("Blake D. Mills IV" <blakem at blakem.com>)
+
+0.46 Tue Aug 27 13:45:51 EDT 2002
+ - Minor doc tweaks
+
+0.45 Sun Jul 14 06:58:48 EDT 2002
+ - Fix $Data::Dumper::FooBar to be ...::Foobar, patch by
+ Ilya Martynov <ilya at martynov.org>
+ - Correct the "use Test::Differences" example.
+ - Require Text::Diff 0.34 in to get escaping fixes.
+
+0.44 Mon Jul 8 17:02:11 EDT 2002
+ - Document Data::Dumper shortcomings reported by Yves Orton
+ <demerphq at hotmail.com> and Ilya Martynov <ilya at martynov.org>.
+
+0.43 Mon May 13 09:49:50 EDT 2002
+ - Dump "unknown" structures instead of treating them like
+ arrays of scalars. Reported by Yves Orton <demerphq at hotmail.com>.
+
+0.42 Wed Jan 2 21:31:32 EST 2002
+ - T.J. Mather spotted a bug where two identical results would compare
+ as different, causing false negatives.
+
+0.41
+ - forgot to log this change.
+
+0.4 Fri Dec 21 08:55:13 EST 2001
+ - Moved table style diffs and escaping in to Test::Diff
+ - Improve docs
+ - Add a few more tests
+
+0.3 Sat Dec 15 02:06:26 EST 2001
+ - Only use Data::Dumper on both args or neither arg.
+ - Improve escaping (Michael G Schwern <schwern at pobox.com>,
+ - remove leftover debugging code (Tatsuhiko Miyagawa <miyagawa at edge.co.jp>)
+ - add t/00escape.t
+ - PREREQ_PM => 'Text::Diff' (Michael G Schwern <schwern at pobox.com>)
+
+0.2
+ - Initial public release
Added: branches/upstream/libtest-differences-perl/current/Differences.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/Differences.pm?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/Differences.pm (added)
+++ branches/upstream/libtest-differences-perl/current/Differences.pm Sat Dec 1 12:17:34 2007
@@ -1,0 +1,485 @@
+package Test::Differences;
+
+=head1 NAME
+
+Test::Differences - Test strings and data structures and show differences if not ok
+
+=head1 SYNOPSIS
+
+ use Test; ## Or use Test::More
+ use Test::Differences;
+
+ eq_or_diff $got, "a\nb\nc\n", "testing strings";
+ eq_or_diff \@got, [qw( a b c )], "testing arrays";
+
+ ## Passing options:
+ eq_or_diff $got, $expected, $name, { context => 300 }; ## options
+
+ ## Using with DBI-like data structures
+
+ use DBI;
+
+ ... open connection & prepare statement and @expected_... here...
+
+ eq_or_diff $sth->fetchall_arrayref, \@expected_arrays "testing DBI arrays";
+ eq_or_diff $sth->fetchall_hashref, \@expected_hashes, "testing DBI hashes";
+
+ ## To force textual or data line numbering (text lines are numbered 1..):
+ eq_or_diff_text ...;
+ eq_or_diff_data ...;
+
+=head1 DESCRIPTION
+
+When the code you're testing returns multiple lines, records or data
+structures and they're just plain wrong, an equivalent to the Unix
+C<diff> utility may be just what's needed. Here's output from an
+example test script that checks two text documents and then two
+(trivial) data structures:
+
+ t/99example....1..3
+ not ok 1 - differences in text
+ # Failed test ((eval 2) at line 14)
+ # +---+----------------+----------------+
+ # | Ln|Got |Expected |
+ # +---+----------------+----------------+
+ # | 1|this is line 1 |this is line 1 |
+ # * 2|this is line 2 |this is line b *
+ # | 3|this is line 3 |this is line 3 |
+ # +---+----------------+----------------+
+ not ok 2 - differences in whitespace
+ # Failed test ((eval 2) at line 20)
+ # +---+------------------+------------------+
+ # | Ln|Got |Expected |
+ # +---+------------------+------------------+
+ # | 1| indented | indented |
+ # * 2| indented |\tindented *
+ # | 3| indented | indented |
+ # +---+------------------+------------------+
+ not ok 3
+ # Failed test ((eval 2) at line 22)
+ # +----+-------------------------------------+----------------------------+
+ # | Elt|Got |Expected |
+ # +----+-------------------------------------+----------------------------+
+ # * 0|bless( [ |[ *
+ # * 1| 'Move along, nothing to see here' | 'Dry, humorless message' *
+ # * 2|], 'Test::Builder' ) |] *
+ # +----+-------------------------------------+----------------------------+
+ # Looks like you failed 3 tests of 3.
+
+eq_or_diff_...() compares two strings or (limited) data structures and
+either emits an ok indication or a side-by-side diff. Test::Differences
+is designed to be used with Test.pm and with Test::Simple, Test::More,
+and other Test::Builder based testing modules. As the SYNOPSIS shows,
+another testing module must be used as the basis for your test suite.
+
+These functions assume that you are presenting it with "flat" records,
+looking like:
+
+ - scalars composed of record-per-line
+ - arrays of scalars,
+ - arrays of arrays of scalars,
+ - arrays of hashes containing only scalars
+
+All of these are flattened in to single strings which are then compared
+for differences. Differently data structures can be compared, as long
+as they flatten identically.
+
+All other data structures are run through Data::Dumper first. This is a
+bit dangerous, as some versions of perl shipped with Data::Dumpers that
+could do the oddest things with unexpected, like core dump. Only as of
+5.8.0 does Data::Dumper sort hash keys, which is necessary for HASH
+dumps to be fully predictable. This will be changed when this bites
+somebody or I get some free time.
+
+C<eq_or_diff()> starts counting records at 0 unless you pass it two text
+strings:
+
+ eq_or_diff $a, $b; ## First line is line number 1
+ eq_or_diff @a, @b; ## First element is element 0
+ eq_or_diff $a, @b; ## First line/element is element 0
+
+If you want to force a first record number of 0, use C<eq_or_diff_data>. If
+you want to force a first record number of 1, use C<eq_or_diff_text>. I chose
+this over passing in an options hash because it's clearer and simpler this way.
+YMMV.
+
+=head1 OPTIONS
+
+There is currently only one option: "context". This allows you to
+control the amount of context shown:
+
+ eq_or_diff $got, $expected, $name, { context => 50000};
+
+will show you lots and lots of context. Normally, eq_or_diff() uses
+some heuristics to determine whether to show 3 lines of context (like
+a normal unified diff) or 25 lines (for
+
+=head1 Deploying Test::Differences
+
+There are three basic ways of deploying Test::Differences requiring more or less
+labor by you or your users.
+
+=over
+
+=item *
+
+eval "use Test::Differences";
+
+This is the easiest option.
+
+If you want to detect the presence of Test::Differences on the fly, something
+like the following code might do the trick for you:
+
+ use Test qw( !ok ); ## get all syms *except* ok
+
+ eval "use Test::Differences";
+ use Data::Dumper;
+
+ sub ok {
+ goto &eq_or_diff if defined &eq_or_diff && @_ > 1;
+ @_ = map ref $_ ? Dumper( @_ ) : $_, @_;
+ goto Test::&ok;
+ }
+
+ plan tests => 1;
+
+ ok "a", "b";
+
+=item *
+
+PREREQ_PM => { .... "Test::Differences" => 0, ... }
+
+This method will let CPAN and CPANPLUS users download it automatically. It
+will discomfit those users who choose/have to download all packages manually.
+
+=item *
+
+t/lib/Test/Differences.pm, t/lib/Text/Diff.pm, ...
+
+By placing Test::Differences and it's prerequisites in the t/lib directory, you
+avoid forcing your users to download the Test::Differences manually if they
+aren't using CPAN or CPANPLUS.
+
+If you put a C<use lib "t/lib";> in the top of each test suite before the
+C<use Test::Differences;>, C<make test> should work well.
+
+You might want to check once in a while for new Test::Differences releases
+if you do this.
+
+
+
+=back
+
+
+=head1 LIMITATIONS
+
+This module "mixes in" with Test.pm or any of the test libraries based on
+Test::Builder (Test::Simple, Test::More, etc). It does this by
+peeking to see whether Test.pm or Test/Builder.pm is in %INC, so if you are
+not using one of those, it will print a warning and play dumb by not emitting
+test numbers (or incrementing them). If you are using one of these, it
+should interoperate nicely.
+
+Uses Data::Dumper for complex data structures (like hashes :), which can lead
+to some problems on older perls.
+
+Exports all 3 functions by default (and by design). Use
+
+ use Test::Differences ();
+
+to suppress this behavior if you don't like the namespace pollution.
+
+This module will not override functions like ok(), is(), is_deeply(), etc. If
+it did, then you could C<eval "use Test::Differences qw( is_deeply );"> to get
+automatic upgrading to diffing behaviors without the C<sub my_ok> shown above.
+Test::Differences intentionally does not provide this behavior because this
+would mean that Test::Differences would need to emulate every popular test
+module out there, which would require far more coding and maintenance that I'm
+willing to do. Use the eval and my_ok deployment shown above if you want some
+level of automation.
+
+=cut
+
+$VERSION = 0.47;
+
+use Exporter;
+
+ at ISA = qw( Exporter );
+ at EXPORT = qw( eq_or_diff eq_or_diff_text eq_or_diff_data );
+
+use strict;
+
+use Carp;
+use Text::Diff;
+
+sub _isnt_ARRAY_of_scalars {
+ return 1 if ref ne "ARRAY";
+ return scalar grep ref, @$_;
+}
+
+
+sub _isnt_HASH_of_scalars {
+ return 1 if ref ne "HASH";
+ return scalar grep ref, keys %$_;
+}
+
+use constant ARRAY_of_scalars => "ARRAY of scalars";
+use constant ARRAY_of_ARRAYs_of_scalars => "ARRAY of ARRAYs of scalars";
+use constant ARRAY_of_HASHes_of_scalars => "ARRAY of HASHes of scalars";
+
+
+sub _grok_type {
+ local $_ = shift if @_;
+ return "SCALAR" unless ref ;
+ if ( ref eq "ARRAY" ) {
+ return undef unless @$_;
+ return ARRAY_of_scalars unless
+ _isnt_ARRAY_of_scalars;
+ return ARRAY_of_ARRAYs_of_scalars
+ unless grep _isnt_ARRAY_of_scalars, @$_;
+ return ARRAY_of_HASHes_of_scalars
+ unless grep _isnt_HASH_of_scalars, @$_;
+ return 0;
+ }
+}
+
+
+## Flatten any acceptable data structure in to an array of lines.
+sub _flatten {
+ my $type = shift;
+ local $_ = shift if @_;
+
+ return [ split /^/m ] unless ref;
+
+ croak "Can't flatten $_" unless $type ;
+
+ ## Copy the top level array so we don't trash the originals
+ my @recs = @$_;
+
+ if ( $type eq ARRAY_of_ARRAYs_of_scalars ) {
+ ## Also copy the inner arrays if need be
+ $_ = [ @$_ ] for @recs;
+ }
+
+
+ if ( $type eq ARRAY_of_HASHes_of_scalars ) {
+ my %headings;
+ for my $rec ( @recs ) {
+ $headings{$_} = 1 for keys %$rec;
+ }
+ my @headings = sort keys %headings;
+
+ ## Convert all hashes in to arrays.
+ for my $rec ( @recs ) {
+ $rec = [ map $rec->{$_}, @headings ],
+ }
+
+ unshift @recs, \@headings;
+
+ $type = ARRAY_of_ARRAYs_of_scalars;
+ }
+
+ if ( $type eq ARRAY_of_ARRAYs_of_scalars ) {
+ ## Convert undefs
+ for my $rec ( @recs ) {
+ for ( @$rec ) {
+ $_ = "<undef>" unless defined;
+ }
+ $rec = join ",", @$rec;
+ }
+ }
+
+ return \@recs;
+}
+
+
+sub _identify_callers_test_package_of_choice {
+ ## This is called at each test in case Test::Differences was used before
+ ## the base testing modules.
+ ## First see if %INC tells us much of interest.
+ my $has_builder_pm = grep $_ eq "Test/Builder.pm", keys %INC;
+ my $has_test_pm = grep $_ eq "Test.pm", keys %INC;
+
+ return "Test" if $has_test_pm && ! $has_builder_pm;
+ return "Test::Builder" if ! $has_test_pm && $has_builder_pm;
+
+ if ( $has_test_pm && $has_builder_pm ) {
+ ## TODO: Look in caller's namespace for hints. For now, assume Builder.
+ ## This should only ever be an issue if multiple test suites end
+ ## up in memory at once.
+ return "Test::Builder";
+ }
+}
+
+
+my $warned_of_unknown_test_lib;
+
+sub eq_or_diff_text { $_[3] = { data_type => "text" }; goto &eq_or_diff; }
+sub eq_or_diff_data { $_[3] = { data_type => "data" }; goto &eq_or_diff; }
+
+## This string is a cheat: it's used to see if the two arrays of values
+## are identical. The stringified values are joined using this joint
+## and compared using eq. This is a deep equality comparison for
+## references and a shallow one for scalars.
+my $joint = chr( 0 ) . "A" . chr( 1 );
+
+sub eq_or_diff {
+ my ( @vals, $name, $options );
+ $options = pop if @_ > 2 && ref $_[-1];
+ ( $vals[0], $vals[1], $name ) = @_;
+
+ my $data_type;
+ $data_type = $options->{data_type} if $options;
+ $data_type ||= "text" unless ref $vals[0] || ref $vals[1];
+ $data_type ||= "data";
+
+ my @widths;
+
+ my @types = map _grok_type, @vals;
+
+ my $dump_it = !$types[0] || !$types[1];
+
+ if ( $dump_it ) {
+ require Data::Dumper;
+ local $Data::Dumper::Indent = 1;
+ local $Data::Dumper::Sortkeys = 1;
+ local $Data::Dumper::Purity = 0;
+ local $Data::Dumper::Terse = 1;
+ local $Data::Dumper::Deepcopy = 1;
+ local $Data::Dumper::Quotekeys = 0;
+ @vals = map
+ [ split /^/, Data::Dumper::Dumper( $_ ) ],
+ @vals;
+ }
+ else {
+ @vals = (
+ _flatten( $types[0], $vals[0] ),
+ _flatten( $types[1], $vals[1] )
+ );
+ }
+
+ my $caller = caller;
+
+ my $passed = join( $joint, @{$vals[0]} ) eq
+ join( $joint, @{$vals[1]} );
+
+ my $diff;
+ unless ( $passed ) {
+ my $context;
+
+ $context = $options->{context}
+ if exists $options->{context};
+
+ $context = $dump_it ? 2**31 : grep( @$_ > 25, @vals ) ? 3 : 25
+ unless defined $context;
+
+ confess "context must be an integer: '$context'\n"
+ unless $context =~ /\A\d+\z/;
+
+ $diff = diff @vals, {
+ CONTEXT => $context,
+ STYLE => "Table",
+ FILENAME_A => "Got",
+ FILENAME_B => "Expected",
+ OFFSET_A => $data_type eq "text" ? 1 : 0,
+ OFFSET_B => $data_type eq "text" ? 1 : 0,
+ INDEX_LABEL => $data_type eq "text" ? "Ln" : "Elt",
+ };
+ chomp $diff;
+ $diff .= "\n";
+ }
+
+ my $which = _identify_callers_test_package_of_choice;
+
+ if ( $which eq "Test" ) {
+ @_ = $passed
+ ? ( "", "", $name )
+ : ( "\n$diff", "No differences", $name );
+ goto &Test::ok;
+ }
+ elsif ( $which eq "Test::Builder" ) {
+ my $test = Test::Builder->new;
+ ## TODO: Call exported_to here? May not need to because the caller
+ ## should have imported something based on Test::Builder already.
+ $test->ok( $passed, $name );
+ $test->diag( $diff ) unless $passed;
+ }
+ else {
+ unless ( $warned_of_unknown_test_lib ) {
+ Carp::cluck
+ "Can't identify test lib in use, doesn't seem to be Test.pm or Test::Builder based\n";
+ $warned_of_unknown_test_lib = 1;
+ }
+ ## Play dumb and hope nobody notices the fool drooling in the corner
+ if ( $passed ) {
+ print "ok\n";
+ }
+ else {
+ $diff =~ s/^/# /gm;
+ print "not ok\n", $diff;
+ }
+ }
+}
+
+
+=head1 LIMITATIONS
+
+Perls before 5.6.0 don't support characters > 255 at all, and 5.6.0
+seems broken. This means that you might get odd results using perl5.6.0
+with unicode strings.
+
+Relies on Data::Dumper (for now), which, prior to perl5.8, will not
+always report hashes in the same order. C< $Data::Dumper::SortKeys >
+I<is> set to 1, so on more recent versions of Data::Dumper, this should
+not occur. Check CPAN to see if it's been peeled out of the main perl
+distribution and backported. Reported by Ilya Martynov
+<ilya at martynov.org>, although the SortKeys "future perfect" workaround
+has been set in anticipation of a new Data::Dumper for a while. Note
+that the two hashes should report the same here:
+
+ not ok 5
+ # Failed test (t/ctrl/05-home.t at line 51)
+ # +----+------------------------+----+------------------------+
+ # | Elt|Got | Elt|Expected |
+ # +----+------------------------+----+------------------------+
+ # | 0|{ | 0|{ |
+ # | 1| 'password' => '', | 1| 'password' => '', |
+ # * 2| 'method' => 'login', * | |
+ # | 3| 'ctrl' => 'home', | 2| 'ctrl' => 'home', |
+ # | | * 3| 'method' => 'login', *
+ # | 4| 'email' => 'test' | 4| 'email' => 'test' |
+ # | 5|} | 5|} |
+ # +----+------------------------+----+------------------------+
+
+Data::Dumper also overlooks the difference between
+
+ $a[0] = \$a[1];
+ $a[1] = \$a[0]; # $a[0] = \$a[1]
+
+and
+
+ $x = \$y;
+ $y = \$x;
+ @a = ( $x, $y ); # $a[0] = \$y, not \$a[1]
+
+The former involves two scalars, the latter 4: $x, $y, and @a[0,1].
+This was carefully explained to me in words of two syllables or less by
+Yves Orton <demerphq at hotmail.com>. The plan to address this is to allow
+you to select Data::Denter or some other module of your choice as an
+option.
+
+=head1 AUTHOR
+
+ Barrie Slaymaker <barries at slaysys.com>
+
+=head1 LICENSE
+
+Copyright 2001 Barrie Slaymaker, All Rights Reserved.
+
+You may use this software under the terms of the GNU public license, any
+version, or the Artistic license.
+
+=cut
+
+
+1;
Added: branches/upstream/libtest-differences-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/MANIFEST?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/MANIFEST (added)
+++ branches/upstream/libtest-differences-perl/current/MANIFEST Sat Dec 1 12:17:34 2007
@@ -1,0 +1,13 @@
+Changes
+Differences.pm
+MANIFEST
+MANIFEST.SKIP
+Makefile.PL
+eg/to_diff_or_not_to_diff
+t/00flatten.t
+t/01text_vs_data.t
+t/02pass.t
+t/03struct.t
+t/10test.t
+t/20test_more.t
+t/99example.t
Added: branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP (added)
+++ branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP Sat Dec 1 12:17:34 2007
@@ -1,0 +1,13 @@
+CVS/.*
+\.bak$
+\.sw[a-z]$
+\.tar$
+\.tgz$
+\.tar\.gz$
+^mess/
+^tmp/
+^blib/
+^Makefile$
+^Makefile\.[a-z]+$
+^pm_to_blib$
+~$
Propchange: branches/upstream/libtest-differences-perl/current/MANIFEST.SKIP
------------------------------------------------------------------------------
svn:executable =
Added: branches/upstream/libtest-differences-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/Makefile.PL?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/Makefile.PL (added)
+++ branches/upstream/libtest-differences-perl/current/Makefile.PL Sat Dec 1 12:17:34 2007
@@ -1,0 +1,19 @@
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => "Test::Differences",
+ VERSION_FROM => "Differences.pm",
+ PREREQ_PM => {
+ "Text::Diff" => 0.34,
+ },
+);
+
+
+sub MY::libscan {
+ package MY ;
+ my $self = shift ;
+ my ( $path ) = @_ ;
+ return '' if /\.sw[a-z]$/ ;
+ return '' unless length $self->SUPER::libscan( $path ) ;
+ return $path ;
+}
Added: branches/upstream/libtest-differences-perl/current/eg/to_diff_or_not_to_diff
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/eg/to_diff_or_not_to_diff?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/eg/to_diff_or_not_to_diff (added)
+++ branches/upstream/libtest-differences-perl/current/eg/to_diff_or_not_to_diff Sat Dec 1 12:17:34 2007
@@ -1,0 +1,12 @@
+use Test;
+
+eval "use Test::Differences";
+
+sub my_ok {
+ goto &eq_or_diff if defined &eq_or_diff;
+ goto &ok;
+}
+
+plan tests => 1;
+
+my_ok "a", "b";
Added: branches/upstream/libtest-differences-perl/current/t/00flatten.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/00flatten.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/00flatten.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/00flatten.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,30 @@
+use Test ;
+
+use Test::Differences ;
+
+sub f($) {
+ my $out = join "|",
+ @{Test::Differences::_flatten(
+ Test::Differences::_grok_type( $_[0] ),
+ $_[0]
+ )
+ } ;
+ $out =~ s/ +//g ;
+ $out ;
+}
+
+my @tests = (
+sub { ok f "a", "a" },
+sub { ok f "a\nb\n", "a\n|b\n" },
+sub { ok f [qw( a b )], "a|b" },
+sub { ok f [[qw( a b )], [qw(c d)]], "a,b|c,d" },
+sub { ok f [{ a => 0, b => 1 }, { a => 2, c => 3}],
+ "a,b,c|0,1,<undef>|2,<undef>,3"
+},
+## Complex data structures are not flattened, they're dumped, so don't
+## test that here.
+) ;
+
+plan tests => scalar @tests ;
+
+$_->() for @tests ;
Added: branches/upstream/libtest-differences-perl/current/t/01text_vs_data.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/01text_vs_data.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/01text_vs_data.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/01text_vs_data.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,18 @@
+use Test ;
+
+use Test::Differences ;
+
+# use large enough data sets that this thing chooses context => 3 instead
+# of "full document context".
+my $a = ("\n" x 30 ) . "a\n" ;
+my $b = ("\n" x 30 ) . "b\n" ;
+
+my @tests = (
+sub { eq_or_diff $a, $b },
+sub { eq_or_diff_text $a, $b },
+sub { eq_or_diff_data $a, $b },
+) ;
+
+plan tests => scalar @tests, todo => [1.. at tests] ;
+
+$_->() for @tests ;
Added: branches/upstream/libtest-differences-perl/current/t/02pass.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/02pass.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/02pass.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/02pass.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,16 @@
+use Test ;
+
+use Test::Differences ;
+
+# use large enough data sets that this thing chooses context => 3 instead
+# of "full document context".
+my $a = ("\n" x 30 ) . "a\n" ;
+my $b = ("\n" x 30 ) . "b\n" ;
+
+my @tests = (
+sub { eq_or_diff [ "a", "b" ], [ "a", "b" ] },
+) ;
+
+plan tests => scalar @tests;
+
+$_->() for @tests ;
Added: branches/upstream/libtest-differences-perl/current/t/03struct.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/03struct.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/03struct.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/03struct.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,19 @@
+use Test ;
+
+use Test::Differences ;
+
+## This mind-bender submitted by Yves Orton <demerphq at hotmail.com>
+my ( $ar, $x, $y );
+$ar->[0] = \$ar->[1];
+$ar->[1] = \$ar->[0];
+$x = \$y;
+$y = \$x;
+
+my @tests = (
+sub { eq_or_diff [ \"a", \"b" ], [ \"a", \"b" ] },
+sub { eq_or_diff $ar, [ $x, $y ] },
+) ;
+
+plan tests => scalar @tests;
+
+$_->() for @tests ;
Added: branches/upstream/libtest-differences-perl/current/t/10test.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/10test.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/10test.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/10test.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,19 @@
+use Test ;
+
+use Test::Differences ;
+
+my @tests = (
+sub { eq_or_diff "a", "a" },
+sub { eq_or_diff "a", "b" },
+sub { eq_or_diff "a\nb\nc\n", "a\nc\n" },
+sub { eq_or_diff "a\nb\nc\n", "a\nB\nc\n" },
+sub { eq_or_diff "a\nb\nc\nd\ne\n", "a\nc\ne\n" },
+sub { eq_or_diff "a\nb\nc\nd\ne\n", "a\nb\nd\ne\n", { context => 0 } },
+sub { eq_or_diff "a\nb\nc\nd\ne\n", "a\nb\nd\ne\n", { context => 10 } },
+) ;
+
+plan tests => scalar @tests, todo => [2.. at tests] ;
+
+print "# This test misuses TODO: these TODOs are actually real tests.\n";
+
+$_->() for @tests ;
Added: branches/upstream/libtest-differences-perl/current/t/20test_more.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/20test_more.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/20test_more.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/20test_more.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,13 @@
+use Test::More ;
+
+use Test::Differences ;
+
+plan tests => 2 ;
+
+eq_or_diff "a", "a" ;
+
+print "# This test misuses TODO: these TODOs are actually real tests.\n";
+TODO: {
+ local $TODO = "testing failure, not really a TODO" ;
+ eq_or_diff "a", "b" ;
+}
Added: branches/upstream/libtest-differences-perl/current/t/99example.t
URL: http://svn.debian.org/wsvn/branches/upstream/libtest-differences-perl/current/t/99example.t?rev=10341&op=file
==============================================================================
--- branches/upstream/libtest-differences-perl/current/t/99example.t (added)
+++ branches/upstream/libtest-differences-perl/current/t/99example.t Sat Dec 1 12:17:34 2007
@@ -1,0 +1,41 @@
+use strict;
+my $x;
+
+my $demo = $ENV{DEMO};
+
+eval <<'PRELOAD' ? eval <<'TEST' : ( $x = $@, eval <<'FALLBACK' );
+ use Test::More;
+ 1;
+PRELOAD
+ use Test::Differences;
+
+ plan tests => 3 ;
+
+ print "#\n# This test misuses TODO:",
+ " these TODOs are actually real tests.\n#\n"
+ unless $demo;
+ TODO: {
+ local $TODO = "testing failure, not really a TODO" unless $demo;
+ my @docs = (
+ join( "", map "this is line $_\n", qw( 1 2 3 ) ),
+ join( "", map "this is line $_\n", qw( 1 b 3 ) )
+ );
+ eq_or_diff @docs, "differences in text";
+
+ @docs = ( ( " indented\n" x 3 ) x 2 );
+
+ $docs[1] =~ s/(^..*?^)\s+/$1\t/ms or die "Can't subst \\t for ' '";
+
+ eq_or_diff @docs, "differences in whitespace";
+
+ eq_or_diff( Test::Builder->new, [ "Dry, humorless message" ] );
+ }
+TEST
+ use Test;
+
+ plan tests => 1;
+
+ skip $x, "" ;
+FALLBACK
+
+die $@ if $@ ;
More information about the Pkg-perl-cvs-commits
mailing list