15759b3d2Safresh1#!perl -w 25759b3d2Safresh1 35759b3d2Safresh1BEGIN { 45759b3d2Safresh1 if( $ENV{PERL_CORE} ) { 55759b3d2Safresh1 chdir 't'; 65759b3d2Safresh1 @INC = qw(../lib ../lib/Test/Simple/t/lib); 75759b3d2Safresh1 } 85759b3d2Safresh1} 95759b3d2Safresh1 105759b3d2Safresh1use lib 't/lib'; 11*f2a19305Safresh1use Test::More tests => 57; 125759b3d2Safresh1 135759b3d2Safresh1# Make sure we don't mess with $@ or $!. Test at bottom. 145759b3d2Safresh1my $Err = "this should not be touched"; 155759b3d2Safresh1my $Errno = 42; 165759b3d2Safresh1$@ = $Err; 175759b3d2Safresh1$! = $Errno; 185759b3d2Safresh1 195759b3d2Safresh1use_ok('Dummy'); 205759b3d2Safresh1is( $Dummy::VERSION, '0.01', 'use_ok() loads a module' ); 215759b3d2Safresh1require_ok('Test::More'); 225759b3d2Safresh1 235759b3d2Safresh1 245759b3d2Safresh1ok( 2 eq 2, 'two is two is two is two' ); 255759b3d2Safresh1is( "foo", "foo", 'foo is foo' ); 265759b3d2Safresh1isnt( "foo", "bar", 'foo isnt bar'); 27*f2a19305Safresh1{ 28*f2a19305Safresh1 use warnings; 29*f2a19305Safresh1 my $warning; 30*f2a19305Safresh1 local $SIG{__WARN__}= sub { $warning = $_[0] }; 31256a93a4Safresh1 isn::t("foo", "bar", 'foo isn\'t bar'); 32*f2a19305Safresh1 is($warning, "Use of apostrophe as package separator was deprecated in Perl 5.37.9,\n" 33*f2a19305Safresh1 . "and will be removed in Perl 5.42.0. You should change code that uses\n" 34*f2a19305Safresh1 . "Test::More::isn't() to use Test::More::isnt() as a replacement" 35*f2a19305Safresh1 . " at t/Legacy/More.t line 31\n", 36*f2a19305Safresh1 "Got expected warning from isn::t() under use warnings"); 37*f2a19305Safresh1} 38*f2a19305Safresh1{ 39*f2a19305Safresh1 no warnings "deprecated"; 40*f2a19305Safresh1 my $warning; 41*f2a19305Safresh1 local $SIG{__WARN__}= sub { $warning = $_[0] }; 42*f2a19305Safresh1 isn::t("foo", "bar", 'foo isn\'t bar'); 43*f2a19305Safresh1 is($warning, undef, "No warnings from isn::t() under no warnings deprecated"); 44*f2a19305Safresh1} 455759b3d2Safresh1 465759b3d2Safresh1#'# 475759b3d2Safresh1like("fooble", '/^foo/', 'foo is like fooble'); 485759b3d2Safresh1like("FooBle", '/foo/i', 'foo is like FooBle'); 495759b3d2Safresh1like("/usr/local/pr0n/", '/^\/usr\/local/', 'regexes with slashes in like' ); 505759b3d2Safresh1 515759b3d2Safresh1unlike("fbar", '/^bar/', 'unlike bar'); 525759b3d2Safresh1unlike("FooBle", '/foo/', 'foo is unlike FooBle'); 535759b3d2Safresh1unlike("/var/local/pr0n/", '/^\/usr\/local/','regexes with slashes in unlike' ); 545759b3d2Safresh1 555759b3d2Safresh1my @foo = qw(foo bar baz); 565759b3d2Safresh1unlike(@foo, '/foo/'); 575759b3d2Safresh1 585759b3d2Safresh1can_ok('Test::More', qw(require_ok use_ok ok is isnt like skip can_ok 595759b3d2Safresh1 pass fail eq_array eq_hash eq_set)); 605759b3d2Safresh1can_ok(bless({}, "Test::More"), qw(require_ok use_ok ok is isnt like skip 615759b3d2Safresh1 can_ok pass fail eq_array eq_hash eq_set)); 625759b3d2Safresh1 635759b3d2Safresh1 645759b3d2Safresh1isa_ok(bless([], "Foo"), "Foo"); 655759b3d2Safresh1isa_ok([], 'ARRAY'); 665759b3d2Safresh1isa_ok(\42, 'SCALAR'); 675759b3d2Safresh1{ 685759b3d2Safresh1 local %Bar::; 695759b3d2Safresh1 local @Foo::ISA = 'Bar'; 705759b3d2Safresh1 isa_ok( "Foo", "Bar" ); 715759b3d2Safresh1} 725759b3d2Safresh1 735759b3d2Safresh1 745759b3d2Safresh1# can_ok() & isa_ok should call can() & isa() on the given object, not 755759b3d2Safresh1# just class, in case of custom can() 765759b3d2Safresh1{ 775759b3d2Safresh1 local *Foo::can; 785759b3d2Safresh1 local *Foo::isa; 795759b3d2Safresh1 *Foo::can = sub { $_[0]->[0] }; 805759b3d2Safresh1 *Foo::isa = sub { $_[0]->[0] }; 815759b3d2Safresh1 my $foo = bless([0], 'Foo'); 825759b3d2Safresh1 ok( ! $foo->can('bar') ); 835759b3d2Safresh1 ok( ! $foo->isa('bar') ); 845759b3d2Safresh1 $foo->[0] = 1; 855759b3d2Safresh1 can_ok( $foo, 'blah'); 865759b3d2Safresh1 isa_ok( $foo, 'blah'); 875759b3d2Safresh1} 885759b3d2Safresh1 895759b3d2Safresh1 905759b3d2Safresh1pass('pass() passed'); 915759b3d2Safresh1 925759b3d2Safresh1ok( eq_array([qw(this that whatever)], [qw(this that whatever)]), 935759b3d2Safresh1 'eq_array with simple arrays' ); 945759b3d2Safresh1is @Test::More::Data_Stack, 0, '@Data_Stack not holding onto things'; 955759b3d2Safresh1 965759b3d2Safresh1ok( eq_hash({ foo => 42, bar => 23 }, {bar => 23, foo => 42}), 975759b3d2Safresh1 'eq_hash with simple hashes' ); 985759b3d2Safresh1is @Test::More::Data_Stack, 0; 995759b3d2Safresh1 1005759b3d2Safresh1ok( eq_set([qw(this that whatever)], [qw(that whatever this)]), 1015759b3d2Safresh1 'eq_set with simple sets' ); 1025759b3d2Safresh1is @Test::More::Data_Stack, 0; 1035759b3d2Safresh1 1045759b3d2Safresh1my @complex_array1 = ( 1055759b3d2Safresh1 [qw(this that whatever)], 1065759b3d2Safresh1 {foo => 23, bar => 42}, 1075759b3d2Safresh1 "moo", 1085759b3d2Safresh1 "yarrow", 1095759b3d2Safresh1 [qw(498 10 29)], 1105759b3d2Safresh1 ); 1115759b3d2Safresh1my @complex_array2 = ( 1125759b3d2Safresh1 [qw(this that whatever)], 1135759b3d2Safresh1 {foo => 23, bar => 42}, 1145759b3d2Safresh1 "moo", 1155759b3d2Safresh1 "yarrow", 1165759b3d2Safresh1 [qw(498 10 29)], 1175759b3d2Safresh1 ); 1185759b3d2Safresh1 1195759b3d2Safresh1is_deeply( \@complex_array1, \@complex_array2, 'is_deeply with arrays' ); 1205759b3d2Safresh1ok( eq_array(\@complex_array1, \@complex_array2), 1215759b3d2Safresh1 'eq_array with complicated arrays' ); 1225759b3d2Safresh1ok( eq_set(\@complex_array1, \@complex_array2), 1235759b3d2Safresh1 'eq_set with complicated arrays' ); 1245759b3d2Safresh1 1255759b3d2Safresh1my @array1 = (qw(this that whatever), 1265759b3d2Safresh1 {foo => 23, bar => 42} ); 1275759b3d2Safresh1my @array2 = (qw(this that whatever), 1285759b3d2Safresh1 {foo => 24, bar => 42} ); 1295759b3d2Safresh1 1305759b3d2Safresh1ok( !eq_array(\@array1, \@array2), 1315759b3d2Safresh1 'eq_array with slightly different complicated arrays' ); 1325759b3d2Safresh1is @Test::More::Data_Stack, 0; 1335759b3d2Safresh1 1345759b3d2Safresh1ok( !eq_set(\@array1, \@array2), 1355759b3d2Safresh1 'eq_set with slightly different complicated arrays' ); 1365759b3d2Safresh1is @Test::More::Data_Stack, 0; 1375759b3d2Safresh1 1385759b3d2Safresh1my %hash1 = ( foo => 23, 1395759b3d2Safresh1 bar => [qw(this that whatever)], 1405759b3d2Safresh1 har => { foo => 24, bar => 42 }, 1415759b3d2Safresh1 ); 1425759b3d2Safresh1my %hash2 = ( foo => 23, 1435759b3d2Safresh1 bar => [qw(this that whatever)], 1445759b3d2Safresh1 har => { foo => 24, bar => 42 }, 1455759b3d2Safresh1 ); 1465759b3d2Safresh1 1475759b3d2Safresh1is_deeply( \%hash1, \%hash2, 'is_deeply with complicated hashes' ); 1485759b3d2Safresh1ok( eq_hash(\%hash1, \%hash2), 'eq_hash with complicated hashes'); 1495759b3d2Safresh1 1505759b3d2Safresh1%hash1 = ( foo => 23, 1515759b3d2Safresh1 bar => [qw(this that whatever)], 1525759b3d2Safresh1 har => { foo => 24, bar => 42 }, 1535759b3d2Safresh1 ); 1545759b3d2Safresh1%hash2 = ( foo => 23, 1555759b3d2Safresh1 bar => [qw(this tha whatever)], 1565759b3d2Safresh1 har => { foo => 24, bar => 42 }, 1575759b3d2Safresh1 ); 1585759b3d2Safresh1 1595759b3d2Safresh1ok( !eq_hash(\%hash1, \%hash2), 1605759b3d2Safresh1 'eq_hash with slightly different complicated hashes' ); 1615759b3d2Safresh1is @Test::More::Data_Stack, 0; 1625759b3d2Safresh1 1635759b3d2Safresh1is( Test::Builder->new, Test::More->builder, 'builder()' ); 1645759b3d2Safresh1 1655759b3d2Safresh1 1665759b3d2Safresh1cmp_ok(42, '==', 42, 'cmp_ok =='); 1675759b3d2Safresh1cmp_ok('foo', 'eq', 'foo', ' eq'); 1685759b3d2Safresh1cmp_ok(42.5, '<', 42.6, ' <'); 1695759b3d2Safresh1cmp_ok(0, '||', 1, ' ||'); 1705759b3d2Safresh1 1715759b3d2Safresh1 1725759b3d2Safresh1# Piers pointed out sometimes people override isa(). 1735759b3d2Safresh1{ 1745759b3d2Safresh1 package Wibble; 1755759b3d2Safresh1 sub isa { 1765759b3d2Safresh1 my($self, $class) = @_; 1775759b3d2Safresh1 return 1 if $class eq 'Wibblemeister'; 1785759b3d2Safresh1 } 1795759b3d2Safresh1 sub new { bless {} } 1805759b3d2Safresh1} 1815759b3d2Safresh1isa_ok( Wibble->new, 'Wibblemeister' ); 1825759b3d2Safresh1 1835759b3d2Safresh1my $sub = sub {}; 1845759b3d2Safresh1is_deeply( $sub, $sub, 'the same function ref' ); 1855759b3d2Safresh1 1865759b3d2Safresh1use Symbol; 1875759b3d2Safresh1my $glob = gensym; 1885759b3d2Safresh1is_deeply( $glob, $glob, 'the same glob' ); 1895759b3d2Safresh1 1905759b3d2Safresh1is_deeply( { foo => $sub, bar => [1, $glob] }, 1915759b3d2Safresh1 { foo => $sub, bar => [1, $glob] } 1925759b3d2Safresh1 ); 1935759b3d2Safresh1 1945759b3d2Safresh1 1955759b3d2Safresh1# rt.cpan.org 53469 is_deeply with regexes 1965759b3d2Safresh1is_deeply( qr/a/, qr/a/, "same regex" ); 1975759b3d2Safresh1 1985759b3d2Safresh1 1995759b3d2Safresh1# These two tests must remain at the end. 2005759b3d2Safresh1is( $@, $Err, '$@ untouched' ); 2015759b3d2Safresh1cmp_ok( $!, '==', $Errno, '$! untouched' ); 202