]> diplodocus.org Git - nmh/blob - test/format/test-fmtdump
dp: Fix write past end of dates[] array.
[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
24 expected=$MH_TEST_DIR/$$.expected
25 expected_err=$MH_TEST_DIR/$$.expected_err
26 actual=$MH_TEST_DIR/$$.actual
27 actual_err=$MH_TEST_DIR/$$.actual_err
28
29
30 # check -help
31 cat >$expected <<EOF
32 Usage: fmtdump [switches]
33 switches are:
34 -form formatfile
35 -(forma)t string
36 -version
37 -help
38 EOF
39
40 #### Skip nmh intro text.
41 "$fmtdump" -help | sed '/^$/,$d' >"$actual" 2>&1
42 check "$expected" "$actual"
43
44 # check -version
45 case `$fmtdump -v` in
46 fmtdump\ --*) ;;
47 * ) printf '%s: fmtdump -v generated unexpected output\n' "$0" >&2
48 failed=`expr ${failed:-0} + 1`;;
49 esac
50
51 # check unknown switch
52 run_test "$fmtdump -nonexistent" 'fmtdump: -nonexistent unknown'
53
54 # check with no switches
55 cat >$expected <<EOF
56 LV_DAT, value dat[0]
57 NUMF, width 4, fill ' '
58 LV_DAT, value dat[1]
59 IF_V_NE 0 continue else goto L0
60 CHAR '+'
61 GOTO L1
62 L0: CHAR ' '
63 L1: LS_COMP, comp "replied"
64 IF_S continue else goto L2
65 CHAR '-'
66 GOTO L3
67 L2: LS_COMP, comp "encrypted"
68 IF_S continue else goto L4
69 CHAR 'E'
70 L3: GOTO L5
71 L4: CHAR ' '
72 L5: PARSEDATE, c_name "date", c_type <DATE>
73 LV_MON, c_name "date", c_type <DATE>
74 NUMF, width 2, fill '0'
75 CHAR '/'
76 PARSEDATE, c_name "date", c_type <DATE>
77 LV_MDAY, c_name "date", c_type <DATE>
78 NUMF, width 2, fill '0'
79 LS_COMP, comp "date", c_type <DATE>
80 IF_S continue else goto L6
81 CHAR ' '
82 GOTO L7
83 L6: CHAR '*'
84 L7: MYMBOX, c_name "from", c_type <ADDR>
85 LV_COMPFLAG, comp "from", c_type <ADDR>
86 IF_V_NE 0 continue else goto L8
87 LS_COMP, comp "to", c_type <ADDR>
88 IF_S continue else goto L8
89 LIT "To:"
90 PARSEADDR, c_name "to", c_type <ADDR>
91 LS_FRIENDLY, c_name "to", c_type <ADDR>
92 FT_LS_DECODE
93 STRF, width 14, fill ' '
94 L8: IF_V_EQ 0 continue else goto L9
95 PARSEADDR, c_name "from", c_type <ADDR>
96 LS_FRIENDLY, c_name "from", c_type <ADDR>
97 FT_LS_DECODE
98 STRF, width 17, fill ' '
99 L9: LIT " "
100 LS_COMP, comp "subject"
101 FT_LS_DECODE
102 STR
103 LS_COMP, comp "body"
104 IF_S continue else goto L10
105 LIT "<<"
106 COMP, comp "body"
107 LIT ">>"
108 L10: CHAR '\n'
109 DONE
110 EOF
111
112 run_prog $fmtdump >$actual 2>&1
113 check $expected $actual
114
115 # check -form
116 cat >$expected <<EOF
117 LV_DAT, value dat[0]
118 NUMF, width 4, fill ' '
119 LV_DAT, value dat[1]
120 IF_V_NE 0 continue else goto L0
121 CHAR '+'
122 GOTO L1
123 L0: CHAR ' '
124 L1: LS_COMP, comp "replied"
125 IF_S continue else goto L2
126 CHAR '-'
127 GOTO L3
128 L2: LS_COMP, comp "encrypted"
129 IF_S continue else goto L4
130 CHAR 'E'
131 L3: GOTO L5
132 L4: CHAR ' '
133 L5: PARSEDATE, c_name "date", c_type <DATE>
134 LV_MON, c_name "date", c_type <DATE>
135 NUMF, width 2, fill '0'
136 CHAR '/'
137 PARSEDATE, c_name "date", c_type <DATE>
138 LV_MDAY, c_name "date", c_type <DATE>
139 NUMF, width 2, fill '0'
140 LS_COMP, comp "date", c_type <DATE>
141 IF_S continue else goto L6
142 CHAR ' '
143 GOTO L7
144 L6: CHAR '*'
145 L7: MYMBOX, c_name "from", c_type <ADDR>
146 LV_COMPFLAG, comp "from", c_type <ADDR>
147 IF_V_NE 0 continue else goto L8
148 LS_COMP, comp "to", c_type <ADDR>
149 IF_S continue else goto L8
150 LIT "To:"
151 PARSEADDR, c_name "to", c_type <ADDR>
152 LS_FRIENDLY, c_name "to", c_type <ADDR>
153 FT_LS_DECODE
154
155 STRF, width 14, fill ' '
156 L8: IF_V_EQ 0 continue else goto L9
157 PARSEADDR, c_name "from", c_type <ADDR>
158 LS_FRIENDLY, c_name "from", c_type <ADDR>
159 FT_LS_DECODE
160
161 STRF, width 17, fill ' '
162 L9: LIT " "
163 LS_COMP, comp "subject"
164 FT_LS_DECODE
165 STR
166 LS_COMP, comp "body"
167 IF_S continue else goto L10
168 LIT "<<"
169 COMP, comp "body"
170 LIT ">>"
171 L10: CHAR '\n'
172 DONE
173 EOF
174
175 run_prog $fmtdump -form "$MH_INST_DIR${nmhetcdir}/scan.default" >$actual 2>&1
176 check $expected $actual
177
178 # check -format
179 cat >$expected <<EOF
180 LS_LIT str "1234567890"
181 IF_S continue else goto L0
182 LV_STRLEN
183 NUM
184 L0: DONE
185 EOF
186
187 run_prog $fmtdump -format '%<(lit 1234567890)%(strlen)%>' >$actual 2>&1
188 check $expected $actual
189
190
191 exit ${failed:-0}