]> diplodocus.org Git - nmh/blob - test/format/test-fmtdump
Subtracted 1 from size argument in some calls to strncpy(3).
[nmh] / test / format / test-fmtdump
1 #!/bin/sh
2 ######################################################
3 #
4 # Test fmtdump
5 #
6 ######################################################
7
8 set -e
9
10 if test -z "${MH_OBJ_DIR}"; then
11 srcdir=`dirname $0`/../..
12 MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
13 fi
14
15 . "$MH_OBJ_DIR/test/common.sh"
16
17 setup_test
18
19 # Use proper program, likely not the first one on PATH.
20 fmtdump="${MH_LIBEXEC_DIR}/fmtdump"
21
22 check_exit '-eq 1' "$fmtdump" -
23 check_exit '-eq 1' "$fmtdump" -form
24 check_exit '-eq 1' "$fmtdump" -format
25 check_exit '-eq 1' "$fmtdump" foo bar
26 check_exit '-eq 0' "$fmtdump" -format '
27 %4{} %(eq) %(getenv) %(decodecomp{}) %(trim{}) %(putaddr)
28 %(putlit) %(zputlit) %(compval{}) %(num)
29 %(plus) %(minus) %(multiply) %(divide) %(modulo)
30 %(charleft) %(kilo) %(kibi)
31 %(month{}) %(tzone{}) %(day{}) %(weekday{}) %(tws{}) %(pretty{})
32 %(sec{}) %(min{}) %(hour{}) %(year{}) %(yday{}) %(wday{})
33 %(clock{}) %(rclock{}) %(sday{}) %(dst{}) %(szone{})
34 %(date2local{}) %(date2gmt{})
35 '
36 check_exit '-eq 0' "$fmtdump" -format '
37 %(addr{}) %(pers{}) %(mbox{}) %(host{}) %(path{}) %(gname{})
38 %(note{}) %(proper{}) %(type{}) %(ingrp{}) %(nohost{})
39 %(formataddr) %(concataddr) %(getmymbox{}) %(getmyaddr{})
40 %<(null)%> %<(gt)%> %<(match)%> %<(amatch)%>
41 %(null) %(nonnull) %(ne) %(gt) %(match) %(amatch)
42 '
43 check_exit '-eq 0' "$fmtdump" -format "`printf '\302\010\014\015\011\177'`"
44
45 expected=$MH_TEST_DIR/$$.expected
46 expected_err=$MH_TEST_DIR/$$.expected_err
47 actual=$MH_TEST_DIR/$$.actual
48 actual_err=$MH_TEST_DIR/$$.actual_err
49
50
51 # check -help
52 cat >$expected <<EOF
53 Usage: fmtdump [switches]
54 switches are:
55 -form formatfile
56 -(forma)t string
57 -version
58 -help
59 EOF
60
61 #### Skip nmh intro text.
62 "$fmtdump" -help 2>&1 | sed '/^$/,$d' >"$actual"
63 check "$expected" "$actual"
64
65 # check -version
66 case `$fmtdump -v` in
67 fmtdump\ --*) ;;
68 * ) printf '%s: fmtdump -v generated unexpected output\n' "$0" >&2
69 failed=`expr ${failed:-0} + 1`;;
70 esac
71
72 # check unknown switch
73 run_test "$fmtdump -nonexistent" 'fmtdump: -nonexistent unknown'
74
75 # check with no switches
76 cat >$expected <<EOF
77 LV_DAT, value dat[0]
78 NUMF, width 4, fill ' '
79 LV_DAT, value dat[1]
80 IF_V_NE 0 continue else goto L0
81 CHAR '+'
82 GOTO L1
83 L0: CHAR ' '
84 L1: LS_COMP, comp "replied"
85 IF_S continue else goto L2
86 CHAR '-'
87 GOTO L3
88 L2: CHAR ' '
89 L3: PARSEDATE, c_name "date", c_type <DATE>
90 LV_MON, c_name "date", c_type <DATE>
91 NUMF, width 2, fill '0'
92 CHAR '/'
93 PARSEDATE, c_name "date", c_type <DATE>
94 LV_MDAY, c_name "date", c_type <DATE>
95 NUMF, width 2, fill '0'
96 LS_COMP, comp "date", c_type <DATE>
97 IF_S continue else goto L4
98 CHAR ' '
99 GOTO L5
100 L4: CHAR '*'
101 L5: MYMBOX, c_name "from", c_type <ADDR>
102 LV_COMPFLAG, comp "from", c_type <ADDR>
103 IF_V_NE 0 continue else goto L6
104 LS_COMP, comp "to", c_type <ADDR>
105 IF_S continue else goto L6
106 LIT "To:"
107 PARSEADDR, c_name "to", c_type <ADDR>
108 LS_FRIENDLY, c_name "to", c_type <ADDR>
109 LS_DECODE
110 STRF, width 14, fill ' '
111 L6: IF_V_EQ 0 continue else goto L7
112 PARSEADDR, c_name "from", c_type <ADDR>
113 LS_FRIENDLY, c_name "from", c_type <ADDR>
114 LS_DECODE
115 STRF, width 17, fill ' '
116 L7: LIT " "
117 LS_COMP, comp "subject"
118 LS_DECODE
119 STR
120 LS_COMP, comp "body"
121 IF_S continue else goto L8
122 LIT "<<"
123 COMP, comp "body"
124 LIT ">>"
125 L8: CHAR '\n'
126 DONE
127 EOF
128
129 run_prog $fmtdump >$actual 2>&1
130 check $expected $actual
131
132 # check -form
133 cat >$expected <<EOF
134 LV_DAT, value dat[0]
135 NUMF, width 4, fill ' '
136 LV_DAT, value dat[1]
137 IF_V_NE 0 continue else goto L0
138 CHAR '+'
139 GOTO L1
140 L0: CHAR ' '
141 L1: LS_COMP, comp "replied"
142 IF_S continue else goto L2
143 CHAR '-'
144 GOTO L3
145 L2: CHAR ' '
146 L3: PARSEDATE, c_name "date", c_type <DATE>
147 LV_MON, c_name "date", c_type <DATE>
148 NUMF, width 2, fill '0'
149 CHAR '/'
150 PARSEDATE, c_name "date", c_type <DATE>
151 LV_MDAY, c_name "date", c_type <DATE>
152 NUMF, width 2, fill '0'
153 LS_COMP, comp "date", c_type <DATE>
154 IF_S continue else goto L4
155 CHAR ' '
156 GOTO L5
157 L4: CHAR '*'
158 L5: MYMBOX, c_name "from", c_type <ADDR>
159 LV_COMPFLAG, comp "from", c_type <ADDR>
160 IF_V_NE 0 continue else goto L6
161 LS_COMP, comp "to", c_type <ADDR>
162 IF_S continue else goto L6
163 LIT "To:"
164 PARSEADDR, c_name "to", c_type <ADDR>
165 LS_FRIENDLY, c_name "to", c_type <ADDR>
166 LS_DECODE
167 LS_UNQUOTE
168 STRF, width 14, fill ' '
169 L6: IF_V_EQ 0 continue else goto L7
170 PARSEADDR, c_name "from", c_type <ADDR>
171 LS_FRIENDLY, c_name "from", c_type <ADDR>
172 LS_DECODE
173 LS_UNQUOTE
174 STRF, width 17, fill ' '
175 L7: LIT " "
176 LS_COMP, comp "subject"
177 LS_DECODE
178 STR
179 LS_COMP, comp "body"
180 IF_S continue else goto L8
181 LIT "<<"
182 COMP, comp "body"
183 LIT ">>"
184 L8: CHAR '\n'
185 DONE
186 EOF
187
188 run_prog $fmtdump -form "$MH_INST_DIR${nmhetcdir}/scan.default" >$actual 2>&1
189 check $expected $actual
190
191 # check -format
192 cat >$expected <<EOF
193 LS_LIT str "1234567890"
194 IF_S continue else goto L0
195 LV_STRLEN
196 NUM
197 L0: DONE
198 EOF
199
200 run_prog $fmtdump -format '%<(lit 1234567890)%(strlen)%>' >$actual 2>&1
201 check $expected $actual
202
203
204 exit ${failed:-0}