1#
2# Mailagent rules for action regression tests
3#
4
5# $Id: actions,v 3.0.1.15 2001/03/17 18:15:08 ram Exp ram $
6#
7#  Copyright (c) 1990-2006, Raphael Manfredi
8#
9#  You may redistribute only under the terms of the Artistic License,
10#  as specified in the README file that comes with the distribution.
11#  You may reuse parts of this distribution only within the terms of
12#  that same Artistic License; a copy of which may be found at the root
13#  of the source tree for mailagent 3.0.
14#
15# $Log: actions,v $
16# Revision 3.0.1.15  2001/03/17 18:15:08  ram
17# patch72: fixed test rules for UNIQUE, removing spurious REJECT -f
18#
19# Revision 3.0.1.14  2001/03/13 13:15:56  ram
20# patch71: added test cases for SUBST/TR on header fields
21#
22# Revision 3.0.1.13  2001/01/10 16:58:28  ram
23# patch69: fixed dates for the SELECT test to avoid failures past 2001
24#
25# Revision 3.0.1.12  1999/07/12  13:56:28  ram
26# patch66: added tests for variable propagation in APPLY
27#
28# Revision 3.0.1.11  1998/03/31  15:28:55  ram
29# patch59: added regression tests for new "ON" command
30#
31# Revision 3.0.1.10  1995/08/07  16:26:55  ram
32# patch37: new BIFF regression testing
33#
34# Revision 3.0.1.9  1995/02/16  14:37:50  ram
35# patch32: one more test for SAVE to check new fromfake feature
36#
37# Revision 3.0.1.8  1995/01/25  15:31:32  ram
38# patch27: extended rules for the PROTECT command tests
39#
40# Revision 3.0.1.7  1995/01/03  18:19:14  ram
41# patch24: added new tests for ANNOTATE -u and VACATION -l
42#
43# Revision 3.0.1.6  1994/09/22  14:40:32  ram
44# patch12: added regression tests for DO
45#
46# Revision 3.0.1.5  1994/07/01  15:06:56  ram
47# patch8: added exit status test for PERL command
48# patch8: added new test for vacation message with tome config variable
49# patch8: new set of tests for the new UMASK command
50#
51# Revision 3.0.1.4  1994/04/25  15:24:12  ram
52# patch7: check bug reported by Andy Seaborne <afs@hplb.hpl.hp.com>
53#
54# Revision 3.0.1.3  1994/01/26  09:35:08  ram
55# patch5: added new tests for UNIQUE and RECORD tags
56# patch5: ensure header-added recipients looked for in messages
57#
58# Revision 3.0.1.2  1993/12/17  08:13:20  ram
59# patch4: one spurious single quote still remained after patch3
60#
61# Revision 3.0.1.1  1993/12/15  09:05:21  ram
62# patch3: extra closing single quote removed (was there since 2.9 PL0)
63#
64# Revision 3.0  1993/11/29  13:49:23  ram
65# Baseline for mailagent 3.0 netwide release.
66#
67
68maildir = ~;
69
70X-Tag: /abort/		# trailing comment (space required after the '#')
71{
72	ABORT -f;
73	SAVE always;	# trailing comment
74	ABORT;
75	SAVE %u.1;
76}	# trailing comment
77
78X-Tag: /annotate/
79{
80	ANNOTATE X-Anno-1: first;
81	ANNOTATE X-Anno-2 second;
82	ANNOTATE X-Anno-3;
83	ANNOTATE -d X-Anno-Error;
84	ANNOTATE -d X-Anno-4 fourth;
85	ANNOTATE -du X-Anno-4 fourth;
86	REJECT -f ANNOTATE;
87	ANNOTATE -d -u X-Anno-5 fith; RESYNC;
88	ANNOTATE -d -u X-Anno-5 fith;
89	ANNOTATE -du X-Anno-5 fith;
90	REJECT -t ANNOTATE;
91};
92<ANNOTATE>		{ SAVE never };
93
94X-Tag: /apply #1/	{ APPLY apply.1; REJECT -t APPLY; SAVE never };
95<IMPOSSIBLE>		{ SAVE never; REJECT APPLY };
96<APPLY>				{ APPLY apply.2; REJECT -f; SAVE always };
97<APPLY>				{ SAVE never };
98
99X-Tag: /apply #2/
100{
101	ASSIGN folder folder;
102	APPLY apply.1;
103	REJECT -f APPLY;
104	SAVE %#folder;
105};
106<APPLY>				{ SAVE never };
107
108X-Tag: /assign #1/,
109To: /^(\w+)@/
110{
111	ASSIGN ram %1;
112	ASSIGN other try;
113	ASSIGN final '%#other.2';
114	ASSIGN :ram 1 + 2;
115	RUN /bin/echo '%#ram,%#other,%#final' > output;
116}
117
118X-Tag: /assign #2/
119{
120	ASSIGN :ram %#:ram + 4;
121	ASSIGN other '1+2';
122	ASSIGN final %#other + 4;
123	RUN /bin/echo '%#:ram,%#other,%#final' > output;
124}
125
126X-Tag: /back/
127{
128	BACK RUN ~/pgm;
129}
130
131X-Tag: /beep 1/	{ BIFF bfmt; BEEP 4; BEEP -l 3; REJECT BIFF };
132<BIFF>			{ LEAVE };
133X-Tag: /beep 2/	{ BIFF bfmt; BEEP -l 0; LEAVE };
134
135X-Tag: /begin/
136{
137	BEGIN ONE;
138	BEGIN TWO;
139	REJECT;
140}
141
142<ONE> { SAVE one };
143<ONE,TWO,THREE> { SAVE two; BEGIN THREE; REJECT };
144<THREE> { SAVE three };
145
146X-Tag: /biff 1/ 	{ BIFF off; LEAVE; BIFF on; SAVE ok };
147X-Tag: /biff 2/ 	{ BIFF bfmt; SAVE ok; BIFF -l off; LEAVE };
148X-Tag: /biff 3/ 	{ BIFF bfmt; SAVE ok; };
149
150X-Tag: /bounce 1/			{ BOUNCE nobody };
151X-Tag: /bounce 2/			{ BOUNCE "list" };
152X-Tag: /bounce 3/			{ BOUNCE nobody; REJECT -f; DELETE };
153X-Tag: /bounce 3/			{ SAVE ok };
154
155X-Tag: /delete/				{ DELETE };
156
157X-Tag: /do\b/
158{
159	REQUIRE perl.1 __test__;
160	DO __test__'perl_1('always');
161	DO perl.2:__test__'perl_2("DO");
162	SAVE never;
163};
164<DO>	{ SAVE always.2; DO __foo__'perl_3; SAVE never; };
165
166X-Tag: /feed 1/
167{
168	FEED grep -v To:;
169	SAVE ok;
170	REJECT;
171}
172
173X-Tag: /feed 1/, !To: ram	{ SAVE resynced };
174X-Tag: /feed 2/				{ FEED tee output };
175X-Tag: /feed 3/				{ FEED -b tee output };
176X-Tag: /feed 4/				{ FEED -be tee output };
177
178X-Tag: /forward 1/			{ FORWARD nobody };
179X-Tag: /forward 2/			{ FORWARD "list" };
180X-Tag: /forward 3/			{ FORWARD nobody; REJECT -f; DELETE };
181X-Tag: /forward 3/			{ SAVE ok };
182
183X-Tag: /give 1/				{ GIVE wc > output };
184X-Tag: /give 2/				{ GIVE cat > output };
185
186X-Tag: /keep/
187{
188	KEEP From: To Subject X-None X-Long-* U*;
189	KEEP To Subject X-Long-* From X-None U*;
190	KEEP X-Long-*: Unu*-Head* X-None: To: Subject: From:;
191	KEEP "header-list" From;
192	SAVE ok;
193	REJECT;
194}
195X-Tag: /keep/, To: ram		{ SAVE no_resync };
196
197X-Tag: /message 1/			{ MESSAGE msg; DELETE };
198X-Tag: /message 2/			{ MESSAGE msg.2; DELETE };
199
200X-Tag: /macro/
201{
202	MACRO first It seems to;
203	MACRO first Another instance;
204	MACRO -p first;
205	MACRO second null;
206	MACRO -r second = ('work fine', EXPR);
207	MACRO third toto;
208	MACRO -d third;
209	RUN /bin/echo %-(first) %-(second)%-(third). > ok;
210	DELETE;
211}
212
213X-Tag: /nop/				{ NOP; DELETE };
214
215X-Tag: /notify 1/			{ NOTIFY msg nobody; DELETE };
216X-Tag: /notify 2/			{ NOTIFY msg "list"; DELETE };
217X-Tag: /notify 3/			{ NOTIFY msg.2 some@random.ctry %u; DELETE };
218
219X-Tag: /^on$/
220{
221	ON (Mondays Tuesdays Wednesdays Thursdays Fridays Saturdays Sundays) LEAVE;
222	ON (mon) SAVE days;
223	ON (tue) SAVE days;
224	ON (wed) SAVE days;
225	ON (thu) SAVE days;
226	ON (fri) SAVE days;
227	ON (sat) SAVE days;
228	ON (sun) SAVE days;
229	ON (Mn Ts Wd Th Fr Sa Su) SAVE days;
230	ON (mno tsx wda tuh frd sam sum) SAVE days;
231}
232
233X-Tag: /once/
234{
235	ONCE (ram,tag,1w) SAVE one;
236	ONCE (ram,tag,1w) SAVE two;
237	ONCE (mars,tag,1w) SAVE three;
238	ONCE (other,tag,0m) SAVE four;
239}
240
241X-Tag: /pass 1/
242{
243	PASS grep -v and;
244	PASS perl -p -e 's/^\>From /From /';
245	SAVE output;
246}
247X-Tag: /pass 2/
248{
249	PASS grep -v successfully;
250	STRIP Content-Transfer-Encoding;
251	SAVE output;
252}
253X-Tag: /pass 3/	{ PASS grep -v broken; SAVE output; }
254
255X-Tag: /perl/	{ REJECT PERL };
256<PERL>			{ PERL perl.2 exit_1; REJECT -t; SAVE exit_ok; REJECT };
257<PERL>			{ PERL perl.1; SAVE never };
258<PERL>			{ PERL perl.2 'arg 1' "arg 2"; SAVE never };
259<PERL>			{ PERL perl.1; SAVE never };
260<PERL>			{ PERL no_such_file; ABORT -f; SAVE never };
261
262X-Tag: /pipe 1/			{ PIPE wc > output };
263X-Tag: /pipe 2/			{ PIPE cat > output };
264X-Tag: /pipe 3/			{ PIPE -b cat > output };
265
266X-Tag: /post 1/			{ POST alt.test comp.others };
267X-Tag: /post 2/			{ POST -l "list" };
268
269X-Tag: /purify 1/		{ PURIFY grep -v Subject:; SAVE output; };
270X-Tag: /purify 2/		{ PURIFY grep -v Transfer-Encoding:; SAVE output; };
271
272X-Tag: /protect/
273{
274	SAVE dflt;
275	PROTECT 0444; SAVE fold.1; SAVE dflt;
276	PROTECT -l 0666; SAVE fold.2;
277	PROTECT -lu; SAVE fold.3;
278	REJECT PROTECT;
279};
280<PROTECT>		{ SAVE fold.4; PROTECT -u; SAVE fold.5; };
281
282X-Tag: /queue/	{ QUEUE; QUEUE; QUEUE; QUEUE };
283
284X-Tag: /record #1/				{ RECORD; SAVE %u.1 };
285X-Tag: /record #1/				{ SAVE %u.1 };
286<_SEEN_> X-Tag: /record #1/		{ SAVE %u.2 };
287<RECORD> X-Tag: /record #2/		{ SAVE %u.3 };
288X-Tag: /record #2/				{ RECORD -r RECORD; SAVE %u.1 };
289X-Tag: /record #3/				{ RECORD -a; SAVE %u.1 };
290X-Tag: /record #4/				{ RECORD -c; REJECT -f RECORD; SAVE %u.1 };
291<RECORD> X-Tag: /record #4/		{ SAVE %u.2 };
292<RECORD_CATCH> X-Tag: /record/	{ DELETE };
293X-Tag: /record #5/				{ RECORD (tag1,tag2); SAVE %u.1; REJECT };
294X-Tag: /record #5/				{ RECORD INITIAL (tag2); SAVE %u.2; REJECT };
295X-Tag: /record #5/				{ RECORD -r RECORD_CATCH; SAVE %u.3 };
296X-Tag: /record #6/				{ RECORD (tag); SAVE %u.1; REJECT };
297X-Tag: /record #6/				{ RECORD (other); SAVE %u.2; REJECT };
298X-Tag: /record #6/				{ RECORD -r RECORD_CATCH; SAVE %u.3 };
299
300X-Tag: /require/		{ REJECT REQUIRE; };
301<REQUIRE>				{ REQUIRE non_existent; REJECT -f; SAVE never };
302<REQUIRE>				{ REQUIRE perl.1; REJECT -t; SAVE never };
303<REQUIRE>				{ REQUIRE perl.1; REJECT -t; SAVE never };
304<REQUIRE>				{ REQUIRE perl.2 test_pack; REJECT -t; SAVE never };
305<REQUIRE>
306{
307	MACRO perl_1 = (newcmd'perl_1, FN);
308	MACRO perl_2 = (&test_pack'perl_2, EXPR);
309	RUN /bin/echo We got %-(perl_1) and %-(perl_2) here > ok;
310	DELETE;
311};
312
313X-Tag: /reject/			{ REJECT REJ; SAVE %u.1 };
314<REJ> X-Tag: /reject/	{ SAVE always; REJECT -t REJ; SAVE never };
315
316<INITIAL> X-Tag: /restart/	{ RESTART -t RES; SAVE %u.1; REJECT };
317<RES> X-Tag: /restart/		{ RESTART no_such_mode; SAVE never };
318
319X-Tag: /resync/,
320To: ram
321{
322	PURIFY grep -v To:;
323	RESYNC;
324	REJECT;
325}
326
327X-Tag: /resync/, To: ram	{ SAVE %u.1 };
328X-Tag: /resync/				{ SAVE output };
329
330X-Tag: /run/		{ RUN /bin/echo Works. > ok; DELETE };
331
332X-Tag: /save #1/	{ SAVE mbox };
333X-Tag: /save #2/	{ SAVE path/another/third/mbox };
334X-Tag: /save #3/	{ SAVE ok };
335
336X-Tag: /select/
337{
338	SELECT (Jan 2 1970 .. Dec 31 2037) SAVE one;
339	SELECT (last month .. last minute) SAVE two;
340	SELECT (last minute .. next minute) SAVE three;
341	SELECT (now - 10 seconds .. now + 5 minutes) SAVE four;
342	SELECT (Dec 31 2037 .. Jan 2 1970) SAVE five;
343}
344
345X-Tag: /unknown #1/	{ unknown_command; DELETE };
346X-Tag: /unknown #2/	{ DELETE; unknown_command };
347
348X-Tag: /split #1/	{ SPLIT here; SAVE here };
349X-Tag: /split #2/	{ SPLIT -ida here };
350X-Tag: /split #3/	{ SPLIT -iew here };
351X-Tag: /split #4/	{ SPLIT -iew };
352X-Tag: /split #5/	{ SPLIT -iew here };
353X-Tag: /digest/		{ SAVE here };
354
355X-Tag: /store #1/	{ STORE mbox };
356X-Tag: /store #2/	{ STORE path/another/third/mbox };
357
358X-Tag: /strip/
359{
360	STRIP X-N* Received:;
361	STRIP Received;
362	STRIP X-N* "header-list";
363	SAVE ok;
364	REJECT;
365}
366X-Tag: /strip/, To: ram		{ SAVE no_resync };
367
368X-Tag: /subst #1/,
369To: /(.*)/
370{
371	SUBST 1 /com/fr/g;
372	ASSIGN subject %[Subject];
373	ASSIGN :persistent '%#subject';
374	SUBST #subject /^Re:\s+//;
375	SUBST #:persistent /^Re:\s+//;
376	RUN /bin/echo '%1,%#subject,%#:persistent' >output;
377	DELETE;
378}
379
380X-Tag: /subst #2/
381{
382	SUBST to /eiffel\.com/chram.org/;
383	SUBST Subject: /^Re:\s+//i;
384	SUBST Received /eiffel\.com/chram.org/g;
385	SAVE subst;
386	REJECT SUBST;
387};
388<SUBST> To: /^ram@chram\.org$/		{ SAVE never; REJECT };
389<SUBST>								{ RESYNC; REJECT };
390<SUBST> To: /^ram@chram\.org$/		{ SAVE always };
391<SUBST> 							{ SAVE never2 };
392
393X-Tag: /tr #1/,
394To: /(.*)/
395{
396	TR 1 /a-z/A-Z/;
397	ASSIGN subject %[Subject];
398	ASSIGN :persistent '%#subject';
399	TR #subject /ice/ICE/;
400	TR #:persistent /ice/ICE/;
401	RUN /bin/echo '%1,%#subject,%#:persistent' >output;
402	DELETE;
403}
404
405X-Tag: /tr #2/
406{
407	TR To: /a-z/A-Z/;
408	TR received /A-Z/a-z/;
409	SAVE subst;
410	REJECT TR;
411}
412<TR> To: /^RAM@EIFFEL.COM$/			{ SAVE never; REJECT };
413<TR>								{ RESYNC; REJECT };
414<TR> To: /^RAM@EIFFEL.COM$/			{ SAVE always };
415<TR> 								{ SAVE never2 };
416
417X-Tag: /umask #1/		{ REJECT UMASK; };
418<UMASK>	{
419	UMASK -l 0444;
420	PERL umask_is 0444;
421	REJECT -f UMASKF;
422	SAVE ok.1;
423	REJECT;
424};
425<UMASK> {
426	PERL umask_is %=umask;
427	REJECT -f UMASKF;
428	SAVE ok.2;
429	UMASK 0555;
430	REJECT;
431};
432<UMASK> {
433	PERL umask_is 0555;
434	REJECT -f UMASKF;
435	DELETE;
436};
437
438X-Tag: /umask #2/		{ REJECT UMASK; };
439<UMASK> {
440	UMASK 0444;
441	PERL umask_is 0444;
442	REJECT -f UMASKF;
443	SAVE ok.1;
444	UMASK -l 0555;
445	PERL umask_is 0555;
446	REJECT -f UMASKF;
447	REJECT;
448};
449<UMASK> {
450	PERL umask_is 0444;
451	REJECT -f UMASKF;
452	SAVE ok.2;
453};
454
455X-Tag: /umask #3/		{ REJECT UMASK; };
456<UMASK> {
457	PERL umask_is 0555;
458	REJECT -t UMASKF;
459	PERL umask_is %=umask;
460	REJECT -f UMASKF;
461	SAVE ok.3;
462};
463
464<UMASKF>	{ SAVE never; };
465
466X-Tag: /unique #1/				{ UNIQUE; SAVE %u.1 };
467<_SEEN_> X-Tag: /unique #1/		{ SAVE %u.1 };
468X-Tag: /unique #1/				{ SAVE %u.2 };
469<UNIQUE> X-Tag: /unique #2/		{ SAVE %u.3 };
470X-Tag: /unique #2/				{ UNIQUE -r UNIQUE; SAVE %u.1 };
471X-Tag: /unique #3/				{ UNIQUE -a; SAVE %u.1 };
472X-Tag: /unique #4/				{ UNIQUE -c; REJECT -f UNIQUE; SAVE %u.1 };
473<UNIQUE> X-Tag: /unique #4/		{ SAVE %u.2 };
474X-Tag: /unique #5/			{ UNIQUE -a (tag1,tag2); SAVE %u.1; REJECT };
475X-Tag: /unique #5/			{ UNIQUE (tag2); SAVE %u.2; REJECT };
476X-Tag: /unique #5/			{ UNIQUE -a; SAVE %u.3 };
477X-Tag: /unique #6/			{ UNIQUE (tag); SAVE %u.1; REJECT };
478X-Tag: /unique #6/			{ UNIQUE (other); SAVE %u.2; REJECT };
479X-Tag: /unique #6/			{ UNIQUE -a; SAVE %u.3 };
480
481X-Tag: /vacation #2/		{ DELETE };
482X-Tag: /vacation #3/		{ VACATION -l ~/.vacfile 3w; REJECT };
483X-Tag: /vacation #3/		{ DELETE };
484X-Tag: /vacation #4/		{ VACATION ~/.vacfile 3h; REJECT };
485X-Tag: /vacation #4/		{ DELETE };
486
487X-Tag: /write #1/	{ WRITE mbox };
488X-Tag: /write #2/	{ WRITE path/another/third/mbox };
489
490X-Tag: /compress/	{ LEAVE; SAVE always; SAVE another };
491X-Tag: /mmdf/		{ LEAVE; SAVE always; SAVE always };
492X-Tag: /newcmd/		{ FIRST_CMD arg1 arg2; SECOND_CMD; DELETE };
493X-Tag: /usrmac/		{ PERL script; ABORT -f; DELETE };
494X-Tag: /mh/
495{
496	SAVE +tmp;
497	PROTECT 0567; SAVE +new; SAVE dir;
498	PROTECT -u; SAVE simple;
499};
500
501