5 unshift @INC, '../blib/lib';
14 use constant TESTS =>(
15 [ "ok", ["my warning"], ["my"], "standard warning to find"],
16 ["not ok", ["my warning"], ["another"], "another warning instead of my warning"],
17 ["not ok", ["warning general not"], ["^(?!warning general)"], "quite only a sub warning"],
18 ["not ok", [], ["a warning"], "no warning, but expected one"],
19 ["not ok", ["a warning"], [], "warning, but didn't expect one"],
20 [ "ok", [], [], "no warning"],
21 [ "ok", ['$!"%&/()='], ['\$\!\"\%\&\/\(\)\='], "warning with crazy letters"],
22 ["not ok", ["warning 1","warning 2"], ["warning 1"], "more than one warning (1)"],
23 ["not ok", ["warning 1","warning 2"], ["warning 2"], "more than one warning (2)"],
24 [ "ok", ["warning 1","warning 2"], ["warning 1", "warning 2"], "more than one warning (standard ok)"],
25 [ "ok", ["warning 1","warning 1"], ["warning 1", "warning 1"], "more than one warning (two similar warnings)"],
26 ["not ok", ["warning 1","warning 2"], ["warning 2", "warning 1"], "more than one warning (different order)"],
27 [ "ok", [('01' .. '99')], [('01' .. '99')], "many warnings ok"],
28 ["not ok", [('01' .. '99')], [('01' .. '99'), '100'], "many, but diff. warnings"]
30 use constant SUBTESTS_PER_TESTS => 32;
32 use Test::Builder::Tester tests => TESTS() * SUBTESTS_PER_TESTS;
35 Test::Builder::Tester::color 'on';
37 use constant WARN_LINE => line_num +2;
42 use constant CARP_LINE => line_num +2;
47 use constant CARP_LEVELS => (0 .. 3);
48 sub _create_exp_warning {
49 my ($carplevel, $warning) = @_;
51 return $warning if $carplevel == 0;
52 return [map { {carped => $_} } @$warning] if $carplevel == 1;
53 return {carped => $warning} if $carplevel == 2;
54 return [{carped => $warning}] if $carplevel == 3;
58 test_warnings_like(@$_) foreach TESTS();
60 sub test_warnings_like {
61 my ($ok, $msg, $exp_warning, $testname) = @_;
62 for my $regexes ([map {qr/$_/} @$exp_warning], [map {"/$_/"} @$exp_warning]) {
63 for my $carp (CARP_LEVELS) {
64 *_found_msg = $carp ? *_found_carp_msg : *_found_warn_msg;
65 *_exp_msg = $carp ? *_exp_carp_msg : *_exp_warn_msg;
66 *_make_warn_or_carp = $carp ? *_make_carp : *_make_warn;
67 for my $t (undef, $testname) {
68 for my $is_or_are (qw/is are/) {
69 test_out "$ok 1" . ($t ? " - $t" : "");
72 test_diag _found_msg(@$msg);
73 test_diag _exp_msg(@$regexes);
75 my $ew = _create_exp_warning($carp, $regexes);
76 $is_or_are eq 'is' ? warning_like {_make_warn_or_carp(@$msg)} $ew, $t : warnings_like {_make_warn_or_carp(@$msg)} $ew, $t;
77 test_test "$testname (with" . ($t ? "" : "out") . " a testname)";
85 @_ ? map({"found warning: $_ at ". __FILE__ . " line " . WARN_LINE . "." } @_)
86 : "didn't found a warning";
90 @_ ? map({"found carped warning: $_ at ". __FILE__ . " line " . CARP_LINE} @_)
91 : "didn't found a warning";
96 @_ ? map({"expected to find warning: $_" } @_)
97 : "didn't expect to find a warning";
101 @_ ? map({"expected to find carped warning: $_" } @_)
102 : "didn't expect to find a warning";