Merge pull request #1857 from slluis/fix-assembly-resolver
[mono.git] / mcs / class / System / Test / System.Net / HttpListenerRequestTest.cs
index ce90511e115f3dc7fd67275b45770a1b5d2f745b..bc2bb3fa23d743ae75a104d6813567b2b4c8fbdb 100644 (file)
@@ -1,8 +1,9 @@
 //
 // HttpListenerRequestTest.cs - Unit tests for System.Net.HttpListenerRequest
 //
-// Author:
+// Authors:
 //     Gert Driesen (drieseng@users.sourceforge.net)
+//     David Straw
 //
 // Copyright (C) 2007 Gert Driesen
 //
@@ -37,12 +38,10 @@ using NUnit.Framework;
 namespace MonoTests.System.Net
 {
        [TestFixture]
-#if TARGET_JVM
-       [Ignore ("The class HttpListener is not supported")]
-#endif
        public class HttpListenerRequestTest
        {
                [Test]
+               [Category ("NotWorking")] // Bug #5742 
                public void HasEntityBody ()
                {
                        HttpListenerContext ctx;
@@ -172,5 +171,44 @@ namespace MonoTests.System.Net
                        ns.Close ();
                        listener.Close ();
                }
+
+               [Test]
+               public void HttpRequestUriIsNotDecoded ()
+               {
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener (
+                               "http://127.0.0.1:9000/RequestUriDecodeTest/");
+                       NetworkStream ns = HttpListener2Test.CreateNS (9000);
+                       HttpListener2Test.Send (ns, "GET /RequestUriDecodeTest/?a=b&c=d%26e HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");
+                       HttpListenerContext ctx = listener.GetContext ();
+                       HttpListenerRequest request = ctx.Request;
+                       Assert.AreEqual ("/RequestUriDecodeTest/?a=b&c=d%26e", request.Url.PathAndQuery);
+                       listener.Close ();
+               }
+
+               [Test] // #29927
+               public void HttpRequestUriUnescape ()
+               {
+                       var prefix = "http://localhost:12345/";
+                       var key = "Product/1";
+
+                       var expectedUrl = prefix + key + "/";
+                       var rawUrl = prefix + Uri.EscapeDataString (key) + "/";
+
+                       HttpListener listener = new HttpListener ();
+                       listener.Prefixes.Add (prefix);
+                       listener.Start ();
+
+                       var contextTask = listener.GetContextAsync ();
+
+                       var request = (HttpWebRequest) WebRequest.Create (rawUrl);
+                       request.GetResponseAsync ();
+
+                       if(!contextTask.Wait (1000))
+                               Assert.Fail ("Timeout");
+
+                       Assert.AreEqual (expectedUrl, contextTask.Result.Request.Url.AbsoluteUri);
+
+                       listener.Close ();
+               }
        }
 }