WebMessageEncodingBindingElementTest.cs 7.2 KB

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