1 #if !MOBILE && !MONOMAC
4 using System.ServiceModel;
5 using System.ServiceModel.Channels;
9 namespace MonoTests.System.ServiceModel
12 public class WebMessageEncodingBindingElementTest
15 [ExpectedException (typeof (ArgumentNullException))]
16 public void Constructor ()
18 new WebMessageEncodingBindingElement (null);
22 public void DefaultPropertyValues ()
24 WebMessageEncodingBindingElement be = new WebMessageEncodingBindingElement ();
25 Assert.AreEqual (Encoding.UTF8, be.WriteEncoding, "#1");
28 MessageEncoder CreateEncoder ()
30 WebMessageEncodingBindingElement m = new WebMessageEncodingBindingElement ();
31 return m.CreateMessageEncoderFactory ().Encoder;
35 public void MessageEncoder ()
37 var e = CreateEncoder ();
38 Assert.AreEqual ("application/xml", e.MediaType, "#1");
39 Assert.AreEqual ("application/xml; charset=utf-8", e.ContentType, "#2");
43 [ExpectedException (typeof (ProtocolException))]
44 public void MessageEncoderWriteMessageSoap12 ()
46 var e = CreateEncoder ();
47 e.WriteMessage (Message.CreateMessage (MessageVersion.Soap12, "urn:foo"), Stream.Null);
51 public void MessageEncoderWriteMessageXml ()
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 ()));
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 ()));
63 BindingContext CreateBindingContext ()
65 return new BindingContext (new CustomBinding (new HttpTransportBindingElement () { AllowCookies = true }), new BindingParameterCollection ());
68 BindingContext CreateBindingContext2 ()
70 return new BindingContext (new CustomBinding (new TcpTransportBindingElement ()), new BindingParameterCollection ());
74 public void CanBuildChannelFactory ()
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");
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");
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");
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");
105 public void CanBuildChannelListener ()
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");
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");
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");
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");
136 public void BuildChannelFactory ()
138 var m = new WebMessageEncodingBindingElement ();
139 var f = m.BuildChannelFactory<IRequestChannel> (CreateBindingContext ());
140 Assert.AreEqual (f.GetType (), new HttpTransportBindingElement ().BuildChannelFactory<IRequestChannel> (CreateBindingContext ()).GetType (), "#1");
144 public void GetPropertyMessageVersion ()
146 var m = new WebMessageEncodingBindingElement ();
147 var bc = new BindingContext (new CustomBinding (), new BindingParameterCollection ());
148 Assert.AreEqual (MessageVersion.None, m.GetProperty<MessageVersion> (bc), "#1");
152 public void ReadMessageNullContentType ()
154 var e = CreateEncoder ();
155 e.ReadMessage (new MemoryStream (), 10, null);
159 public void MessageEncoderIsContentTypeSupported ()
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.