Silence the warning "Can't locate auto/POSIX/autosplit.ix in @INC"
[p5sagit/p5-mst-13.2.git] / lib / CPANPLUS / t / 10_CPANPLUS-Error.t
CommitLineData
6aaee015 1### make sure we can find our conf.pl file
2BEGIN {
3 use FindBin;
4 require "$FindBin::Bin/inc/conf.pl";
5}
6
7use strict;
8use Test::More 'no_plan';
9use Data::Dumper;
10use FileHandle;
11use CPANPLUS::Error;
12
13my $conf = gimme_conf();
14
15my $map = {
16 cp_msg => ["This is just a test message"],
17 msg => ["This is just a test message"],
18 cp_error => ["This is just a test error"],
19 error => ["This is just a test error"],
20};
21
22### check if CPANPLUS::Error can do what we expect
23{ for my $name ( keys %$map ) {
24 can_ok('CPANPLUS::Error', $name);
25 can_ok('main', $name); # did it get exported?
26 }
27}
28
29### make sure we start with an empty stack
30{ CPANPLUS::Error->flush;
31 is( scalar(()=CPANPLUS::Error->stack), 0,
32 "Starting with empty stack" );
33}
34
35### global variables test ###
36{ my $file = output_file();
37 unlink $file; # just in case
38
39 local $CPANPLUS::Error::MSG_FH = output_handle();
40 local $CPANPLUS::Error::ERROR_FH = output_handle();
41
42 ok( -e $file, "Output redirect file exists" );
43 ok( !-s $file, " Output file is empty" );
44
45 ### print a msg & error ###
46 for my $name ( keys %$map ) {
47 my $sub = __PACKAGE__->can( $name );
48
49 $sub->( $map->{$name}->[0], 1 );
50 }
51
52 ### must close it for Win32 tests!
53 close output_handle;
54
55 ok( -s $file, " Output file now has size" );
56
57 my $fh = FileHandle->new( $file );
58 ok( $fh, "Opened output file for reading " );
59
60 my $contents = do { local $/; <$fh> };
61 my $string = CPANPLUS::Error->stack_as_string;
62 my $trace = CPANPLUS::Error->stack_as_string(1);
63
64 ok( $contents, " Got the file contents" );
65 ok( $string, "Got the error stack as string" );
66
67
68 for my $type ( keys %$map ) {
69 my $tag = $type; $tag =~ s/.+?_//g;
70
71 for my $str (@{ $map->{$type} } ) {
72 like( $contents, qr/\U\Q$tag/,
73 " Contents matches for '$type'" );
74 like( $contents, qr/\Q$str/,
75 " Contents matches for '$type'" );
76
77 like( $string, qr/\U\Q$tag/,
78 " String matches for '$type'" );
79 like( $string, qr/\Q$str/,
80 " String matches for '$type'" );
81
82 like( $trace, qr/\U\Q$tag/,
83 " Trace matches for '$type'" );
84 like( $trace, qr/\Q$str/,
85 " Trace matches for '$type'" );
86
87 ### extra trace tests ###
88 like( $trace, qr/\Q$str\E.*?\Q$str/s,
89 " Trace holds proper traceback" );
90 like( $trace, qr/\Q$0/,
91 " Trace holds program name" );
92 like( $trace, qr/line/,
93 " Trace holds line number information" );
94 }
95 }
96
97 ### check the stack, flush it, check again ###
98 is( scalar(()=CPANPLUS::Error->stack), scalar(keys(%$map)),
99 "All items on stack" );
100 is( scalar(()=CPANPLUS::Error->flush), scalar(keys(%$map)),
101 "All items flushed" );
102 is( scalar(()=CPANPLUS::Error->stack), 0,
103 "No items on stack" );
104
105}
106
107
108# Local variables:
109# c-indentation-style: bsd
110# c-basic-offset: 4
111# indent-tabs-mode: nil
112# End:
113# vim: expandtab shiftwidth=4: