1 //
2 // MenuTest.cs: Test cases for Menu, MainMenu
3 //
4 // Author:
5 //   Ritvik Mayank (mritvik@novell.com)
6 //
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
8 //
9 
10 using System;
11 using System.Windows.Forms;
12 using System.Drawing;
13 using System.Reflection;
14 using NUnit.Framework;
15 
16 namespace MonoTests.System.Windows.Forms
17 {
18 	[TestFixture]
19 	public class MenuTest : TestHelper
20 	{
21 		[Test]
MenuPropertyTest()22 		public void MenuPropertyTest ()
23 		{
24 			Menu mymenu = new MainMenu ();
25 			Assert.AreEqual ("System.IntPtr", mymenu.Handle.GetType().FullName, "#1");
26 			Assert.AreEqual (false, mymenu.IsParent, "#2");
27 			// TODO: MDI is not completed  yet
28 			//Assert.AreEqual (null, mymenu.MdiListItem, "#3");
29 			Assert.AreEqual (0, mymenu.MenuItems.Count,"#4");
30 			mymenu.MenuItems.Add ("newmenu1");
31 			mymenu.MenuItems.Add ("newmenu2");
32 			Assert.AreEqual (2, mymenu.MenuItems.Count,"#5");
33 			MainMenu mymainmenu = new MainMenu ();
34 			Assert.AreEqual (RightToLeft.Inherit, mymainmenu.RightToLeft,"#6");
35 
36 			Assert.IsNull (mymenu.Tag);
37 		}
38 
39 		[Test]
GetMainMenuTest()40 		public void GetMainMenuTest ()
41 		{
42 			MainMenu mymainmenu = new MainMenu ();
43 			MenuItem mymenuitem = new MenuItem ();
44 			mymenuitem.Text = "menu 1";
45 			mymainmenu.MenuItems.Add (mymenuitem);
46 			Assert.AreEqual (mymainmenu, mymenuitem.GetMainMenu (), "#7");
47 		}
48 
49 		[Test]
CloneMenuTest()50 		public void CloneMenuTest ()
51 		{
52 			MainMenu mymainmenu1 = new MainMenu ();
53 			MenuItem menuitem1 = new MenuItem ();
54 			MenuItem menuitem2 = new MenuItem ();
55 			menuitem1.Text = "item1";
56 			menuitem2.Text = "item2";
57 			mymainmenu1.MenuItems.Add (menuitem1);
58 			mymainmenu1.MenuItems.Add (menuitem2);
59 			MainMenu mymainmenu2 = mymainmenu1.CloneMenu ();
60 			Assert.AreEqual ("item1", mymainmenu2.MenuItems[0].Text, "#9");
61 		}
62 
63 		[Test]
CloneWindowMenuTest()64 		public void CloneWindowMenuTest ()
65 		{
66 				MenuItem menuitem1 = new MenuItem ();
67 				menuitem1.MdiList = true;
68 				MenuItem menuitem2 = menuitem1.CloneMenu ();
69 				Assert.IsTrue (menuitem2.MdiList, "#1");
70 		}
71 
72 		[Test]
GetFormTest()73 		public void GetFormTest ()
74 		{
75 			Form myform = new Form ();
76 			myform.ShowInTaskbar = false;
77 			myform.Name = "New Form";
78 			MainMenu mymainmenu1 = new MainMenu ();
79 			MenuItem menuitem1 = new MenuItem ();
80 			menuitem1.Text = "item1";
81 			mymainmenu1.MenuItems.Add (menuitem1);
82 			myform.Menu = mymainmenu1;
83 			Assert.AreEqual ("New Form", mymainmenu1.GetForm().Name, "#10");
84 			myform.Dispose ();
85 		}
86 
87 		[Test]
MenuItemMerge()88 		public void MenuItemMerge ()
89 		{
90 			MenuItem itemA2 = new MenuItem ("Exit");
91 			itemA2.MergeType = MenuMerge.MergeItems;
92 			itemA2.MergeOrder = 3;
93 
94 			MenuItem itemA1 = new MenuItem ("File");
95 			itemA1.MenuItems.Add (itemA2);
96 			itemA1.MergeType = MenuMerge.MergeItems;
97 
98 			MenuItem itemB2 = new MenuItem ("Open");
99 			itemB2.MergeOrder = 1;
100 			itemB2.MergeType = MenuMerge.Add;
101 
102 			MenuItem itemB3 = new MenuItem ("Close");
103 			itemB3.MergeOrder = 2;
104 			itemB3.MergeType = MenuMerge.Add;
105 
106 			MenuItem itemB1 = new MenuItem ("File");
107 			itemB1.MenuItems.Add (itemB2);
108 			itemB1.MenuItems.Add (itemB3);
109 			itemB1.MergeType = MenuMerge.MergeItems;
110 
111 			MainMenu mainMenu1 = new MainMenu();
112 			mainMenu1.MenuItems.Add (itemA1);
113 
114 			MainMenu mainMenu2 = new MainMenu();
115 			mainMenu2.MenuItems.Add (itemB1);
116 
117 			mainMenu1.MergeMenu (mainMenu2);
118 
119 			Assert.AreEqual ("File",  mainMenu1.MenuItems[0].Text,              "ItemMerge#1");
120 			Assert.AreEqual ("Open",  mainMenu1.MenuItems[0].MenuItems[0].Text, "ItemMerge#2");
121 			Assert.AreEqual ("Close", mainMenu1.MenuItems[0].MenuItems[1].Text, "ItemMerge#3");
122 			Assert.AreEqual ("Exit",  mainMenu1.MenuItems[0].MenuItems[2].Text, "ItemMerge#4");
123 		}
124 
125 		[Test] // Xamarin bug 3418
TestMenuItemsDispose()126 		public void TestMenuItemsDispose ()
127 		{
128 			Menu menu = new MainMenu ();
129 			menu.MenuItems.Add (new MenuItem ());
130 			menu.Dispose ();
131 			try {
132 				MenuItem item = menu.MenuItems[0];
133 				Assert.Fail ();
134 			} catch (ArgumentOutOfRangeException) {
135 			}
136 		}
137 	}
138 }
139