Author: igorz
Date: 2007-02-28 11:08:25 -0500 (Wed, 28 Feb 2007)
New Revision: 73564

Modified:
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeCollection.cs
   trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
   
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeCollectionTest.cs
Log:
2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>

        * TreeNodeCollection.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:54:45 UTC (rev 73563)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog      
2007-02-28 16:08:25 UTC (rev 73564)
@@ -1,5 +1,10 @@
 2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
 
+       * TreeNodeCollection.cs:
+       fixed Save/Load viewstate. 
+
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
        * MenuItemCollection.cs:
        fixed Save/Load viewstate. 
 

Modified: 
trunk/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeCollection.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeCollection.cs  
2007-02-28 15:54:45 UTC (rev 73563)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeCollection.cs  
2007-02-28 16:08:25 UTC (rev 73564)
@@ -87,8 +87,7 @@
                        child.Tree = tree;
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
                
@@ -102,8 +101,7 @@
                                ((TreeNode)items[n]).Index = n;
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
 
@@ -155,7 +153,7 @@
                        if (tree != null)
                                node.Tree = null;
                        if (marked) {
-                               dirty = true;
+                               SetDirty ();
                        }
                }
                
@@ -166,7 +164,7 @@
                        if (tree != null)
                                node.Tree = null;
                        if (marked) {
-                               dirty = true;
+                               SetDirty ();
                        }
                }
                
@@ -194,20 +192,26 @@
                        
                        dirty = (bool)its [0];
                        
-                       if (dirty)
+                       if (dirty) {
                                items.Clear ();
 
-                       for (int n=1; n<its.Length; n++) {
-                               Pair pair = (Pair) its [n];
-                               int oi = (int) pair.First;
-                               TreeNode node;
-                               if (oi != -1)
-                                       node = (TreeNode) items [oi];
-                               else
-                                       node = new TreeNode ();
-                               if (dirty) Add (node);
-                               ((IStateManager)node).LoadViewState 
(pair.Second);
+                               for (int n = 1; n < its.Length; n++) {
+                                       TreeNode item = new TreeNode ();
+                                       Add (item);
+                                       object ns = its [n];
+                                       if (ns != null)
+                                               ((IStateManager) 
item).LoadViewState (ns);
+                               }
                        }
+                       else {
+                               for (int n = 1; n < its.Length; n++) {
+                                       Pair pair = (Pair) its [n];
+                                       int oi = (int) pair.First;
+                                       TreeNode node = (TreeNode) items [oi];
+                                       ((IStateManager) node).LoadViewState 
(pair.Second);
+                               }
+                       }
+
                }
                
                object IStateManager.SaveViewState ()
@@ -216,13 +220,15 @@
                        bool hasData = false;
                        
                        if (dirty) {
-                               state = new object [items.Count + 1];
-                               state [0] = true;
-                               for (int n=0; n<items.Count; n++) {
-                                       TreeNode node = items[n] as TreeNode;
-                                       object ns = 
((IStateManager)node).SaveViewState ();
-                                       if (ns != null) hasData = true;
-                                       state [n + 1] = new Pair (-1, ns);
+                               if (items.Count > 0) {
+                                       hasData = true;
+                                       state = new object [items.Count + 1];
+                                       state [0] = true;
+                                       for (int n = 0; n < items.Count; n++) {
+                                               TreeNode node = items [n] as 
TreeNode;
+                                               object ns = ((IStateManager) 
node).SaveViewState ();
+                                               state [n + 1] = ns;
+                                       }
                                }
                        } else {
                                ArrayList list = new ArrayList ();

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:54:45 UTC (rev 73563)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog 
2007-02-28 16:08:25 UTC (rev 73564)
@@ -1,5 +1,9 @@
 2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
 
+       * TreeNodeColectionTest.cs: new tests
+
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
        * MenuTest.cs: new tests
 
 2007-02-20  Gert Driesen  <[EMAIL PROTECTED]>

Modified: 
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeCollectionTest.cs
===================================================================
--- 
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeCollectionTest.cs
 2007-02-28 15:54:45 UTC (rev 73563)
+++ 
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeCollectionTest.cs
 2007-02-28 16:08:25 UTC (rev 73564)
@@ -247,6 +247,146 @@
                        R.ChildNodes.Add (N2);
                        tv.Nodes.Add (R);
                }
+               [Test]
+               public void ViewState1 ()
+               {
+                       TreeView m = new TreeView ();
+                       fillTree (m);
+
+                       ((IStateManager) m.Nodes).TrackViewState ();
+                       m.Nodes [0].Text = "root";
+                       m.Nodes [0].ChildNodes [0].Text = "node";
+                       m.Nodes [0].ChildNodes [0].ChildNodes [0].Text = 
"subnode";
+                       object state = ((IStateManager) m.Nodes).SaveViewState 
();
+
+                       TreeView copy = new TreeView ();
+                       fillTree (copy);
+                       ((IStateManager) copy.Nodes).TrackViewState ();
+                       ((IStateManager) copy.Nodes).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Nodes.Count);
+                       Assert.AreEqual (2, copy.Nodes [0].ChildNodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes 
[0].ChildNodes.Count);
+
+                       Assert.AreEqual ("root", copy.Nodes [0].Text);
+                       Assert.AreEqual ("node", copy.Nodes [0].ChildNodes 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Nodes [0].ChildNodes 
[0].ChildNodes [0].Text);
+               }
+
+               [Test]
+               public void ViewState2 ()
+               {
+                       TreeView m = new TreeView ();
+                       fillTree (m);
+
+                       ((IStateManager) m.Nodes).TrackViewState ();
+                       m.Nodes [0].Text = "root";
+                       m.Nodes [0].ChildNodes [0].Text = "node";
+                       m.Nodes [0].ChildNodes [0].ChildNodes [0].Text = 
"subnode";
+                       m.Nodes.Add (new TreeNode ("root 2"));
+                       object state = ((IStateManager) m.Nodes).SaveViewState 
();
+
+                       TreeView copy = new TreeView ();
+                       fillTree (copy);
+                       ((IStateManager) copy.Nodes).TrackViewState ();
+                       ((IStateManager) copy.Nodes).LoadViewState (state);
+
+                       Assert.AreEqual (2, copy.Nodes.Count);
+                       Assert.AreEqual (2, copy.Nodes [0].ChildNodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes 
[0].ChildNodes.Count);
+
+                       Assert.AreEqual ("root", copy.Nodes [0].Text);
+                       Assert.AreEqual ("node", copy.Nodes [0].ChildNodes 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Nodes [0].ChildNodes 
[0].ChildNodes [0].Text);
+                       Assert.AreEqual ("root 2", copy.Nodes [1].Text);
+               }
+
+               [Test]
+               public void ViewState3 ()
+               {
+                       TreeView m = new TreeView ();
+                       fillTree (m);
+                       m.Nodes.Add (new TreeNode ("root 2"));
+
+                       ((IStateManager) m.Nodes).TrackViewState ();
+                       m.Nodes [0].Text = "root";
+                       m.Nodes [0].ChildNodes [0].Text = "node";
+                       m.Nodes [0].ChildNodes [0].ChildNodes [0].Text = 
"subnode";
+                       m.Nodes.RemoveAt (1);
+                       object state = ((IStateManager) m.Nodes).SaveViewState 
();
+
+                       TreeView copy = new TreeView ();
+                       fillTree (copy);
+                       copy.Nodes.Add (new TreeNode ("root 2"));
+                       ((IStateManager) copy.Nodes).TrackViewState ();
+                       ((IStateManager) copy.Nodes).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Nodes.Count);
+                       Assert.AreEqual (2, copy.Nodes [0].ChildNodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes 
[0].ChildNodes.Count);
+
+                       Assert.AreEqual ("root", copy.Nodes [0].Text);
+                       Assert.AreEqual ("node", copy.Nodes [0].ChildNodes 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Nodes [0].ChildNodes 
[0].ChildNodes [0].Text);
+               }
+
+               [Test]
+               public void ViewState4 ()
+               {
+                       TreeView m = new TreeView ();
+                       fillTree (m);
+                       m.Nodes.Add (new TreeNode ("root 2"));
+                       m.Nodes [0].ChildNodes.RemoveAt (1);
+
+                       ((IStateManager) m.Nodes).TrackViewState ();
+                       m.Nodes [0].Text = "root";
+                       m.Nodes [0].ChildNodes [0].Text = "node";
+                       m.Nodes [0].ChildNodes [0].ChildNodes [0].Text = 
"subnode";
+                       object state = ((IStateManager) m.Nodes).SaveViewState 
();
+
+                       TreeView copy = new TreeView ();
+                       fillTree (copy);
+                       copy.Nodes.Add (new TreeNode ("root 2"));
+                       copy.Nodes [0].ChildNodes.RemoveAt (1);
+                       ((IStateManager) copy.Nodes).TrackViewState ();
+                       ((IStateManager) copy.Nodes).LoadViewState (state);
+
+                       Assert.AreEqual (2, copy.Nodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes 
[0].ChildNodes.Count);
+
+                       Assert.AreEqual ("root", copy.Nodes [0].Text);
+                       Assert.AreEqual ("node", copy.Nodes [0].ChildNodes 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Nodes [0].ChildNodes 
[0].ChildNodes [0].Text);
+               }
+
+               [Test]
+               public void ViewState5 ()
+               {
+                       TreeView m = new TreeView ();
+                       ((IStateManager) m.Nodes).TrackViewState ();
+                       fillTree (m);
+
+                       object state = ((IStateManager) m.Nodes).SaveViewState 
();
+
+                       TreeView copy = new TreeView ();
+                       ((IStateManager) copy.Nodes).TrackViewState ();
+                       ((IStateManager) copy.Nodes).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Nodes.Count);
+                       Assert.AreEqual (2, copy.Nodes [0].ChildNodes.Count);
+                       Assert.AreEqual (1, copy.Nodes [0].ChildNodes 
[0].ChildNodes.Count);
+               }
+
+               private static void fillTree (TreeView tv)
+               {
+                       tv.Nodes.Clear ();
+                       tv.Nodes.Add (new TreeNode ());
+                       tv.Nodes [0].ChildNodes.Add (new TreeNode ());
+                       tv.Nodes [0].ChildNodes.Add (new TreeNode ());
+                       tv.Nodes [0].ChildNodes [0].ChildNodes.Add (new 
TreeNode ());
+               }
+
        }
 }
 

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

Reply via email to