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