1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.http.multipart;
18 
19 import junit.framework.TestCase;
20 import org.apache.http.Header;
21 import org.apache.http.util.EncodingUtils;
22 
23 import java.io.BufferedWriter;
24 import java.io.ByteArrayOutputStream;
25 import java.io.File;
26 import java.io.FileWriter;
27 
28 public class MultipartTest extends TestCase {
29 
testParts()30     public void testParts() throws Exception {
31         StringBuffer filebuffer = new StringBuffer();
32         String filepartStr = "this is file part";
33         filebuffer.append(filepartStr);
34         File upload = File.createTempFile("Multipart", "test");
35 
36         FileWriter outFile = new FileWriter(upload);
37         BufferedWriter out = new BufferedWriter(outFile);
38         try {
39             out.write(filebuffer.toString());
40             out.flush();
41         } finally {
42             out.close();
43         }
44 
45         Part[] parts = new Part[3];
46         parts[0] = new StringPart("stringpart", "PART1!!");
47         parts[1] = new FilePart(upload.getName(), upload);
48         parts[2] = new StringPart("stringpart", "PART2!!");
49 
50         MultipartEntity me = new MultipartEntity(parts);
51         ByteArrayOutputStream os = new ByteArrayOutputStream();
52         me.writeTo(os);
53         Header h = me.getContentType();
54         String boundry = EncodingUtils.getAsciiString(me.getMultipartBoundary());
55         StringBuffer contentType = new StringBuffer("multipart/form-data");
56         contentType.append("; boundary=");
57         contentType.append(boundry);
58         assertEquals("Multipart content type error", contentType.toString(), h.getValue());
59         final String CRLF = "\r\n";
60         StringBuffer output = new StringBuffer();
61 
62         output.append("--");
63         output.append(boundry);
64         output.append(CRLF);
65 
66         output.append("Content-Disposition: form-data; name=\"stringpart\"");
67         output.append(CRLF);
68         output.append("Content-Type: text/plain; charset=US-ASCII");
69         output.append(CRLF);
70         output.append("Content-Transfer-Encoding: 8bit");
71         output.append(CRLF);
72         output.append(CRLF);
73         output.append("PART1!!");
74         output.append(CRLF);
75 
76         output.append("--");
77         output.append(boundry);
78         output.append(CRLF);
79 
80         output.append("Content-Disposition: form-data; name=\"");
81         output.append(upload.getName());
82         output.append("\"; filename=\"");
83         output.append(upload.getName());
84         output.append("\"");
85 
86         output.append(CRLF);
87         output.append("Content-Type: application/octet-stream; charset=ISO-8859-1");
88         output.append(CRLF);
89         output.append("Content-Transfer-Encoding: binary");
90         output.append(CRLF);
91         output.append(CRLF);
92         output.append(filepartStr);
93         output.append(CRLF);
94 
95         output.append("--");
96         output.append(boundry);
97         output.append(CRLF);
98 
99         output.append("Content-Disposition: form-data; name=\"stringpart\"");
100         output.append(CRLF);
101         output.append("Content-Type: text/plain; charset=US-ASCII");
102         output.append(CRLF);
103         output.append("Content-Transfer-Encoding: 8bit");
104         output.append(CRLF);
105         output.append(CRLF);
106         output.append("PART2!!");
107         output.append(CRLF);
108 
109         output.append("--");
110         output.append(boundry);
111         output.append("--");
112         output.append(CRLF);
113         // System.out.print(output.toString());
114         assertEquals("Multipart content error", output.toString(), os.toString());
115 
116         // System.out.print(os.toString());
117     }
118 }
119