001/****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one   *
003 * or more contributor license agreements.  See the NOTICE file *
004 * distributed with this work for additional information        *
005 * regarding copyright ownership.  The ASF licenses this file   *
006 * to you under the Apache License, Version 2.0 (the            *
007 * "License"); you may not use this file except in compliance   *
008 * with the License.  You may obtain a copy of the License at   *
009 *                                                              *
010 *   http://www.apache.org/licenses/LICENSE-2.0                 *
011 *                                                              *
012 * Unless required by applicable law or agreed to in writing,   *
013 * software distributed under the License is distributed on an  *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
015 * KIND, either express or implied.  See the License for the    *
016 * specific language governing permissions and limitations      *
017 * under the License.                                           *
018 ****************************************************************/
019
020package org.apache.james.mpt.helper;
021
022public class CreateScript {
023
024    public static final String RE = "Re:";
025
026    public static final String HEADER = "Delivered-To";
027
028    public static final String ANOTHER_HEADER = "Received";
029
030    public static final String COMMON_LETTER = "o";
031
032    public static final String COMMON_WORD = "the";
033
034    public static final String UNCOMMON_WORD = "thy";
035
036    public static final String UNCOMMON_PHRASE = "\"nothing worthy prove\"";
037
038    public static final String ANOTHER_NAME = "Robert";
039
040    public static final String NAME = "tim";
041
042    public static final String DOMAIN = "example.org";
043
044    public static final String ANOTHER_DOMAIN = "apache.org";
045
046    public static final void main(String[] args) throws Exception {
047        ScriptBuilder builder = ScriptBuilder.open("localhost", 143);
048        expunge(builder);
049    }
050
051
052    public static void expunge(ScriptBuilder builder) throws Exception {
053        try {
054            setup(builder);
055            builder.append();
056            builder.setFile("wild-example.mail");
057            builder.append();
058            builder.setFile("multipart-alt.mail");
059            builder.append();
060            builder.setFile("multipart-mixed-complex.mail");
061            builder.append();
062            builder.setFile("rfc822-hello-world.mail");
063            builder.append();
064            builder.setFile("wild-mixed-alt.mail");
065            builder.append();
066            builder.setFile("wild-mixed.mail");
067            builder.append();
068            builder.setFile("rfc822-resent.mail");
069            builder.append();
070            builder.setFile("rfc822-trace.mail");
071            builder.append();
072            builder.setFile("wild-alt-reply4.mail");
073            builder.append();
074            builder.select();
075            builder.flagDeleted(4);
076            builder.flagDeleted(6);
077            builder.flagDeleted(7);
078            builder.expunge();
079            builder.select();
080
081        } finally {
082            builder.quit();
083        }
084    }
085    
086    public static void rfcFetch(ScriptBuilder builder) throws Exception {
087        try {
088            setup(builder);
089            builder.append();
090            builder.setFile("wild-example.mail");
091            builder.append();
092            builder.setFile("multipart-alt.mail");
093            builder.append();
094            builder.setFile("multipart-mixed-complex.mail");
095            builder.append();
096            builder.setFile("rfc822-hello-world.mail");
097            builder.append();
098            builder.setFile("wild-mixed-alt.mail");
099            builder.append();
100            builder.setFile("wild-mixed.mail");
101            builder.append();
102            builder.setFile("rfc822-resent.mail");
103            builder.append();
104            builder.setFile("rfc822-trace.mail");
105            builder.append();
106            builder.setFile("wild-alt-reply4.mail");
107            builder.append();
108            builder.resetFetch().setRfc822Size(true);
109            builder.fetchAllMessages();
110            builder.resetFetch().setRfc(true);
111            builder.fetchAllMessages();
112            builder.resetFetch().setRfcHeaders(true);
113            builder.fetchAllMessages();
114            builder.resetFetch().setRfcText(true);
115            builder.fetchAllMessages();
116        } finally {
117            builder.quit();
118        }
119    }
120
121    public static void bodyStructureEmbedded(ScriptBuilder builder)
122            throws Exception {
123        builder.login();
124        builder.create();
125        builder.select();
126        builder.setFile("multipart-mixed-complex.mail");
127        builder.append();
128        builder.fetchSection("");
129        builder.fetchSection("TEXT");
130        builder.fetchSection("HEADER");
131        builder.fetchSection("1");
132        builder.fetchSection("2");
133        builder.fetchSection("3");
134        builder.fetchSection("3.HEADER");
135        builder.fetchSection("3.TEXT");
136        builder.fetchSection("3.1");
137        builder.fetchSection("3.2");
138        builder.fetchSection("4");
139        builder.fetchSection("4.1");
140        builder.fetchSection("4.1.MIME");
141        builder.fetchSection("4.2");
142        builder.fetchSection("4.2.HEADER");
143        builder.fetchSection("4.2.TEXT");
144        builder.fetchSection("4.2.1");
145        builder.fetchSection("4.2.2");
146        builder.fetchSection("4.2.2.1");
147        builder.fetchSection("4.2.2.2");
148        builder.resetFetch().setBodyFetch(true).setBodyStructureFetch(true);
149        builder.fetchAllMessages();
150        builder.quit();
151    }
152
153    public static void bodyStructureComplex(ScriptBuilder builder)
154            throws Exception {
155        builder.login();
156        builder.create();
157        builder.select();
158        builder.setFile("wild-alt-reply3.mail");
159        builder.append();
160        builder.setFile("wild-alt-reply4.mail");
161        builder.append();
162        builder.setFile("multipart-mixed.mail");
163        builder.append();
164        builder.setFile("wild-mixed-alt.mail");
165        builder.append();
166        builder.setFile("wild-mixed.mail");
167        builder.append();
168        builder.setFile("mime-plain-text.mail");
169        builder.append();
170        builder.fetchAllMessages();
171        for (int i = 1; i < 7; i++) {
172            builder.setMessageNumber(i);
173            builder.fetchSection("");
174            builder.fetchSection("TEXT");
175            builder.fetchSection("HEADER");
176            builder.fetchSection("1");
177            builder.fetchSection("2");
178            builder.fetchSection("3");
179            builder.fetchSection("3.HEADER");
180            builder.fetchSection("3.TEXT");
181            builder.fetchSection("3.1");
182            builder.fetchSection("3.2");
183            builder.fetchSection("4");
184            builder.fetchSection("4.1");
185            builder.fetchSection("4.1.MIME");
186            builder.fetchSection("4.2");
187            builder.fetchSection("4.2.HEADER");
188            builder.fetchSection("4.2.TEXT");
189            builder.fetchSection("4.2.1");
190            builder.fetchSection("4.2.2");
191            builder.fetchSection("4.2.2.1");
192            builder.fetchSection("4.2.2.2");
193        }
194        builder.resetFetch().setBodyFetch(true).setBodyStructureFetch(true);
195        builder.fetchAllMessages();
196        builder.quit();
197    }
198
199    public static void bodyStructureSimple(ScriptBuilder builder)
200            throws Exception {
201        builder.login();
202        builder.create();
203        builder.select();
204        builder.setFile("rfc822-multiple-addresses.mail");
205        builder.append();
206        builder.setFile("wild-example.mail");
207        builder.append();
208        builder.setFile("mime-plain-text.mail");
209        builder.append();
210        builder.fetchAllMessages();
211        builder.fetchSection("");
212        builder.fetchSection("TEXT");
213        builder.fetchSection("HEADER");
214        builder.fetchSection("1");
215        builder.fetchSection("2");
216        builder.fetchSection("3");
217        builder.fetchSection("3.HEADER");
218        builder.fetchSection("3.TEXT");
219        builder.fetchSection("3.1");
220        builder.fetchSection("3.2");
221        builder.fetchSection("4");
222        builder.fetchSection("4.1");
223        builder.fetchSection("4.1.MIME");
224        builder.fetchSection("4.2");
225        builder.fetchSection("4.2.HEADER");
226        builder.fetchSection("4.2.TEXT");
227        builder.fetchSection("4.2.1");
228        builder.fetchSection("4.2.2");
229        builder.fetchSection("4.2.2.1");
230        builder.fetchSection("4.2.2.2");
231        builder.resetFetch().setBodyFetch(true).setBodyStructureFetch(true);
232        builder.fetchAllMessages();
233        builder.quit();
234    }
235
236    public static void bodyStructureMultipart(ScriptBuilder builder)
237            throws Exception {
238        builder.login();
239        builder.create();
240        builder.select();
241        builder.setFile("multipart-binary.mail");
242        builder.append();
243        builder.setFile("multipart-alt-translation.mail");
244        builder.append();
245        builder.fetchAllMessages();
246        builder.fetchSection("");
247        builder.fetchSection("TEXT");
248        builder.fetchSection("HEADER");
249        builder.fetchSection("1");
250        builder.fetchSection("2");
251        builder.fetchSection("3");
252        builder.fetchSection("3.HEADER");
253        builder.fetchSection("3.TEXT");
254        builder.fetchSection("3.1");
255        builder.fetchSection("3.2");
256        builder.fetchSection("4");
257        builder.fetchSection("4.1");
258        builder.fetchSection("4.1.MIME");
259        builder.fetchSection("4.2");
260        builder.fetchSection("4.2.HEADER");
261        builder.fetchSection("4.2.TEXT");
262        builder.fetchSection("4.2.1");
263        builder.fetchSection("4.2.2");
264        builder.fetchSection("4.2.2.1");
265        builder.fetchSection("4.2.2.2");
266        builder.resetFetch().setBodyFetch(true).setBodyStructureFetch(true);
267        builder.fetchAllMessages();
268        builder.quit();
269    }
270
271    public static void renameSelected(ScriptBuilder builder) throws Exception {
272        builder.login();
273        builder.create();
274        builder.select();
275        builder.append();
276        builder.setFile("rfc822-hello-world.mail");
277        builder.append();
278        builder.setFile("rfc822-sender.mail");
279        builder.append();
280        builder.setFile("rfc822.mail");
281        builder.append();
282        builder.setFile("rfc822-multiple-addresses.mail");
283        builder.append();
284        builder.select();
285        builder.getFetch().setFlagsFetch(true).bodyPeekHeaders(
286                ScriptBuilder.Fetch.SELECT_HEADERS).setUid(true);
287        builder.fetchAllMessages();
288        builder.list();
289        builder.rename("anothermailbox");
290        builder.list();
291        builder.fetchAllMessages();
292        builder.store(builder.flags().add().flagged().range(1, 2));
293        builder.store(builder.flags().add().answered().range(1, 3));
294        builder.fetchAllMessages();
295        builder.select();
296        builder.setMailbox("anothermailbox");
297        builder.select();
298        builder.fetchAllMessages();
299        builder.quit();
300    }
301
302    public static void renameHierarchy(ScriptBuilder builder) throws Exception {
303        builder.login();
304        builder.setMailbox("one").create();
305        builder.setMailbox("one.two").create();
306        builder.setMailbox("one.two.three").create();
307        builder.setMailbox("one.two.three.four").create();
308        builder.list();
309        builder.rename("one.two", "alpha.beta");
310        builder.list();
311        builder.rename("alpha.beta.three.four", "alpha.beta.gamma.delta");
312        builder.list();
313        builder.rename("alpha.beta.three", "aleph");
314        builder.list();
315        builder.rename("aleph", "alpha.beta.gamma.delta.epsilon");
316        builder.list();
317        builder.rename("alpha.beta.gamma", "one");
318        builder.list();
319        builder.setMailbox("one").delete();
320        builder.setMailbox("alpha").delete();
321        builder.setMailbox("aleph");
322        builder.list();
323        builder.quit();
324    }
325
326    public static void rename(ScriptBuilder builder) throws Exception {
327        setupSearch(builder, true);
328        builder.select();
329        String originalMailbox = builder.getMailbox();
330        builder.getFetch().setFlagsFetch(true).bodyPeekHeaders(
331                ScriptBuilder.Fetch.SELECT_HEADERS).setUid(true);
332        builder.fetchAllMessages();
333        builder.setMailbox("other").create().select().append();
334        builder.setMailbox("base").create().select();
335        builder.rename(originalMailbox, "moved").setMailbox("moved").select()
336                .fetchAllMessages();
337        builder.setMailbox(originalMailbox).select();
338        builder.rename("other", "base");
339        builder.setMailbox(originalMailbox).select();
340        builder.setMailbox("moved").select();
341        builder.setMailbox("other").select();
342        builder.setMailbox("base").select();
343        builder.setMailbox("BOGUS").select();
344        builder.setMailbox("WHATEVER").select();
345        builder.rename("other", originalMailbox);
346        builder.setMailbox(originalMailbox).select();
347        builder.setMailbox("moved").select();
348        builder.setMailbox("other").select();
349        builder.setMailbox("base").select();
350        builder.setMailbox("BOGUS").select();
351        builder.setMailbox("WHATEVER").select();
352        builder.rename("BOGUS", "WHATEVER");
353        builder.rename(originalMailbox, "INBOX");
354        builder.rename(originalMailbox, "inbox");
355        builder.rename(originalMailbox, "Inbox");
356        builder.setMailbox(originalMailbox).select();
357        builder.setMailbox("moved").select();
358        builder.setMailbox("other").select();
359        builder.setMailbox("base").select();
360        builder.setMailbox("BOGUS").select();
361        builder.setMailbox("WHATEVER").select();
362        builder.setMailbox("BOGUS").delete();
363        builder.setMailbox("WHATEVER").delete();
364        builder.setMailbox(originalMailbox).delete();
365        builder.setMailbox("base").delete();
366        builder.setMailbox("other").delete();
367        builder.setMailbox("moved").delete();
368        builder.quit();
369    }
370
371    public static void mimePartialFetch(ScriptBuilder builder) throws Exception {
372        builder.login();
373        builder.create();
374        builder.select();
375        builder.setFile("multipart-mixed-complex.mail");
376        builder.append();
377        builder.select();
378        builder.partial(0, 0).fetchSection("4.1.MIME");
379        builder.partial(0, 15).fetchSection("4.1.MIME");
380        builder.partial(0, 31).fetchSection("4.1.MIME");
381        builder.partial(0, 63).fetchSection("4.1.MIME");
382        builder.partial(0, 127).fetchSection("4.1.MIME");
383        builder.partial(0, 1023).fetchSection("4.1.MIME");
384        builder.partial(0, 2047).fetchSection("4.1.MIME");
385        builder.partial(17, 0).fetchSection("4.1.MIME");
386        builder.partial(17, 16).fetchSection("4.1.MIME");
387        builder.partial(17, 32).fetchSection("4.1.MIME");
388        builder.partial(17, 64).fetchSection("4.1.MIME");
389        builder.partial(17, 128).fetchSection("4.1.MIME");
390        builder.partial(17, 1024).fetchSection("4.1.MIME");
391        builder.partial(17, 2048).fetchSection("4.1.MIME");
392        builder.partial(10000, 0).fetchSection("4.1.MIME");
393        builder.partial(10000, 16).fetchSection("4.1.MIME");
394        builder.partial(10000, 32).fetchSection("4.1.MIME");
395        builder.partial(10000, 64).fetchSection("4.1.MIME");
396        builder.partial(10000, 128).fetchSection("4.1.MIME");
397        builder.partial(10000, 1024).fetchSection("4.1.MIME");
398        builder.partial(10000, 2048).fetchSection("4.1.MIME");
399        builder.quit();
400    }
401
402    public static void headerPartialFetch(ScriptBuilder builder)
403            throws Exception {
404        builder.login();
405        builder.create();
406        builder.select();
407        builder.setFile("multipart-mixed-complex.mail");
408        builder.append();
409        builder.select();
410        builder.partial(0, 0).fetchSection("HEADER");
411        builder.partial(0, 16).fetchSection("HEADER");
412        builder.partial(0, 32).fetchSection("HEADER");
413        builder.partial(0, 64).fetchSection("HEADER");
414        builder.partial(0, 128).fetchSection("HEADER");
415        builder.partial(0, 1024).fetchSection("HEADER");
416        builder.partial(0, 2048).fetchSection("HEADER");
417        builder.partial(7, 0).fetchSection("HEADER");
418        builder.partial(7, 16).fetchSection("HEADER");
419        builder.partial(7, 32).fetchSection("HEADER");
420        builder.partial(7, 64).fetchSection("HEADER");
421        builder.partial(7, 128).fetchSection("HEADER");
422        builder.partial(7, 1024).fetchSection("HEADER");
423        builder.partial(7, 2048).fetchSection("HEADER");
424        builder.partial(10000, 0).fetchSection("HEADER");
425        builder.partial(10000, 16).fetchSection("HEADER");
426        builder.partial(10000, 32).fetchSection("HEADER");
427        builder.partial(10000, 64).fetchSection("HEADER");
428        builder.partial(10000, 128).fetchSection("HEADER");
429        builder.partial(10000, 1024).fetchSection("HEADER");
430        builder.partial(10000, 2048).fetchSection("HEADER");
431        builder.quit();
432    }
433
434    public static void textPartialFetch(ScriptBuilder builder) throws Exception {
435        builder.login();
436        builder.create();
437        builder.select();
438        builder.setFile("multipart-mixed-complex.mail");
439        builder.append();
440        builder.select();
441        builder.partial(0, 0).fetchSection("TEXT");
442        builder.partial(0, 16).fetchSection("TEXT");
443        builder.partial(0, 32).fetchSection("TEXT");
444        builder.partial(0, 64).fetchSection("TEXT");
445        builder.partial(0, 128).fetchSection("TEXT");
446        builder.partial(0, 1024).fetchSection("TEXT");
447        builder.partial(0, 2048).fetchSection("TEXT");
448        builder.partial(7, 0).fetchSection("TEXT");
449        builder.partial(7, 16).fetchSection("TEXT");
450        builder.partial(7, 32).fetchSection("TEXT");
451        builder.partial(7, 64).fetchSection("TEXT");
452        builder.partial(7, 128).fetchSection("TEXT");
453        builder.partial(7, 1024).fetchSection("TEXT");
454        builder.partial(7, 2048).fetchSection("TEXT");
455        builder.partial(10000, 0).fetchSection("TEXT");
456        builder.partial(10000, 16).fetchSection("TEXT");
457        builder.partial(10000, 32).fetchSection("TEXT");
458        builder.partial(10000, 64).fetchSection("TEXT");
459        builder.partial(10000, 128).fetchSection("TEXT");
460        builder.partial(10000, 1024).fetchSection("TEXT");
461        builder.partial(10000, 2048).fetchSection("TEXT");
462        builder.quit();
463    }
464
465    public static void bodyPartialFetch(ScriptBuilder builder) throws Exception {
466        builder.login();
467        builder.create();
468        builder.select();
469        builder.setFile("multipart-mixed.mail");
470        builder.append();
471        builder.select();
472        builder.partial(0, 10).fetchSection("");
473        builder.partial(0, 100).fetchSection("");
474        builder.partial(0, 1000).fetchSection("");
475        builder.partial(0, 10000).fetchSection("");
476        builder.partial(0, 100000).fetchSection("");
477        builder.partial(100, 10).fetchSection("");
478        builder.partial(100, 100).fetchSection("");
479        builder.partial(100, 1000).fetchSection("");
480        builder.partial(100, 10000).fetchSection("");
481        builder.partial(100, 100000).fetchSection("");
482        builder.partial(10000, 10).fetchSection("");
483        builder.partial(10000, 100).fetchSection("");
484        builder.partial(10000, 1000).fetchSection("");
485        builder.partial(10000, 10000).fetchSection("");
486        builder.partial(10000, 100000).fetchSection("");
487        builder.quit();
488    }
489
490    public static void searchCombinations(ScriptBuilder builder, boolean uids)
491            throws Exception {
492        setupSearch(builder, uids);
493        builder.body(COMMON_LETTER).undraft().unflagged().answered().search();
494        builder.to(COMMON_LETTER).draft().flagged().answered().search();
495        builder.to(COMMON_LETTER).smaller(10000).all().draft().search();
496        builder.bcc(COMMON_LETTER).larger(1000).search();
497        builder.from(COMMON_LETTER).larger(1000).flagged().search();
498        builder.from(COMMON_LETTER).to(COMMON_LETTER).answered().flagged()
499                .all().body(COMMON_LETTER).sentbefore(2009, 1, 1).search();
500        builder.or().openParen().from(COMMON_LETTER).to(COMMON_LETTER)
501                .answered().flagged().all().body(COMMON_LETTER).sentbefore(
502                        2009, 1, 1).closeParen().openParen().header(HEADER,
503                        "\"\"").draft().closeParen().search();
504        builder.or().openParen().cc(COMMON_LETTER).text(COMMON_LETTER).unseen()
505                .larger(1000).all().body(COMMON_LETTER).senton(2008, 4, 8)
506                .closeParen().openParen().header(HEADER, "\"\"").draft()
507                .closeParen().search();
508        builder.or().openParen().cc(COMMON_LETTER).to(COMMON_LETTER).draft()
509                .unseen().all().text(COMMON_LETTER).sentsince(2000, 1, 1)
510                .closeParen().openParen().header(HEADER, "\"\"").draft()
511                .closeParen().search();
512        builder.or().openParen().or().openParen().or().openParen().not().text(
513                COMMON_LETTER).cc(COMMON_LETTER).unseen().flagged().all().body(
514                COMMON_LETTER).not().senton(2008, 3, 1).closeParen()
515                .openParen().header(HEADER, DOMAIN).flagged().closeParen()
516                .closeParen().openParen().from(COMMON_LETTER).to(COMMON_LETTER)
517                .answered().flagged().all().body(COMMON_LETTER).sentbefore(
518                        2009, 1, 1).closeParen().closeParen().openParen()
519                .answered().flagged().draft().closeParen().all().deleted()
520                .search();
521        builder.or().openParen().or().openParen().or().openParen().from(
522                COMMON_LETTER).to(COMMON_LETTER).answered().flagged().all()
523                .body(COMMON_LETTER).sentbefore(2009, 1, 1).closeParen()
524                .openParen().header(HEADER, "\"\"").draft().closeParen()
525                .closeParen().openParen().from(COMMON_LETTER).to(COMMON_LETTER)
526                .answered().flagged().all().body(COMMON_LETTER).sentbefore(
527                        2009, 1, 1).closeParen().closeParen().openParen()
528                .answered().flagged().draft().closeParen().all().unanswered()
529                .search();
530        builder.quit();
531    }
532
533    public static void searchAtoms(ScriptBuilder builder, boolean uids)
534            throws Exception {
535        setupSearch(builder, uids);
536        builder.all().search();
537        builder.answered().search();
538        builder.bcc(COMMON_LETTER).search();
539        builder.bcc(NAME).search();
540        builder.bcc(ANOTHER_NAME).search();
541        builder.bcc(DOMAIN).search();
542        builder.bcc(ANOTHER_DOMAIN).search();
543        builder.body(COMMON_LETTER).search();
544        builder.body(COMMON_WORD).search();
545        builder.body(UNCOMMON_WORD).search();
546        builder.body(UNCOMMON_PHRASE).search();
547        builder.cc(COMMON_LETTER).search();
548        builder.cc(NAME).search();
549        builder.cc(ANOTHER_NAME).search();
550        builder.cc(DOMAIN).search();
551        builder.cc(ANOTHER_DOMAIN).search();
552        builder.deleted().search();
553        builder.draft().search();
554        builder.flagged().search();
555        builder.from(COMMON_LETTER).search();
556        builder.from(NAME).search();
557        builder.from(ANOTHER_NAME).search();
558        builder.from(DOMAIN).search();
559        builder.from(ANOTHER_DOMAIN).search();
560        builder.header(HEADER, DOMAIN).search();
561        builder.header(HEADER, COMMON_LETTER).search();
562        builder.header(HEADER, ANOTHER_DOMAIN).search();
563        builder.header(HEADER, "\"\"").search();
564        builder.header(ANOTHER_HEADER, DOMAIN).search();
565        builder.header(ANOTHER_HEADER, COMMON_LETTER).search();
566        builder.header(ANOTHER_HEADER, ANOTHER_DOMAIN).search();
567        builder.header(ANOTHER_HEADER, "\"\"").search();
568        builder.larger(10).search();
569        builder.larger(100).search();
570        builder.larger(1000).search();
571        builder.larger(10000).search();
572        builder.larger(12500).search();
573        builder.larger(15000).search();
574        builder.larger(20000).search();
575        builder.NEW().search();
576        builder.not().flagged().search();
577        builder.msn(3, 5).search();
578        builder.msnAndDown(10).search();
579        builder.msnAndUp(17).search();
580        builder.old().search();
581        builder.or().answered().flagged().search();
582        builder.recent().search();
583        builder.seen().search();
584        builder.sentbefore(2007, 10, 10).search();
585        builder.sentbefore(2008, 1, 1).search();
586        builder.sentbefore(2008, 2, 1).search();
587        builder.sentbefore(2008, 2, 10).search();
588        builder.sentbefore(2008, 2, 20).search();
589        builder.sentbefore(2008, 2, 25).search();
590        builder.sentbefore(2008, 3, 1).search();
591        builder.sentbefore(2008, 3, 5).search();
592        builder.sentbefore(2008, 3, 10).search();
593        builder.sentbefore(2008, 4, 1).search();
594        builder.senton(2007, 10, 10).search();
595        builder.senton(2008, 1, 1).search();
596        builder.senton(2008, 2, 1).search();
597        builder.senton(2008, 2, 10).search();
598        builder.senton(2008, 2, 20).search();
599        builder.senton(2008, 2, 25).search();
600        builder.senton(2008, 3, 1).search();
601        builder.senton(2008, 3, 5).search();
602        builder.senton(2008, 3, 10).search();
603        builder.senton(2008, 4, 1).search();
604        builder.sentsince(2007, 10, 10).search();
605        builder.sentsince(2008, 1, 1).search();
606        builder.sentsince(2008, 2, 1).search();
607        builder.sentsince(2008, 2, 10).search();
608        builder.sentsince(2008, 2, 20).search();
609        builder.sentsince(2008, 2, 25).search();
610        builder.sentsince(2008, 3, 1).search();
611        builder.sentsince(2008, 3, 5).search();
612        builder.sentsince(2008, 3, 10).search();
613        builder.sentsince(2008, 4, 1).search();
614        builder.smaller(10).search();
615        builder.smaller(100).search();
616        builder.smaller(1000).search();
617        builder.smaller(10000).search();
618        builder.smaller(12500).search();
619        builder.smaller(15000).search();
620        builder.smaller(20000).search();
621        builder.subject(COMMON_LETTER).search();
622        builder.subject(COMMON_WORD).search();
623        builder.subject(UNCOMMON_PHRASE).search();
624        builder.subject(UNCOMMON_WORD).search();
625        builder.subject(RE).search();
626        builder.text(COMMON_LETTER).search();
627        builder.text(COMMON_WORD).search();
628        builder.text(UNCOMMON_PHRASE).search();
629        builder.text(UNCOMMON_WORD).search();
630        builder.text(RE).search();
631        builder.text(DOMAIN).search();
632        builder.text(ANOTHER_DOMAIN).search();
633        builder.text(ANOTHER_NAME).search();
634        builder.text(NAME).search();
635        builder.to(COMMON_LETTER).search();
636        builder.to(NAME).search();
637        builder.to(ANOTHER_NAME).search();
638        builder.to(DOMAIN).search();
639        builder.to(ANOTHER_DOMAIN).search();
640        builder.uid().msn(1, 4).search();
641        builder.unanswered().search();
642        builder.undeleted().search();
643        builder.undraft().search();
644        builder.unflagged().search();
645        builder.unseen().search();
646        builder.quit();
647    }
648
649    private static void setupSearch(ScriptBuilder builder, boolean uids)
650            throws Exception {
651        builder.setUidSearch(uids);
652        setup(builder);
653        padUids(builder);
654        loadLotsOfMail(builder);
655        builder.store(builder.flags().add().flagged().range(1, 9));
656        builder.store(builder.flags().add().answered().range(1, 4));
657        builder.store(builder.flags().add().answered().range(10, 14));
658        builder.store(builder.flags().add().seen().range(1, 2));
659        builder.store(builder.flags().add().seen().range(5, 7));
660        builder.store(builder.flags().add().seen().range(10, 12));
661        builder.store(builder.flags().add().seen().range(15, 17));
662        builder.store(builder.flags().add().draft().msn(1));
663        builder.store(builder.flags().add().draft().msn(3));
664        builder.store(builder.flags().add().draft().msn(5));
665        builder.store(builder.flags().add().draft().msn(7));
666        builder.store(builder.flags().add().draft().msn(9));
667        builder.store(builder.flags().add().draft().msn(11));
668        builder.store(builder.flags().add().draft().msn(13));
669        builder.store(builder.flags().add().draft().msn(15));
670        builder.store(builder.flags().add().draft().msn(17));
671        builder.store(builder.flags().add().deleted().range(1, 3));
672    }
673
674    private static void setup(ScriptBuilder builder) throws Exception {
675        builder.login();
676        builder.create();
677        builder.select();
678    }
679
680    private static void padUids(ScriptBuilder builder) throws Exception {
681        builder.setFile("rfc822.mail");
682        for (int i = 0; i < 20; i++) {
683            builder.append();
684            builder.flagDeleted().expunge();
685        }
686    }
687
688    private static void loadLotsOfMail(ScriptBuilder builder) throws Exception {
689        builder.append();
690        builder.setFile("wild-example.mail");
691        builder.append();
692        builder.setFile("multipart-alt.mail");
693        builder.append();
694        builder.setFile("multipart-mixed.mail");
695        builder.append();
696        builder.setFile("multipart-mixed-complex.mail");
697        builder.append();
698        builder.setFile("rfc822-hello-world.mail");
699        builder.append();
700        builder.setFile("rfc822-sender.mail");
701        builder.append();
702        builder.setFile("rfc822.mail");
703        builder.append();
704        builder.setFile("rfc822-multiple-addresses.mail");
705        builder.append();
706        builder.setFile("wild-alt-reply.mail");
707        builder.append();
708        builder.setFile("wild-mixed-alt.mail");
709        builder.append();
710        builder.setFile("wild-mixed.mail");
711        builder.append();
712        builder.setFile("rfc822-reply.mail");
713        builder.append();
714        builder.setFile("rfc822-resent.mail");
715        builder.append();
716        builder.setFile("rfc822-trace.mail");
717        builder.append();
718        builder.setFile("rfc822-group-addresses.mail");
719        builder.append();
720        builder.setFile("wild-alt-another-reply.mail");
721        builder.append();
722        builder.setFile("wild-alt-reply3.mail");
723        builder.append();
724        builder.setFile("wild-alt-reply4.mail");
725        builder.append();
726    }
727
728    public static void notHeaderFetches(ScriptBuilder builder) throws Exception {
729        builder.login();
730        builder.create();
731        builder.select();
732        builder.append();
733        builder.setFile("wild-example.mail");
734        builder.append();
735        builder.setFile("multipart-alt.mail");
736        builder.append();
737        builder.setFile("multipart-mixed.mail");
738        builder.append();
739        builder.setFile("multipart-mixed-complex.mail");
740        builder.append();
741        builder.setFile("rfc822-hello-world.mail");
742        builder.append();
743        builder.setFile("rfc822-sender.mail");
744        builder.append();
745        builder.setFile("rfc822.mail");
746        builder.append();
747        builder.setFile("rfc822-multiple-addresses.mail");
748        builder.append();
749        builder.select();
750        builder.getFetch().bodyPeekCompleteMessage();
751        builder.fetchAllMessages();
752        builder.resetFetch();
753        builder.getFetch().bodyPeekNotHeaders(
754                ScriptBuilder.Fetch.SELECT_HEADERS);
755        builder.fetchAllMessages();
756        builder.select();
757        builder.quit();
758    }
759
760    public static void simpleCombinedFetches(ScriptBuilder builder)
761            throws Exception {
762        builder.login();
763        builder.create();
764        builder.select();
765        builder.append();
766        builder.setFile("wild-example.mail");
767        builder.append();
768        builder.setFile("multipart-alt.mail");
769        builder.append();
770        builder.setFile("multipart-mixed.mail");
771        builder.append();
772        builder.setFile("multipart-mixed-complex.mail");
773        builder.append();
774        builder.setFile("rfc822-hello-world.mail");
775        builder.append();
776        builder.setFile("rfc822-sender.mail");
777        builder.append();
778        builder.setFile("rfc822.mail");
779        builder.append();
780        builder.setFile("rfc822-multiple-addresses.mail");
781        builder.append();
782        builder.select();
783        builder.getFetch().bodyPeekCompleteMessage();
784        builder.fetchAllMessages();
785        builder.resetFetch();
786        builder.getFetch().bodyPeekHeaders(
787                ScriptBuilder.Fetch.COMPREHENSIVE_HEADERS);
788        builder.fetchAllMessages();
789        builder.select();
790        builder.quit();
791    }
792
793    public static void recent(ScriptBuilder builder) throws Exception {
794        builder.login();
795        builder.create();
796        builder.select();
797        builder.append();
798        builder.select();
799        builder.fetchFlags();
800        builder.fetchSection("");
801        builder.fetchFlags();
802        builder.quit();
803    }
804
805    public static void multipartMixedMessagesPeek(ScriptBuilder builder)
806            throws Exception {
807        builder.setPeek(true);
808        multipartMixedMessages(builder);
809    }
810
811    public static void multipartMixedMessages(ScriptBuilder builder)
812            throws Exception {
813        builder.login();
814        builder.create();
815        builder.select();
816        builder.setFile("multipart-mixed-complex.mail");
817        builder.append();
818        builder.select();
819        builder.fetchSection("");
820        builder.fetchSection("TEXT");
821        builder.fetchSection("HEADER");
822        builder.fetchSection("1");
823        builder.fetchSection("2");
824        builder.fetchSection("3");
825        builder.fetchSection("3.HEADER");
826        builder.fetchSection("3.TEXT");
827        builder.fetchSection("3.1");
828        builder.fetchSection("3.2");
829        builder.fetchSection("4");
830        builder.fetchSection("4.1");
831        builder.fetchSection("4.1.MIME");
832        builder.fetchSection("4.2");
833        builder.fetchSection("4.2.HEADER");
834        builder.fetchSection("4.2.TEXT");
835        builder.fetchSection("4.2.1");
836        builder.fetchSection("4.2.2");
837        builder.fetchSection("4.2.2.1");
838        builder.fetchSection("4.2.2.2");
839        builder.select();
840        builder.quit();
841    }
842
843    public static void multipartAlternativePeek(ScriptBuilder builder)
844            throws Exception {
845        builder.setPeek(true);
846        multipartAlternative(builder);
847    }
848
849    public static void multipartAlternative(ScriptBuilder builder)
850            throws Exception {
851        builder.login();
852        builder.create();
853        builder.select();
854        builder.setFile("multipart-alt.mail");
855        builder.append();
856        builder.select();
857        builder.fetchSection("");
858        builder.fetchSection("TEXT");
859        builder.fetchSection("HEADER");
860        builder.fetchSection("1");
861        builder.fetchSection("2");
862        builder.fetchSection("3");
863        builder.select();
864        builder.quit();
865    }
866
867    public static void multipartMixedPeek(ScriptBuilder builder)
868            throws Exception {
869        builder.setPeek(true);
870        multipartMixed(builder);
871    }
872
873    public static void multipartMixed(ScriptBuilder builder) throws Exception {
874        builder.login();
875        builder.create();
876        builder.select();
877        builder.setFile("multipart-mixed.mail");
878        builder.append();
879        builder.select();
880        builder.fetchSection("");
881        builder.fetchSection("TEXT");
882        builder.fetchSection("HEADER");
883        builder.fetchSection("1");
884        builder.fetchSection("2");
885        builder.fetchSection("3");
886        builder.fetchSection("4");
887        builder.select();
888        builder.quit();
889    }
890
891}