Author: andrews
Date: 2006-06-22 09:58:53 -0400 (Thu, 22 Jun 2006)
New Revision: 61934

Added:
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Response.cs
Removed:
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormPostback.cs
Modified:
   trunk/mcs/class/System.Web/System.Web_test.dll.sources
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/BaseRequest.cs
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormRequest.cs
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/MyHost.cs
   trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs
Log:
implemented simple postback test infrastructure

Modified: trunk/mcs/class/System.Web/System.Web_test.dll.sources
===================================================================
--- trunk/mcs/class/System.Web/System.Web_test.dll.sources      2006-06-22 
10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/System.Web_test.dll.sources      2006-06-22 
13:58:53 UTC (rev 61934)
@@ -12,14 +12,16 @@
 mainsoft/MainsoftWebTest/HtmlAgilityPack/tools.cs
 mainsoft/MainsoftWebTest/NunitWebTest.cs
 mainsoft/MainsoftWebTest/XmlComparer.cs
-mainsoft/NunitWeb/NunitWeb/MyHandler.cs
-mainsoft/NunitWeb/NunitWeb/MyHost.cs
 mainsoft/NunitWeb/NunitWeb/BaseInvoker.cs
 mainsoft/NunitWeb/NunitWeb/BaseRequest.cs
 mainsoft/NunitWeb/NunitWeb/BaseWorkerRequest.cs
+mainsoft/NunitWeb/NunitWeb/FormRequest.cs
+mainsoft/NunitWeb/NunitWeb/HandlerInvoker.cs
+mainsoft/NunitWeb/NunitWeb/MyHandler.cs
+mainsoft/NunitWeb/NunitWeb/MyHost.cs
 mainsoft/NunitWeb/NunitWeb/PageDelegates.cs
-mainsoft/NunitWeb/NunitWeb/HandlerInvoker.cs
 mainsoft/NunitWeb/NunitWeb/PageInvoker.cs
+mainsoft/NunitWeb/NunitWeb/Response.cs
 mainsoft/NunitWeb/NunitWeb/StandardUrl.cs
 mainsoft/NunitWeb/NunitWeb/WebTest.cs
 System.Web/HttpCacheVaryByHeadersTest.cs

Modified: 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/BaseRequest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/BaseRequest.cs   
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/BaseRequest.cs   
2006-06-22 13:58:53 UTC (rev 61934)
@@ -38,10 +38,15 @@
                /// 
                public virtual HttpWorkerRequest CreateWorkerRequest ()
                {
-                       StringWriter wr = new StringWriter ();
-                       BaseWorkerRequest br = new BaseWorkerRequest (Url, "", 
wr);
+                       StringWriter wr = new StringWriter ();
+                       BaseWorkerRequest br = new BaseWorkerRequest (Url, 
GetQueryString (), wr);
                        ((IDictionary) br) [GetType ()] = wr;
                        return br;
+               }
+
+               protected virtual string GetQueryString ()
+               {
+                       return "";
                }
 
                /// <summary>
@@ -50,14 +55,16 @@
                /// <param name="request">this must be the same request that 
was returned by
                /// CreateWorkerRequest</param>
                /// <returns></returns>
-               public virtual string GetRequestResult (HttpWorkerRequest 
request)
+               public virtual Response GetRequestResult (HttpWorkerRequest 
request)
                {
                        BaseWorkerRequest br = (BaseWorkerRequest) request;
                        IDictionary d = (IDictionary) br;
                        TextWriter wr = (TextWriter) d[GetType ()];
                        d.Remove (GetType ());
-                       wr.Close ();
-                       return wr.ToString ();
+                       wr.Close ();
+                       Response r = new Response ();
+                       r.Body = wr.ToString ();
+                       return r;
                }
        }
 }

Deleted: 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormPostback.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormPostback.cs  
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormPostback.cs  
2006-06-22 13:58:53 UTC (rev 61934)
@@ -1,27 +0,0 @@
-using System;
-using System.Collections.Specialized;
-
-namespace MonoTests.SystemWeb.Framework
-{
-       [Serializable]
-       public class FormPostback:FormRequest
-       {
-               internal FormPostback (string url, NameValueCollection fields)
-                       :base (url)
-               {
-                       this._fields = fields;
-               }
-
-               private NameValueCollection _fields;
-               public NameValueCollection Fields
-               {
-                       get { return Fields; }
-               }
-
-               public virtual string Url
-               {
-                       get { return base.Url; }
-                       set { throw new Exception ("Must not change Url of 
FormPostback"); }
-               }
-       }
-}

Modified: 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormRequest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormRequest.cs   
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/FormRequest.cs   
2006-06-22 13:58:53 UTC (rev 61934)
@@ -1,39 +1,24 @@
 using System;
-using System.Xml;
 using System.Collections.Specialized;
+using System.Text;
 using System.Web;
 using System.IO;
-using System.Text;
+using System.Collections;
+using System.Xml;
 
 namespace MonoTests.SystemWeb.Framework
 {
-       [Serializable]
-       public class FormRequest: BaseRequest
+       [Serializable]
+       public class FormRequest : BaseRequest
        {
-               public FormRequest ()
+               public FormRequest (Response response, string formId)
                {
-               }
+                       fields = new NameValueCollection();
 
-               public FormRequest (string url)
-                       :base (url)
-               {
-               }
-
-               [NonSerialized]
-               string lastResult;
-
-               public virtual string GetRequestResult (HttpWorkerRequest 
request)
-               {
-                       lastResult = base.GetRequestResult (request);
-                       return lastResult;
-               }
-
-               public FormPostback CreateNext (string formId)
-               {
                        HtmlAgilityPack.HtmlDocument htmlDoc = new 
HtmlAgilityPack.HtmlDocument ();
-                       htmlDoc.LoadHtml (lastResult);
+                       htmlDoc.LoadHtml (response.Body);
 
-                       StringBuilder tempxml = new StringBuilder (); 
+                       StringBuilder tempxml = new StringBuilder ();
                        StringWriter tsw = new StringWriter (tempxml);
                        htmlDoc.OptionOutputAsXml = true;
                        htmlDoc.Save (tsw);
@@ -41,21 +26,65 @@
                        XmlDocument doc = new XmlDocument ();
                        doc.LoadXml (tempxml.ToString ());
 
-                       XmlNode formNode = doc.SelectSingleNode ("[EMAIL 
PROTECTED]" + formId + "]");
+                       const string HTML_NAMESPACE = 
"http://www.w3.org/1999/xhtml";;
+
+                       XmlNamespaceManager nsmgr = new XmlNamespaceManager 
(doc.NameTable);
+                       nsmgr.AddNamespace ("html", HTML_NAMESPACE);
+
+#if USE_CORRECT_FORMID
+                       XmlNode formNode = doc.SelectSingleNode ("//html:[EMAIL 
PROTECTED]'" + formId + "']", nsmgr);
+#else
+                       XmlNode formNode = doc.SelectSingleNode ("//html:form", 
nsmgr);
+#endif
                        if (formNode == null)
                                throw new ArgumentException ("Form with id='" + 
formId +
-                                       "' was not found in document: " + 
lastResult);
+                                       "' was not found in document: " + 
response.Body);
 
-                       string targetUrl = formNode.Attributes ["action"].Value;
-                       if (targetUrl == null)
-                               targetUrl = this.Url;
+                       string actionUrl = formNode.Attributes["action"].Value;
+                       if (!string.IsNullOrEmpty (actionUrl))
+                               base.Url = actionUrl;
+#if USE_CORRECT_FORMID
 
-                       NameValueCollection fields = new NameValueCollection ();
-                       foreach (XmlNode inputNode in formNode.SelectNodes 
("input"))
-                               fields.Add (inputNode.Attributes["name"].Value,
-                                       inputNode.Attributes["value"].Value);
+                       foreach (XmlNode inputNode in formNode.SelectNodes 
("//html:input", nsmgr))
+#else
+                       foreach (XmlNode inputNode in doc.SelectNodes 
("//html:input", nsmgr))
+#endif
+                       {
+                               string name;
+                               string value = "";
+                               name = inputNode.Attributes["name"].Value;
+                               if (inputNode.Attributes["value"] != null)
+                                       value = 
inputNode.Attributes["value"].Value;
+                               fields.Add (name, value);
+                       }
+               }
 
-                       return new FormPostback (targetUrl, fields);
+               private NameValueCollection fields;
+               public NameValueCollection Fields
+               {
+                       get { return fields; }
                }
+
+               public override string Url
+               {
+                       get { return base.Url; }
+                       set { throw new Exception ("Must not change Url of 
FormPostback"); }
+               }
+
+               protected override string GetQueryString ()
+               {
+                       StringBuilder query = new StringBuilder ();
+                       bool first = true;
+                       foreach (string key in Fields.AllKeys) {
+                               if (first)
+                                       first = false;
+                               else
+                                       query.Append ("&");
+                               query.Append (HttpUtility.UrlEncode (key));
+                               query.Append ("=");
+                               query.Append (HttpUtility.UrlEncode 
(Fields[key]));
+                       }
+                       return query.ToString ();
+               }
        }
 }

Modified: trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/MyHost.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/MyHost.cs        
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/MyHost.cs        
2006-06-22 13:58:53 UTC (rev 61934)
@@ -28,7 +28,7 @@
                public AppDomain AppDomain
                { get { return AppDomain.CurrentDomain; } }
                
-               public string Run (BaseInvoker invoker, BaseRequest request)
+               public Response Run (BaseInvoker invoker, BaseRequest request)
                {
                        HttpWorkerRequest wr = request.CreateWorkerRequest ();
                        IDictionary d = (IDictionary) wr;
@@ -40,13 +40,13 @@
                        d[GetType ()] = data;
 
                        HttpRuntime.ProcessRequest (wr);
-                       string res = request.GetRequestResult (wr);
+                       Response res = request.GetRequestResult (wr);
 
                        if (data.exception != null)
                                RethrowException (data.exception);
 
                        if (!data.invoked)
-                               throw new Exception ("internal error: 
ProcessRequest did not reach WebTest.Invoke; response was: " + res);
+                               throw new Exception ("internal error: 
ProcessRequest did not reach WebTest.Invoke; response was: " + res.Body);
 
                        return res;
                }

Added: trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Response.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Response.cs      
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Response.cs      
2006-06-22 13:58:53 UTC (rev 61934)
@@ -0,0 +1,10 @@
+using System;
+
+namespace MonoTests.SystemWeb.Framework
+{
+       [Serializable]
+       public class Response
+       {
+               public string Body;
+       }
+}

Modified: trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs       
2006-06-22 10:56:03 UTC (rev 61933)
+++ trunk/mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs       
2006-06-22 13:58:53 UTC (rev 61934)
@@ -6,7 +6,13 @@
 namespace MonoTests.SystemWeb.Framework
 {
        public class WebTest
-       {
+       {
+               Response _response;
+               public Response Response
+               {
+                       get { return _response; }
+               }
+
                BaseInvoker _invoker;
                public BaseInvoker Invoker
                {
@@ -40,7 +46,8 @@
                {
                        if (Request.Url == null)
                                Request.Url = Invoker.GetDefaultUrl ();
-                       return Host.Run (Invoker, Request);
+                       _response = Host.Run (Invoker, Request);
+                       return _response.Body;
                }
 
                public static void Invoke (object param)

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to