1#!/usr/bin/perl -w 2use strict; 3 4use Test::More 'no_plan'; 5 6use constant NO_SUCH_FILE => "this_file_had_better_not_exist"; 7 8use autodie; 9 10eval { open(my $fh, '<', NO_SUCH_FILE); }; 11ok($@, "3-arg opening non-existent file fails"); 12like($@, qr/for reading/, "Well-formatted 3-arg open failure"); 13 14eval { open(my $fh, "< ".NO_SUCH_FILE) }; 15ok($@, "2-arg opening non-existent file fails"); 16 17like($@, qr/for reading/, "Well-formatted 2-arg open failure"); 18unlike($@, qr/GLOB\(0x/, "No ugly globs in 2-arg open messsage"); 19 20# RT 47520. 2-argument open without mode would repeat the file 21# and line number. 22 23eval { 24 use autodie; 25 26 open(my $fh, NO_SUCH_FILE); 27}; 28 29isa_ok($@, 'autodie::exception'); 30like( $@, qr/at \S+ line \d+/, "At least one mention"); 31unlike($@, qr/at \S+ line \d+\s+at \S+ line \d+/, "...but not too mentions"); 32 33# RT 47520-ish. 2-argument open without a mode should be marked 34# as 'for reading'. 35like($@, qr/for reading/, "Well formatted 2-arg open without mode"); 36 37# We also shouldn't get repeated messages, even if the default mode 38# was used. Single-arg open always falls through to the default 39# formatter. 40 41eval { 42 use autodie; 43 44 open( NO_SUCH_FILE . "" ); 45}; 46 47isa_ok($@, 'autodie::exception'); 48like( $@, qr/at \S+ line \d+/, "At least one mention"); 49unlike($@, qr/at \S+ line \d+\s+at \S+ line \d+/, "...but not too mentions"); 50 51# RT 52427. Piped open can have any many args. 52 53# Sniff to see if we can run 'true' on this system. Changes we can't 54# on non-Unix systems. 55 56use Config; 57my @true = ($^O =~ /android/ 58 || ($Config{usecrosscompile} && $^O eq 'nto' )) 59 ? ('sh', '-c', 'true $@', '--') 60 : 'true'; 61 62eval { 63 use autodie; 64 65 die "Windows and VMS do not support multi-arg pipe" if $^O eq "MSWin32" or $^O eq 'VMS'; 66 67 open(my $fh, '-|', @true); 68}; 69 70SKIP: { 71 skip('true command or list pipe not available on this system', 1) if $@; 72 73 eval { 74 use autodie; 75 76 my $fh; 77 open $fh, "-|", @true; 78 open $fh, "-|", @true, "foo"; 79 open $fh, "-|", @true, "foo", "bar"; 80 open $fh, "-|", @true, "foo", "bar", "baz"; 81 }; 82 83 is $@, '', "multi arg piped open does not fail"; 84} 85 86# Github 6 87# Non-vanilla modes (such as <:utf8) would cause the formatter in 88# autodie::exception to fail. 89 90eval { 91 use autodie; 92 open(my $fh, '<:utf8', NO_SUCH_FILE); 93}; 94 95ok( $@, "Error thrown."); 96unlike($@, qr/Don't know how to format mode/, "No error on exotic open."); 97like( $@, qr/Can't open .*? with mode '<:utf8'/, "Nicer looking error."); 98