[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / BoundFieldTest.cs
index 08cd98938b12772c82bfa87259ef6c9af8aded98..df66f3bca30ecd3d24ce27a40acc9e57548d354b 100644 (file)
@@ -27,7 +27,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -41,14 +40,22 @@ using System.Collections;
 using System.Collections.Specialized;
 using Image = System.Web.UI.WebControls.Image;
 using NUnit.Framework;
-using System.Globalization;\r
-using MonoTests.SystemWeb.Framework;\r
+using System.Globalization;
+using MonoTests.SystemWeb.Framework;
 using MonoTests.stand_alone.WebHarness;
 
 
 
 namespace MonoTests.System.Web.UI.WebControls
 {
+       class EncodingTest
+       {
+               public override string ToString ()
+               {
+                       return "<EncodingTest>&";
+               }
+       }
+
        class PokerBoundField : BoundField
        {
                public Button bindbutoon;
@@ -101,13 +108,48 @@ namespace MonoTests.System.Web.UI.WebControls
                public Control GetControl {
                        get { return base.Control; }
                }
-       }\r
-\r
-\r
+
+               public object DoSaveViewState ()
+               {
+                       return SaveViewState ();
+               }
+       }
+
+
        [Serializable]
        [TestFixture]
        public class BoundFieldTest
        {
+               [TestFixtureSetUp]
+               public void SetUp ()
+               {
+                       WebTest.CopyResource (GetType (), "BoundField_Bug646505.aspx", "BoundField_Bug646505.aspx");
+                       WebTest.CopyResource (GetType (), "BoundField_Bug646505.aspx.cs", "BoundField_Bug646505.aspx.cs");
+               }
+
+               [Test (Description="Bug 646505")]
+               public void BoundField_Bug646505 ()
+               {
+#if NET_4_0
+                       string originalHtml = "<div>\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"gridView\" style=\"border-collapse:collapse;\">\n\t\t<tr>\n\t\t\t<th scope=\"col\">&nbsp;</th><th scope=\"col\">&nbsp;</th>\n\t\t</tr><tr>\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;gridView$ctl02$ctl00&#39;,&#39;&#39;)\">Update</a>&nbsp;<a href=\"javascript:__doPostBack(&#39;gridView&#39;,&#39;Cancel$0&#39;)\">Cancel</a></td><td><input name=\"gridView$ctl02$ctl02\" type=\"text\" value=\"False\" /></td>\n\t\t</tr><tr>\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;gridView&#39;,&#39;Edit$1&#39;)\">Edit</a></td><td>False</td>\n\t\t</tr>\n\t</table>\n</div>\n";
+#else
+                       string originalHtml = "<div>\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"gridView\" style=\"border-collapse:collapse;\">\n\t\t<tr>\n\t\t\t<th scope=\"col\">&nbsp;</th><th scope=\"col\">&nbsp;</th>\n\t\t</tr><tr>\n\t\t\t<td><a href=\"javascript:__doPostBack('gridView$ctl02$ctl00','')\">Update</a>&nbsp;<a href=\"javascript:__doPostBack('gridView','Cancel$0')\">Cancel</a></td><td><input name=\"gridView$ctl02$ctl02\" type=\"text\" value=\"False\" /></td>\n\t\t</tr><tr>\n\t\t\t<td><a href=\"javascript:__doPostBack('gridView','Edit$1')\">Edit</a></td><td>False</td>\n\t\t</tr>\n\t</table>\n</div>\n";
+#endif
+                       WebTest t = new WebTest ("BoundField_Bug646505.aspx");
+                       t.Run ();
+
+                       FormRequest fr = new FormRequest (t.Response, "form1");
+                       fr.Controls.Add ("__EVENTTARGET");
+                       fr.Controls.Add ("__EVENTARGUMENT");
+                       fr.Controls ["__EVENTTARGET"].Value = "gridView";
+                       fr.Controls ["__EVENTARGUMENT"].Value = "Edit$0";
+                       t.Request = fr;
+                       string pageHtml = t.Run ();
+                       string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml);
+
+                       HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
+               }
+               
                [Test]
                public void BoundField_DefaultProperty () {
                        PokerBoundField bf = new PokerBoundField ();
@@ -299,6 +341,53 @@ namespace MonoTests.System.Web.UI.WebControls
                        bf.DataFormatString = "-{0,8:G}-";
                        result = bf.DoFormatDataValue (10, false);
                        Assert.AreEqual ("-      10-", result, "FormatDataValueWithFormat");
+
+                       bf.DataFormatString = "-{0:X}-";
+                       result = bf.DoFormatDataValue (10, true);
+                       Assert.AreEqual ("-A-", result, "FormatDataValueWithFormatAndHtmlEncode");
+
+                       bf.DataFormatString = "-{0:X}-";
+                       result = bf.DoFormatDataValue (10, false);
+                       Assert.AreEqual ("-A-", result, "FormatDataValueWithFormatAndNoHtmlEncode");
+
+                       bf.HtmlEncodeFormatString = false;
+                       bf.DataFormatString = "-{0:X}-";
+                       result = bf.DoFormatDataValue (10, true);
+                       Assert.AreEqual ("-10-", result, "NoHtmlEncodeFormatString_HtmlEncode");
+
+                       bf.DataFormatString = "-{0:X}-";
+                       result = bf.DoFormatDataValue (10, false);
+                       Assert.AreEqual ("-A-", result, "NoHtmlEncodeFormatString_NoHtmlEncode");
+               }
+
+               [Test]
+               public void HtmlEncodeFormatString ()
+               {
+                       string formatString = "<script>alert ('{0}');</script>"; 
+                       var bf = new PokerBoundField ();
+
+                       Assert.IsTrue (bf.HtmlEncodeFormatString, "#A1-2");
+                       Assert.IsTrue (bf.HtmlEncode, "#A1-2");
+                       Assert.IsTrue (bf.DoSupportsHtmlEncode, "#A1-3");
+
+                       bf.DataFormatString = formatString;
+#if NET_4_0
+                       Assert.AreEqual ("&lt;script&gt;alert (&#39;&lt;test&gt;&#39;);&lt;/script&gt;", bf.DoFormatDataValue ("<test>", true), "#A2");
+#else
+                       Assert.AreEqual ("&lt;script&gt;alert ('&lt;test&gt;');&lt;/script&gt;", bf.DoFormatDataValue ("<test>", true), "#A2");
+#endif
+                       Assert.AreEqual (String.Format (formatString, "<test>"), bf.DoFormatDataValue ("<test>", false), "#A3");
+
+                       bf.HtmlEncodeFormatString = false;
+                       Assert.AreEqual ("<script>alert ('&lt;test&gt;');</script>", bf.DoFormatDataValue ("<test>", true), "#A4");
+
+                       var ec = new EncodingTest ();
+                       bf.HtmlEncodeFormatString = true;
+#if NET_4_0
+                       Assert.AreEqual ("&lt;script&gt;alert (&#39;&lt;EncodingTest&gt;&amp;&#39;);&lt;/script&gt;", bf.DoFormatDataValue (ec, true), "#A4");
+#else
+                       Assert.AreEqual ("&lt;script&gt;alert ('&lt;EncodingTest&gt;&amp;');&lt;/script&gt;", bf.DoFormatDataValue (ec, true), "#A4");
+#endif
                }
 
                [Test]
@@ -310,7 +399,7 @@ namespace MonoTests.System.Web.UI.WebControls
                }
 
                [Test]
-               [ExpectedException(typeof(HttpException), "A data item was not found in the container. The container must either implement IDataItemContainer, or have a property named DataItem.")]
+               [ExpectedException(typeof(HttpException), ExpectedMessage="A data item was not found in the container. The container must either implement IDataItemContainer, or have a property named DataItem.")]
                public void BoundField_GetValueNull () {
                        PokerBoundField bf = new PokerBoundField ();
                        SimpleSpreadsheetRow ds = new SimpleSpreadsheetRow (0, null);
@@ -360,76 +449,62 @@ namespace MonoTests.System.Web.UI.WebControls
                public void BoundField_GetValueExeption () {
                        PokerBoundField bf = new PokerBoundField ();
                        bf.DoGetValue (null);
-               }\r
-\r
-               [Test]\r
-               [Category ("NunitWeb")]\r
-               public void BoundField_NullValueRender ()\r
-               {\r
-                       string html = new WebTest (PageInvoker.CreateOnLoad (new PageDelegate (BasicRenderTestInit))).Run ();\r
-                       string orightml = @"<div>\r
-                               <table cellspacing=""0"" rules=""all"" border=""1"" id=""GridView1"" style=""border-collapse:collapse;"">\r
-                                       <tr>\r
-                                               <th scope=""col"">&nbsp;</th><th scope=""col"">&nbsp;</th>\r
-                                       </tr><tr>\r
-                                               <td>Norway</td><td>Norway</td>\r
-                                       </tr><tr>\r
-                                               <td>Sweden</td><td>Sweden</td>\r
-                                       </tr><tr>\r
-                                               <td>EMPTY</td><td>&nbsp;</td>\r
-                                       </tr><tr>\r
-                                               <td>Italy</td><td>Italy</td>\r
-                                       </tr>\r
-                               </table>\r
-                               </div>";\r
-                       html = HtmlDiff.GetControlFromPageHtml (html);\r
-                       HtmlDiff.AssertAreEqual (orightml, html, "NullValueRender");\r
-               }\r
-\r
-               public static void BasicRenderTestInit (Page p)\r
-               {\r
-                       ArrayList myds = new ArrayList ();\r
-                       myds.Add (new myds_data ("Norway"));\r
-                       myds.Add (new myds_data ("Sweden"));\r
-                       myds.Add (new myds_data (""));\r
-                       myds.Add (new myds_data ("Italy"));\r
-\r
-                       BoundField bf = new BoundField ();\r
-                       bf.DataField = "Field1";\r
-                       bf.NullDisplayText = "EMPTY";\r
-\r
-                       BoundField bf2 = new BoundField ();\r
-                       bf2.DataField = "Field1";\r
-\r
-                       GridView GridView1 = new GridView();\r
-                       GridView1.AutoGenerateColumns = false;\r
-                       GridView1.Columns.Add (bf);\r
-                       GridView1.Columns.Add (bf2);\r
-                       GridView1.DataSource = myds;\r
-                       GridView1.DataBind ();\r
-\r
-                       LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);\r
-                       LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);\r
-\r
-                       p.Form.Controls.Add (lcb);\r
-                       p.Form.Controls.Add (GridView1);\r
-                       p.Form.Controls.Add (lce);\r
-               }\r
-\r
-               class myds_data\r
-               {\r
-                       string _s = "";\r
-                       public myds_data (string s)\r
-                       {\r
-                               _s = s;\r
-                       }\r
-\r
-                       public string Field1\r
-                       {\r
-                               get { return _s; }\r
-                       }\r
-               }\r
-\r
+               }
+
+               [Test]
+               [Category ("NunitWeb")]
+               public void BoundField_NullValueRender ()
+               {
+                       string html = new WebTest (PageInvoker.CreateOnLoad (new PageDelegate (BasicRenderTestInit))).Run ();
+                       string orightml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">&nbsp;</th><th scope=\"col\">&nbsp;</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Norway</td><td>Norway</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Sweden</td><td>Sweden</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>EMPTY</td><td>&nbsp;</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Italy</td><td>Italy</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
+                       html = HtmlDiff.GetControlFromPageHtml (html);
+                       HtmlDiff.AssertAreEqual (orightml, html, "NullValueRender");
+               }
+
+               public static void BasicRenderTestInit (Page p)
+               {
+                       ArrayList myds = new ArrayList ();
+                       myds.Add (new myds_data ("Norway"));
+                       myds.Add (new myds_data ("Sweden"));
+                       myds.Add (new myds_data (""));
+                       myds.Add (new myds_data ("Italy"));
+
+                       BoundField bf = new BoundField ();
+                       bf.DataField = "Field1";
+                       bf.NullDisplayText = "EMPTY";
+
+                       BoundField bf2 = new BoundField ();
+                       bf2.DataField = "Field1";
+
+                       GridView GridView1 = new GridView();
+                       GridView1.AutoGenerateColumns = false;
+                       GridView1.Columns.Add (bf);
+                       GridView1.Columns.Add (bf2);
+                       GridView1.DataSource = myds;
+                       GridView1.DataBind ();
+
+                       LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
+                       LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
+
+                       p.Form.Controls.Add (lcb);
+                       p.Form.Controls.Add (GridView1);
+                       p.Form.Controls.Add (lce);
+               }
+
+               class myds_data
+               {
+                       string _s = "";
+                       public myds_data (string s)
+                       {
+                               _s = s;
+                       }
+
+                       public string Field1
+                       {
+                               get { return _s; }
+                       }
+               }
+
                
                class ControlWithDataItem : Control
                {
@@ -481,4 +556,3 @@ namespace MonoTests.System.Web.UI.WebControls
                }
        }
 }
-#endif
\ No newline at end of file