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.mime4j.field;
21  
22  import java.util.Date;
23  
24  import junit.framework.TestCase;
25  
26  import org.apache.log4j.BasicConfigurator;
27  
28  public class ContentDispositionFieldTest extends TestCase {
29  
30      @Override
31      public void setUp() {
32          BasicConfigurator.resetConfiguration();
33          BasicConfigurator.configure();
34      }
35  
36      public void testDispositionTypeWithSemiColonNoParams() throws Exception {
37          ContentDispositionField f = null;
38  
39          f = (ContentDispositionField) AbstractField
40                  .parse("Content-Disposition: inline;");
41          assertEquals("inline", f.getDispositionType());
42      }
43  
44      public void testGetDispositionType() throws Exception {
45          ContentDispositionField f = null;
46  
47          f = (ContentDispositionField) AbstractField
48                  .parse("Content-Disposition: attachment");
49          assertEquals("attachment", f.getDispositionType());
50  
51          f = (ContentDispositionField) AbstractField
52                  .parse("content-disposition:   InLiNe   ");
53          assertEquals("inline", f.getDispositionType());
54  
55          f = (ContentDispositionField) AbstractField
56                  .parse("CONTENT-DISPOSITION:   x-yada ;" + "  param = yada");
57          assertEquals("x-yada", f.getDispositionType());
58  
59          f = (ContentDispositionField) AbstractField.parse("CONTENT-DISPOSITION:   ");
60          assertEquals("", f.getDispositionType());
61      }
62  
63      public void testGetParameter() throws Exception {
64          ContentDispositionField f = null;
65  
66          f = (ContentDispositionField) AbstractField
67                  .parse("CONTENT-DISPOSITION:   inline ;"
68                          + "  filename=yada yada");
69          assertEquals("yada", f.getParameter("filename"));
70  
71          f = (ContentDispositionField) AbstractField
72                  .parse("Content-Disposition: x-yada;"
73                          + "  fileNAme= \"ya:\\\"*da\"; " + "\tSIZE\t =  1234");
74          assertEquals("ya:\"*da", f.getParameter("filename"));
75          assertEquals("1234", f.getParameter("size"));
76  
77          f = (ContentDispositionField) AbstractField
78                  .parse("Content-Disposition: x-yada;  "
79                          + "fileNAme= \"ya \\\"\\\"\tda \\\"\"; "
80                          + "\tx-Yada\t =  \"\\\"hepp\\\"  =us\t-ascii\"");
81          assertEquals("ya \"\"\tda \"", f.getParameter("filename"));
82          assertEquals("\"hepp\"  =us\t-ascii", f.getParameter("x-yada"));
83      }
84  
85      public void testIsDispositionType() throws Exception {
86          ContentDispositionField f = null;
87  
88          f = (ContentDispositionField) AbstractField.parse("Content-Disposition:INline");
89          assertTrue(f.isDispositionType("InLiNe"));
90          assertFalse(f.isDispositionType("NiLiNe"));
91          assertTrue(f.isInline());
92          assertFalse(f.isAttachment());
93  
94          f = (ContentDispositionField) AbstractField
95                  .parse("Content-Disposition: attachment");
96          assertTrue(f.isDispositionType("ATTACHMENT"));
97          assertFalse(f.isInline());
98          assertTrue(f.isAttachment());
99  
100         f = (ContentDispositionField) AbstractField
101                 .parse("Content-Disposition: x-something");
102         assertTrue(f.isDispositionType("x-SomeThing"));
103         assertFalse(f.isInline());
104         assertFalse(f.isAttachment());
105     }
106 
107     public void testGetFilename() throws Exception {
108         ContentDispositionField f = null;
109 
110         f = (ContentDispositionField) AbstractField
111                 .parse("Content-Disposition: inline; filename=yada.txt");
112         assertEquals("yada.txt", f.getFilename());
113 
114         f = (ContentDispositionField) AbstractField
115                 .parse("Content-Disposition: inline; filename=yada yada.txt");
116         assertEquals("yada", f.getFilename());
117 
118         f = (ContentDispositionField) AbstractField
119                 .parse("Content-Disposition: inline; filename=\"yada yada.txt\"");
120         assertEquals("yada yada.txt", f.getFilename());
121 
122         f = (ContentDispositionField) AbstractField
123                 .parse("Content-Disposition: inline");
124         assertNull(f.getFilename());
125     }
126 
127     public void testGetCreationDate() throws Exception {
128         ContentDispositionField f = null;
129 
130         f = (ContentDispositionField) AbstractField
131                 .parse("Content-Disposition: inline; "
132                         + "creation-date=\"Tue, 01 Jan 1970 00:00:00 +0000\"");
133         assertEquals(new Date(0), f.getCreationDate());
134 
135         f = (ContentDispositionField) AbstractField
136                 .parse("Content-Disposition: inline; "
137                         + "creation-date=Tue, 01 Jan 1970 00:00:00 +0000");
138         assertNull(f.getCreationDate());
139 
140         f = (ContentDispositionField) AbstractField
141                 .parse("Content-Disposition: attachment");
142         assertNull(f.getCreationDate());
143     }
144 
145     public void testGetModificationDate() throws Exception {
146         ContentDispositionField f = null;
147 
148         f = (ContentDispositionField) AbstractField
149                 .parse("Content-Disposition: inline; "
150                         + "modification-date=\"Tue, 01 Jan 1970 00:00:00 +0000\"");
151         assertEquals(new Date(0), f.getModificationDate());
152 
153         f = (ContentDispositionField) AbstractField
154                 .parse("Content-Disposition: inline; "
155                         + "modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\"");
156         assertEquals(new Date(855782991000l), f.getModificationDate());
157 
158         f = (ContentDispositionField) AbstractField
159                 .parse("Content-Disposition: inline; "
160                         + "modification-date=yesterday");
161         assertNull(f.getModificationDate());
162 
163         f = (ContentDispositionField) AbstractField
164                 .parse("Content-Disposition: attachment");
165         assertNull(f.getModificationDate());
166     }
167 
168     public void testGetReadDate() throws Exception {
169         ContentDispositionField f = null;
170 
171         f = (ContentDispositionField) AbstractField
172                 .parse("Content-Disposition: inline; "
173                         + "read-date=\"Tue, 01 Jan 1970 00:00:00 +0000\"");
174         assertEquals(new Date(0), f.getReadDate());
175 
176         f = (ContentDispositionField) AbstractField
177                 .parse("Content-Disposition: inline; read-date=");
178         assertNull(f.getReadDate());
179 
180         f = (ContentDispositionField) AbstractField
181                 .parse("Content-Disposition: attachment");
182         assertNull(f.getReadDate());
183     }
184 
185     public void testGetSize() throws Exception {
186         ContentDispositionField f = null;
187 
188         f = (ContentDispositionField) AbstractField
189                 .parse("Content-Disposition: attachment; size=0");
190         assertEquals(0, f.getSize());
191 
192         f = (ContentDispositionField) AbstractField
193                 .parse("Content-Disposition: attachment; size=matters");
194         assertEquals(-1, f.getSize());
195 
196         f = (ContentDispositionField) AbstractField
197                 .parse("Content-Disposition: attachment");
198         assertEquals(-1, f.getSize());
199 
200         f = (ContentDispositionField) AbstractField
201                 .parse("Content-Disposition: attachment; size=-12");
202         assertEquals(-1, f.getSize());
203 
204         f = (ContentDispositionField) AbstractField
205                 .parse("Content-Disposition: attachment; size=12");
206         assertEquals(12, f.getSize());
207     }
208 
209 }