2 // MultipartContentTest.cs
5 // Marek Safar <marek.safar@gmail.com>
7 // Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using NUnit.Framework;
31 using System.Net.Http;
33 using System.Threading.Tasks;
37 namespace MonoTests.System.Net.Http
40 public class MultipartContentTest
43 public void Ctor_Invalid ()
46 new MultipartContent (null);
48 } catch (ArgumentException) {
52 new MultipartContent ("v", null);
54 } catch (ArgumentException) {
58 new MultipartContent ("st", "[]");
60 } catch (ArgumentException) {
64 new MultipartContent ("st", "1234567890123456789012345678901234567890123456789012345678901234567890X");
66 } catch (ArgumentException) {
70 new MultipartContent ("st", "st ");
72 } catch (ArgumentException) {
76 new MultipartContent ("st", "@");
78 } catch (ArgumentException) {
85 using (var m = new MultipartContent ("a", "b")) {
86 m.Headers.Add ("extra", "value");
87 Assert.AreEqual ("multipart/a", m.Headers.ContentType.MediaType, "#1");
88 Assert.AreEqual (14, m.Headers.ContentLength, "#2");
89 Assert.AreEqual ("--b\r\n\r\n--b--\r\n", m.ReadAsStringAsync ().Result, "#3");
92 using (var m = new MultipartContent ()) {
93 Assert.AreEqual ("multipart/mixed", m.Headers.ContentType.MediaType, "#11");
94 Assert.AreEqual (84, m.Headers.ContentLength, "#12");
97 using (var m = new MultipartContent ("ggg")) {
98 Assert.AreEqual ("multipart/ggg", m.Headers.ContentType.MediaType, "#21");
99 Assert.AreEqual (84, m.Headers.ContentLength, "#22");
106 var m = new MultipartContent ("a", "b");
108 var other = new MultipartContent ("2", "44");
109 other.Headers.Expires = new DateTimeOffset (2020, 11, 30, 19, 55, 22, TimeSpan.Zero);
112 Assert.AreEqual ("multipart/a", m.Headers.ContentType.MediaType, "#1");
113 Assert.AreEqual (114, m.Headers.ContentLength, "#2");
114 Assert.AreEqual ("--b\r\nContent-Type: multipart/2; boundary=\"44\"\r\nExpires: Mon, 30 Nov 2020 19:55:22 GMT\r\n\r\n--44\r\n\r\n--44--\r\n\r\n--b--\r\n", m.ReadAsStringAsync ().Result, "#3");
115 Assert.AreEqual (other, m.First (), "#4");
121 var m = new MultipartContent ("a", "X");
123 var other = new MultipartContent ("2", "2a");
125 var other2 = new MultipartContent ("3", "3a");
126 other2.Headers.Add ("9", "9n");
129 Assert.AreEqual ("multipart/a", m.Headers.ContentType.MediaType, "#1");
130 Assert.AreEqual (148, m.Headers.ContentLength, "#2");
131 Assert.AreEqual ("--X\r\nContent-Type: multipart/2; boundary=\"2a\"\r\n\r\n--2a\r\n\r\n--2a--\r\n\r\n--X\r\nContent-Type: multipart/3; boundary=\"3a\"\r\n9: 9n\r\n\r\n--3a\r\n\r\n--3a--\r\n\r\n--X--\r\n",
132 m.ReadAsStringAsync ().Result, "#3");
133 Assert.AreEqual (other, m.First (), "#4");
137 public void Add_Resursive ()
139 var m = new MultipartContent ("1", "1a");
141 var other = new MultipartContent ("2", "2a");
144 var other2 = new MultipartContent ("3", "3a");
147 Assert.AreEqual ("multipart/1", m.Headers.ContentType.MediaType, "#1");
148 Assert.AreEqual (136, m.Headers.ContentLength, "#2");
149 Assert.AreEqual ("--1a\r\nContent-Type: multipart/2; boundary=\"2a\"\r\n\r\n--2a\r\nContent-Type: multipart/3; boundary=\"3a\"\r\n\r\n--3a\r\n\r\n--3a--\r\n\r\n--2a--\r\n\r\n--1a--\r\n",
150 m.ReadAsStringAsync ().Result, "#3");
151 Assert.AreEqual (other, m.First (), "#4");
155 public void Add_Invalid ()
157 var m = new MultipartContent ("a", "b");
161 } catch (ArgumentNullException) {