1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.james.transport.mailets;
21  
22  import org.apache.mailet.base.test.FakeMail;
23  import org.apache.mailet.base.test.FakeMailContext;
24  import org.apache.mailet.base.test.FakeMailetConfig;
25  import org.apache.mailet.Mail;
26  import org.apache.mailet.Mailet;
27  
28  import javax.mail.MessagingException;
29  import javax.mail.Session;
30  import javax.mail.internet.MimeMessage;
31  
32  import java.io.ByteArrayInputStream;
33  import java.io.IOException;
34  import java.util.Properties;
35  
36  import junit.framework.TestCase;
37  
38  public class ReplaceContentTest extends TestCase {
39  
40      public void testService() throws MessagingException, IOException {
41          Mailet mailet;
42          FakeMailetConfig mci;
43          MimeMessage message;
44          Mail mail;
45  
46          mailet = new ReplaceContent();
47          mci = new FakeMailetConfig("Test", new FakeMailContext());
48          mci.setProperty("subjectPattern", "/prova/PROVA/i/,/a/e//,/o/o/i/");
49          mci.setProperty("bodyPattern", "/prova/PROVA/i/," + "/a/e//,"
50                  + "/o/o/i/,/\\u00E8/e'//," + "/prova([^\\/]*?)ble/X$1Y/im/,"
51                  + "/X(.\\n)Y/P$1Q//," + "/\\/\\/,//");
52          mailet.init(mci);
53  
54          message = new MimeMessage(Session.getDefaultInstance(new Properties()));
55          message.setSubject("una prova");
56          message
57                  .setText("Sto facendo una prova di scrittura/ \u00E8 solo una prova.\n"
58                          + "Bla bla bla bla.\n");
59  
60          mail = new FakeMail(message);
61          mailet.service(mail);
62  
63          assertEquals("une PRoVA", mail.getMessage().getSubject());
64          assertEquals("Sto fecendo une PRoVA di scritture, e' solo une P.\n"
65                  + "Q ble ble ble.\n", mail.getMessage().getContent());
66  
67          // ------------------
68  
69          mailet = new ReplaceContent();
70          mci = new FakeMailetConfig("Test", new FakeMailContext());
71          mci
72                  .setProperty("subjectPatternFile",
73                          "#/org/apache/james/transport/mailets/replaceSubject.patterns");
74          mailet.init(mci);
75  
76          message = new MimeMessage(Session.getDefaultInstance(new Properties()));
77          message.setSubject("re: r:ri:una prova");
78          message
79                  .setText("Sto facendo una prova di scrittura/ \u00E8 solo una prova.\n"
80                          + "Bla bla bla bla.\n");
81  
82          mail = new FakeMail(message);
83          mailet.service(mail);
84  
85          assertEquals("Re: Re: Re: una prova", mail.getMessage()
86                  .getSubject());
87  
88          // ------------------
89  
90          mailet = new ReplaceContent();
91          mci = new FakeMailetConfig("Test", new FakeMailContext());
92          mci.setProperty("bodyPattern", "/--messaggio originale--/<quote>/i/,"
93                  +
94                  // "/<quote>([^\\0]*)(\\r\\n)([^>]+)/<quote>$1$2>$3/imr/,"+
95                  "/<quote>(.*)(\\r\\n)([^>]+)/<quote>$1$2>$3/imrs/,"
96                  + "/<quote>\\r\\n//im/");
97          mailet.init(mci);
98  
99          message = new MimeMessage(Session.getDefaultInstance(new Properties()));
100         message.setSubject("una prova");
101         message.setText("Prova.\r\n" + "\r\n" + "--messaggio originale--\r\n"
102                 + "parte del\r\n" + "messaggio\\ che\\0 deve0 essere\r\n"
103                 + "quotato. Vediamo se\r\n" + "ce la fa.");
104 
105         mail = new FakeMail(message);
106         mailet.service(mail);
107 
108         assertEquals("una prova", mail.getMessage().getSubject());
109         assertEquals("Prova.\r\n" + "\r\n" + ">parte del\r\n"
110                 + ">messaggio\\ che\\0 deve0 essere\r\n"
111                 + ">quotato. Vediamo se\r\n" + ">ce la fa.", mail.getMessage()
112                 .getContent());
113 
114         // ------------------
115 
116         mailet = new ReplaceContent();
117         mci = new FakeMailetConfig("Test", new FakeMailContext());
118         mci.setProperty("bodyPattern", "/\\u2026/...//");
119         mailet.init(mci);
120 
121         message = new MimeMessage(Session.getDefaultInstance(new Properties()));
122         message.setSubject("una prova");
123         message.setText("Prova \u2026 di replace \u2026");
124 
125         mail = new FakeMail(message);
126         mailet.service(mail);
127 
128         assertEquals("una prova", mail.getMessage().getSubject());
129         assertEquals("Prova ... di replace ...", mail.getMessage().getContent());
130     }
131 
132     public void testFromFakeCp1252Stream() throws MessagingException,
133             IOException {
134         String messageSource = "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"
135                 + "Content-Transfer-Encoding: quoted-printable\r\n"
136                 + "\r\n"
137                 + "=93prova=94 con l=92apice";
138 
139         Mailet mailet;
140         FakeMailetConfig mci;
141         MimeMessage message;
142         Mail mail;
143 
144         mailet = new ReplaceContent();
145         mci = new FakeMailetConfig("Test", new FakeMailContext());
146         mci.setProperty("bodyPattern", "/[\\u2018\\u2019\\u201A]/'//,"
147                 + "/[\\u201C\\u201D\\u201E]/\"//," + "/[\\x91\\x92\\x82]/'//,"
148                 + "/[\\x93\\x94\\x84]/\"//," + "/\\x85/...//," + "/\\x8B/<//,"
149                 + "/\\x9B/>//," + "/\\x96/-//," + "/\\x97/--//,");
150         mailet.init(mci);
151 
152         message = new MimeMessage(Session.getDefaultInstance(new Properties()),
153                 new ByteArrayInputStream(messageSource.getBytes()));
154 
155         mail = new FakeMail(message);
156         mailet.service(mail);
157 
158         assertEquals("\"prova\" con l'apice", mail.getMessage().getContent());
159 
160     }
161 
162 }