]> git.pond.sub.org Git - empserver/commitdiff
tests/info: New; checks info and code agree on commands
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 5 Jan 2014 15:44:29 +0000 (16:44 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Mon, 6 Jan 2014 19:50:06 +0000 (20:50 +0100)
Replaces info/checklist.pl, which has been broken since
commit 56d9445, v4.3.0.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Make.mk
info/checklist.pl [deleted file]
info/deity.list [deleted file]
info/player.list [deleted file]
tests/info-test [new file with mode: 0755]
tests/info/cmp-toc-vs-lists.pl [new file with mode: 0755]

diff --git a/Make.mk b/Make.mk
index 2fb4bbbbb00224850e0c408120e8a3ed30944e21..33048aea67ad503ddaa9e07bddc295d9d2f63fc3 100644 (file)
--- a/Make.mk
+++ b/Make.mk
@@ -254,6 +254,7 @@ check: all
        @echo "Warning: test suite is immature and needs work." >&2
        $(srcdir)/tests/files-test $(srcdir)
        $(srcdir)/tests/fairland-test $(srcdir)
+       $(srcdir)/tests/info-test $(srcdir)
 ifeq ($(empthread),LWP)
        $(srcdir)/tests/smoke-test $(srcdir)
        $(srcdir)/tests/actofgod-test $(srcdir)
diff --git a/info/checklist.pl b/info/checklist.pl
deleted file mode 100644 (file)
index fc823d7..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/local/bin/perl
-#
-# checklist.pl
-#
-# By Ken Stevens <children@empire.net>
-#
-# FIXME This does not work at the moment
-#
-# HOW TO RUN IT:
-# In empire, redirect the output of the player "list" command to a file called
-# "player.list".  Similarly, make a file listing deity commands and call it
-# deity.list.  Put both these files in this directory, and then run this script
-# to check which Empire commands need to be documented.
-#
-
-use strict;
-use warnings;
-
-my ($com, @list, @obsolete, @Commands);
-
-open(LIST, "<player.list") || die "Can't read player.list\n";
-
-while(<LIST>) {
-  last if /^  <TYPE>/;
-}
-
-while(<LIST>) {
-  last if /^For further info on command syntax see/;
-  $_ = substr($_, 5);
-  ($com) = split;
-  push (@list, $com);
-}
-close LIST;
-
-push(@list, "break");
-
-open(LIST, "<deity.list") || die "Can't read deity.list\n";
-
-while(<LIST>) {
-  last if /^  <TYPE>/;
-}
-
-while(<LIST>) {
-  last if /^For further info on command syntax see/;
-  $_ = substr($_, 5);
-  ($com) = split;
-  push (@list, $com);
-}
-close LIST;
-
-open(OBSOLETE, "<Subjects/Obsolete.t") ||
-  die "Can't read Subjects/Obsolete.t\n";
-
-while (<OBSOLETE>) {
-  push(@obsolete, $1) if /^.L (\S+)$/;
-}
-
-close OBSOLETE;
-
-open (LS, "ls Commands|");
-
-while (<LS>) {    
-  chop;
-  next unless /^(\S+).t/;
-  push(@Commands, $1);
-}
-close LS;
-
-print "In list but not Commands:\n";
-for my $l (@list) {
-  print "  $l\n" unless grep (/^$l$/, @Commands);
-}
-print "In Commands but not list:\n";
-for my $c (@Commands) {
-  print "  $c\n" unless grep(/^$c$/, @list) || grep(/^$c$/, @obsolete);
-}
diff --git a/info/deity.list b/info/deity.list
deleted file mode 100644 (file)
index 082a316..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-list >!deity.list
-               Current EMPIRE Command List
-               ------- ------ ------- ----
-Initial number is cost in B.T.U. units.
-Next 2 chars (if present) are:
-$ - must be non-broke  c -- must have capital
-Args in [brackets] are optional.
-All-caps args in <angle brackets> have the following meanings:
-  <NUM> :: a number in unspecified units
-  <COMM> :: a commodity such as `food', `guns', etc
-  <VAR> :: a commodity such as `food', `guns', etc
-  <TYPE> :: an item type such as `ship', `plane', etc
- 0    accept  [as-COUNTRY]
- 0    add <NAT> <NAME> <REP> <STATUS> <c|w|i>
- 0    announce {message}
- 0    apropos <topic>
- 0    army <ARMY> <UNITS>
- 0    bdes <SECTS> <type>
- 0    bestpath <SECTS> <SECTS>
- 0    bmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 1    budget [<sector type|P|S|L|A|M|N|C> <PRIORITY|~>]
- 0    bye {log-off}
- 0    capital <SECT>
- 0    cargo <SHIPS>
- 0    census <SECTS>
- 0    change <country|representative> <NAME>
- 0    commodity <SECTS>
- 0    country <NATS>
- 0    cutoff <SECTS>
- 1    deliver <COMM> <SECTS> [q|<THRESH>] [<DIR>]
- 1    designate <SECTS> <type> [sure?]
- 0    disable
- 1    distribute <SECTS> <DISTSECT|.|h>
- 0    dump <SECTS> [<fields>]
- 0    echo [<string>]
- 0    edit <country|land|unit|ship|plane|nuke> [<KEY> <VALUE>]...
- 0    enable
- 0    execute <INPUT FILE>
- 0    financial
- 0    flash <COUNTRY> [<message>]
- 0    fleetadd <FLEET> <SHIPS>
- 0    force <delay time>
- 1    fortify <UNITS> <MOB>
- 1    fuel <s|l> <SHIP/FLEET | UNIT/ARMY> <AMOUNT> [<OILER>]
- 0    give <COMM> <SECT> <NUM>
- 0    help <topic>
- 0    headlines [days]
- 0    hidden <SECTS>
- 0    info <topic>
- 0    land <UNITS>
- 0    lcargo <UNITS>
- 0    ledger <LOANS>
- 0    level <SECTS>
- 0    list of commands
- 0    lbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 0    ldump <UNITS> [<fields>]
- 0    lmap <SECTS|UNIT> [s|l|p|*|h]
- 0    lost
- 0    lstat <UNITS>
- 0    market [COMM]
- 0    map <SECTS|SHIP> [s|l|p|*|h]
- 0    mobupdate <MINUTES|check>
- 0    motd
- 0    name <SHIPS> <NAME>
- 0    nation
- 0    ndump <SECTS>
- 0    newcap <NAT> [<SECTOR>]
- 0    neweff <SECTS>
- 0    newspaper [days]
- 0    nmap <SECTS|SHIP> [s|l|p|*|h]
- 0    nuke <SECTS>
- 0    offset <SECT|NAT>
- 1    origin <SECT>
- 0    path <SECT>
- 0    payoff <SHIPS>
- 0    pbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 0    pdump <PLANES> [<fields>]
- 0    plane <SECTS>
- 0    players
- 0    pmap <SECTS|UNIT> [s|l|p|*|h]
- 0    power [["new" [<NUMBER OF COUNTRIES>]] | ["country" <COUNTRY NUMBER>]]
- 0    pray
- 0    production <SECTS>
- 0    pstat <PLANES>
- 0    quit
- 0    read
- 0    realm <number> [<SECTS>]
- 0    relations  [as-COUNTRY]
- 2    reject <reject|accept> <announcements|mail|treaties|loans> <NAT>
- 0    report <NATS>
- 0    resource <SECTS>
- 1    route <COMM> <SECTS>
- 0    sbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 0    sdump <SHIPS> [<fields>]
- 0    sect <SECTS>
- 0    setsector <TYPE> <SECTS> <NUM>
- 0    setresource <TYPE> <SECTS> <NUM>
- 0    sharebmap <CNUM/CNAME> <SECTS> [<des>]
- 0    ship <SHIPS>
- 0    show <TYPE> <"build"|"stats"|"cap"> [<tech>]
- 0    shutdown [<minutes>] <disable update?>
- 0    sinfrastructure <SECTS>
- 0    smap <SECTS|UNIT> [s|l|p|*|h]
- 0    sstat <SHIPS>
- 0    starvation [<SECTS>|l <UNITS>|s <SHIPS>]
- 1    strength <SECTS>
- 0    swapsector <SECT> <SECT>
- 0    telegram <NAT>
- 0    territory <SECTS> <NUMBER> [<FIELD>]
- 1    threshold <COMM> <SECTS> <THRESH>
- 0    toggle [inform|flash|beep|coastwatch|sonar|techlists] [on|off]
- 0    turn <"on"|"off"|"mess">
- 0    update
- 0    version
- 0    wait
- 0    wall [<message>]
- 1    wingadd <WING> <PLANES>
- 1    wipe <SECTS>
- 0    wire [yes|no|<days>]
- 0    zdone <y|n|c>
-For further info on command syntax see "info Syntax".
diff --git a/info/player.list b/info/player.list
deleted file mode 100644 (file)
index d199c19..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-list >!player.list
-               Current EMPIRE Command List
-               ------- ------ ------- ----
-Initial number is cost in B.T.U. units.
-Next 2 chars (if present) are:
-$ - must be non-broke  c -- must have capital
-Args in [brackets] are optional.
-All-caps args in <angle brackets> have the following meanings:
-  <NUM> :: a number in unspecified units
-  <COMM> :: a commodity such as `food', `guns', etc
-  <VAR> :: a commodity such as `food', `guns', etc
-  <TYPE> :: an item type such as `ship', `plane', etc
- 0    accept  [as-COUNTRY]
- 0    announce {message}
- 3 $c anti <SECT>
- 0    apropos <topic>
- 3 $c arm <PLANE> <NUKETYPE> <airburst?>
- 0    army <ARMY> <UNITS>
- 3 $c assault <to-SECT> <from-SHIP> [<forts?> <ships?> <arty?> <planes?>]
- 3 $c attack <SECT> [<forts?> <ships?> <arty?> <planes?>]
- 0    bdes <SECTS> <type>
- 0    bestpath <SECTS> <SECTS>
- 0    bmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 3 $c board <to-SHIP> [<from-SHIP>|<from-sector>]
- 2 $c bomb <bomber-PLANES> <fighter-PLANES> <pin|strat> <ap-SECT> <PATH|DESTINATION>
- 1    budget [<sector type|P|S|L|A|M|N|C> <PRIORITY|~>]
- 1 $c build <s|l|b|p|n|t> <SECTS> <type|dir> [<number> <tech> <sure?>]
- 1 $c buy <COMM> <LOT#> <BID/UNIT> <DEST>
- 0    bye {log-off}
- 0    capital <SECT>
- 0    cargo <SHIPS>
- 0    census <SECTS>
- 0    change <country|representative> <NAME>
- 1  c coastwatch <SECTS>
- 2 $c collect <LOAN> <SECT>
- 0    commodity <SECTS>
- 1  c consider <loan|treaty> <LOAN/TREATY> <acc|decl|post>
- 2 $c convert <SECTS> <NUM> [sure?]
- 0    country <NATS>
- 0    cutoff <SECTS>
- 2  c declare <all|friend|neut|hos|war> <NATS>
- 1    deliver <COMM> <SECTS> [q|<THRESH>] [<DIR>]
- 1  c demobilize <SECTS> <NUM> <active-reserve?> [sure?]
- 1    designate <SECTS> <type> [sure?]
- 2 $c disarm <PLANE>
- 1    distribute <SECTS> <DISTSECT|.|h>
- 1 $c drop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COMM>
- 0    dump <SECTS> [<fields>]
- 0    echo [<string>]
- 2 $c enlist <SECTS> <NUM>
- 0    execute <INPUT FILE>
- 1 $c explore <c|m> <SECT> <NUM> <PATH|DESTINATION>
- 0    financial
- 1 $c fire <TYPE> <from-SECTS | SHIPS | UNITS> [TO-SECT | SHIP]
- 0    flash <COUNTRY> [<message>]
- 0    fleetadd <FLEET> <SHIPS>
- 2 $c fly <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COM>
- 1  c follow <leader> <SHIPS>
- 1    fortify <UNITS> <MOB>
- 1    fuel <s|l> <SHIP/FLEET | UNIT/ARMY> <AMOUNT> [<OILER>]
- 1 $c grind <SECT> <NUM>
- 2 $c harden <PLANES> <NUM>
- 0    help <topic>
- 0    headlines [days]
- 1 $c improve <road|rail|defense> <SECTS> <NUM>
- 0    info <topic>
- 0    land <UNITS>
- 3 $c launch <PLANES>
- 3 $c lboard <to-LAND> [<from-sector>]
- 0    lcargo <UNITS>
- 0    ledger <LOANS>
- 0    level <SECTS>
- 0    list of commands
- 0    lbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 0    ldump <UNITS> [<fields>]
- 1  c lload <COMM|"land"|"plane"> <UNITS> <NUM|UNITS|PLANES>
- 1  c llookout <UNITS>
- 0    lmap <SECTS|UNIT> [s|l|p|*|h]
- 2 $c lmine <UNITS>
- 1  c load <COMM|"land"|"plane"> <SHIPS> <NUM|UNITS|PLANES>
- 1  c lookout <SHIPS>
- 0    lost
- 1  c lradar <UNITS | SECTS>
- 1  c lrange <UNITS> <range>
- 1  c lretreat <UNITS|ARMY> <PATH> [i|h|b|c]
- 0    lstat <UNITS>
- 1  c ltend <COMM> <tender-SHIPS> <NUM> <UNITS>
- 1  c lunload <COMM|"land"|"plane"> <UNITS> <NUM|UNITS|PLANES>
- 0    market [COMM]
- 0    map <SECTS|SHIP> [s|l|p|*|h]
- 1  c march <UNITS> <PATH|DESTINATION>
- 2 $c mine <SHIPS>
- 2  c mission <type> <PLANES|SHIPS|UNITS> <mission type> <op sect> [<radius>]
- 1  c morale <UNITS> <retreat%>
- 0    motd
- 1  c move <c|m|s|g|p|i|o|b|f|r|u> <SECT> <NUM> <PATH|DESTINATION>
- 2  c mquota <SHIPS> <value>
- 0    name <SHIPS> <NAME>
- 0    nation
- 1  c navigate <SHIPS> <PATH|DESTINATION>
- 0    ndump <SECTS>
- 0    neweff <SECTS>
- 0    newspaper [days]
- 0    nmap <SECTS|SHIP> [s|l|p|*|h]
- 0    nuke <SECTS>
- 1 $c offer <loan|treaty> <NAT> [<NUM> <DAYS> <IRATE>]
- 1  c order <SHIPS> <c|s|r|d|l> 
- 1    origin <SECT>
- 3 $c paradrop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>
- 0    path <SECT>
- 0    payoff <SHIPS>
- 0    pbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 3 $c pboard <PLANES>
- 0    pdump <PLANES> [<fields>]
- 0    plane <SECTS>
- 0    players
- 0    pmap <SECTS|UNIT> [s|l|p|*|h]
- 0    power [["new" [<NUMBER OF COUNTRIES>]] | ["country" <COUNTRY NUMBER>]]
- 0    pray
- 0    production <SECTS>
- 0    pstat <PLANES>
- 0  c qorder <SHIPS>
- 0    quit
- 1  c radar <SHIPS | SECTS>
- 1  c range <PLANES> <range>
- 0    read
- 0    realm <number> [<SECTS>]
- 3 $c recon <spy-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>
- 1  c retreat <SHIPS|FLEET> <PATH> [i|t|s|h|b|d|u|c]
- 0    relations  [as-COUNTRY]
- 2    reject <reject|accept> <announcements|mail|treaties|loans> <NAT>
- 1 $c repay <LOAN> <NUM>
- 0    report <NATS>
- 1  c reset <lot #> <0|price>
- 0    resource <SECTS>
- 1    route <COMM> <SECTS>
- 1 $c sabotage <UNITS>
- 1  c sail <SHIPS> <PATH>
- 1 $c satellite <PLANE> [<se|sh|l> [?cond&cond&...]]
- 0    sbmap <SECTS|UNIT> [s|l|p|r|t|*|h]
- 2 $c scrap <s|p|l> <SHIPS|PLANES|UNITS>
- 5  c scuttle <s|p|l> <SHIPS|PLANES|UNITS>
- 0    sdump <SHIPS> [<fields>]
- 0    sect <SECTS>
- 1  c sell <COMM> <SECTS> <NUM> <NUM>
- 1  c set <TYPE> <LIST> <PRICE>
-25 $c shark <LOAN>
- 0    sharebmap <CNUM/CNAME> <SECTS> [<des>]
- 0    ship <SHIPS>
- 3 $c shoot <c|u> <SECTS> <NUMBER>
- 0    show <TYPE> <"build"|"stats"|"cap"> [<tech>]
- 0    sinfrastructure <SECTS>
- 1  c skywatch <SECTS>
- 0    smap <SECTS|UNIT> [s|l|p|*|h]
- 1  c sonar <SHIPS> <brief?>
- 0  c sorder <SHIPS>
- 1  c spy <SECTS>
- 0    sstat <SHIPS>
- 1  c start <SECTS>
- 0    starvation [<SECTS>|l <UNITS>|s <SHIPS>]
- 1  c stop <SECTS>
- 1    strength <SECTS>
- 1  c supply <LAND UNITS>
- 0  c survey <COMM|VAR> <SECTS>
- 3 $c sweep <sweep-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>
- 0    telegram <NAT>
- 1  c tend <COMM|"land"> <tender-SHIPS> <NUM|UNIT> <dest-SHIPS>
- 0    territory <SECTS> <NUMBER> [<FIELD>]
- 1  c test <c|m|s|g|p|i|o|b|f|r|u> <SECT> <NUM> <PATH|DESTINATION>
- 1    threshold <COMM> <SECTS> <THRESH>
- 0    toggle [inform|flash|beep|coastwatch|sonar|techlists] [on|off]
- 3 $c torpedo <submarine-SHIPS> <target-SHIP>
- 1 $c trade
- 1  c transport <"nuke"|"plane"> <SECT|PLANES> [<NUKETYPE> <number>] <PATH|DESTINATION>
- 0 $c treaty <TREATIES>
- 1  c unload <COMM|"land"|"plane"> <SHIPS> <NUM|UNIT|PLANE>
- 1  c unsail <SHIPS>
- 0    update
- 1 $c upgrade <s|p|l> <SHIPS|PLANES|UNITS>
- 0    version
- 0    wall [<message>]
- 1    wingadd <WING> <PLANES>
- 1    wipe <SECTS>
- 0    wire [yes|no|<days>]
- 1 $c work <LAND UNITS> <AMOUNT>
- 0    zdone <y|n|c>
-For further info on command syntax see "info Syntax".
diff --git a/tests/info-test b/tests/info-test
new file mode 100755 (executable)
index 0000000..5fa1776
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh -e
+# Documentation completeness test for Empire
+
+if [ $# -ne 1 ]
+then echo "Usage: $0 SRCDIR" >&2; exit 1
+fi
+
+srcdir="$1"
+
+. "$srcdir"/tests/test-common.sh
+
+create_sandbox
+
+begin_test <<EOF
+add 1 1 1 p
+des 0:2,0 -
+newcap 1 0,0
+add 2 visitor visitor v
+nat
+nat 1
+nat 2
+EOF
+
+feed_input POGO peter <<EOF
+list >sandbox/deity.list
+EOF
+feed_input 1 1 <<EOF
+list >sandbox/sanctuary.list
+break
+list >sandbox/active.list
+EOF
+feed_input visitor visitor <<EOF
+list >sandbox/visitor.list
+EOF
+
+end_test
+
+if perl $srcdir/tests/info/cmp-toc-vs-lists.pl info/toc sandbox/*.list
+then echo "Command documentation OK"
+else echo "Command documentation FAIL"; false
+fi
diff --git a/tests/info/cmp-toc-vs-lists.pl b/tests/info/cmp-toc-vs-lists.pl
new file mode 100755 (executable)
index 0000000..e138dfd
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+my $toc = shift @ARGV;
+my %cmd;
+my $status = 0;
+
+open TOC, "<$toc"
+    or die "Can't open $toc for reading: $!";
+while (<TOC>) {
+    my ($chap, $top) = split;
+    $cmd{$top} = undef if $chap eq 'Command';
+}
+close TOC;
+
+while (<>) {
+    next unless (/^[ 0-9][0-9] [$ ][c ] (\S+)/);
+    gripe("$1 lacks an info page\n")
+       unless exists $cmd{$1};
+    $cmd{$1} = 1;
+}
+
+for (keys %cmd) {
+    gripe("$_ is not in any command list\n")
+       unless defined $cmd{$_}
+}
+
+sub gripe {
+    print STDERR @_;
+    $status = 1;
+}
+
+exit $status;