3 # This is the test subs used for regex testing.
4 # This used to be part of re/pat.t
26 $Message ||= "Noname test";
28 our $ordA = ord ('A'); # This defines ASCII/UTF-8 vs EBCDIC/UTF-EBCDIC
29 # This defined the platform.
30 our $IS_ASCII = $ordA == 65;
31 our $IS_EBCDIC = $ordA == 193;
34 eval 'use Config'; # Defaults assumed if this fails
39 my (undef,$tests)= @_;
41 die "Number of tests already defined! ($EXPECTED_TESTS)"
43 $EXPECTED_TESTS= $tests;
45 if ($EXPECTED_TESTS) {
46 print "1..$EXPECTED_TESTS\n" if !$done_plan++;
48 print "Number of tests not declared!";
57 $mess =~ s/([\00-\37\177])/sprintf '\%03o', ord $1/eg;
63 defined($_) and s/#/\\#/g for $BugId, $TODO;
67 my ($ok, $mess, $error) = @_;
70 $mess = pretty ($mess // $Message);
71 $mess .= "; Bug $BugId" if defined $BugId;
72 $mess .= " # TODO $TODO" if defined $TODO;
74 my $line_nr = (caller(1)) [2];
76 printf "%sok %d - %s\n",
79 "$mess\tLine $line_nr";
82 print "# Failed test at line $line_nr\n" unless defined $TODO;
83 if ($error //= $Error) {
86 $error = join "\n#", map {pretty $_} split /\n\h*#/ => $error;
87 $error = "# $error" unless $error =~ /^\h*#/;
95 # Force scalar context on the pattern match
96 sub ok ($;$$) {_ok $_ [0], $_ [1], $_ [2]}
97 sub nok ($;$$) {_ok !$_ [0], "Failed: " . ($_ [1] // $Message), $_ [2]}
104 $why .= "; Bug $BugId" if defined $BugId;
105 # seems like the new harness code doesn't like todo and skip to be mixed.
106 # which seems like a bug in the harness to me. -- dmq
107 #$why .= " # TODO $TODO" if defined $TODO;
110 my $line_nr = (caller(0)) [2];
113 #print "not " if defined $TODO;
114 print "ok $test # skip $why\tLine $line_nr\n";
116 no warnings "exiting";
121 my ($got, $expect, $name) = @_;
123 $_ = defined ($_) ? "'$_'" : "undef" for $got, $expect;
125 my $ok = $got eq $expect;
126 my $error = "# expected: $expect\n" .
129 _ok $ok, $name, $error;
133 my ($got, $expect, $name) = @_;
134 my $todo = $TODO ? " # TODO $TODO" : '';
136 $_ = defined ($_) ? "'$_'" : "undef" for $got, $expect;
138 my $ok = $got ne $expect;
139 my $error = "# results are equal ($got)";
141 _ok $ok, $name, $error;
146 my ($code, $name) = @_;
149 _ok eval {&$code} && !$@, $name;
152 _ok eval ($code) && !$@, $name;
157 my ($code, $pattern, $name) = @_;
158 $pattern //= $DiePattern
159 or Carp::confess("Bad pattern");
161 ref $code ? &$code : eval $code;
162 my $r = $@ && $@ =~ /$pattern/;
163 _ok $r, $name // $Message // "\$\@ =~ /$pattern/";
167 my ($code, $pattern, $name) = @_;
168 $pattern //= $WarnPattern;
170 local $SIG {__WARN__} = sub {$w .= join "" => @_};
172 ref $code ? &$code : eval $code;
173 my $r = $w && $w =~ /$pattern/;
175 _ok $r, $name // $Message // "Got warning /$pattern/",
176 "# expected: /$pattern/\n" .
181 my ($code, $name) = @_;
183 local $SIG {__WARN__} = sub {$w .= join "" => @_};
185 ref $code ? &$code : eval $code;
186 _ok !$w, $name // ($Message ? "$Message (did not warn)"