Xamarin Public Jenkins f3e3aab35a Imported Upstream version 4.3.2.467
Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
2016-02-22 11:00:01 -05:00

491 lines
14 KiB
C#

//
// Tests for System.Web.UI.WebControls.RadioButtonList.cs
//
// Authors:
// Jordi Mas i Hernandez (jordi@ximian.com)
// Gonzalo Paniagua Javier (gonzalo@novell.com)
//
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
//
// 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.Web.UI.WebControls;
using NUnit.Framework;
using System;
using System.Collections.Specialized;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Globalization;
using MonoTests.SystemWeb.Framework;
using MonoTests.stand_alone.WebHarness;
using System.Drawing;
using System.Collections;
namespace MonoTests.System.Web.UI.WebControls {
[TestFixture]
public class RadioButtonListTest
{
#region help_classes
public class TestRadioButtonList : RadioButtonList {
public StateBag StateBag {
get { return base.ViewState; }
}
public string Render ()
{
HtmlTextWriter writer = new HtmlTextWriter (new StringWriter ());
base.Render (writer);
return writer.InnerWriter.ToString ();
}
}
class PokerRadioButtonList : RadioButtonList
{
public StateBag StateBag
{
get { return base.ViewState; }
}
public string Render ()
{
HtmlTextWriter writer = new HtmlTextWriter (new StringWriter ());
base.Render (writer);
return writer.InnerWriter.ToString ();
}
protected override Style GetItemStyle (ListItemType itemType, int repeatIndex)
{
Style s = new Style ();
s.BackColor = Color.Red;
s.BorderStyle = BorderStyle.Solid;
WebTest.CurrentTest.UserData = "GetItemStyle";
return s;
}
public new bool HasFooter
{
get
{
return base.HasFooter;
}
}
public new bool HasHeader
{
get
{
return base.HasHeader;
}
}
public new bool HasSeparators
{
get
{
return base.HasSeparators;
}
}
public new int RepeatedItemCount
{
get
{
return base.RepeatedItemCount;
}
}
protected override void RaisePostDataChangedEvent ()
{
base.RaisePostDataChangedEvent ();
}
public void DoRaisePostDataChangedEvent ()
{
base.RaisePostDataChangedEvent ();
}
public new virtual void VerifyMultiSelect()
{
base.VerifyMultiSelect();
}
}
#endregion
[Test]
public void RadioButtonList_Constructor ()
{
TestRadioButtonList r = new TestRadioButtonList ();
Assert.AreEqual (-1, r.CellPadding, "A1");
Assert.AreEqual (-1, r.CellSpacing, "A2");
Assert.AreEqual (0, r.RepeatColumns, "A3");
Assert.AreEqual (RepeatDirection.Vertical, r.RepeatDirection, "A4");
Assert.AreEqual (RepeatLayout.Table, r.RepeatLayout, "A5");
Assert.AreEqual (TextAlign.Right, r.TextAlign, "A6");
Assert.AreEqual (false, ((IRepeatInfoUser)r).HasFooter, "A7");
Assert.AreEqual (false, ((IRepeatInfoUser)r).HasHeader, "A8");
Assert.AreEqual (false, ((IRepeatInfoUser)r).HasSeparators, "A9");
Assert.AreEqual (0, ((IRepeatInfoUser)r).RepeatedItemCount, "A10");
}
[Test]
public void CellPaddingProperties ()
{
TestRadioButtonList r = new TestRadioButtonList ();
r.CellPadding = 5;
Assert.AreEqual (5, r.CellPadding, "setting");
string s = r.Render ();
// FIXME: missing some info to start rendering ?
Assert.AreEqual (String.Empty, s, "htmloutput");
}
[Test]
public void CellSpacingProperties ()
{
TestRadioButtonList r = new TestRadioButtonList ();
r.CellSpacing = 5;
Assert.AreEqual (5, r.CellSpacing, "setting");
string s = r.Render ();
// FIXME: missing some info to start rendering ?
Assert.AreEqual (String.Empty, s, "htmloutput");
}
[Test]
[Category ("NunitWeb")]
public void Render ()
{
string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Render_Load)).Run ();
string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
string OriginControlHtml = "<table id=\"ctl01\">\r\n\t<tr>\r\n\t\t<td><input id=\"ctl01_0\" type=\"radio\" name=\"ctl01\" value=\"value1\" /><label for=\"ctl01_0\">text2</label></td>\r\n\t</tr>\r\n</table>";
HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Render");
}
public static void Render_Load (Page p)
{
LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
TestRadioButtonList c = new TestRadioButtonList ();
p.Form.Controls.Add (lcb);
p.Form.Controls.Add (c);
p.Form.Controls.Add (lce);
c.Items.Add (new ListItem ("text2", "value1"));
}
// Exceptions
[Test]
[ExpectedException (typeof (ArgumentOutOfRangeException))]
public void RepeatColumnsException ()
{
TestRadioButtonList r = new TestRadioButtonList ();
r.RepeatColumns = -1;
}
[Test]
[ExpectedException (typeof (ArgumentOutOfRangeException))]
public void RepeatDirectionException ()
{
TestRadioButtonList r = new TestRadioButtonList ();
r.RepeatDirection = (RepeatDirection) 4;
}
[Test]
[ExpectedException (typeof (ArgumentOutOfRangeException))]
public void RepeatLayoutException ()
{
TestRadioButtonList r = new TestRadioButtonList ();
Array a = Enum.GetValues (typeof (RepeatLayout));
int max = (int) a.GetValue (a.Length - 1) + 1;
r.RepeatLayout = (RepeatLayout) max;
}
bool event_called;
void OnSelected (object sender, EventArgs args)
{
event_called = true;
}
[Test]
public void LoadAndRaise1 ()
{
RadioButtonList rbl = new RadioButtonList ();
rbl.Items.Add (new ListItem ("Uno", "1"));
rbl.Items.Add (new ListItem ("Dos", "2"));
rbl.Items.Add (new ListItem ("Tres", "3"));
rbl.SelectedIndex = 2;
NameValueCollection nvc = new NameValueCollection ();
nvc ["XXX"] = "3";
IPostBackDataHandler handler = (IPostBackDataHandler) rbl;
Assert.IsFalse (handler.LoadPostData ("XXX", nvc), "#01");
rbl.SelectedIndexChanged += new EventHandler (OnSelected);
event_called = false;
handler.RaisePostDataChangedEvent ();
Assert.IsTrue (event_called, "#02");
Assert.AreEqual ("3", rbl.SelectedValue, "#03");
}
[Test]
public void LoadAndRaise2 ()
{
RadioButtonList rbl = new RadioButtonList ();
rbl.Items.Add (new ListItem ("Uno", "1"));
rbl.Items.Add (new ListItem ("Dos", "2"));
rbl.Items.Add (new ListItem ("Tres", "3"));
rbl.SelectedIndex = 2;
NameValueCollection nvc = new NameValueCollection ();
nvc ["XXX"] = "2";
IPostBackDataHandler handler = (IPostBackDataHandler) rbl;
Assert.AreEqual (true, handler.LoadPostData ("XXX", nvc), "#01");
rbl.SelectedIndexChanged += new EventHandler (OnSelected);
event_called = false;
handler.RaisePostDataChangedEvent ();
Assert.AreEqual (true, event_called, "#02");
Assert.AreEqual ("2", rbl.SelectedValue, "#03");
}
[Test]
public void LoadAndRaise3 ()
{
RadioButtonList rbl = new RadioButtonList ();
rbl.Items.Add (new ListItem ("Uno", "1"));
rbl.Items.Add (new ListItem ("Dos", "2"));
rbl.Items.Add (new ListItem ("Tres", "3"));
rbl.SelectedIndex = 2;
NameValueCollection nvc = new NameValueCollection ();
nvc ["XXX"] = "blah";
IPostBackDataHandler handler = (IPostBackDataHandler) rbl;
Assert.AreEqual (false, handler.LoadPostData ("XXX", nvc), "#01");
}
[Test]
[ExpectedException(typeof(HttpException))]
public void VerifyMultiSelectTest()
{
PokerRadioButtonList list = new PokerRadioButtonList();
list.VerifyMultiSelect();
}
[Test]
public void Defaults ()
{
PokerRadioButtonList r = new PokerRadioButtonList ();
Assert.AreEqual (0, r.RepeatedItemCount, "RepeatedItemCount");
Assert.AreEqual (false, r.HasFooter, "HasFooter");
Assert.AreEqual (false, r.HasHeader, "HasHeader");
Assert.AreEqual (false, r.HasSeparators, "HasSeparators");
}
[Test]
[Category ("NunitWeb")]
public void GetItemStyle ()
{
WebTest t = new WebTest (PageInvoker.CreateOnLoad (GetItemStyle_Load));
string html = t.Run ();
string ctrl = HtmlDiff.GetControlFromPageHtml (html);
if (ctrl == string.Empty)
Assert.Fail ("RadioButtonList not created fail");
Assert.AreEqual ("GetItemStyle", (string) t.UserData, "GetItemStyle not done");
if (ctrl.IndexOf ("<td style=\"background-color:Red;border-style:Solid;\">") == -1)
Assert.Fail ("RadioButtonList style not rendered");
}
public static void GetItemStyle_Load (Page p)
{
PokerRadioButtonList rbl = new PokerRadioButtonList ();
rbl.Items.Add (new ListItem ("Uno", "1"));
rbl.Items.Add (new ListItem ("Dos", "2"));
rbl.Items.Add (new ListItem ("Tres", "3"));
p.Form.Controls.Add (new LiteralControl (HtmlDiff.BEGIN_TAG));
p.Form.Controls.Add (rbl);
p.Form.Controls.Add (new LiteralControl (HtmlDiff.END_TAG));
}
[Test]
public void RaisePostDataChangedEvent ()
{
PokerRadioButtonList r = new PokerRadioButtonList ();
r.SelectedIndexChanged += new EventHandler (r_SelectedIndexChanged);
Assert.AreEqual (false, eventSelectedIndexChanged, "Before");
r.DoRaisePostDataChangedEvent ();
Assert.AreEqual (true, eventSelectedIndexChanged, "After");
}
bool eventSelectedIndexChanged;
void r_SelectedIndexChanged (object sender, EventArgs e)
{
eventSelectedIndexChanged = true;
}
[Test]
[Category ("NunitWeb")]
public void RaisePostDataChangedEvent_PostBack ()
{
WebTest t = new WebTest (PageInvoker.CreateOnInit (RaisePostDataChangedEvent_Init));
string html = t.Run ();
FormRequest fr = new FormRequest (t.Response, "form1");
fr.Controls.Add ("__EVENTTARGET");
fr.Controls.Add ("__EVENTARGUMENT");
fr.Controls.Add ("RadioButtonList1");
fr.Controls["__EVENTTARGET"].Value = "RadioButtonList1";
fr.Controls["__EVENTARGUMENT"].Value = "";
fr.Controls["RadioButtonList1"].Value = "test";
t.Request = fr;
t.Run ();
if (t.UserData == null)
Assert.Fail ("RaisePostDataChangedEvent Failed#1");
Assert.AreEqual ("SelectedIndexChanged", (string) t.UserData, "RaisePostDataChangedEvent Failed#2");
}
public static void RaisePostDataChangedEvent_Init (Page p)
{
TestRadioButtonList r = new TestRadioButtonList ();
r.ID = "RadioButtonList1";
r.Items.Add (new ListItem ("test", "test"));
r.SelectedIndexChanged += new EventHandler (event_SelectedIndexChanged);
p.Form.Controls.Add (r);
}
public static void event_SelectedIndexChanged (object sender, EventArgs e)
{
WebTest.CurrentTest.UserData = "SelectedIndexChanged";
}
#region help_class
class Poker : RadioButtonList
{
protected override bool LoadPostData (string postDataKey, global::System.Collections.Specialized.NameValueCollection postCollection)
{
if (WebTest.CurrentTest.UserData == null) {
ArrayList list = new ArrayList ();
list.Add ("LoadPostData");
WebTest.CurrentTest.UserData = list;
}
else {
ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
if (list == null)
throw new NullReferenceException ();
list.Add ("LoadPostData");
WebTest.CurrentTest.UserData = list;
}
return base.LoadPostData (postDataKey, postCollection);
}
protected internal override void OnLoad (EventArgs e)
{
if (WebTest.CurrentTest.UserData == null) {
ArrayList list = new ArrayList ();
list.Add ("ControlLoad");
WebTest.CurrentTest.UserData = list;
}
else {
ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
if (list == null)
throw new NullReferenceException ();
list.Add ("ControlLoad");
WebTest.CurrentTest.UserData = list;
}
base.OnLoad (e);
}
}
#endregion
[Test]
[Category ("NunitWeb")]
public void LoadPostData () //Just flow and not implementation detail
{
WebTest t = new WebTest (PageInvoker.CreateOnLoad (LoadPostData_Load));
string html = t.Run ();
FormRequest fr = new FormRequest (t.Response, "form1");
fr.Controls.Add ("__EVENTTARGET");
fr.Controls.Add ("__EVENTARGUMENT");
fr.Controls.Add ("RadioButtonList1");
fr.Controls["__EVENTTARGET"].Value = "RadioButtonList1";
fr.Controls["__EVENTARGUMENT"].Value = "";
fr.Controls["RadioButtonList1"].Value = "test";
t.Request = fr;
t.Run ();
ArrayList eventlist = t.UserData as ArrayList;
if (eventlist == null)
Assert.Fail ("User data does not been created fail");
Assert.AreEqual ("ControlLoad", eventlist[0], "Live Cycle Flow #1");
Assert.AreEqual ("PageLoad", eventlist[1], "Live Cycle Flow #2");
Assert.AreEqual ("ControlLoad", eventlist[2], "Live Cycle Flow #3");
Assert.AreEqual ("LoadPostData", eventlist[3], "Live Cycle Flow #4");
}
public static void LoadPostData_Load (Page p)
{
Poker b = new Poker ();
b.ID = "RadioButtonList1";
b.Items.Add (new ListItem ("test", "test"));
p.Form.Controls.Add (b);
if (p.IsPostBack) {
if (WebTest.CurrentTest.UserData == null) {
ArrayList list = new ArrayList ();
list.Add ("PageLoad");
WebTest.CurrentTest.UserData = list;
}
else {
ArrayList list = WebTest.CurrentTest.UserData as ArrayList;
if (list == null)
throw new NullReferenceException ();
list.Add ("PageLoad");
WebTest.CurrentTest.UserData = list;
}
}
}
[Test]
public void RepeatedItemCount ()
{
PokerRadioButtonList r = new PokerRadioButtonList ();
Assert.AreEqual (0, r.RepeatedItemCount, "RepeatedItemCount#1");
r.Items.Add (new ListItem ("Uno", "1"));
Assert.AreEqual (1, r.RepeatedItemCount, "RepeatedItemCount#2");
r.Items.Add (new ListItem ("Dos", "2"));
Assert.AreEqual (2, r.RepeatedItemCount, "RepeatedItemCount#3");
r.Items.Remove (r.Items[1]);
Assert.AreEqual (1, r.RepeatedItemCount, "RepeatedItemCount#4");
}
[TestFixtureTearDown]
public void TearDown ()
{
WebTest.Unload ();
}
}
}