PropertyGridTest.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. //
  2. // PropertyGridTest.cs: Test cases for PropertyGrid.
  3. //
  4. // Author:
  5. // Gert Driesen ([email protected])
  6. //
  7. // (C) 2006 Novell, Inc. (http://www.novell.com)
  8. //
  9. using System;
  10. using System.ComponentModel;
  11. using System.Globalization;
  12. using System.Windows.Forms;
  13. using CategoryAttribute = NUnit.Framework.CategoryAttribute;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Windows.Forms
  16. {
  17. [TestFixture]
  18. public class PropertyGridTest : TestHelper
  19. {
  20. [Test]
  21. public void PropertySort_Valid ()
  22. {
  23. PropertyGrid pg;
  24. EventLogger eventLogger;
  25. pg = new PropertyGrid ();
  26. eventLogger = new EventLogger (pg);
  27. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#A1");
  28. Assert.AreEqual (0, eventLogger.EventsRaised, "#A2");
  29. pg.PropertySort = PropertySort.Alphabetical;
  30. Assert.AreEqual (PropertySort.Alphabetical, pg.PropertySort, "#A3");
  31. #if NET_2_0
  32. Assert.AreEqual (1, eventLogger.EventsRaised, "#A4");
  33. Assert.AreEqual (1, eventLogger.CountEvents ("PropertySortChanged"), "#A5");
  34. #else
  35. Assert.AreEqual (0, eventLogger.EventsRaised, "#A4");
  36. #endif
  37. pg.PropertySort = PropertySort.NoSort;
  38. Assert.AreEqual (PropertySort.NoSort, pg.PropertySort, "#A6");
  39. #if NET_2_0
  40. Assert.AreEqual (2, eventLogger.EventsRaised, "#A7");
  41. Assert.AreEqual (2, eventLogger.CountEvents ("PropertySortChanged"), "#A8");
  42. #else
  43. Assert.AreEqual (0, eventLogger.EventsRaised, "#A7");
  44. #endif
  45. pg.PropertySort = PropertySort.NoSort;
  46. Assert.AreEqual (PropertySort.NoSort, pg.PropertySort, "#A9");
  47. #if NET_2_0
  48. Assert.AreEqual (2, eventLogger.EventsRaised, "#A10");
  49. Assert.AreEqual (2, eventLogger.CountEvents ("PropertySortChanged"), "#A11");
  50. #else
  51. Assert.AreEqual (0, eventLogger.EventsRaised, "#A10");
  52. #endif
  53. pg.PropertySort = PropertySort.CategorizedAlphabetical;
  54. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#A12");
  55. #if NET_2_0
  56. Assert.AreEqual (3, eventLogger.EventsRaised, "#A13");
  57. Assert.AreEqual (3, eventLogger.CountEvents ("PropertySortChanged"), "#A14");
  58. #else
  59. Assert.AreEqual (0, eventLogger.EventsRaised, "#A13");
  60. #endif
  61. pg.PropertySort = PropertySort.Categorized;
  62. Assert.AreEqual (PropertySort.Categorized, pg.PropertySort, "#A14");
  63. #if NET_2_0
  64. Assert.AreEqual (3, eventLogger.EventsRaised, "#A15");
  65. Assert.AreEqual (3, eventLogger.CountEvents ("PropertySortChanged"), "#A16");
  66. #else
  67. Assert.AreEqual (0, eventLogger.EventsRaised, "#A17");
  68. #endif
  69. pg = new PropertyGrid ();
  70. eventLogger = new EventLogger (pg);
  71. pg.SelectedObject = new Button ();
  72. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#B1");
  73. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#B2");
  74. pg.PropertySort = PropertySort.Alphabetical;
  75. Assert.AreEqual (PropertySort.Alphabetical, pg.PropertySort, "#B3");
  76. #if NET_2_0
  77. Assert.AreEqual (1, eventLogger.CountEvents ("PropertySortChanged"), "#B4");
  78. #else
  79. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#B4");
  80. #endif
  81. pg.PropertySort = PropertySort.NoSort;
  82. Assert.AreEqual (PropertySort.NoSort, pg.PropertySort, "#B5");
  83. #if NET_2_0
  84. Assert.AreEqual (2, eventLogger.CountEvents ("PropertySortChanged"), "#B6");
  85. #else
  86. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#B6");
  87. #endif
  88. pg.PropertySort = PropertySort.CategorizedAlphabetical;
  89. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#B7");
  90. #if NET_2_0
  91. Assert.AreEqual (3, eventLogger.CountEvents ("PropertySortChanged"), "#B8");
  92. #else
  93. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#B8");
  94. #endif
  95. pg.PropertySort = PropertySort.CategorizedAlphabetical;
  96. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#B9");
  97. #if NET_2_0
  98. Assert.AreEqual (3, eventLogger.CountEvents ("PropertySortChanged"), "#B10");
  99. #else
  100. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#B10");
  101. #endif
  102. pg.SelectedObject = null;
  103. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#C1");
  104. #if NET_2_0
  105. Assert.AreEqual (3, eventLogger.CountEvents ("PropertySortChanged"), "#C2");
  106. #else
  107. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#C2");
  108. #endif
  109. pg.PropertySort = PropertySort.Alphabetical;
  110. Assert.AreEqual (PropertySort.Alphabetical, pg.PropertySort, "#C3");
  111. #if NET_2_0
  112. Assert.AreEqual (4, eventLogger.CountEvents ("PropertySortChanged"), "#C4");
  113. #else
  114. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#C4");
  115. #endif
  116. pg.PropertySort = PropertySort.NoSort;
  117. Assert.AreEqual (PropertySort.NoSort, pg.PropertySort, "#C5");
  118. #if NET_2_0
  119. Assert.AreEqual (5, eventLogger.CountEvents ("PropertySortChanged"), "#C6");
  120. #else
  121. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#C6");
  122. #endif
  123. pg.SelectedObject = new Button ();
  124. Form form = new Form ();
  125. form.ShowInTaskbar = false;
  126. form.Controls.Add (pg);
  127. form.Show ();
  128. Assert.AreEqual (PropertySort.NoSort, pg.PropertySort, "#D1");
  129. #if NET_2_0
  130. Assert.AreEqual (5, eventLogger.CountEvents ("PropertySortChanged"), "#D2");
  131. #else
  132. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#D2");
  133. #endif
  134. pg.PropertySort = PropertySort.Alphabetical;
  135. Assert.AreEqual (PropertySort.Alphabetical, pg.PropertySort, "#D3");
  136. #if NET_2_0
  137. Assert.AreEqual (6, eventLogger.CountEvents ("PropertySortChanged"), "#D4");
  138. #else
  139. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#D4");
  140. #endif
  141. pg.PropertySort = PropertySort.Categorized;
  142. Assert.AreEqual (PropertySort.Categorized, pg.PropertySort, "#D5");
  143. #if NET_2_0
  144. Assert.AreEqual (7, eventLogger.CountEvents ("PropertySortChanged"), "#D6");
  145. #else
  146. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#D6");
  147. #endif
  148. pg.PropertySort = PropertySort.CategorizedAlphabetical;
  149. Assert.AreEqual (PropertySort.CategorizedAlphabetical, pg.PropertySort, "#D7");
  150. #if NET_2_0
  151. Assert.AreEqual (7, eventLogger.CountEvents ("PropertySortChanged"), "#D8");
  152. #else
  153. Assert.AreEqual (0, eventLogger.CountEvents ("PropertySortChanged"), "#D8");
  154. #endif
  155. form.Dispose ();
  156. }
  157. [Test]
  158. public void PropertySort_Invalid ()
  159. {
  160. PropertyGrid pg = new PropertyGrid ();
  161. #if NET_2_0
  162. EventLogger eventLogger = new EventLogger (pg);
  163. try {
  164. pg.PropertySort = (PropertySort) 666;
  165. Assert.Fail ("#1");
  166. } catch (InvalidEnumArgumentException ex) {
  167. // The value of argument 'value' (666) is invalid
  168. // for Enum type 'PropertySort'
  169. Assert.AreEqual (typeof (InvalidEnumArgumentException), ex.GetType (), "#2");
  170. Assert.IsNull (ex.InnerException, "#3");
  171. Assert.IsNotNull (ex.Message, "#4");
  172. Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#5");
  173. Assert.IsTrue (ex.Message.IndexOf ("(" + 666.ToString (CultureInfo.CurrentCulture) + ")") != -1, "#6");
  174. Assert.IsTrue (ex.Message.IndexOf ("'PropertySort'") != -1, "#7");
  175. Assert.IsNotNull (ex.ParamName, "#8");
  176. Assert.AreEqual ("value", ex.ParamName, "#9");
  177. Assert.AreEqual (0, eventLogger.EventsRaised, "#10");
  178. }
  179. #else
  180. pg.PropertySort = (PropertySort) 666;
  181. Assert.AreEqual ((PropertySort) 666, pg.PropertySort);
  182. #endif
  183. }
  184. [Test]
  185. public void SelectedObject ()
  186. {
  187. PropertyGrid pg = new PropertyGrid ();
  188. Button button1 = new Button ();
  189. Assert.IsNull (pg.SelectedObject, "#A1");
  190. Assert.IsNotNull (pg.SelectedObjects, "#A2");
  191. Assert.AreEqual (0, pg.SelectedObjects.Length, "#A3");
  192. pg.SelectedObject = button1;
  193. Assert.IsNotNull (pg.SelectedObject, "#B1");
  194. Assert.AreSame (button1, pg.SelectedObject, "#B2");
  195. Assert.IsNotNull (pg.SelectedObjects, "#B3");
  196. Assert.AreEqual (1, pg.SelectedObjects.Length, "#B4");
  197. Assert.AreSame (button1, pg.SelectedObjects [0], "#B5");
  198. Assert.IsNotNull (pg.SelectedGridItem, "#B6");
  199. }
  200. [Test] // bug #81796
  201. public void SelectedObject_NoProperties ()
  202. {
  203. PropertyGrid propertyGrid = new PropertyGrid ();
  204. propertyGrid.SelectedObject = new Button ();
  205. propertyGrid.SelectedObject = new object ();
  206. propertyGrid.SelectedObject = new Button ();
  207. }
  208. [Test]
  209. public void SelectedObject_Null ()
  210. {
  211. PropertyGrid pg = new PropertyGrid ();
  212. Assert.IsNull (pg.SelectedObject, "#A1");
  213. Assert.IsNotNull (pg.SelectedObjects, "#A2");
  214. Assert.AreEqual (0, pg.SelectedObjects.Length, "#A3");
  215. pg.SelectedObject = null;
  216. Assert.IsNull (pg.SelectedObject, "#B1");
  217. Assert.IsNotNull (pg.SelectedObjects, "#B2");
  218. Assert.AreEqual (0, pg.SelectedObjects.Length, "#B3");
  219. }
  220. [Test]
  221. public void SelectedObject_Null2 ()
  222. {
  223. PropertyGrid pg = new PropertyGrid ();
  224. EventLogger log = new EventLogger (pg);
  225. Assert.IsNull (pg.SelectedObject, "#A1");
  226. Assert.IsNotNull (pg.SelectedObjects, "#A2");
  227. Assert.AreEqual (0, pg.SelectedObjects.Length, "#A3");
  228. Assert.IsNull (pg.SelectedGridItem, "A4");
  229. pg.SelectedObject = new TextBox ();
  230. Assert.IsNotNull (pg.SelectedObject, "#B1");
  231. Assert.IsNotNull (pg.SelectedObjects, "#B2");
  232. Assert.AreEqual (1, pg.SelectedObjects.Length, "#B3");
  233. Assert.IsNotNull (pg.SelectedGridItem, "B4");
  234. Assert.AreEqual (1, log.EventsRaised, "B5");
  235. Assert.AreEqual ("SelectedObjectsChanged", log.EventsJoined (";"), "B6");
  236. pg.SelectedObject = null;
  237. Assert.IsNull (pg.SelectedObject, "#C1");
  238. Assert.IsNotNull (pg.SelectedObjects, "#C2");
  239. Assert.AreEqual (0, pg.SelectedObjects.Length, "#C3");
  240. Assert.IsNull (pg.SelectedGridItem, "C4");
  241. Assert.AreEqual (2, log.EventsRaised, "C5");
  242. Assert.AreEqual ("SelectedObjectsChanged;SelectedObjectsChanged", log.EventsJoined (";"), "C6");
  243. }
  244. [Test]
  245. public void SelectedGridItem_Null ()
  246. {
  247. PropertyGrid pg = new PropertyGrid ();
  248. pg.SelectedObject = new TextBox ();
  249. Assert.IsNotNull (pg.SelectedGridItem, "#1");
  250. try {
  251. pg.SelectedGridItem = null;
  252. Assert.Fail ("#2");
  253. } catch (ArgumentException ex) {
  254. // GridItem specified to PropertyGrid.SelectedGridItem must be
  255. // a valid GridItem
  256. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#3");
  257. Assert.IsNull (ex.InnerException, "#4");
  258. Assert.IsNotNull (ex.Message, "#5");
  259. Assert.IsNull (ex.ParamName, "#6");
  260. }
  261. }
  262. [Test] // bug #79615
  263. public void SelectedObjects_Multiple ()
  264. {
  265. Button button1 = new Button ();
  266. Button button2 = new Button ();
  267. PropertyGrid pg = new PropertyGrid ();
  268. pg.SelectedObjects = new object [] { button1, button2 };
  269. Assert.IsNotNull (pg.SelectedObjects, "#1");
  270. Assert.AreEqual (2, pg.SelectedObjects.Length, "#2");
  271. Assert.AreSame (button1, pg.SelectedObjects [0], "#3");
  272. Assert.AreSame (button2, pg.SelectedObjects [1], "#4");
  273. Assert.IsNotNull (pg.SelectedObject, "#5");
  274. Assert.AreSame (button1, pg.SelectedObject, "#6");
  275. }
  276. [Test]
  277. public void SelectedObjects_Null ()
  278. {
  279. PropertyGrid pg = new PropertyGrid ();
  280. Button button1 = new Button ();
  281. pg.SelectedObjects = new object [] { button1 };
  282. Assert.IsNotNull (pg.SelectedObjects, "#A1");
  283. Assert.AreEqual (1, pg.SelectedObjects.Length, "#A2");
  284. Assert.AreSame (button1, pg.SelectedObjects [0], "#A3");
  285. Assert.AreSame (button1, pg.SelectedObject, "#A4");
  286. pg.SelectedObjects = null;
  287. Assert.IsNotNull (pg.SelectedObjects, "#B1");
  288. Assert.AreEqual (0, pg.SelectedObjects.Length, "#B2");
  289. Assert.IsNull (pg.SelectedObject, "#B3");
  290. }
  291. [Test]
  292. [ExpectedException (typeof (ArgumentException))]
  293. public void SelectedObjects_Null_Item ()
  294. {
  295. PropertyGrid pg = new PropertyGrid ();
  296. Button button1 = new Button ();
  297. pg.SelectedObjects = new object [] { button1, null };
  298. }
  299. [Test]
  300. [Category ("NotWorking")]
  301. public void PropertyGrid_MergedTest ()
  302. {
  303. PropertyGrid pg = new PropertyGrid ();
  304. pg.SelectedObjects = new object[] { new Button (), new Label () };
  305. Assert.IsNotNull (pg.SelectedGridItem, "1");
  306. Assert.AreEqual ("Accessibility", pg.SelectedGridItem.Label, "2");
  307. Assert.AreEqual (GridItemType.Category, pg.SelectedGridItem.GridItemType, "3");
  308. }
  309. [Test]
  310. [Category ("NotWorking")]
  311. public void PropertyGrid_MergedRootTest ()
  312. {
  313. object[] selected_objects = new object[] { new Button (), new Label () };
  314. PropertyGrid pg = new PropertyGrid ();
  315. pg.SelectedObjects = selected_objects;
  316. Assert.IsNotNull (pg.SelectedGridItem.Parent, "1");
  317. Assert.AreEqual ("System.Object[]", pg.SelectedGridItem.Parent.Label, "2");
  318. Assert.AreEqual (GridItemType.Root, pg.SelectedGridItem.Parent.GridItemType, "3");
  319. Assert.AreEqual (selected_objects, pg.SelectedGridItem.Parent.Value, "4");
  320. Assert.IsNull (pg.SelectedGridItem.Parent.Parent, "5");
  321. }
  322. class ArrayTest_object
  323. {
  324. int[] array;
  325. public ArrayTest_object ()
  326. {
  327. array = new int[10];
  328. for (int i = 0; i < array.Length; i ++)
  329. array[i] = array.Length - i;
  330. }
  331. public int[] Array {
  332. get { return array; }
  333. }
  334. }
  335. [Test]
  336. public void PropertyGrid_ArrayTest ()
  337. {
  338. PropertyGrid pg = new PropertyGrid ();
  339. pg.SelectedObject = new ArrayTest_object ();
  340. // selected object
  341. Assert.AreEqual ("Array", pg.SelectedGridItem.Label, "1");
  342. Assert.IsTrue (pg.SelectedGridItem.Value is Array, "2");
  343. Assert.AreEqual (10, pg.SelectedGridItem.GridItems.Count, "3");
  344. Assert.AreEqual (GridItemType.Property, pg.SelectedGridItem.GridItemType, "4");
  345. }
  346. [Test]
  347. public void PropertyGrid_ArrayParentTest ()
  348. {
  349. PropertyGrid pg = new PropertyGrid ();
  350. pg.SelectedObject = new ArrayTest_object ();
  351. // parent
  352. Assert.IsNotNull (pg.SelectedGridItem.Parent, "1");
  353. Assert.AreEqual ("Misc", pg.SelectedGridItem.Parent.Label, "2");
  354. Assert.AreEqual (GridItemType.Category, pg.SelectedGridItem.Parent.GridItemType, "3");
  355. Assert.AreEqual (1, pg.SelectedGridItem.Parent.GridItems.Count, "4");
  356. }
  357. [Test]
  358. public void PropertyGrid_ArrayRootTest ()
  359. {
  360. ArrayTest_object obj = new ArrayTest_object ();
  361. PropertyGrid pg = new PropertyGrid ();
  362. pg.SelectedObject = obj;
  363. // grandparent
  364. Assert.IsNotNull (pg.SelectedGridItem.Parent.Parent, "1");
  365. Assert.AreEqual (typeof(ArrayTest_object).ToString(), pg.SelectedGridItem.Parent.Parent.Label, "2");
  366. Assert.AreEqual (GridItemType.Root, pg.SelectedGridItem.Parent.Parent.GridItemType, "3");
  367. Assert.AreEqual (1, pg.SelectedGridItem.Parent.Parent.GridItems.Count, "4");
  368. Assert.AreEqual (obj, pg.SelectedGridItem.Parent.Parent.Value, "5");
  369. Assert.IsNull (pg.SelectedGridItem.Parent.Parent.Parent, "6");
  370. }
  371. [Test]
  372. public void PropertyGrid_ArrayChildrenTest ()
  373. {
  374. PropertyGrid pg = new PropertyGrid ();
  375. pg.SelectedObject = new ArrayTest_object ();
  376. // children
  377. Assert.AreEqual ("[0]", pg.SelectedGridItem.GridItems[0].Label, "1");
  378. Assert.AreEqual (GridItemType.Property, pg.SelectedGridItem.GridItems[0].GridItemType, "2");
  379. Assert.AreEqual (10, pg.SelectedGridItem.GridItems[0].Value, "3");
  380. Assert.AreEqual (0, pg.SelectedGridItem.GridItems[0].GridItems.Count, "4");
  381. }
  382. [Test]
  383. public void PropertyGrid_ItemSelectTest ()
  384. {
  385. PropertyGrid pg = new PropertyGrid ();
  386. pg.SelectedObject = new ArrayTest_object ();
  387. // the selected grid item is the "Array" property item.
  388. GridItem array_item = pg.SelectedGridItem;
  389. GridItem misc_item = array_item.Parent;
  390. GridItem root_item = misc_item.Parent;
  391. Assert.AreEqual (array_item, pg.SelectedGridItem, "1");
  392. Assert.IsTrue (misc_item.Select (), "2");
  393. Assert.AreEqual (misc_item, pg.SelectedGridItem, "3");
  394. Assert.IsTrue (array_item.Select (), "4");
  395. Assert.AreEqual (array_item, pg.SelectedGridItem, "5");
  396. Assert.IsFalse (root_item.Select (), "6");
  397. Assert.AreEqual (array_item, pg.SelectedGridItem, "7");
  398. }
  399. }
  400. }