Merge pull request #4212 from BrzVlad/fix-ephemeron-leak
[mono.git] / mcs / class / System.ServiceModel.Web / Test / System.ServiceModel.Channels / WebMessageEncodingBindingElementTest.cs
1 #if !MOBILE && !MONOMAC
2 using System;
3 using System.IO;
4 using System.ServiceModel;
5 using System.ServiceModel.Channels;
6 using System.Text;
7 using NUnit.Framework;
8
9 namespace MonoTests.System.ServiceModel
10 {
11         [TestFixture]
12         public class WebMessageEncodingBindingElementTest
13         {
14                 [Test]
15                 [ExpectedException (typeof (ArgumentNullException))]
16                 public void Constructor ()
17                 {
18                         new WebMessageEncodingBindingElement (null);
19                 }
20
21                 [Test]
22                 public void DefaultPropertyValues ()
23                 {
24                         WebMessageEncodingBindingElement be = new WebMessageEncodingBindingElement ();
25                         Assert.AreEqual (Encoding.UTF8, be.WriteEncoding, "#1");
26                 }
27
28                 MessageEncoder CreateEncoder ()
29                 {
30                         WebMessageEncodingBindingElement m = new WebMessageEncodingBindingElement ();
31                         return m.CreateMessageEncoderFactory ().Encoder;
32                 }
33
34                 [Test]
35                 public void MessageEncoder ()
36                 {
37                         var e = CreateEncoder ();
38                         Assert.AreEqual ("application/xml", e.MediaType, "#1");
39                         Assert.AreEqual ("application/xml; charset=utf-8", e.ContentType, "#2");
40                 }
41
42                 [Test]
43                 [ExpectedException (typeof (ProtocolException))]
44                 public void MessageEncoderWriteMessageSoap12 ()
45                 {
46                         var e = CreateEncoder ();
47                         e.WriteMessage (Message.CreateMessage (MessageVersion.Soap12, "urn:foo"), Stream.Null);
48                 }
49
50                 [Test]
51                 public void MessageEncoderWriteMessageXml ()
52                 {
53                         var e = CreateEncoder ();
54                         MemoryStream ms = new MemoryStream ();
55                         // FIXME: nothing -> "" (right now it outputs <anyType xsi:nil='true' ... />)
56                         //e.WriteMessage (Message.CreateMessage (MessageVersion.None, "urn:foo"), ms);
57                         //Assert.AreEqual ("", Encoding.UTF8.GetString (ms.ToArray ()));
58
59                         e.WriteMessage (Message.CreateMessage (MessageVersion.None, "urn:foo", 135), ms);
60                         Assert.AreEqual ("<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">135</int>", Encoding.UTF8.GetString (ms.ToArray ()));
61                 }
62
63                 BindingContext CreateBindingContext ()
64                 {
65                         return new BindingContext (new CustomBinding (new HttpTransportBindingElement () { AllowCookies = true }), new BindingParameterCollection ());
66                 }
67
68                 BindingContext CreateBindingContext2 ()
69                 {
70                         return new BindingContext (new CustomBinding (new TcpTransportBindingElement ()), new BindingParameterCollection ());
71                 }
72
73                 [Test]
74                 public void CanBuildChannelFactory ()
75                 {
76                         // with HttpTransport
77                         var m = new WebMessageEncodingBindingElement ();
78                         Assert.IsTrue (m.CanBuildChannelFactory<IRequestChannel> (CreateBindingContext ()), "#1");
79                         Assert.IsFalse (m.CanBuildChannelFactory<IReplyChannel> (CreateBindingContext ()), "#2");
80                         Assert.IsFalse (m.CanBuildChannelFactory<IRequestSessionChannel> (CreateBindingContext ()), "#3");
81                         Assert.IsFalse (m.CanBuildChannelFactory<IDuplexChannel> (CreateBindingContext ()), "#4");
82
83                         // actually they are from transport
84                         var h = new HttpTransportBindingElement ();
85                         Assert.IsTrue (h.CanBuildChannelFactory<IRequestChannel> (CreateBindingContext ()), "#5");
86                         Assert.IsFalse (h.CanBuildChannelFactory<IReplyChannel> (CreateBindingContext ()), "#6");
87                         Assert.IsFalse (h.CanBuildChannelFactory<IRequestSessionChannel> (CreateBindingContext ()), "#7");
88                         Assert.IsFalse (h.CanBuildChannelFactory<IDuplexChannel> (CreateBindingContext ()), "#8");
89
90                         // with TcpTransport
91                         Assert.IsFalse (m.CanBuildChannelFactory<IRequestChannel> (CreateBindingContext2 ()), "#9");
92                         Assert.IsFalse (m.CanBuildChannelFactory<IReplyChannel> (CreateBindingContext2 ()), "#10");
93                         Assert.IsFalse (m.CanBuildChannelFactory<IRequestSessionChannel> (CreateBindingContext2 ()), "#11");
94                         Assert.IsFalse (m.CanBuildChannelFactory<IDuplexChannel> (CreateBindingContext2 ()), "#12");
95
96                         // ... yes, actually they are from transport
97                         var t = new TcpTransportBindingElement ();
98                         Assert.IsFalse (t.CanBuildChannelFactory<IRequestChannel> (CreateBindingContext2 ()), "#13");
99                         Assert.IsFalse (t.CanBuildChannelFactory<IReplyChannel> (CreateBindingContext2 ()), "#14");
100                         Assert.IsFalse (t.CanBuildChannelFactory<IRequestSessionChannel> (CreateBindingContext2 ()), "#15");
101                         Assert.IsFalse (t.CanBuildChannelFactory<IDuplexChannel> (CreateBindingContext2 ()), "#16");
102                 }
103
104                 [Test]
105                 public void CanBuildChannelListener ()
106                 {
107                         // with HttpTransport
108                         var m = new WebMessageEncodingBindingElement ();
109                         Assert.IsFalse (m.CanBuildChannelListener<IRequestChannel> (CreateBindingContext ()), "#1");
110                         Assert.IsTrue (m.CanBuildChannelListener<IReplyChannel> (CreateBindingContext ()), "#2");
111                         Assert.IsFalse (m.CanBuildChannelListener<IRequestSessionChannel> (CreateBindingContext ()), "#3");
112                         Assert.IsFalse (m.CanBuildChannelListener<IDuplexChannel> (CreateBindingContext ()), "#4");
113
114                         // actually they are from transport
115                         var h = new HttpTransportBindingElement ();
116                         Assert.IsFalse (h.CanBuildChannelListener<IRequestChannel> (CreateBindingContext ()), "#5");
117                         Assert.IsTrue  (h.CanBuildChannelListener<IReplyChannel> (CreateBindingContext ()), "#6");
118                         Assert.IsFalse (h.CanBuildChannelListener<IRequestSessionChannel> (CreateBindingContext ()), "#7");
119                         Assert.IsFalse (h.CanBuildChannelListener<IDuplexChannel> (CreateBindingContext ()), "#8");
120
121                         // with TcpTransport
122                         Assert.IsFalse (m.CanBuildChannelListener<IRequestChannel> (CreateBindingContext2 ()), "#9");
123                         Assert.IsFalse (m.CanBuildChannelListener<IReplyChannel> (CreateBindingContext2 ()), "#10");
124                         Assert.IsFalse (m.CanBuildChannelListener<IRequestSessionChannel> (CreateBindingContext2 ()), "#11");
125                         Assert.IsFalse (m.CanBuildChannelListener<IDuplexChannel> (CreateBindingContext2 ()), "#12");
126
127                         // ... yes, actually they are from transport
128                         var t = new TcpTransportBindingElement ();
129                         Assert.IsFalse (t.CanBuildChannelListener<IRequestChannel> (CreateBindingContext2 ()), "#13");
130                         Assert.IsFalse (t.CanBuildChannelListener<IReplyChannel> (CreateBindingContext2 ()), "#14");
131                         Assert.IsFalse (t.CanBuildChannelListener<IRequestSessionChannel> (CreateBindingContext2 ()), "#15");
132                         Assert.IsFalse (t.CanBuildChannelListener<IDuplexChannel> (CreateBindingContext2 ()), "#16");
133                 }
134
135                 [Test]
136                 public void BuildChannelFactory ()
137                 {
138                         var m = new WebMessageEncodingBindingElement ();
139                         var f = m.BuildChannelFactory<IRequestChannel> (CreateBindingContext ());
140                         Assert.AreEqual (f.GetType (), new HttpTransportBindingElement ().BuildChannelFactory<IRequestChannel> (CreateBindingContext ()).GetType (), "#1");
141                 }
142
143                 [Test]
144                 public void GetPropertyMessageVersion ()
145                 {
146                         var m = new WebMessageEncodingBindingElement ();
147                         var bc = new BindingContext (new CustomBinding (), new BindingParameterCollection ());
148                         Assert.AreEqual (MessageVersion.None, m.GetProperty<MessageVersion> (bc), "#1");
149                 }
150
151                 [Test]
152                 public void ReadMessageNullContentType ()
153                 {
154                         var e = CreateEncoder ();
155                         e.ReadMessage (new MemoryStream (), 10, null);
156                 }
157
158                 [Test]
159                 public void MessageEncoderIsContentTypeSupported ()
160                 {
161                         var enc = new WebMessageEncodingBindingElement ().CreateMessageEncoderFactory ().Encoder;
162                         Assert.IsTrue (enc.IsContentTypeSupported ("application/xml"), "#1");
163                         Assert.IsTrue (enc.IsContentTypeSupported ("text/xml"), "#2");
164                         Assert.IsTrue (enc.IsContentTypeSupported ("application/soap+xml"), "#3");
165                         Assert.IsTrue (enc.IsContentTypeSupported ("application/foobar+xml"), "#4"); // wow.
166                         Assert.IsTrue (enc.IsContentTypeSupported ("application"), "#5"); // wow.
167                         Assert.IsTrue (enc.IsContentTypeSupported (String.Empty), "#6"); // wow.
168                 }
169         }
170 }
171 #endif