Parcourir la source

2007-04-13 Jonathan Pobst <[email protected]>

	* ToolStripItemTest.cs: Enable a bunch of tests for recently 
	implemented properties.
	* ToolStripManager.cs: Add tests for Merge and RevertMerge.

svn path=/trunk/mcs/; revision=75691
Jonathan Pobst il y a 19 ans
Parent
commit
b64cf4f7f4

+ 6 - 0
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog

@@ -1,3 +1,9 @@
+2007-04-13  Jonathan Pobst  <[email protected]>
+
+	* ToolStripItemTest.cs: Enable a bunch of tests for recently 
+	implemented properties.
+	* ToolStripManager.cs: Add tests for Merge and RevertMerge.
+
 2007-04-09  Gert Driesen  <[email protected]>
 
 	* DataGridTextBoxColumnTest.cs: Added IsInEditOrNavigateMode tests.

+ 90 - 90
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ToolStripItemTest.cs

@@ -45,8 +45,8 @@ namespace MonoTests.System.Windows.Forms
 			ToolStripItem tsi = new NullToolStripItem ();
 
 			Assert.AreEqual (ToolStripItemAlignment.Left, tsi.Alignment, "A1");
-			//Assert.AreEqual (false, tsi.AllowDrop, "A2");
-			//Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, tsi.Anchor, "A3");
+			Assert.AreEqual (false, tsi.AllowDrop, "A2");
+			Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, tsi.Anchor, "A3");
 			Assert.AreEqual (true, tsi.AutoSize, "A4");
 			Assert.AreEqual (false, tsi.AutoToolTip, "A5");
 			Assert.AreEqual (true, tsi.Available, "A6");
@@ -69,12 +69,12 @@ namespace MonoTests.System.Windows.Forms
 			Assert.AreEqual (string.Empty, tsi.ImageKey, "A22-1");
 			Assert.AreEqual (ToolStripItemImageScaling.SizeToFit, tsi.ImageScaling, "A23");
 			Assert.AreEqual (Color.Empty, tsi.ImageTransparentColor, "A24");
-			//Assert.AreEqual (false, tsi.IsDisposed, "A25");
+			Assert.AreEqual (false, tsi.IsDisposed, "A25");
 			Assert.AreEqual (false, tsi.IsOnDropDown, "A26");
 			Assert.AreEqual (false, tsi.IsOnOverflow, "A27");
 			Assert.AreEqual (new Padding(0,1,0,2), tsi.Margin, "A28");
-			//Assert.AreEqual (MergeAction.Append, tsi.MergeAction, "A29");
-			//Assert.AreEqual (-1, tsi.MergeIndex, "A30");
+			Assert.AreEqual (MergeAction.Append, tsi.MergeAction, "A29");
+			Assert.AreEqual (-1, tsi.MergeIndex, "A30");
 			Assert.AreEqual (string.Empty, tsi.Name, "A31");
 			Assert.AreEqual (ToolStripItemOverflow.AsNeeded, tsi.Overflow, "A32");
 			Assert.AreEqual (null, tsi.Owner, "A33");
@@ -82,8 +82,8 @@ namespace MonoTests.System.Windows.Forms
 			Assert.AreEqual (new Padding(0), tsi.Padding, "A35");
 			Assert.AreEqual (ToolStripItemPlacement.None, tsi.Placement, "A36");
 			Assert.AreEqual (false, tsi.Pressed, "A37");
-			//Assert.AreEqual (RightToLeft.Inherit, tsi.RightToLeft, "A38");
-			//Assert.AreEqual (false, tsi.RightToLeftAutoMirrorImage, "A39");
+			Assert.AreEqual (RightToLeft.Inherit, tsi.RightToLeft, "A38");
+			Assert.AreEqual (false, tsi.RightToLeftAutoMirrorImage, "A39");
 			Assert.AreEqual (false, tsi.Selected, "A40");
 			Assert.AreEqual (new Size (23,23), tsi.Size, "A41");
 			Assert.AreEqual (null, tsi.Tag, "A42");
@@ -151,20 +151,20 @@ namespace MonoTests.System.Windows.Forms
 			tsi.Alignment = (ToolStripItemAlignment) 42;
 		}
 
-		//[Test]
-		//public void PropertyAllowDrop ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
-			
-		//        tsi.AllowDrop = true;
-		//        Assert.AreEqual (true, tsi.AllowDrop, "B1");
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B2");
-			
-		//        ew.Clear ();
-		//        tsi.AllowDrop = true;
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+		[Test]
+		public void PropertyAllowDrop ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
+
+			tsi.AllowDrop = true;
+			Assert.AreEqual (true, tsi.AllowDrop, "B1");
+			Assert.AreEqual (string.Empty, ew.ToString (), "B2");
+
+			ew.Clear ();
+			tsi.AllowDrop = true;
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
 		[Test]
 		public void PropertyAutoSize ()
@@ -419,20 +419,20 @@ namespace MonoTests.System.Windows.Forms
 			tsi.ImageIndex = -2;
 		}
 
-		//[Test]
-		//public void PropertyImageKey ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
+		[Test]
+		public void PropertyImageKey ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
 
-		//        tsi.ImageKey = "open";
-		//        Assert.AreEqual ("open", tsi.ImageKey, "B1");
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B2");
+			tsi.ImageKey = "open";
+			Assert.AreEqual ("open", tsi.ImageKey, "B1");
+			Assert.AreEqual (string.Empty, ew.ToString (), "B2");
 
-		//        ew.Clear ();
-		//        tsi.ImageKey = "open";
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+			ew.Clear ();
+			tsi.ImageKey = "open";
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
 		[Test]
 		public void PropertyImageScaling ()
@@ -479,43 +479,43 @@ namespace MonoTests.System.Windows.Forms
 			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
 		}
 
-		//[Test]
-		//public void PropertyMergeAction ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
+		[Test]
+		public void PropertyMergeAction ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
 
-		//        tsi.MergeAction = MergeAction.Replace;
-		//        Assert.AreEqual (MergeAction.Replace, tsi.MergeAction, "B1");
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B2");
+			tsi.MergeAction = MergeAction.Replace;
+			Assert.AreEqual (MergeAction.Replace, tsi.MergeAction, "B1");
+			Assert.AreEqual (string.Empty, ew.ToString (), "B2");
 
-		//        ew.Clear ();
-		//        tsi.MergeAction = MergeAction.Replace;
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+			ew.Clear ();
+			tsi.MergeAction = MergeAction.Replace;
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
-		//[Test]
-		//[ExpectedException (typeof (System.ComponentModel.InvalidEnumArgumentException))]
-		//public void PropertyMergeActionIEAE ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        tsi.MergeAction = (MergeAction)42;
-		//}
+		[Test]
+		[ExpectedException (typeof (InvalidEnumArgumentException))]
+		public void PropertyMergeActionIEAE ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			tsi.MergeAction = (MergeAction)42;
+		}
 
-		//[Test]
-		//public void PropertyMergeIndex ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
+		[Test]
+		public void PropertyMergeIndex ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
 
-		//        tsi.MergeIndex = 42;
-		//        Assert.AreEqual (42, tsi.MergeIndex, "B1");
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B2");
+			tsi.MergeIndex = 42;
+			Assert.AreEqual (42, tsi.MergeIndex, "B1");
+			Assert.AreEqual (string.Empty, ew.ToString (), "B2");
 
-		//        ew.Clear ();
-		//        tsi.MergeIndex = 42;
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+			ew.Clear ();
+			tsi.MergeIndex = 42;
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
 		[Test]
 		public void PropertyName ()
@@ -586,35 +586,35 @@ namespace MonoTests.System.Windows.Forms
 			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
 		}
 
-		//[Test]
-		//public void PropertyRightToLeft ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
+		[Test]
+		public void PropertyRightToLeft ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
 
-		//        tsi.RightToLeft = RightToLeft.No;
-		//        Assert.AreEqual (RightToLeft.No, tsi.RightToLeft, "B1");
-		//        Assert.AreEqual ("RightToLeftChanged", ew.ToString (), "B2");
+			tsi.RightToLeft = RightToLeft.No;
+			Assert.AreEqual (RightToLeft.No, tsi.RightToLeft, "B1");
+			Assert.AreEqual ("RightToLeftChanged", ew.ToString (), "B2");
 
-		//        ew.Clear ();
-		//        tsi.RightToLeft = RightToLeft.No;
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+			ew.Clear ();
+			tsi.RightToLeft = RightToLeft.No;
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
-		//[Test]
-		//public void PropertyRightToLeftAutoMirrorImage ()
-		//{
-		//        ToolStripItem tsi = new NullToolStripItem ();
-		//        EventWatcher ew = new EventWatcher (tsi);
+		[Test]
+		public void PropertyRightToLeftAutoMirrorImage ()
+		{
+			ToolStripItem tsi = new NullToolStripItem ();
+			EventWatcher ew = new EventWatcher (tsi);
 
-		//        tsi.RightToLeftAutoMirrorImage = true;
-		//        Assert.AreEqual (true, tsi.RightToLeftAutoMirrorImage, "B1");
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B2");
+			tsi.RightToLeftAutoMirrorImage = true;
+			Assert.AreEqual (true, tsi.RightToLeftAutoMirrorImage, "B1");
+			Assert.AreEqual (string.Empty, ew.ToString (), "B2");
 
-		//        ew.Clear ();
-		//        tsi.RightToLeftAutoMirrorImage = true;
-		//        Assert.AreEqual (string.Empty, ew.ToString (), "B3");
-		//}
+			ew.Clear ();
+			tsi.RightToLeftAutoMirrorImage = true;
+			Assert.AreEqual (string.Empty, ew.ToString (), "B3");
+		}
 
 		[Test]
 		public void PropertySize ()
@@ -790,7 +790,7 @@ namespace MonoTests.System.Windows.Forms
 		//}
 		
 		[Test]
-		[Ignore ("Accessibility still needs some work")]
+		[NUnit.Framework.Category ("NotWorking")]	// Accessibility still needs some work
 		public void Accessibility ()
 		{
 			ToolStrip ts = new ToolStrip ();
@@ -1175,7 +1175,7 @@ namespace MonoTests.System.Windows.Forms
 				tsi.Paint += new PaintEventHandler (delegate (Object obj, PaintEventArgs e) { events += ("Paint;"); });
 				//tsi.QueryAccessibilityHelp += new QueryAccessibilityHelpEventHandler (delegate (Object obj, QueryAccessibilityHelpEventArgs e) { events += ("QueryAccessibilityHelp;"); });
 				//tsi.QueryContinueDrag += new QueryContinueDragEventHandler (delegate (Object obj, QueryContinueDragEventArgs e) { events += ("QueryContinueDrag;"); });
-				//tsi.RightToLeftChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("RightToLeftChanged;"); });
+				tsi.RightToLeftChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("RightToLeftChanged;"); });
 				tsi.TextChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("TextChanged;"); });
 				tsi.VisibleChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("VisibleChanged;"); });
 			}

+ 458 - 1
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ToolStripManagerTest.cs

@@ -97,7 +97,7 @@ namespace MonoTests.System.Windows.Forms
 		}
 		
 		[Test]
-		public void TwoShortcuts ()
+		public void BehaviorTwoShortcuts ()
 		{
 			ToolStripMenuItem tsmi = new ToolStripMenuItem ();
 			tsmi.ShortcutKeys = Keys.Control | Keys.D;
@@ -114,6 +114,463 @@ namespace MonoTests.System.Windows.Forms
 			Assert.AreEqual (Keys.Control | Keys.D, tsmi.ShortcutKeys, "A3");
 			Assert.AreEqual (Keys.Control | Keys.D, tsmi2.ShortcutKeys, "A4");
 		}
+		
+		[Test]
+		public void MethodMergeToolStripsAppend ()
+		{
+			// MergeAction = Append
+			ToolStrip ts1 = new ToolStrip ();
+			ToolStrip ts2 = new ToolStrip ();
+
+			ts1.Items.Add ("ts1-A");
+			ts1.Items.Add ("ts1-B");
+			ts1.Items.Add ("ts1-C");
+			ts1.Items.Add ("ts1-D");
+
+			ts2.Items.Add ("ts2-A");
+			ts2.Items.Add ("ts2-B");
+			ts2.Items.Add ("ts2-C");
+			ts2.Items.Add ("ts2-D");
+
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (8, ts1.Items.Count, "M1");
+			Assert.AreEqual (0, ts2.Items.Count, "M2");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M3-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M3-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M3-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M3-4");
+			Assert.AreEqual ("ts2-A", ts1.Items[4].Text, "M3-5");
+			Assert.AreEqual ("ts2-B", ts1.Items[5].Text, "M3-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[6].Text, "M3-7");
+			Assert.AreEqual ("ts2-D", ts1.Items[7].Text, "M3-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M4");
+			Assert.AreEqual (4, ts2.Items.Count, "M5");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M6-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M6-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M6-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M6-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Text, "M6-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Text, "M6-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Text, "M6-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Text, "M6-8");
+
+			// Do merge twice, as it helps verify things got back
+			// to the proper state in the unmerge
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (8, ts1.Items.Count, "M7");
+			Assert.AreEqual (0, ts2.Items.Count, "M8");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M9-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M9-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M9-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M9-4");
+			Assert.AreEqual ("ts2-A", ts1.Items[4].Text, "M9-5");
+			Assert.AreEqual ("ts2-B", ts1.Items[5].Text, "M9-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[6].Text, "M9-7");
+			Assert.AreEqual ("ts2-D", ts1.Items[7].Text, "M9-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M10");
+			Assert.AreEqual (4, ts2.Items.Count, "M11");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M12-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M12-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M12-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M12-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Text, "M12-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Text, "M12-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Text, "M12-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Text, "M12-8");
+		}
+		
+		[Test]
+		public void MethodMergeToolStripsInsert ()
+		{
+			// MergeAction = Insert
+			ToolStrip ts1 = new ToolStrip ();
+			ToolStrip ts2 = new ToolStrip ();
+
+			ts1.Items.Add ("ts1-A");
+			ts1.Items.Add ("ts1-B");
+			ts1.Items.Add ("ts1-C");
+			ts1.Items.Add ("ts1-D");
+
+			ts2.Items.Add ("ts2-A");
+			ts2.Items.Add ("ts2-B");
+			ts2.Items.Add ("ts2-C");
+			ts2.Items.Add ("ts2-D");
+
+			ts2.Items[0].MergeAction = MergeAction.Insert;
+			ts2.Items[0].MergeIndex = 2;
+			ts2.Items[1].MergeAction = MergeAction.Insert;
+			ts2.Items[2].MergeAction = MergeAction.Insert;
+			ts2.Items[2].MergeIndex = 12;
+			ts2.Items[3].MergeAction = MergeAction.Insert;
+			ts2.Items[3].MergeIndex = 0;
+			
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (7, ts1.Items.Count, "M1");
+			Assert.AreEqual (1, ts2.Items.Count, "M2");
+
+			Assert.AreEqual ("ts2-D", ts1.Items[0].Text, "M3-1");
+			Assert.AreEqual ("ts1-A", ts1.Items[1].Text, "M3-2");
+			Assert.AreEqual ("ts1-B", ts1.Items[2].Text, "M3-3");
+			Assert.AreEqual ("ts2-A", ts1.Items[3].Text, "M3-4");
+			Assert.AreEqual ("ts1-C", ts1.Items[4].Text, "M3-5");
+			Assert.AreEqual ("ts1-D", ts1.Items[5].Text, "M3-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[6].Text, "M3-7");
+			Assert.AreEqual ("ts2-B", ts2.Items[0].Text, "M3-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M4");
+			Assert.AreEqual (4, ts2.Items.Count, "M5");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M6-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M6-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M6-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M6-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Text, "M6-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Text, "M6-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Text, "M6-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Text, "M6-8");
+
+			// Do merge twice, as it helps verify things got back
+			// to the proper state in the unmerge
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (7, ts1.Items.Count, "M7");
+			Assert.AreEqual (1, ts2.Items.Count, "M8");
+
+			Assert.AreEqual ("ts2-D", ts1.Items[0].Text, "M9-1");
+			Assert.AreEqual ("ts1-A", ts1.Items[1].Text, "M9-2");
+			Assert.AreEqual ("ts1-B", ts1.Items[2].Text, "M9-3");
+			Assert.AreEqual ("ts2-A", ts1.Items[3].Text, "M9-4");
+			Assert.AreEqual ("ts1-C", ts1.Items[4].Text, "M9-5");
+			Assert.AreEqual ("ts1-D", ts1.Items[5].Text, "M9-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[6].Text, "M9-7");
+			Assert.AreEqual ("ts2-B", ts2.Items[0].Text, "M9-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M10");
+			Assert.AreEqual (4, ts2.Items.Count, "M11");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Text, "M12-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Text, "M12-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Text, "M12-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Text, "M12-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Text, "M12-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Text, "M12-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Text, "M12-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Text, "M12-8");
+		}
+
+		[Test]
+		public void MethodMergeToolStripsRemove ()
+		{
+			// MergeAction = Remove
+			ToolStrip ts1 = new ToolStrip ();
+			ToolStrip ts2 = new ToolStrip ();
+
+			ts1.Items.Add ("ts1-A");
+			ts1.Items.Add ("ts1-B");
+			ts1.Items.Add ("ts1-C");
+			ts1.Items.Add ("ts1-D");
+
+			ts2.Items.Add ("ts1-A");
+			ts2.Items.Add ("ts1-B");
+			ts2.Items.Add ("ts1-C");
+			ts2.Items.Add ("ts1-D");
+
+			ts2.Items[0].MergeAction = MergeAction.Remove;
+			ts2.Items[1].MergeAction = MergeAction.Remove;
+			ts2.Items[2].MergeAction = MergeAction.Remove;
+			ts2.Items[3].MergeAction = MergeAction.Remove;
+
+			// Both the item from ts1 and ts2 must have the same Text for Remove to work,
+			// so I need to give these a Name so I can differentiate them later.
+			ts1.Items[0].Name = "ts1-A";
+			ts1.Items[1].Name = "ts1-B";
+			ts1.Items[2].Name = "ts1-C";
+			ts1.Items[3].Name = "ts1-D";
+			ts2.Items[0].Name = "ts2-A";
+			ts2.Items[1].Name = "ts2-B";
+			ts2.Items[2].Name = "ts2-C";
+			ts2.Items[3].Name = "ts2-D";
+
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (0, ts1.Items.Count, "M1");
+			Assert.AreEqual (4, ts2.Items.Count, "M2");
+
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M3-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M3-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M3-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M3-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M4");
+			Assert.AreEqual (4, ts2.Items.Count, "M5");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Name, "M6-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Name, "M6-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Name, "M6-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Name, "M6-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M6-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M6-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M6-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M6-8");
+
+			// Do merge twice, as it helps verify things got back
+			// to the proper state in the unmerge
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (0, ts1.Items.Count, "M7");
+			Assert.AreEqual (4, ts2.Items.Count, "M8");
+
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M9-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M9-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M9-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M9-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M10");
+			Assert.AreEqual (4, ts2.Items.Count, "M11");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Name, "M12-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Name, "M12-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Name, "M12-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Name, "M12-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M12-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M12-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M12-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M12-8");
+		}
+
+		[Test]
+		public void MethodMergeToolStripsReplace ()
+		{
+			// MergeAction = Replace
+			ToolStrip ts1 = new ToolStrip ();
+			ToolStrip ts2 = new ToolStrip ();
+
+			ts1.Items.Add ("ts1-A");
+			ts1.Items.Add ("ts1-B");
+			ts1.Items.Add ("ts1-C");
+			ts1.Items.Add ("ts1-D");
+
+			ts2.Items.Add ("ts1-A");
+			ts2.Items.Add ("ts1-B");
+			ts2.Items.Add ("ts1-C");
+			ts2.Items.Add ("ts1-D");
+
+			ts2.Items[0].MergeAction = MergeAction.Replace;
+			ts2.Items[1].MergeAction = MergeAction.Replace;
+			ts2.Items[2].MergeAction = MergeAction.Replace;
+			ts2.Items[3].MergeAction = MergeAction.Replace;
+
+			// Both the item from ts1 and ts2 must have the same Text for Replace to work,
+			// so I need to give these a Name so I can differentiate them later.
+			ts1.Items[0].Name = "ts1-A";
+			ts1.Items[1].Name = "ts1-B";
+			ts1.Items[2].Name = "ts1-C";
+			ts1.Items[3].Name = "ts1-D";
+			ts2.Items[0].Name = "ts2-A";
+			ts2.Items[1].Name = "ts2-B";
+			ts2.Items[2].Name = "ts2-C";
+			ts2.Items[3].Name = "ts2-D";
+
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M1");
+			Assert.AreEqual (0, ts2.Items.Count, "M2");
+
+			Assert.AreEqual ("ts2-A", ts1.Items[0].Name, "M3-5");
+			Assert.AreEqual ("ts2-B", ts1.Items[1].Name, "M3-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[2].Name, "M3-7");
+			Assert.AreEqual ("ts2-D", ts1.Items[3].Name, "M3-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M4");
+			Assert.AreEqual (4, ts2.Items.Count, "M5");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Name, "M6-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Name, "M6-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Name, "M6-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Name, "M6-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M6-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M6-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M6-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M6-8");
+
+			// Do merge twice, as it helps verify things got back
+			// to the proper state in the unmerge
+			ToolStripManager.Merge (ts2, ts1);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M7");
+			Assert.AreEqual (0, ts2.Items.Count, "M8");
+
+			Assert.AreEqual ("ts2-A", ts1.Items[0].Name, "M9-5");
+			Assert.AreEqual ("ts2-B", ts1.Items[1].Name, "M9-6");
+			Assert.AreEqual ("ts2-C", ts1.Items[2].Name, "M9-7");
+			Assert.AreEqual ("ts2-D", ts1.Items[3].Name, "M9-8");
+
+			ToolStripManager.RevertMerge (ts1, ts2);
+
+			Assert.AreEqual (4, ts1.Items.Count, "M10");
+			Assert.AreEqual (4, ts2.Items.Count, "M11");
+
+			Assert.AreEqual ("ts1-A", ts1.Items[0].Name, "M12-1");
+			Assert.AreEqual ("ts1-B", ts1.Items[1].Name, "M12-2");
+			Assert.AreEqual ("ts1-C", ts1.Items[2].Name, "M12-3");
+			Assert.AreEqual ("ts1-D", ts1.Items[3].Name, "M12-4");
+			Assert.AreEqual ("ts2-A", ts2.Items[0].Name, "M12-5");
+			Assert.AreEqual ("ts2-B", ts2.Items[1].Name, "M12-6");
+			Assert.AreEqual ("ts2-C", ts2.Items[2].Name, "M12-7");
+			Assert.AreEqual ("ts2-D", ts2.Items[3].Name, "M12-8");
+		}
+		
+		[Test]
+		public void MethodMergeToolStripsMatchOnly ()
+		{
+			MenuStrip ms1 = new MenuStrip ();
+			MenuStrip ms2 = new MenuStrip ();
+
+			ToolStripMenuItem tsmi1 = (ToolStripMenuItem)ms1.Items.Add ("File");
+			ToolStripMenuItem tsmi2 = (ToolStripMenuItem)ms2.Items.Add ("File");
+
+			tsmi1.DropDownItems.Add ("New 1");
+			tsmi1.DropDownItems.Add ("Open 1");
+
+			tsmi2.DropDownItems.Add ("New 2");
+			tsmi2.DropDownItems.Add ("Open 2");
+			
+			tsmi2.MergeAction = MergeAction.MatchOnly;
+
+			ToolStripManager.Merge (ms2, ms1);
+
+			Assert.AreEqual (4, tsmi1.DropDownItems.Count, "M1");
+			Assert.AreEqual (0, tsmi2.DropDownItems.Count, "M2");
+
+			Assert.AreEqual ("New 1", tsmi1.DropDownItems[0].Text, "M3-1");
+			Assert.AreEqual ("Open 1", tsmi1.DropDownItems[1].Text, "M3-2");
+			Assert.AreEqual ("New 2", tsmi1.DropDownItems[2].Text, "M3-3");
+			Assert.AreEqual ("Open 2", tsmi1.DropDownItems[3].Text, "M3-4");
+
+			ToolStripManager.RevertMerge (ms1, ms2);
+
+			Assert.AreEqual (2, tsmi1.DropDownItems.Count, "M4");
+			Assert.AreEqual (2, tsmi2.DropDownItems.Count, "M5");
+
+			Assert.AreEqual ("New 1", tsmi1.DropDownItems[0].Text, "M6-1");
+			Assert.AreEqual ("Open 1", tsmi1.DropDownItems[1].Text, "M6-2");
+			Assert.AreEqual ("New 2", tsmi2.DropDownItems[0].Text, "M6-3");
+			Assert.AreEqual ("Open 2", tsmi2.DropDownItems[1].Text, "M6-4");
+
+			// Do merge twice, as it helps verify things got back
+			// to the proper state in the unmerge
+			ToolStripManager.Merge (ms2, ms1);
+
+			Assert.AreEqual (4, tsmi1.DropDownItems.Count, "M7");
+			Assert.AreEqual (0, tsmi2.DropDownItems.Count, "M8");
+
+			Assert.AreEqual ("New 1", tsmi1.DropDownItems[0].Text, "M9-1");
+			Assert.AreEqual ("Open 1", tsmi1.DropDownItems[1].Text, "M9-2");
+			Assert.AreEqual ("New 2", tsmi1.DropDownItems[2].Text, "M9-3");
+			Assert.AreEqual ("Open 2", tsmi1.DropDownItems[3].Text, "M9-4");
+
+			ToolStripManager.RevertMerge (ms1, ms2);
+
+			Assert.AreEqual (2, tsmi1.DropDownItems.Count, "M10");
+			Assert.AreEqual (2, tsmi2.DropDownItems.Count, "M11");
+
+			Assert.AreEqual ("New 1", tsmi1.DropDownItems[0].Text, "M12-1");
+			Assert.AreEqual ("Open 1", tsmi1.DropDownItems[1].Text, "M12-2");
+			Assert.AreEqual ("New 2", tsmi2.DropDownItems[0].Text, "M12-3");
+			Assert.AreEqual ("Open 2", tsmi2.DropDownItems[1].Text, "M12-4");
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void MethodMergeANE1 ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ts.Name = "moose";
+			ToolStripManager.Merge (null, "moose");
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void MethodMergeANE2 ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ToolStripManager.Merge (ts, (string)null);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodMergeAE ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ts.Name = "mergeae";
+			ToolStripManager.Merge (ts, "mergeae");
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void MethodMergeANE3 ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ToolStripManager.Merge (null, ts);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void MethodMergeANE4 ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ToolStripManager.Merge (ts, (ToolStrip)null);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodMergeAE2 ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			ToolStripManager.Merge (ts, ts);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void MethodRevertMergeANE ()
+		{
+			ToolStrip ts = new ToolStrip ();
+			
+			ToolStripManager.RevertMerge (ts, null);
+		}
+		
+		[Test]
+		public void MethodMergeNothing ()
+		{
+			// Merge returns false if it can't successfully merge anything
+			ToolStrip ts1 = new ToolStrip ();
+			ToolStrip ts2 = new ToolStrip ();
+			
+			Assert.AreEqual (false, ToolStripManager.Merge (ts1, ts2), "K1");
+		}
 	}
 }
 #endif