]> diplodocus.org Git - nmh/blob - test/format/test-fmtdump
Simplified m_strn() per Ralph's suggestions.
[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 | sed '/^$/,$d' >"$actual" 2>&1
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: LS_COMP, comp "encrypted"
89 IF_S continue else goto L4
90 CHAR 'E'
91 L3: GOTO L5
92 L4: CHAR ' '
93 L5: PARSEDATE, c_name "date", c_type <DATE>
94 LV_MON, c_name "date", c_type <DATE>
95 NUMF, width 2, fill '0'
96 CHAR '/'
97 PARSEDATE, c_name "date", c_type <DATE>
98 LV_MDAY, c_name "date", c_type <DATE>
99 NUMF, width 2, fill '0'
100 LS_COMP, comp "date", c_type <DATE>
101 IF_S continue else goto L6
102 CHAR ' '
103 GOTO L7
104 L6: CHAR '*'
105 L7: MYMBOX, c_name "from", c_type <ADDR>
106 LV_COMPFLAG, comp "from", c_type <ADDR>
107 IF_V_NE 0 continue else goto L8
108 LS_COMP, comp "to", c_type <ADDR>
109 IF_S continue else goto L8
110 LIT "To:"
111 PARSEADDR, c_name "to", c_type <ADDR>
112 LS_FRIENDLY, c_name "to", c_type <ADDR>
113 FT_LS_DECODE
114 STRF, width 14, fill ' '
115 L8: IF_V_EQ 0 continue else goto L9
116 PARSEADDR, c_name "from", c_type <ADDR>
117 LS_FRIENDLY, c_name "from", c_type <ADDR>
118 FT_LS_DECODE
119 STRF, width 17, fill ' '
120 L9: LIT " "
121 LS_COMP, comp "subject"
122 FT_LS_DECODE
123 STR
124 LS_COMP, comp "body"
125 IF_S continue else goto L10
126 LIT "<<"
127 COMP, comp "body"
128 LIT ">>"
129 L10: CHAR '\n'
130 DONE
131 EOF
132
133 run_prog $fmtdump >$actual 2>&1
134 check $expected $actual
135
136 # check -form
137 cat >$expected <<EOF
138 LV_DAT, value dat[0]
139 NUMF, width 4, fill ' '
140 LV_DAT, value dat[1]
141 IF_V_NE 0 continue else goto L0
142 CHAR '+'
143 GOTO L1
144 L0: CHAR ' '
145 L1: LS_COMP, comp "replied"
146 IF_S continue else goto L2
147 CHAR '-'
148 GOTO L3
149 L2: LS_COMP, comp "encrypted"
150 IF_S continue else goto L4
151 CHAR 'E'
152 L3: GOTO L5
153 L4: CHAR ' '
154 L5: PARSEDATE, c_name "date", c_type <DATE>
155 LV_MON, c_name "date", c_type <DATE>
156 NUMF, width 2, fill '0'
157 CHAR '/'
158 PARSEDATE, c_name "date", c_type <DATE>
159 LV_MDAY, c_name "date", c_type <DATE>
160 NUMF, width 2, fill '0'
161 LS_COMP, comp "date", c_type <DATE>
162 IF_S continue else goto L6
163 CHAR ' '
164 GOTO L7
165 L6: CHAR '*'
166 L7: MYMBOX, c_name "from", c_type <ADDR>
167 LV_COMPFLAG, comp "from", c_type <ADDR>
168 IF_V_NE 0 continue else goto L8
169 LS_COMP, comp "to", c_type <ADDR>
170 IF_S continue else goto L8
171 LIT "To:"
172 PARSEADDR, c_name "to", c_type <ADDR>
173 LS_FRIENDLY, c_name "to", c_type <ADDR>
174 FT_LS_DECODE
175
176 STRF, width 14, fill ' '
177 L8: IF_V_EQ 0 continue else goto L9
178 PARSEADDR, c_name "from", c_type <ADDR>
179 LS_FRIENDLY, c_name "from", c_type <ADDR>
180 FT_LS_DECODE
181
182 STRF, width 17, fill ' '
183 L9: LIT " "
184 LS_COMP, comp "subject"
185 FT_LS_DECODE
186 STR
187 LS_COMP, comp "body"
188 IF_S continue else goto L10
189 LIT "<<"
190 COMP, comp "body"
191 LIT ">>"
192 L10: CHAR '\n'
193 DONE
194 EOF
195
196 run_prog $fmtdump -form "$MH_INST_DIR${nmhetcdir}/scan.default" >$actual 2>&1
197 check $expected $actual
198
199 # check -format
200 cat >$expected <<EOF
201 LS_LIT str "1234567890"
202 IF_S continue else goto L0
203 LV_STRLEN
204 NUM
205 L0: DONE
206 EOF
207
208 run_prog $fmtdump -format '%<(lit 1234567890)%(strlen)%>' >$actual 2>&1
209 check $expected $actual
210
211
212 exit ${failed:-0}