<info>
<keywords>
A newline-separated list of keywords describing what this test case uses and
-tests. Try to use an already used keyword. These keywords will be used for
-statistical/informational purposes.
+tests. Try to use an already used keyword. These keywords will be used for
+statistical/informational purposes and for choosing or skipping classes
+of tests. "Keywords" must begin with an alphabetic character, "-", "["
+or "{" and may actually consist of multiple words separated by spaces
+which are treated together as a single identifier.
</keywords>
</info>
.SH NAME
runtests.pl \- run one or more test cases
.SH SYNOPSIS
-.B runtests.pl [options] [test number]
+.B runtests.pl [options] [test number] [!test number] [key word] [!key word]
.SH DESCRIPTION
\fIruntests.pl\fP runs one, several or all the existing test cases in curl's
test suite. It is often called from the root Makefile of the curl package with
.P
It is also possible to specify tests to skip based on a key word describing
the test. These are specified with a leading exclamation point and the
-key word or phrase, like "!HTTP NTLM auth".
+key word or phrase, like "!HTTP NTLM auth". Likewise, tests to run can
+be specified simply by specifying the unadorned key words, like "FTPS".
+Remember that the exclamation marks and spaces will need to be quoted somehow
+when entered at many command shells.
.SH OPTIONS
.IP "-a"
Continue running the rest of the test cases even if one test fails. By
# to do with cookies, those that set environment variables, or those that
# do more than touch the file system in a <precheck> or <postcheck>
# section). These can be added to the $TESTCASES line below,
-# e.g. $TESTCASES="!8 !31 !63..."
+# e.g. $TESTCASES="!8 !31 !63 !cookies..."
#
# Finally, to properly support -g and -n, checktestcmd needs to change
# to check the remote system's PATH, and the places in the code where
my %skipped; # skipped{reason}=counter, reasons for skip
my @teststat; # teststat[testnum]=reason, reasons for skip
my %disabled_keywords; # key words of tests to skip
+my %enabled_keywords; # key words of tests to run
my $sshdid; # for socks server, ssh daemon version id
my $sshdvernum; # for socks server, ssh daemon version number
if(!$why) {
my @keywords = getpart("info", "keywords");
+ my $match;
my $k;
for $k (@keywords) {
chomp $k;
if ($disabled_keywords{$k}) {
$why = "disabled by keyword";
+ } elsif ($enabled_keywords{$k}) {
+ $match = 1;
}
}
+
+ if(!$why && !$match && %enabled_keywords) {
+ $why = "disabled by missing keyword";
+ }
}
if(!$why) {
elsif($ARGV[0] eq "-h") {
# show help text
print <<EOHELP
-Usage: runtests.pl [options] [test number(s)]
+Usage: runtests.pl [options] [test selection(s)]
-a continue even if a test fails
-bN use base port number N for test servers (default $base)
-c path use this curl executable
-v verbose output
[num] like "5 6 9" or " 5 to 22 " to run those tests only
[!num] like "!5 !6 !9" to disable those tests
- [!keyword] like "!cookies !IPv6" to disable tests with those key words
+ [keyword] like "IPv6" to select only tests containing the key word
+ [!keyword] like "!cookies" to disable any tests containing the key word
EOHELP
;
exit;
elsif($ARGV[0] =~ /^!(.+)/) {
$disabled_keywords{$1}=$1;
}
+ elsif($ARGV[0] =~ /^([-[{a-zA-Z].*)/) {
+ $enabled_keywords{$1}=$1;
+ }
else {
print "Unknown option: $ARGV[0]\n";
exit;
for(@cmds) {
$_ =~ s/[a-z\/\.]*//g;
}
- # the the numbers from low to high
+ # sort the numbers from low to high
foreach my $n (sort { $a <=> $b } @cmds) {
if($disabled{$n}) {
# skip disabled test cases