using System;
using NUnit.Framework;
using System.Windows.Forms;
+using SystemDrawingNamespace = System.Drawing;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
-[TestFixture]
-public class TreeNodeTest {
-
- [Test]
- public void EmptyCtorTest ()
- {
- TreeNode tn = new TreeNode ();
- Assert.AreEqual ("", tn.Text, "#1");
- Assert.AreEqual (0, tn.Nodes.Count, "#2");
- Assert.AreEqual (-1, tn.ImageIndex, "#3");
- Assert.AreEqual (-1, tn.SelectedImageIndex, "#4");
-
- // Set simple properties
- tn.Text = null;
- Assert.AreEqual ("", tn.Text, "#5");
- tn.ImageIndex = 67;
- Assert.AreEqual (67, tn.ImageIndex, "#6");
- tn.SelectedImageIndex = 99;
- Assert.AreEqual (99, tn.SelectedImageIndex, "#7");
- }
+namespace MonoTests.System.Windows.Forms {
+
+
+ [TestFixture]
+ public class TreeNodeTest : TestHelper {
+
+ [Test]
+ public void EmptyCtorTest ()
+ {
+ TreeNode tn = new TreeNode ();
+ Assert.AreEqual ("", tn.Text, "#1");
+ Assert.AreEqual (0, tn.Nodes.Count, "#2");
+ Assert.AreEqual (-1, tn.ImageIndex, "#3");
+ Assert.AreEqual (-1, tn.SelectedImageIndex, "#4");
+
+ // Set simple properties
+ tn.Text = null;
+ Assert.AreEqual ("", tn.Text, "#5");
+ tn.ImageIndex = 67;
+ Assert.AreEqual (67, tn.ImageIndex, "#6");
+ tn.SelectedImageIndex = 99;
+ Assert.AreEqual (99, tn.SelectedImageIndex, "#7");
+ }
- [Test]
- public void CtorTest () {
- TreeNode tn = new TreeNode ("label1");
+ [Test]
+ public void CtorTest () {
+ TreeNode tn = new TreeNode ("label1");
- Assert.AreEqual ("label1", tn.Text);
- Assert.AreEqual (0, tn.Nodes.Count);
- Assert.AreEqual (-1, tn.ImageIndex, "II");
- Assert.AreEqual (-1, tn.SelectedImageIndex, "SI");
-
- Assert.IsNull (tn.FirstNode);
- Assert.IsNull (tn.LastNode);
- Assert.AreEqual ("", new TreeNode (null).Text);
- }
+ Assert.AreEqual ("label1", tn.Text);
+ Assert.AreEqual (0, tn.Nodes.Count);
+ Assert.AreEqual (-1, tn.ImageIndex, "II");
+ Assert.AreEqual (-1, tn.SelectedImageIndex, "SI");
- [Test]
- public void CtorTest2 ()
- {
- TreeNode tn = new TreeNode ("a1", new TreeNode[] { new TreeNode ("aa1"), new TreeNode ("aa2") } );
+ Assert.IsNull (tn.FirstNode);
+ Assert.IsNull (tn.LastNode);
+ Assert.AreEqual ("", new TreeNode (null).Text);
+ }
- Assert.AreEqual ("a1", tn.Text);
- Assert.AreEqual (-1, tn.ImageIndex, "II");
- Assert.AreEqual (-1, tn.SelectedImageIndex, "SI");
+ [Test]
+ public void CtorTest2 ()
+ {
+ TreeNode tn = new TreeNode ("a1", new TreeNode[] { new TreeNode ("aa1"), new TreeNode ("aa2") } );
- Assert.AreEqual ("aa1", tn.Nodes [0].Text, "#1");
- Assert.AreEqual ("aa2", tn.Nodes [1].Text, "#2");
- Assert.AreSame (tn.FirstNode, tn.Nodes [0], "#3");
- Assert.AreSame (tn.LastNode, tn.Nodes [1], "#4");
- }
+ Assert.AreEqual ("a1", tn.Text);
+ Assert.AreEqual (-1, tn.ImageIndex, "II");
+ Assert.AreEqual (-1, tn.SelectedImageIndex, "SI");
- [Test]
- public void CtorTest3 ()
- {
- TreeNode tn = new TreeNode ("a", 5, 9);
+ Assert.AreEqual ("aa1", tn.Nodes [0].Text, "#1");
+ Assert.AreEqual ("aa2", tn.Nodes [1].Text, "#2");
+ Assert.AreSame (tn.FirstNode, tn.Nodes [0], "#3");
+ Assert.AreSame (tn.LastNode, tn.Nodes [1], "#4");
+ }
- Assert.AreEqual ("a", tn.Text);
- Assert.IsNotNull (tn.Nodes);
- Assert.AreEqual (5, tn.ImageIndex);
- Assert.AreEqual (9, tn.SelectedImageIndex);
- Assert.AreEqual ("", new TreeNode (null, 0, 0).Text);
- }
+ [Test]
+ public void CtorTest3 ()
+ {
+ TreeNode tn = new TreeNode ("a", 5, 9);
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void CtorException1 ()
- {
- new TreeNode ("", 1, 1, null);
- }
+ Assert.AreEqual ("a", tn.Text);
+ Assert.IsNotNull (tn.Nodes);
+ Assert.AreEqual (5, tn.ImageIndex);
+ Assert.AreEqual (9, tn.SelectedImageIndex);
+ Assert.AreEqual ("", new TreeNode (null, 0, 0).Text);
+ }
- [Test, ExpectedException (typeof (ArgumentNullException))]
- public void CtorException2 () {
- new TreeNode ("tt", null);
- }
+ [Test, ExpectedException (typeof (ArgumentNullException))]
+ public void CtorException1 ()
+ {
+ new TreeNode ("", 1, 1, null);
+ }
- [Test]
- public void Traverse ()
- {
- TreeNode tn_1 = new TreeNode ("1");
- TreeNode tn_2 = new TreeNode ("2");
- TreeNode tn_3 = new TreeNode ("3");
- TreeNode tn = new TreeNode ("lev1");
- tn.Nodes.Add (tn_1);
- Assert.AreSame (tn, tn_1.Parent, "#1");
- Assert.IsNull (tn_1.NextNode, "#2");
- Assert.AreEqual (0, tn_1.Parent.Index, "#3");
- tn.Nodes.Add (tn_2);
- Assert.IsNull (tn_1.NextNode.NextNode, "#33");
- tn.Nodes.Add (tn_3);
- Assert.AreEqual (2, tn_3.Index, "#4");
-
- Assert.AreEqual (3, tn.Nodes.Count, "#5");
- Assert.AreSame (tn_2, tn_2.NextNode.PrevNode, "#6");
- Assert.IsNull (tn_1.PrevNode, "#7");
- }
+ [Test, ExpectedException (typeof (ArgumentNullException))]
+ public void CtorException2 () {
+ new TreeNode ("tt", null);
+ }
- [Test, ExpectedException (typeof (Exception))]
- public void FullPathException ()
- {
- string s = new TreeNode ("").FullPath;
- }
+ [Test]
+ public void Traverse ()
+ {
+ TreeNode tn_1 = new TreeNode ("1");
+ TreeNode tn_2 = new TreeNode ("2");
+ TreeNode tn_3 = new TreeNode ("3");
+ TreeNode tn = new TreeNode ("lev1");
+ tn.Nodes.Add (tn_1);
+ Assert.AreSame (tn, tn_1.Parent, "#1");
+ Assert.IsNull (tn_1.NextNode, "#2");
+ Assert.AreEqual (0, tn_1.Parent.Index, "#3");
+ tn.Nodes.Add (tn_2);
+ Assert.IsNull (tn_1.NextNode.NextNode, "#33");
+ tn.Nodes.Add (tn_3);
+ Assert.AreEqual (2, tn_3.Index, "#4");
- [Test]
- public void FullPathTest ()
- {
- TreeNode tn_1 = new TreeNode ("A");
- TreeNode tn_2 = new TreeNode ("B");
- tn_2.Nodes.Add (tn_1);
-
- TreeView tv = new TreeView ();
- tv.Nodes.Add (tn_1);
- tv.Nodes [0].Nodes.Add (tn_2);
-
- Assert.AreEqual ("A", tn_1.FullPath, "#1");
- Assert.AreEqual ("A", tv.Nodes[0].FullPath, "#2");
- Assert.AreEqual (@"A\B", tn_2.FullPath, "#3");
- tv.PathSeparator = "_separator_";
- Assert.AreEqual ("A_separator_B", tn_2.FullPath, "#4");
- }
+ Assert.AreEqual (3, tn.Nodes.Count, "#5");
+ Assert.AreSame (tn_2, tn_2.NextNode.PrevNode, "#6");
+ Assert.IsNull (tn_1.PrevNode, "#7");
+ }
- [Test]
- public void CloneTest ()
- {
- TreeNode orig = new TreeNode ("text", 2, 3, new TreeNode [] { new TreeNode ("child", 22, 33) });
- orig.Tag = FlatStyle.Flat;
- orig.Checked = true;
- orig.BackColor = System.Drawing.Color.AliceBlue;
- orig.ForeColor = System.Drawing.Color.Beige;
-
- TreeNode clone = (TreeNode)orig.Clone ();
- Assert.AreEqual ("text", clone.Text, "#1");
- Assert.AreEqual (2, clone.ImageIndex, "#2");
- Assert.AreEqual (3, clone.SelectedImageIndex, "#3");
- Assert.AreEqual (1, clone.Nodes.Count, "#4");
- Assert.AreEqual (FlatStyle.Flat, clone.Tag, "#5");
- Assert.IsTrue (clone.Checked, "#6");
- Assert.AreEqual ("child", clone.Nodes [0].Text, "#10");
- Assert.AreEqual (22, clone.Nodes [0].ImageIndex, "#11");
- Assert.AreEqual (System.Drawing.Color.AliceBlue, clone.BackColor, "#12");
- Assert.AreEqual (System.Drawing.Color.Beige, clone.ForeColor, "#13");
- }
+ [Test]
+ public void ExpandCollapseLeafTest ()
+ {
+ // Leaf nodes should keep its expanded state
+ TreeNode tn_1 = new TreeNode ();
+ Assert.IsFalse (tn_1.IsExpanded, "#1");
+
+ tn_1.Expand ();
+ Assert.IsTrue (tn_1.IsExpanded, "#2");
+ }
+
+ [Test]
+ public void FullPathException ()
+ {
+ try {
+ string s = new TreeNode ("").FullPath;
+ Assert.Fail ("#1");
+ // Prevent CS0219, will never write anything
+ // due to previous statement throwing an
+ // exception
+ Console.WriteLine (s);
+#if NET_2_0
+ } catch (InvalidOperationException ex) {
+ Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
+ Assert.IsNotNull (ex.Message, "#3");
+ Assert.IsNull (ex.InnerException, "#4");
+ }
+#else
+ } catch (Exception ex) {
+ Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+ Assert.IsNotNull (ex.Message, "#3");
+ Assert.IsNull (ex.InnerException, "#4");
+ }
+#endif
+ }
+
+ [Test]
+ public void FullPathTest ()
+ {
+ TreeNode tn_1 = new TreeNode ("A");
+ TreeNode tn_2 = new TreeNode ("B");
+ tn_2.Nodes.Add (tn_1);
+
+ TreeView tv = new TreeView ();
+ tv.Nodes.Add (tn_1);
+ tv.Nodes [0].Nodes.Add (tn_2);
+
+ Assert.AreEqual ("A", tn_1.FullPath, "#1");
+ Assert.AreEqual ("A", tv.Nodes[0].FullPath, "#2");
+ Assert.AreEqual (@"A\B", tn_2.FullPath, "#3");
+ tv.PathSeparator = "_separator_";
+ Assert.AreEqual ("A_separator_B", tn_2.FullPath, "#4");
+ }
+
+ [Test]
+ public void CloneTest ()
+ {
+ TreeNode orig = new TreeNode ("text", 2, 3, new TreeNode [] { new TreeNode ("child", 22, 33) });
+ orig.Tag = FlatStyle.Flat;
+ orig.Checked = true;
+ orig.BackColor = SystemDrawingNamespace.Color.AliceBlue;
+ orig.ForeColor = SystemDrawingNamespace.Color.Beige;
+
+ TreeNode clone = (TreeNode)orig.Clone ();
+ Assert.AreEqual ("text", clone.Text, "#1");
+ Assert.AreEqual (2, clone.ImageIndex, "#2");
+ Assert.AreEqual (3, clone.SelectedImageIndex, "#3");
+ Assert.AreEqual (1, clone.Nodes.Count, "#4");
+ Assert.AreEqual (FlatStyle.Flat, clone.Tag, "#5");
+ Assert.IsTrue (clone.Checked, "#6");
+ Assert.AreEqual ("child", clone.Nodes [0].Text, "#10");
+ Assert.AreEqual (22, clone.Nodes [0].ImageIndex, "#11");
+ Assert.AreEqual (SystemDrawingNamespace.Color.AliceBlue, clone.BackColor, "#12");
+ Assert.AreEqual (SystemDrawingNamespace.Color.Beige, clone.ForeColor, "#13");
+ }
+
+ [Test] // bug 661753
+ public void TestTreeNodeClone ()
+ {
+ TreeNode orig = new TreeNode ();
+
+ orig.Nodes.Add ("Node1");
+ orig.Nodes.Add ("Node2");
+ orig.Nodes.Add ("Node3");
+
+ orig.Checked = true;
+ orig.ImageIndex = 4;
+ orig.Name = "MyName";
+ orig.SelectedImageIndex = 3;
+ orig.StateImageIndex = 8;
+ orig.Tag = new object ();
+ orig.Text = "MyText";
+ orig.ToolTipText = "MyToolTipText";
+
+ orig.ContextMenu = new ContextMenu ();
+ orig.ContextMenu.Name = "MyContextMenu";
+ orig.ContextMenu.MenuItems.Add (new MenuItem ("MenuItem1"));
+ orig.ContextMenu.MenuItems.Add (new MenuItem ("MenuItem2"));
+
+ orig.ContextMenuStrip = new ContextMenuStrip ();
+ orig.ContextMenuStrip.Name = "MyContextMenuStrip";
+ orig.ContextMenuStrip.Items.Add ("ToolStripText");
+ orig.ContextMenuStrip.Items.Add (new SystemDrawingNamespace.Bitmap (1, 1));
+
+ TreeNode clone = orig.Clone () as TreeNode;
+
+ Assert.AreEqual (orig.Nodes[0].Name, clone.Nodes[0].Name, "#01");
+ Assert.AreEqual (orig.Nodes[1].Name, clone.Nodes[1].Name, "#02");
+ Assert.AreEqual (orig.Nodes[2].Name, clone.Nodes[2].Name, "#03");
+ Assert.AreNotEqual (orig.Nodes[0], clone.Nodes[0], "#04");
+ Assert.AreNotEqual (orig.Nodes[1], clone.Nodes[1], "#05");
+ Assert.AreNotEqual (orig.Nodes[2], clone.Nodes[2], "#06");
+
+ Assert.AreEqual (orig.Checked, clone.Checked, "#07");
+ Assert.AreEqual (orig.ImageIndex, clone.ImageIndex, "#08");
+ Assert.AreEqual (orig.Name, clone.Name, "#09");
+ Assert.AreEqual (orig.SelectedImageIndex, clone.SelectedImageIndex, "#10");
+ Assert.AreEqual (orig.StateImageIndex, clone.StateImageIndex, "#11");
+ Assert.AreEqual (orig.Tag, clone.Tag, "#12");
+ Assert.AreEqual (orig.Text, clone.Text, "#13");
+ Assert.AreEqual (orig.ToolTipText, clone.ToolTipText, "#14");
+ Assert.AreEqual (orig.ContextMenu, clone.ContextMenu, "#15");
+ Assert.AreEqual (orig.ContextMenuStrip, clone.ContextMenuStrip, "#16");
+ }
+
+ [Test] // bug 661753
+ public void TestTreeNodeClone2 ()
+ {
+ // Cannot test ImageIndex and ImageKey properties at the same time,
+ // as one excludes the other. So this method is for Keys only.
-}
\ No newline at end of file
+ TreeNode orig = new TreeNode ();
+
+ orig.ImageKey = "MyImageKey";
+ orig.SelectedImageKey = "MySelectedImageKey";
+ orig.StateImageKey = "MyStateImageKey";
+
+ TreeNode clone = orig.Clone () as TreeNode;
+
+ Assert.AreEqual (orig.ImageKey, clone.ImageKey, "#01");
+ Assert.AreEqual (orig.SelectedImageKey, clone.SelectedImageKey, "#02");
+ Assert.AreEqual (orig.StateImageKey, clone.StateImageKey, "#03");
+ }
+
+ [Test]
+ public void SingleNodeIndexTest ()
+ {
+ TreeNode tn_1 = new TreeNode ("A");
+ Assert.AreEqual (0, tn_1.Index, "#1");
+ TreeView tv = new TreeView ();
+ tv.Nodes.Add (tn_1);
+ Assert.AreEqual (0, tn_1.Index, "#2");
+ }
+
+ [Test]
+ public void EndEditTest ()
+ {
+ TreeNode node1 = new TreeNode ("A");
+ TreeNode node2 = new TreeNode ("B");
+
+ Form f = new Form ();
+ TreeView tv = new TreeView ();
+ tv.LabelEdit = true;
+ tv.Parent = f;
+ tv.Nodes.Add (node1);
+ tv.Nodes.Add (node2);
+
+ f.Show ();
+
+ // EndEdit called on a different node
+ node1.BeginEdit ();
+ Assert.AreEqual (true, node1.IsEditing, "#1");
+ node2.EndEdit (false);
+ Assert.AreEqual (false, node1.IsEditing, "#2");
+
+ node1.BeginEdit ();
+ Assert.AreEqual (true, node1.IsEditing, "#3");
+ node2.EndEdit (true);
+ Assert.AreEqual (false, node1.IsEditing, "#4");
+
+ f.Dispose ();
+ }
+
+#if NET_2_0
+ [Test]
+ public void PropertyName ()
+ {
+ TreeNode tn = new TreeNode ();
+
+ Assert.AreEqual (string.Empty, tn.Name, "A1");
+
+ tn.Name = "Monkey";
+ Assert.AreEqual ("Monkey", tn.Name, "A2");
+
+ tn.Name = null;
+ Assert.AreEqual (string.Empty, tn.Name, "A3");
+ }
+
+ [Test]
+ public void PropertyLevel ()
+ {
+ TreeNode tn = new TreeNode ();
+
+ Assert.AreEqual (0, tn.Level, "A1");
+
+ TreeView tv = new TreeView ();
+ tv.Nodes.Add (tn);
+
+ Assert.AreEqual (0, tn.Level, "A2");
+
+ TreeNode tn1 = new TreeNode ();
+ tn.Nodes.Add (tn1);
+
+ Assert.AreEqual (1, tn1.Level, "A3");
+
+ TreeNode tn2 = new TreeNode ();
+ tn1.Nodes.Add (tn2);
+
+ Assert.AreEqual (2, tn2.Level, "A4");
+ }
+
+ [Test]
+ public void PropertyToolTipText ()
+ {
+ TreeNode tn = new TreeNode ("test");
+
+ Assert.AreEqual (string.Empty, tn.ToolTipText, "A1");
+
+ tn.ToolTipText = "Woo";
+
+ Assert.AreEqual ("Woo", tn.ToolTipText, "A2");
+ }
+
+#if NET_2_0
+ [Test]
+ public void ImageKeyIndex ()
+ {
+ TreeNode tn = new TreeNode ("Test");
+
+ Assert.AreEqual (-1, tn.ImageIndex, "A1");
+ Assert.AreEqual (string.Empty, tn.ImageKey, "A2");
+
+ tn.ImageIndex = 2;
+
+ Assert.AreEqual (2, tn.ImageIndex, "A3");
+ Assert.AreEqual (string.Empty, tn.ImageKey, "A4");
+
+ tn.ImageKey = "b";
+
+ Assert.AreEqual (-1, tn.ImageIndex, "A5");
+ Assert.AreEqual ("b", tn.ImageKey, "A6");
+
+ tn.ImageIndex = 2;
+
+ Assert.AreEqual (2, tn.ImageIndex, "A7");
+ Assert.AreEqual (string.Empty, tn.ImageKey, "A8");
+ }
+#endif
+
+ //[Test]
+ //public void MethodSerialize ()
+ //{
+ // PublicTreeNode tn = new PublicTreeNode ("test");
+
+ // SerializationInfo si = new SerializationInfo (tn.GetType (), new BinaryFormatter ());
+ // StreamingContext sc = new StreamingContext ();
+
+ // tn.PublicSerialize (si, sc);
+ //}
+
+ private class PublicTreeNode : TreeNode
+ {
+ public PublicTreeNode (string text) : base (text) {}
+
+ public void PublicSerialize (SerializationInfo si, StreamingContext context)
+ {
+ base.Serialize (si, context);
+ }
+ }
+#endif
+ }
+}