Author: igorz
Date: 2007-02-28 10:45:53 -0500 (Wed, 28 Feb 2007)
New Revision: 73562
Modified:
trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
Log:
2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
* MenuItemCollection.cs:
fixed Save/Load viewstate.
Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1,5 +1,10 @@
2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+ * MenuItemCollection.cs:
+ fixed Save/Load viewstate.
+
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
* CreateUserWizard.cs:
* Wizard.cs:
fixed CausesValidaion and ValidationGroup for navigation buttons.
Modified:
trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
2007-02-28 15:45:53 UTC (rev 73562)
@@ -77,8 +77,7 @@
child.SetParent (parent);
if (marked) {
((IStateManager)child).TrackViewState ();
- child.SetDirty ();
- dirty = true;
+ SetDirty ();
}
}
@@ -98,8 +97,7 @@
((MenuItem)items[n]).Index = n;
if (marked) {
((IStateManager)child).TrackViewState ();
- child.SetDirty ();
- dirty = true;
+ SetDirty ();
}
}
@@ -112,7 +110,9 @@
}
}
items.Clear ();
- dirty = true;
+ if (marked) {
+ SetDirty ();
+ }
}
public bool Contains (MenuItem child)
@@ -147,7 +147,9 @@
items.RemoveAt (i);
if (menu != null)
item.Menu = null;
- dirty = true;
+ if (marked) {
+ SetDirty ();
+ }
}
public void RemoveAt (int index)
@@ -156,7 +158,9 @@
items.RemoveAt (index);
if (menu != null)
item.Menu = null;
- dirty = true;
+ if (marked) {
+ SetDirty ();
+ }
}
public int Count {
@@ -194,6 +198,14 @@
((IStateManager)
item).LoadViewState (ns);
}
}
+ else {
+ for (int n = 1; n < its.Length; n++) {
+ Pair pair = (Pair) its [n];
+ int oi = (int) pair.First;
+ MenuItem node = (MenuItem) items [oi];
+ ((IStateManager) node).LoadViewState
(pair.Second);
+ }
+ }
}
object IStateManager.SaveViewState ()
@@ -202,13 +214,13 @@
bool hasData = false;
if (dirty) {
- state = new object [items.Count + 1];
- state [0] = true;
- for (int n=0; n<items.Count; n++) {
- MenuItem item = items[n] as MenuItem;
- object ns =
((IStateManager)item).SaveViewState ();
- if (ns != null) {
- hasData = true;
+ if (items.Count > 0) {
+ hasData = true;
+ state = new object [items.Count + 1];
+ state [0] = true;
+ for (int n = 0; n < items.Count; n++) {
+ MenuItem item = items [n] as
MenuItem;
+ object ns = ((IStateManager)
item).SaveViewState ();
state [n + 1] = ns;
}
}
Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1,3 +1,7 @@
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
+ * MenuTest.cs: new tests
+
2007-02-20 Gert Driesen <[EMAIL PROTECTED]>
* CalendarTest.cs: Enabled tests for bug #80881. Fixed NotWorking
Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1405,6 +1405,145 @@
{
WebTest.CurrentTest.UserData = "MenuItemDataBound";
}
+
+ [Test]
+ public void MenuItemCollection1 ()
+ {
+ Menu m = new Menu ();
+ fillMenu (m);
+
+ ((IStateManager) m.Items).TrackViewState ();
+ m.Items [0].Text = "root";
+ m.Items [0].ChildItems [0].Text = "node";
+ m.Items [0].ChildItems [0].ChildItems [0].Text =
"subnode";
+ object state = ((IStateManager) m.Items).SaveViewState
();
+
+ Menu copy = new Menu ();
+ fillMenu (copy);
+ ((IStateManager) copy.Items).TrackViewState ();
+ ((IStateManager) copy.Items).LoadViewState (state);
+
+ Assert.AreEqual (1, copy.Items.Count);
+ Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems
[0].ChildItems.Count);
+
+ Assert.AreEqual ("root", copy.Items [0].Text);
+ Assert.AreEqual ("node", copy.Items [0].ChildItems
[0].Text);
+ Assert.AreEqual ("subnode", copy.Items [0].ChildItems
[0].ChildItems [0].Text);
+ }
+
+ [Test]
+ public void MenuItemCollection2 ()
+ {
+ Menu m = new Menu ();
+ fillMenu (m);
+
+ ((IStateManager) m.Items).TrackViewState ();
+ m.Items [0].Text = "root";
+ m.Items [0].ChildItems [0].Text = "node";
+ m.Items [0].ChildItems [0].ChildItems [0].Text =
"subnode";
+ m.Items.Add (new MenuItem ("root 2"));
+ object state = ((IStateManager) m.Items).SaveViewState
();
+
+ Menu copy = new Menu ();
+ fillMenu (copy);
+ ((IStateManager) copy.Items).TrackViewState ();
+ ((IStateManager) copy.Items).LoadViewState (state);
+
+ Assert.AreEqual (2, copy.Items.Count);
+ Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems
[0].ChildItems.Count);
+
+ Assert.AreEqual ("root", copy.Items [0].Text);
+ Assert.AreEqual ("node", copy.Items [0].ChildItems
[0].Text);
+ Assert.AreEqual ("subnode", copy.Items [0].ChildItems
[0].ChildItems [0].Text);
+ Assert.AreEqual ("root 2", copy.Items [1].Text);
+ }
+
+ [Test]
+ public void MenuItemCollection3 ()
+ {
+ Menu m = new Menu ();
+ fillMenu (m);
+ m.Items.Add (new MenuItem ("root 2"));
+
+ ((IStateManager) m.Items).TrackViewState ();
+ m.Items [0].Text = "root";
+ m.Items [0].ChildItems [0].Text = "node";
+ m.Items [0].ChildItems [0].ChildItems [0].Text =
"subnode";
+ m.Items.RemoveAt (1);
+ object state = ((IStateManager) m.Items).SaveViewState
();
+
+ Menu copy = new Menu ();
+ fillMenu (copy);
+ copy.Items.Add (new MenuItem ("root 2"));
+ ((IStateManager) copy.Items).TrackViewState ();
+ ((IStateManager) copy.Items).LoadViewState (state);
+
+ Assert.AreEqual (1, copy.Items.Count);
+ Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems
[0].ChildItems.Count);
+
+ Assert.AreEqual ("root", copy.Items [0].Text);
+ Assert.AreEqual ("node", copy.Items [0].ChildItems
[0].Text);
+ Assert.AreEqual ("subnode", copy.Items [0].ChildItems
[0].ChildItems [0].Text);
+ }
+
+ [Test]
+ public void MenuItemCollection4 ()
+ {
+ Menu m = new Menu ();
+ fillMenu (m);
+ m.Items.Add (new MenuItem ("root 2"));
+ m.Items [0].ChildItems.RemoveAt (1);
+
+ ((IStateManager) m.Items).TrackViewState ();
+ m.Items [0].Text = "root";
+ m.Items [0].ChildItems [0].Text = "node";
+ m.Items [0].ChildItems [0].ChildItems [0].Text =
"subnode";
+ object state = ((IStateManager) m.Items).SaveViewState
();
+
+ Menu copy = new Menu ();
+ fillMenu (copy);
+ copy.Items.Add (new MenuItem ("root 2"));
+ copy.Items [0].ChildItems.RemoveAt (1);
+ ((IStateManager) copy.Items).TrackViewState ();
+ ((IStateManager) copy.Items).LoadViewState (state);
+
+ Assert.AreEqual (2, copy.Items.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems
[0].ChildItems.Count);
+
+ Assert.AreEqual ("root", copy.Items [0].Text);
+ Assert.AreEqual ("node", copy.Items [0].ChildItems
[0].Text);
+ Assert.AreEqual ("subnode", copy.Items [0].ChildItems
[0].ChildItems [0].Text);
+ }
+
+ [Test]
+ public void MenuItemCollection5 ()
+ {
+ Menu m = new Menu ();
+ ((IStateManager) m.Items).TrackViewState ();
+ fillMenu (m);
+
+ object state = ((IStateManager) m.Items).SaveViewState
();
+
+ Menu copy = new Menu ();
+ ((IStateManager) copy.Items).TrackViewState ();
+ ((IStateManager) copy.Items).LoadViewState (state);
+
+ Assert.AreEqual (1, copy.Items.Count);
+ Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+ Assert.AreEqual (1, copy.Items [0].ChildItems
[0].ChildItems.Count);
+ }
+
+ private static void fillMenu (Menu m) {
+ m.Items.Clear ();
+ m.Items.Add (new MenuItem ());
+ m.Items [0].ChildItems.Add (new MenuItem ());
+ m.Items [0].ChildItems.Add (new MenuItem ());
+ m.Items [0].ChildItems [0].ChildItems.Add (new MenuItem
());
+ }
}
}
#endif
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches