Test::Simple/More/Builder/Tutorial 0.41
[p5sagit/p5-mst-13.2.git] / lib / Test / Simple / t / fail-more.t
index 6c61762..6fd88c8 100644 (file)
@@ -1,12 +1,16 @@
 #!perl -w
 
 BEGIN {
-    chdir 't' if -d 't';
-    @INC = '../lib';
+    if( $ENV{PERL_CORE} ) {
+        chdir 't';
+        @INC = ('../lib', 'lib');
+    }
+    else {
+        unshift @INC, 't/lib';
+    }
 }
 
 use strict;
-use lib '../t/lib';
 
 require Test::Simple::Catch;
 my($out, $err) = Test::Simple::Catch::caught();
@@ -36,84 +40,183 @@ sub ok ($;$) {
 package main;
 
 require Test::More;
-Test::More->import(tests => 12);
+my $Total = 28;
+Test::More->import(tests => $Total);
 
 # Preserve the line numbers.
 #line 38
 ok( 0, 'failing' );
-is(  "foo", "bar", 'foo is bar?');
+
+#line 40
+is( "foo", "bar", 'foo is bar?');
+is( undef, '',    'undef is empty string?');
+is( undef, 0,     'undef is 0?');
+is( '',    0,     'empty string is 0?' );
+
 isnt("foo", "foo", 'foo isnt foo?' );
 isn't("foo", "foo",'foo isn\'t foo?' );
 
 like( "foo", '/that/',  'is foo like that' );
+unlike( "foo", '/foo/', 'is foo unlike foo' );
+
+# Nick Clark found this was a bug.  Fixed in 0.40.
+like( "bug", '/(%)/',   'regex with % in it' );
 
 fail('fail()');
 
+#line 52
 can_ok('Mooble::Hooble::Yooble', qw(this that));
+can_ok('Mooble::Hooble::Yooble', ());
+
 isa_ok(bless([], "Foo"), "Wibble");
 isa_ok(42,    "Wibble", "My Wibble");
 isa_ok(undef, "Wibble", "Another Wibble");
-
+isa_ok([],    "HASH");
+
+#line 68
+cmp_ok( 'foo', 'eq', 'bar', 'cmp_ok eq' );
+cmp_ok( 42.1,  '==', 23,  , '       ==' );
+cmp_ok( 42,    '!=', 42   , '       !=' );
+cmp_ok( 1,     '&&', 0    , '       &&' );
+cmp_ok( 42,    '==', "foo", '       == with strings' );
+cmp_ok( 42,    'eq', "foo", '       eq with numbers' );
+cmp_ok( undef, 'eq', 'foo', '       eq with undef' );
+
+# generate a $!, it changes its value by context.
+-e "wibblehibble";
+my $Errno_Number = $!+0;
+my $Errno_String = $!.'';
+cmp_ok( $!,    'eq', '',    '       eq with stringified errno' );
+cmp_ok( $!,    '==', -1,    '       eq with numerified errno' );
+
+#line 84
 use_ok('Hooble::mooble::yooble');
 require_ok('ALL::YOUR::BASE::ARE::BELONG::TO::US::wibble');
 
+#line 88
 END {
     My::Test::ok($$out eq <<OUT, 'failing output');
-1..12
+1..$Total
 not ok 1 - failing
 not ok 2 - foo is bar?
-not ok 3 - foo isnt foo?
-not ok 4 - foo isn't foo?
-not ok 5 - is foo like that
-not ok 6 - fail()
-not ok 7 - Mooble::Hooble::Yooble->can(...)
-not ok 8 - The object isa Wibble
-not ok 9 - My Wibble isa Wibble
-not ok 10 - Another Wibble isa Wibble
-not ok 11 - use Hooble::mooble::yooble;
-not ok 12 - require ALL::YOUR::BASE::ARE::BELONG::TO::US::wibble;
+not ok 3 - undef is empty string?
+not ok 4 - undef is 0?
+not ok 5 - empty string is 0?
+not ok 6 - foo isnt foo?
+not ok 7 - foo isn't foo?
+not ok 8 - is foo like that
+not ok 9 - is foo unlike foo
+not ok 10 - regex with % in it
+not ok 11 - fail()
+not ok 12 - Mooble::Hooble::Yooble->can(...)
+not ok 13 - Mooble::Hooble::Yooble->can(...)
+not ok 14 - The object isa Wibble
+not ok 15 - My Wibble isa Wibble
+not ok 16 - Another Wibble isa Wibble
+not ok 17 - The object isa HASH
+not ok 18 - cmp_ok eq
+not ok 19 -        ==
+not ok 20 -        !=
+not ok 21 -        &&
+not ok 22 -        == with strings
+not ok 23 -        eq with numbers
+not ok 24 -        eq with undef
+not ok 25 -        eq with stringified errno
+not ok 26 -        eq with numerified errno
+not ok 27 - use Hooble::mooble::yooble;
+not ok 28 - require ALL::YOUR::BASE::ARE::BELONG::TO::US::wibble;
 OUT
 
     my $err_re = <<ERR;
 #     Failed test ($0 at line 38)
-#     Failed test ($0 at line 39)
+#     Failed test ($0 at line 40)
 #          got: 'foo'
 #     expected: 'bar'
-#     Failed test ($0 at line 40)
-#     it should not be 'foo'
-#     but it is.
 #     Failed test ($0 at line 41)
-#     it should not be 'foo'
-#     but it is.
+#          got: undef
+#     expected: ''
+#     Failed test ($0 at line 42)
+#          got: undef
+#     expected: '0'
 #     Failed test ($0 at line 43)
+#          got: ''
+#     expected: '0'
+#     Failed test ($0 at line 45)
+#     'foo'
+#         ne
+#     'foo'
+#     Failed test ($0 at line 46)
+#     'foo'
+#         ne
+#     'foo'
+#     Failed test ($0 at line 48)
 #                   'foo'
 #     doesn't match '/that/'
-#     Failed test ($0 at line 45)
-#     Failed test ($0 at line 47)
+#     Failed test ($0 at line 49)
+#                   'foo'
+#           matches '/foo/'
+#     Failed test ($0 at line 52)
+#                   'bug'
+#     doesn't match '/(%)/'
+#     Failed test ($0 at line 54)
+#     Failed test ($0 at line 52)
 #     Mooble::Hooble::Yooble->can('this') failed
 #     Mooble::Hooble::Yooble->can('that') failed
-#     Failed test ($0 at line 48)
-#     The object isn't a 'Wibble'
-#     Failed test ($0 at line 49)
+#     Failed test ($0 at line 53)
+#     can_ok() called with no methods
+#     Failed test ($0 at line 55)
+#     The object isn't a 'Wibble' its a 'Foo'
+#     Failed test ($0 at line 56)
 #     My Wibble isn't a reference
-#     Failed test ($0 at line 50)
+#     Failed test ($0 at line 57)
 #     Another Wibble isn't defined
+#     Failed test ($0 at line 58)
+#     The object isn't a 'HASH' its a 'ARRAY'
+#     Failed test ($0 at line 68)
+#          got: 'foo'
+#     expected: 'bar'
+#     Failed test ($0 at line 69)
+#          got: 42.1
+#     expected: 23
+#     Failed test ($0 at line 70)
+#     '42'
+#         !=
+#     '42'
+#     Failed test ($0 at line 71)
+#     '1'
+#         &&
+#     '0'
+#     Failed test ($0 at line 72)
+#          got: 42
+#     expected: 0
+#     Failed test ($0 at line 73)
+#          got: '42'
+#     expected: 'foo'
+#     Failed test ($0 at line 74)
+#          got: undef
+#     expected: 'foo'
+#     Failed test ($0 at line 80)
+#          got: '$Errno_String'
+#     expected: ''
+#     Failed test ($0 at line 81)
+#          got: $Errno_Number
+#     expected: -1
 ERR
 
    my $filename = quotemeta $0;
    my $more_err_re = <<ERR;
-#     Failed test \\($filename at line 52\\)
+#     Failed test \\($filename at line 84\\)
 #     Tried to use 'Hooble::mooble::yooble'.
 #     Error:  Can't locate Hooble.* in \\\@INC .*
-#     Failed test \\($filename at line 53\\)
+#     Failed test \\($filename at line 85\\)
 #     Tried to require 'ALL::YOUR::BASE::ARE::BELONG::TO::US::wibble'.
 #     Error:  Can't locate ALL.* in \\\@INC .*
-# Looks like you failed 12 tests of 12.
+# Looks like you failed $Total tests of $Total.
 ERR
 
     unless( My::Test::ok($$err =~ /^\Q$err_re\E$more_err_re$/, 
                          'failing errors') ) {
-        print map "# $_", $$err;
+        print $$err;
     }
 
     exit(0);