Prechádzať zdrojové kódy

* nunitweb_config.xml: similar to almost_config.xml but ignores more stuff
* NunitWebTest.cs: use nunit_config.xml and fallback on XmlException

svn path=/trunk/mcs/; revision=60781

Andrew Skiba 19 rokov pred
rodič
commit
d3ee8d29eb

+ 5 - 0
mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/ChangeLog

@@ -1,3 +1,8 @@
+2006-05-17  Andrew Skiba <[email protected]>
+
+	* nunitweb_config.xml: similar to almost_config.xml but ignores more stuff
+	* NunitWebTest.cs: use nunit_config.xml and fallback on XmlException
+
 2006-03-27  Vladimir Krasnov  <[email protected]>
 
 	* test_catalog.xml: fixed not working tests

+ 230 - 231
mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/NunitWebTest.cs

@@ -1,69 +1,70 @@
-//
-// Authors:
-//   Rafael Mizrahi   <[email protected]>
-//   Erez Lotan       <[email protected]>
-//   Vladimir Krasnov <[email protected]>
-//   
-// 
-// Copyright (c) 2002-2005 Mainsoft Corporation.
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-using System.IO;
-using System.Xml;
-using System.Net;
-using System.Text;
-using System.Collections;
-
-namespace MonoTests.stand_alone.WebHarness
-{
-	public abstract class XmlComparableTest
-	{
-
-		public abstract bool XmlCompare(XmlDocument d1, XmlDocument d2, bool ignoreAlmost);
-	}
-
-	public class WebTest : XmlComparableTest
+//
+// Authors:
+//   Rafael Mizrahi   <[email protected]>
+//   Erez Lotan       <[email protected]>
+//   Vladimir Krasnov <[email protected]>
+//   
+// 
+// Copyright (c) 2002-2005 Mainsoft Corporation.
+// 
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.IO;
+using System.Xml;
+using System.Net;
+using System.Text;
+using System.Collections;
+using System.Reflection;
+
+namespace MonoTests.stand_alone.WebHarness
+{
+	public abstract class XmlComparableTest
+	{
+
+		public abstract bool XmlCompare(XmlDocument d1, XmlDocument d2, bool ignoreAlmost);
+	}
+
+	public class WebTest : XmlComparableTest
 	{
 		public const string BEGIN_TAG = "begint";
-		public const string END_TAG = "endt";
-
-		private XmlDocument _xmlIgnoreList = null;
+		public const string END_TAG = "endt";
+
+		private XmlDocument _xmlIgnoreList = null;
 		private string _compareStatus = "";
 		private string _ignoreListFile = "";
 
 		
 
-		public WebTest()
-		{
-		}
-
-		public string IgnoreListFile
-		{
-			get {return _ignoreListFile;}
-			set {_ignoreListFile = value;}
-		}
-		public string CompareStatus
-		{
-			get {return _compareStatus.ToString();}
+		public WebTest()
+		{
+		}
+
+		public string IgnoreListFile
+		{
+			get {return _ignoreListFile;}
+			set {_ignoreListFile = value;}
+		}
+		public string CompareStatus
+		{
+			get {return _compareStatus.ToString();}
 		}
 
 		public static string GetControlFromPageHtml (string str)
@@ -82,181 +83,179 @@ namespace MonoTests.stand_alone.WebHarness
 			XmlDocument dr = new XmlDocument ();
 			dr.LoadXml (helper.HtmltoXml (derived));
 			return helper.XmlCompare (or, dr, false);
-		}
-
-		public override bool XmlCompare(XmlDocument d1, XmlDocument d2, bool ignoreAlmost)
-		{
+		}
+
+		public override bool XmlCompare(XmlDocument d1, XmlDocument d2, bool ignoreAlmost)
+		{
 			XmlComparer comparer = new XmlComparer();
-			if (ignoreAlmost == false)
-			{
-				DoAlmost(d1);
-				DoAlmost(d2);
-			}
-			bool c = comparer.AreEqual(d1, d2);
-			_compareStatus = comparer.LastCompare;
-			return c;
-		}
-
-		public string HtmltoXml(string html)
-		{
-			HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
-			doc.LoadHtml(html);
-
-			StringBuilder fixedxml = new StringBuilder();
-			StringWriter sw = new StringWriter(fixedxml);
-
-			try
-			{
-				StringBuilder tempxml = new StringBuilder();
-				StringWriter tsw = new StringWriter(tempxml);
-
-				doc.OptionOutputAsXml = true;
-				doc.Save(tsw);
-
-				// fix style attribute
-				// the reason is that style attribute name-value pairs come in different order
-				// in .NET and GH
-				// Here I will sort the values of style attribute
-				XmlDocument tempDoc = new XmlDocument();
-				tempDoc.LoadXml(tempxml.ToString());
-
-				XmlNodeList allNodes = tempDoc.SelectNodes("//*");
-				foreach (XmlNode n in allNodes)
-				{
-					if (n.Attributes["style"] != null)
-					{
-						string att = n.Attributes["style"].Value;
-						string [] style = att.Trim(new char[]{' ', ';'}).Split(';');
-
-						for (int styleIndex=0; styleIndex<style.Length; styleIndex++)
-						{
-							style[styleIndex] = FixStyleNameValue(style[styleIndex]);
-						}
-						Array.Sort(style);
-						n.Attributes["style"].Value = string.Join(";", style);
-					}
-				}
-				tempDoc.Save(sw);
-			}
-			catch (Exception)
-			{
-				Console.WriteLine("Error parsing html response...");
-				Console.WriteLine("Test case aborted");
-				return "<TestCaseAborted></TestCaseAborted>";
-			}
-			return fixedxml.ToString();
-		}
-
-		private string FixStyleNameValue(string nameValue)
-		{
-			string [] nv = nameValue.Split(':');
-			// value may contain spaces in case of
-			// multiple values for one key
-			string [] nvalue = nv[1].Trim().Split(' ');
-			Array.Sort(nvalue);
-			nv[1] = string.Join(" ", nvalue);
-			return nv[0].Trim().ToLower() + ":" + nv[1].Trim().ToLower();
-		}
-
-		private void DoAlmost(XmlDocument xmlDocument)
-		{
-			XmlNode XmlIgnoreNode;
-			IEnumerator xmlIgnoreEnum;
-
-			if (_xmlIgnoreList == null)
-			{
+			if (ignoreAlmost == false)
+			{
+				DoAlmost(d1);
+				DoAlmost(d2);
+			}
+			bool c = comparer.AreEqual(d1, d2);
+			_compareStatus = comparer.LastCompare;
+			return c;
+		}
+
+		public string HtmltoXml(string html)
+		{
+			HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
+			doc.LoadHtml(html);
+
+			StringBuilder fixedxml = new StringBuilder();
+			StringWriter sw = new StringWriter(fixedxml);
+
+			try
+			{
+				StringBuilder tempxml = new StringBuilder();
+				StringWriter tsw = new StringWriter(tempxml);
+
+				doc.OptionOutputAsXml = true;
+				doc.Save(tsw);
+
+				// fix style attribute
+				// the reason is that style attribute name-value pairs come in different order
+				// in .NET and GH
+				// Here I will sort the values of style attribute
+				XmlDocument tempDoc = new XmlDocument();
+				tempDoc.LoadXml(tempxml.ToString());
+
+				XmlNodeList allNodes = tempDoc.SelectNodes("//*");
+				foreach (XmlNode n in allNodes)
+				{
+					if (n.Attributes["style"] != null)
+					{
+						string att = n.Attributes["style"].Value;
+						string [] style = att.Trim(new char[]{' ', ';'}).Split(';');
+
+						for (int styleIndex=0; styleIndex<style.Length; styleIndex++)
+						{
+							style[styleIndex] = FixStyleNameValue(style[styleIndex]);
+						}
+						Array.Sort(style);
+						n.Attributes["style"].Value = string.Join(";", style);
+					}
+				}
+				tempDoc.Save(sw);
+			}
+			catch (XmlException e)
+			{
+				return "<Exception><![CDATA["+e.Message +"]]></Exception>";
+			}
+			return fixedxml.ToString();
+		}
+
+		private string FixStyleNameValue(string nameValue)
+		{
+			string [] nv = nameValue.Split(':');
+			// value may contain spaces in case of
+			// multiple values for one key
+			string [] nvalue = nv[1].Trim().Split(' ');
+			Array.Sort(nvalue);
+			nv[1] = string.Join(" ", nvalue);
+			return nv[0].Trim().ToLower() + ":" + nv[1].Trim().ToLower();
+		}
+
+		private void DoAlmost(XmlDocument xmlDocument)
+		{
+			XmlNode XmlIgnoreNode;
+			IEnumerator xmlIgnoreEnum;
+
+			if (_xmlIgnoreList == null)
+			{
 				_xmlIgnoreList = new XmlDocument();
 				string xml;
-				using (Stream source = System.Reflection.Assembly.GetExecutingAssembly()
-					.GetManifestResourceStream ("HTMLComparer.almost_config.xml")) {
+				using (Stream source = Assembly.GetExecutingAssembly()
+					.GetManifestResourceStream ("nunitweb_config.xml")) {
 					using (StreamReader sr = new StreamReader (source))
 						xml = sr.ReadToEnd ();
 				}
-				_xmlIgnoreList.LoadXml (xml);
-			}
-
-			// Remove by Id or Name
-			// search by tag and if id or name match, remove all attributes
-			// must be the first almost since the following almost delete the id and name
-			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/RemoveById").GetEnumerator();
-			while (xmlIgnoreEnum.MoveNext())
-			{
-				XmlNodeList DocNodeList;
-				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
-				DocNodeList = xmlDocument.GetElementsByTagName("*");
-				if (DocNodeList != null)
-				{
-					foreach (XmlElement tmpXmlElement in DocNodeList)
-					{
-						foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
-						{
-							if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
-							{
-								if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name] != null )
-								{
-									if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name].Value.ToLower() == tmpIgnoreAttr.Value.ToLower())
-									{
-										tmpXmlElement.RemoveAllAttributes();
-									}
-								}
-							}
-						}
-					}
-				}	
-			}
-			// remove ignored attributes
-			// search for tag and remove it's attributes
-			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/IgnoreList").GetEnumerator(); //FirstChild.GetEnumerator
-			while (xmlIgnoreEnum.MoveNext())
-			{
-				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
-				XmlNodeList DocNodeList;
-				//clean specific element
-
-				DocNodeList = xmlDocument.GetElementsByTagName("*");
-				if (DocNodeList != null)
-				{
-					foreach (XmlElement tmpXmlElement in DocNodeList)
-					{
-						if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
-						{
-							foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
-							{
-								tmpXmlElement.RemoveAttribute(tmpIgnoreAttr.Name);
-							}
-						}
-					}
-				}
-			}
-
-			// clean javascript attribute value
-			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/CleanJavaScriptValueList").GetEnumerator(); //FirstChild.GetEnumerator
-			while (xmlIgnoreEnum.MoveNext())
-			{
-				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
-				XmlNodeList DocNodeList;
-				//clean Java Script attribute values
-				DocNodeList = xmlDocument.GetElementsByTagName("*");
-				if (DocNodeList != null)
-				{
-					foreach (XmlElement tmpXmlElement in DocNodeList)
-					{
-						if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
-						{
-							foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
-							{
-								if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name] != null )
-								{
-									if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name].Value.ToLower().IndexOf("javascript") >= 0 )
-									{
-										tmpXmlElement.SetAttribute(tmpIgnoreAttr.Name, "");
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}
+				_xmlIgnoreList.LoadXml (xml);
+			}
+
+			// Remove by Id or Name
+			// search by tag and if id or name match, remove all attributes
+			// must be the first almost since the following almost delete the id and name
+			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/RemoveById").GetEnumerator();
+			while (xmlIgnoreEnum.MoveNext())
+			{
+				XmlNodeList DocNodeList;
+				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
+				DocNodeList = xmlDocument.GetElementsByTagName("*");
+				if (DocNodeList != null)
+				{
+					foreach (XmlElement tmpXmlElement in DocNodeList)
+					{
+						foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
+						{
+							if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
+							{
+								if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name] != null )
+								{
+									if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name].Value.ToLower() == tmpIgnoreAttr.Value.ToLower())
+									{
+										tmpXmlElement.RemoveAllAttributes();
+									}
+								}
+							}
+						}
+					}
+				}	
+			}
+			// remove ignored attributes
+			// search for tag and remove it's attributes
+			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/IgnoreList").GetEnumerator(); //FirstChild.GetEnumerator
+			while (xmlIgnoreEnum.MoveNext())
+			{
+				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
+				XmlNodeList DocNodeList;
+				//clean specific element
+
+				DocNodeList = xmlDocument.GetElementsByTagName("*");
+				if (DocNodeList != null)
+				{
+					foreach (XmlElement tmpXmlElement in DocNodeList)
+					{
+						if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
+						{
+							foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
+							{
+								tmpXmlElement.RemoveAttribute(tmpIgnoreAttr.Name);
+							}
+						}
+					}
+				}
+			}
+
+			// clean javascript attribute value
+			xmlIgnoreEnum = _xmlIgnoreList.SelectSingleNode("Almost/CleanJavaScriptValueList").GetEnumerator(); //FirstChild.GetEnumerator
+			while (xmlIgnoreEnum.MoveNext())
+			{
+				XmlIgnoreNode = (XmlNode)xmlIgnoreEnum.Current;
+				XmlNodeList DocNodeList;
+				//clean Java Script attribute values
+				DocNodeList = xmlDocument.GetElementsByTagName("*");
+				if (DocNodeList != null)
+				{
+					foreach (XmlElement tmpXmlElement in DocNodeList)
+					{
+						if (tmpXmlElement.Name.ToLower() == XmlIgnoreNode.Name.ToLower()) 
+						{
+							foreach (XmlAttribute tmpIgnoreAttr in XmlIgnoreNode.Attributes)
+							{
+								if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name] != null )
+								{
+									if (tmpXmlElement.Attributes[tmpIgnoreAttr.Name].Value.ToLower().IndexOf("javascript") >= 0 )
+									{
+										tmpXmlElement.SetAttribute(tmpIgnoreAttr.Name, "");
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 36 - 0
mcs/class/System.Web/Test/mainsoft/MainsoftWebTest/nunitweb_config.xml

@@ -0,0 +1,36 @@
+<Almost>
+	<IgnoreList>
+		<div id="" visible="" name="" onmouseover="" onmouseout="" style="" />"
+		<span id="" visible="" name="" src=""/>
+		<input id="" visible="" name="" __EVENTARGUMENT="" __EVENTTARGET="" __VIEWSTATE="" causesvalidation=""/>
+		<table id="" visible="" name=""/>
+		<td id="" visible="" name=""/>
+		<th id="" visible="" name=""/>
+		<tr id="" visible="" name=""/>
+		<table id="" visible="" name=""/>
+		<img id="" visible="" name="" disabled="" src=""/>
+		<a id="" visible="" name="" href=""/>
+		<select id="" visible="" name=""/>
+		<textarea id="" visible="" name=""/>
+		<button id="" visible="" name="" causesvalidation=""/>
+		<p visible=""/>
+		<form visible=""/>
+		<label for=""/>
+		<select language="" onchange=""/>
+		<input language="" onchange=""/>
+		<table bordercolor=""/>
+    <tr onmouseover="" onmouseout=""  onkeyup="" id="" />
+  </IgnoreList>
+
+	<!--delete Java Script attribute value-->
+	<CleanJavaScriptValueList>
+		<a href=""/>
+		<a onclick=""/>
+	</CleanJavaScriptValueList>
+
+	<!--remove tags by attribute Id or name-->
+	<RemoveById>
+		<input id="__VIEWSTATE" name="__VIEWSTATE"/>
+	</RemoveById>
+</Almost>
+