diff options
author | Daniel Stenberg <daniel@haxx.se> | 2016-04-28 16:27:51 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2016-04-28 16:30:22 +0200 |
commit | 6a9abbd4d40f53e19b750321214026746bef8164 (patch) | |
tree | 2d551c29ae7eef513722bd03e5b6cd40b0b49d0e | |
parent | 220a0b065f677236277feef4af1c7b0c18e0b522 (diff) |
test1139: verifies libcurl option man page presence
- checks that each option has its own man page present
- checks that each option is mentioned in its corresponding index man
page
-rw-r--r-- | tests/data/Makefile.inc | 2 | ||||
-rw-r--r-- | tests/data/test1139 | 26 | ||||
-rw-r--r-- | tests/manpage-scan.pl | 127 |
3 files changed, 154 insertions, 1 deletions
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 805d516e9..b29616f45 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -119,7 +119,7 @@ test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ -test1136 test1137 test1138 \ +test1136 test1137 test1138 test1139 \ \ test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ diff --git a/tests/data/test1139 b/tests/data/test1139 new file mode 100644 index 000000000..30f730c2e --- /dev/null +++ b/tests/data/test1139 @@ -0,0 +1,26 @@ +<testcase> +<info> +<keywords> +source analysis +symbols-in-versions +documentation +</keywords> +</info> + +# +# Client-side +<client> +<server> +none +</server> + + <name> +Verify that all libcurl options have man pages + </name> + +<command type="perl"> +%SRCDIR/manpage-scan.pl %SRCDIR/.. +</command> +</client> + +</testcase> diff --git a/tests/manpage-scan.pl b/tests/manpage-scan.pl new file mode 100644 index 000000000..8ff039d25 --- /dev/null +++ b/tests/manpage-scan.pl @@ -0,0 +1,127 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 2016, Daniel Stenberg, <daniel@haxx.se>, et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.haxx.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +########################################################################### +# +# Scan symbols-in-version (which is verified to be correct by test 1119), then +# verify that each option mention in there that should have its own man page +# actually does. +# +# In addition, make sure that every current option to curl_easy_setopt, +# curl_easy_getinfo and curl_multi_setopt are also mentioned in their +# corresponding main (index) man page. +# +# Output all deviances to stderr. + +use strict; +use warnings; + +# we may get the dir root pointed out +my $root=$ARGV[0] || "."; +my $syms = "$root/docs/libcurl/symbols-in-versions"; +my $curlh = "$root/include/curl/curl.h"; +my $errors; + +# the prepopulated alias list is the CURLINFO_* defines that are used for the +# debug function callback and the fact that they use the same prefix as the +# curl_easy_getinfo options was a mistake. +my %alias = ( + 'CURLINFO_DATA_IN' => 'none', + 'CURLINFO_DATA_OUT' => 'none', + 'CURLINFO_END' => 'none', + 'CURLINFO_HEADER_IN' => 'none', + 'CURLINFO_HEADER_OUT' => 'none', + 'CURLINFO_LASTONE' => 'none', + 'CURLINFO_NONE' => 'none', + 'CURLINFO_SSL_DATA_IN' => 'none', + 'CURLINFO_SSL_DATA_OUT' => 'none', + 'CURLINFO_TEXT' => 'none' + ); + +sub scanmanpage { + my ($file, @words) = @_; + + open(M, "<$file"); + my @m = <M>; + close(M); + + foreach my $m (@words) { + + my @g = grep(/^\.IP $m/, @m); + if(!$g[0]) { + print STDERR "Missing mention of $m in $file\n"; + $errors++; + } + } +} + +# check for define alises +open(R, "<$curlh") || + die "no curl.h"; +while(<R>) { + if(/^\#define (CURL(OPT|INFO|MOPT)_\w+) (.*)/) { + $alias{$1}=$3; + } +} +close(R); + +my @curlopt; +my @curlinfo; +my @curlmopt; +open(R, "<$syms") || + die "no input file"; +while(<R>) { + chomp; + my $l= $_; + if($l =~ /(CURL(OPT|INFO|MOPT)_\w+) *([0-9.]*) *([0-9.-]*) *([0-9.]*)/) { + my ($opt, $type, $add, $dep, $rem) = ($1, $2, $3, $4, $5); + + if($alias{$opt}) { + #print "$opt => $alias{$opt}\n"; + } + elsif($rem) { + # $opt was removed in $rem + # so don't check for that + } + else { + if($type eq "OPT") { + push @curlopt, $opt, + } + elsif($type eq "INFO") { + push @curlinfo, $opt, + } + elsif($type eq "MOPT") { + push @curlmopt, $opt, + } + if(! -f "$root/docs/libcurl/opts/$opt.3") { + print STDERR "Missing $opt.3\n"; + $errors++; + } + } + } +} +close(R); + +scanmanpage("$root/docs/libcurl/curl_easy_setopt.3", @curlopt); +scanmanpage("$root/docs/libcurl/curl_easy_getinfo.3", @curlinfo); +scanmanpage("$root/docs/libcurl/curl_multi_setopt.3", @curlmopt); + +exit $errors; |