This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
install libgdbm and libdb in GitHub Actions
[perl5.git] / cpan / autodie / t / exceptions.t
1 #!/usr/bin/perl -w
2 use strict;
3 use Test::More;
4
5 BEGIN { plan skip_all => "Perl 5.10 only tests" if $] < 5.010; }
6
7 # These are tests that depend upon 5.10 (eg, smart-match).
8 # Basic tests should go in basic_exceptions.t
9
10 use 5.010;
11 use constant NO_SUCH_FILE => 'this_file_had_better_not_exist_xyzzy';
12 no if $] >= 5.017011, warnings => "experimental::smartmatch";
13
14 plan 'no_plan';
15
16 eval {
17         use autodie ':io';
18         open(my $fh, '<', NO_SUCH_FILE);
19 };
20
21 ok($@,                  "Exception thrown"                      );
22 ok('open' ~~ $@,        "Exception from open"                   );
23 ok(':file' ~~ $@,       "Exception from open / class :file"     );
24 ok(':io' ~~ $@,         "Exception from open / class :io"       );
25 ok(':all' ~~ $@,        "Exception from open / class :all"      );
26
27 eval {
28     no warnings 'once';    # To prevent the following close from complaining.
29         close(THIS_FILEHANDLE_AINT_OPEN);
30 };
31
32 ok(! $@, "Close without autodie should fail silent");
33
34 eval {
35         use autodie ':io';
36         close(THIS_FILEHANDLE_AINT_OPEN);
37 };
38
39 like($@, qr{Can't close filehandle 'THIS_FILEHANDLE_AINT_OPEN'},"Nice msg from close");
40
41 ok($@,                  "Exception thrown"                      );
42 ok('close' ~~ $@,       "Exception from close"                  );
43 ok(':file' ~~ $@,       "Exception from close / class :file"    );
44 ok(':io' ~~ $@,         "Exception from close / class :io"      );
45 ok(':all' ~~ $@,        "Exception from close / class :all"     );
46
47 ok $@ eq $@.'',                 "string overloading is complete (eq)";
48 ok( ($@ cmp $@.'') == 0,        "string overloading is complete (cmp)" );