UpDownTest.cs 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. //
  2. //
  3. //
  4. // Authors:
  5. // Alexander Olk ([email protected])
  6. // Gert Driesen ([email protected])
  7. //
  8. using System;
  9. using System.Collections;
  10. using System.Drawing;
  11. using System.Globalization;
  12. using System.Windows.Forms;
  13. using NUnit.Framework;
  14. namespace MonoTests.System.Windows.Forms
  15. {
  16. [TestFixture]
  17. public class UpDownTest
  18. {
  19. [SetUp]
  20. public void SetUp ()
  21. {
  22. Reset ();
  23. }
  24. private void Reset ()
  25. {
  26. selected_item_changed = 0;
  27. text_changed = 0;
  28. value_changed = 0;
  29. }
  30. [Test]
  31. public void UpDownActiveControlTest ()
  32. {
  33. NumericUpDown n1 = new NumericUpDown ();
  34. Assert.IsNull (n1.ActiveControl, "1");
  35. }
  36. [Test]
  37. public void UpDownBasePropTest ()
  38. {
  39. NumericUpDown n1 = new NumericUpDown ();
  40. Assert.AreEqual (BorderStyle.Fixed3D, n1.BorderStyle, "#1");
  41. Assert.AreEqual (true, n1.InterceptArrowKeys, "#2");
  42. Assert.AreEqual (LeftRightAlignment.Right, n1.UpDownAlign, "#3");
  43. }
  44. [Test]
  45. public void ToStringTest ()
  46. {
  47. NumericUpDown n1 = new NumericUpDown ();
  48. Assert.AreEqual ("System.Windows.Forms.NumericUpDown, Minimum = 0, Maximum = 100", n1.ToString (), "1");
  49. n1.Minimum = 0.33m;
  50. n1.Maximum = 100.33m;
  51. Assert.AreEqual (string.Format (CultureInfo.CurrentCulture,
  52. "System.Windows.Forms.NumericUpDown, Minimum = {0}, Maximum = {1}",
  53. 0.33, 100.33), n1.ToString (), "2");
  54. }
  55. [Test] // bug #80620
  56. public void NumericUpDownClientRectangle_Borders ()
  57. {
  58. NumericUpDown nud = new NumericUpDown ();
  59. nud.CreateControl ();
  60. Assert.AreEqual (nud.ClientRectangle, new NumericUpDown ().ClientRectangle);
  61. }
  62. [Test]
  63. public void NumericUpDownStandardPropTest ()
  64. {
  65. NumericUpDown n1 = new NumericUpDown ();
  66. Assert.AreEqual (100, n1.Maximum, "#4");
  67. Assert.AreEqual (0, n1.Minimum, "#5");
  68. Assert.AreEqual (0, n1.Value, "#6");
  69. Assert.AreEqual (0, n1.DecimalPlaces, "#7");
  70. Assert.IsFalse (n1.Hexadecimal, "#8");
  71. Assert.IsFalse (n1.ThousandsSeparator, "#9");
  72. Assert.AreEqual (1, n1.Increment, "#10");
  73. }
  74. [Test]
  75. public void NumericUpDownEnhancedPropTest ()
  76. {
  77. NumericUpDown n1 = new NumericUpDown ();
  78. n1.Minimum = 200;
  79. Assert.AreEqual (200, n1.Maximum, "#11");
  80. Assert.AreEqual (200, n1.Value, "#12");
  81. n1.Minimum = 100;
  82. n1.Maximum = 50;
  83. Assert.AreEqual (50, n1.Minimum, "#13");
  84. n1.Minimum = 0;
  85. n1.Maximum = 100;
  86. n1.Value = 90;
  87. n1.Maximum = 50;
  88. Assert.AreEqual (50, n1.Value, "#14");
  89. n1.Minimum = 0;
  90. n1.Maximum = 100;
  91. n1.Value = 90;
  92. n1.DownButton ();
  93. Assert.AreEqual (89, n1.Value, "#15");
  94. n1.UpButton ();
  95. Assert.AreEqual (90, n1.Value, "#16");
  96. }
  97. [Test]
  98. [Category ("NotWorking")]
  99. public void NumericUpDownEditValidateTest ()
  100. {
  101. NumericNew nn = new NumericNew ();
  102. Assert.IsTrue (nn.update_edit_text_called, "#17");
  103. Assert.IsFalse (nn.user_edit, "#18");
  104. nn.Reset ();
  105. nn.user_edit = true;
  106. nn.Text = "10";
  107. Assert.IsTrue (nn.validate_edit_text_called, "#19");
  108. Assert.IsTrue (nn.update_edit_text_called, "#20");
  109. nn.Reset ();
  110. nn.user_edit = false;
  111. nn.Text = "11";
  112. Assert.IsTrue (nn.validate_edit_text_called, "#21");
  113. Assert.IsTrue (nn.update_edit_text_called, "#22");
  114. nn.DownButton ();
  115. Assert.AreEqual (10, nn.Value, "#23");
  116. }
  117. [Test]
  118. [Category ("NotWorking")]
  119. public void NumericUpDown_BeginInit ()
  120. {
  121. NumericNew nud = new NumericNew ();
  122. nud.TextChanged += new EventHandler (NumericUpDown_TextChanged);
  123. nud.ValueChanged += new EventHandler (NumericUpDown_ValueChanged);
  124. Assert.AreEqual (2, nud.CallStack.Count, "#A1");
  125. Assert.AreEqual ("ValidateEditText", nud.CallStack [0], "#A2");
  126. Assert.AreEqual ("UpdateEditText", nud.CallStack [1], "#A3");
  127. Assert.AreEqual (0, nud.Value, "#A4");
  128. Assert.AreEqual (2, nud.CallStack.Count, "#A5");
  129. Assert.AreEqual (0, value_changed, "#A6");
  130. Assert.AreEqual (0, text_changed, "#A7");
  131. nud.BeginInit ();
  132. Assert.AreEqual (2, nud.CallStack.Count, "#B1");
  133. nud.Value = 10;
  134. Assert.AreEqual (3, nud.CallStack.Count, "#B2");
  135. Assert.AreEqual ("UpdateEditText", nud.CallStack [2], "#B3");
  136. Assert.AreEqual ("0", nud.Text, "#B4");
  137. Assert.AreEqual (10, nud.Value, "#B5");
  138. Assert.AreEqual (3, nud.CallStack.Count, "#B6");
  139. Assert.AreEqual (1, value_changed, "#B7");
  140. Assert.AreEqual (0, text_changed, "#B8");
  141. nud.EndInit ();
  142. Assert.AreEqual (4, nud.CallStack.Count, "#B9");
  143. Assert.AreEqual ("UpdateEditText", nud.CallStack [3], "#B10");
  144. Assert.AreEqual (1, text_changed, "#B11");
  145. Assert.AreEqual ("10", nud.Text, "#B12");
  146. Assert.AreEqual (10, nud.Value, "#B13");
  147. Assert.AreEqual (4, nud.CallStack.Count, "#B14");
  148. Assert.AreEqual (1, value_changed, "#B15");
  149. Assert.AreEqual (1, text_changed, "#B16");
  150. // multiple calls to BeginInit are undone by a single EndInit call
  151. nud.BeginInit ();
  152. nud.BeginInit ();
  153. Assert.AreEqual (4, nud.CallStack.Count, "#C1");
  154. nud.Value = 20;
  155. Assert.AreEqual (5, nud.CallStack.Count, "#C2");
  156. Assert.AreEqual ("UpdateEditText", nud.CallStack [4], "#C3");
  157. Assert.AreEqual ("10", nud.Text, "#C4");
  158. Assert.AreEqual (20, nud.Value, "#C5");
  159. Assert.AreEqual (5, nud.CallStack.Count, "#C6");
  160. Assert.AreEqual (2, value_changed, "#C7");
  161. Assert.AreEqual (1, text_changed, "#C8");
  162. nud.EndInit ();
  163. Assert.AreEqual (6, nud.CallStack.Count, "#C9");
  164. Assert.AreEqual ("UpdateEditText", nud.CallStack [5], "#C10");
  165. Assert.AreEqual (2, text_changed, "#C11");
  166. Assert.AreEqual ("20", nud.Text, "#C12");
  167. Assert.AreEqual (20, nud.Value, "#C13");
  168. Assert.AreEqual (6, nud.CallStack.Count, "#C14");
  169. Assert.AreEqual (2, value_changed, "#C15");
  170. Assert.AreEqual (2, text_changed, "#C16");
  171. }
  172. [Test]
  173. [Category ("NotWorking")]
  174. public void NumericUpDown_ChangingText ()
  175. {
  176. NumericNew nud = new NumericNew ();
  177. nud.TextChanged += new EventHandler (NumericUpDown_TextChanged);
  178. nud.ValueChanged += new EventHandler (NumericUpDown_ValueChanged);
  179. Assert.IsFalse (nud.changing_text, "#A1");
  180. Assert.IsFalse (nud.user_edit, "#A2");
  181. Assert.AreEqual (0, text_changed, "#A3");
  182. nud.Text = "1";
  183. Assert.IsFalse (nud.changing_text, "#B1");
  184. Assert.IsFalse (nud.user_edit, "#B2");
  185. Assert.AreEqual (5, nud.CallStack.Count, "#B3");
  186. Assert.AreEqual (1, text_changed, "#B4");
  187. nud.changing_text = true;
  188. nud.Text = "2";
  189. Assert.IsFalse (nud.changing_text, "#C1");
  190. Assert.IsFalse (nud.user_edit, "#C2");
  191. Assert.AreEqual (5, nud.CallStack.Count, "#C3");
  192. Assert.AreEqual (2, text_changed, "#C4");
  193. }
  194. [Test]
  195. [Category ("NotWorking")]
  196. public void NumericUpDown_EndInit ()
  197. {
  198. NumericNew nud = new NumericNew ();
  199. nud.TextChanged += new EventHandler (NumericUpDown_TextChanged);
  200. nud.ValueChanged += new EventHandler (NumericUpDown_ValueChanged);
  201. Assert.AreEqual (2, nud.CallStack.Count, "#A1");
  202. Assert.AreEqual ("ValidateEditText", nud.CallStack [0], "#A2");
  203. Assert.AreEqual ("UpdateEditText", nud.CallStack [1], "#A3");
  204. Assert.AreEqual (0, nud.Value, "#A4");
  205. Assert.AreEqual (2, nud.CallStack.Count, "#A5");
  206. Assert.AreEqual (0, value_changed, "#A6");
  207. Assert.AreEqual (0, text_changed, "#A7");
  208. // EndInit without corresponding BeginInit
  209. nud.EndInit ();
  210. Assert.AreEqual (3, nud.CallStack.Count, "#B1");
  211. Assert.AreEqual ("UpdateEditText", nud.CallStack [1], "#B2");
  212. Assert.AreEqual (0, nud.Value, "#B3");
  213. Assert.AreEqual (3, nud.CallStack.Count, "#B4");
  214. Assert.AreEqual (0, value_changed, "#B5");
  215. Assert.AreEqual (0, text_changed, "#B6");
  216. }
  217. [Test]
  218. [Category ("NotWorking")]
  219. public void NumericUpDown_UpButton ()
  220. {
  221. NumericNew nud = new NumericNew ();
  222. nud.TextChanged += new EventHandler (NumericUpDown_TextChanged);
  223. nud.ValueChanged += new EventHandler (NumericUpDown_ValueChanged);
  224. nud.UpButton ();
  225. Assert.AreEqual (3, nud.CallStack.Count, "#A1");
  226. Assert.AreEqual ("ValidateEditText", nud.CallStack [0], "#A2");
  227. Assert.AreEqual ("UpdateEditText", nud.CallStack [1], "#A3");
  228. Assert.AreEqual ("UpdateEditText", nud.CallStack [2], "#A4");
  229. Assert.AreEqual (1, value_changed, "#A5");
  230. Assert.AreEqual (1, nud.Value, "#A6");
  231. Assert.AreEqual (3, nud.CallStack.Count, "#A7");
  232. Assert.AreEqual (1, value_changed, "#A8");
  233. Assert.AreEqual (1, text_changed, "#A9");
  234. nud.Text = "5";
  235. nud.UpButton ();
  236. Assert.AreEqual (7, nud.CallStack.Count, "#B1");
  237. Assert.AreEqual ("ValidateEditText", nud.CallStack [3], "#B2");
  238. Assert.AreEqual ("UpdateEditText", nud.CallStack [4], "#B3");
  239. Assert.AreEqual ("UpdateEditText", nud.CallStack [5], "#B4");
  240. Assert.AreEqual ("UpdateEditText", nud.CallStack [6], "#B5");
  241. Assert.AreEqual (3, value_changed, "#B6");
  242. Assert.AreEqual (6, nud.Value, "#B7");
  243. Assert.AreEqual ("6", nud.Text, "#B8");
  244. Assert.AreEqual (7, nud.CallStack.Count, "#B9");
  245. Assert.AreEqual (3, value_changed, "#B10");
  246. Assert.AreEqual (3, text_changed, "#B11");
  247. nud.Text = "7";
  248. nud.user_edit = true;
  249. nud.UpButton ();
  250. Assert.AreEqual (11, nud.CallStack.Count, "#C1");
  251. Assert.AreEqual ("ValidateEditText", nud.CallStack [7], "#C2");
  252. Assert.AreEqual ("UpdateEditText", nud.CallStack [8], "#C3");
  253. Assert.AreEqual ("UpdateEditText", nud.CallStack [9], "#C4");
  254. Assert.AreEqual ("UpdateEditText", nud.CallStack [10], "#C5");
  255. Assert.AreEqual (5, value_changed, "#C6");
  256. Assert.AreEqual (8, nud.Value, "#C7");
  257. Assert.AreEqual (11, nud.CallStack.Count, "#C8");
  258. Assert.AreEqual (5, value_changed, "#C9");
  259. Assert.AreEqual (5, text_changed, "#C10");
  260. nud.user_edit = false;
  261. Assert.AreEqual ("8", nud.Text, "#C11");
  262. Assert.AreEqual (11, nud.CallStack.Count, "#C12");
  263. Assert.AreEqual (5, value_changed, "#C13");
  264. Assert.AreEqual (5, text_changed, "#C14");
  265. nud.user_edit = false;
  266. nud.Text = "555";
  267. nud.user_edit = true;
  268. nud.UpButton ();
  269. Assert.AreEqual (14, nud.CallStack.Count, "#D1");
  270. Assert.AreEqual ("ValidateEditText", nud.CallStack [11], "#D2");
  271. Assert.AreEqual ("UpdateEditText", nud.CallStack [12], "#D3");
  272. Assert.AreEqual ("UpdateEditText", nud.CallStack [13], "#D4");
  273. Assert.AreEqual (6, value_changed, "#D5");
  274. Assert.AreEqual (100, nud.Value, "#D6");
  275. Assert.AreEqual (14, nud.CallStack.Count, "#D7");
  276. Assert.AreEqual (6, value_changed, "#D8");
  277. Assert.AreEqual (7, text_changed, "#D9");
  278. nud.user_edit = false;
  279. Assert.AreEqual ("100", nud.Text, "#D10");
  280. Assert.AreEqual (14, nud.CallStack.Count, "#D11");
  281. Assert.AreEqual (6, value_changed, "#D12");
  282. Assert.AreEqual (7, text_changed, "#D13");
  283. }
  284. [Test]
  285. [Category ("NotWorking")]
  286. public void NumericUpDown_Value ()
  287. {
  288. // obtain Value when UserEdit is false
  289. NumericNew nud = new NumericNew ();
  290. nud.TextChanged += new EventHandler (NumericUpDown_TextChanged);
  291. nud.ValueChanged += new EventHandler (NumericUpDown_ValueChanged);
  292. Assert.AreEqual (2, nud.CallStack.Count, "#A1");
  293. Assert.AreEqual ("ValidateEditText", nud.CallStack [0], "#A2");
  294. Assert.AreEqual ("UpdateEditText", nud.CallStack [1], "#A3");
  295. Assert.AreEqual (0, nud.Value, "#A4");
  296. Assert.AreEqual (2, nud.CallStack.Count, "#A5");
  297. Assert.AreEqual (0, value_changed, "#A6");
  298. Assert.AreEqual (0, text_changed, "#A7");
  299. // obtain Value when UserEdit is true
  300. nud.user_edit = true;
  301. Assert.AreEqual (2, nud.CallStack.Count, "#B1");
  302. Assert.AreEqual (0, nud.Value, "#B2");
  303. Assert.AreEqual (4, nud.CallStack.Count, "#B3");
  304. Assert.AreEqual ("ValidateEditText", nud.CallStack [2], "#B4");
  305. Assert.AreEqual ("UpdateEditText", nud.CallStack [3], "#B5");
  306. Assert.AreEqual (0, value_changed, "#B6");
  307. Assert.AreEqual (0, text_changed, "#B7");
  308. // modify Value when UserEdit is false
  309. nud.user_edit = false;
  310. nud.Value = 10;
  311. Assert.AreEqual (5, nud.CallStack.Count, "#C1");
  312. Assert.AreEqual ("UpdateEditText", nud.CallStack [4], "#C2");
  313. Assert.AreEqual (1, value_changed, "#C3");
  314. Assert.AreEqual (1, text_changed, "#C4");
  315. Assert.AreEqual (10, nud.Value, "#C5");
  316. Assert.AreEqual (5, nud.CallStack.Count, "#C6");
  317. Assert.AreEqual (1, value_changed, "#C7");
  318. Assert.AreEqual (1, text_changed, "#C8");
  319. // setting same Value
  320. nud.Value = 10;
  321. Assert.AreEqual (5, nud.CallStack.Count, "#D1");
  322. Assert.AreEqual (1, value_changed, "#D2");
  323. Assert.AreEqual (10, nud.Value, "#D3");
  324. Assert.AreEqual (5, nud.CallStack.Count, "#D4");
  325. Assert.AreEqual (1, value_changed, "#D5");
  326. Assert.AreEqual (1, text_changed, "#D6");
  327. // modify Value when UserEdit is true
  328. nud.user_edit = true;
  329. nud.Value = 20;
  330. Assert.AreEqual (7, nud.CallStack.Count, "#E1");
  331. Assert.AreEqual ("UpdateEditText", nud.CallStack [5], "#E2");
  332. Assert.AreEqual ("UpdateEditText", nud.CallStack [6], "#E3");
  333. Assert.AreEqual (3, value_changed, "#E4");
  334. Assert.AreEqual (1, text_changed, "#E5");
  335. nud.user_edit = false; // reset UserEdit to avoid Value being parsed from Text
  336. Assert.AreEqual (10, nud.Value, "#E6");
  337. Assert.AreEqual (7, nud.CallStack.Count, "#E7");
  338. Assert.AreEqual (3, value_changed, "#E8");
  339. Assert.AreEqual (1, text_changed, "#E9");
  340. }
  341. [Test]
  342. [Category ("NotWorking")]
  343. public void NumericUpDown_Value_Invalid ()
  344. {
  345. NumericNew nud = new NumericNew ();
  346. try {
  347. nud.Value = 1000;
  348. Assert.Fail ("#A1");
  349. #if NET_2_0
  350. } catch (ArgumentOutOfRangeException ex) {
  351. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  352. Assert.IsNotNull (ex.Message, "#A3");
  353. Assert.IsNotNull (ex.ParamName, "#A4");
  354. Assert.AreEqual ("Value", ex.ParamName, "#A5");
  355. Assert.IsNull (ex.InnerException, "#A6");
  356. }
  357. #else
  358. } catch (ArgumentException ex) {
  359. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
  360. Assert.IsNotNull (ex.Message, "#A3");
  361. Assert.IsNull (ex.ParamName, "#A4");
  362. Assert.IsNull (ex.InnerException, "#A5");
  363. }
  364. #endif
  365. try {
  366. nud.Value = 1000;
  367. Assert.Fail ("#B1");
  368. #if NET_2_0
  369. } catch (ArgumentOutOfRangeException ex) {
  370. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  371. Assert.IsNotNull (ex.Message, "#B3");
  372. Assert.IsNotNull (ex.ParamName, "#B4");
  373. Assert.AreEqual ("Value", ex.ParamName, "#B5");
  374. Assert.IsNull (ex.InnerException, "#B6");
  375. }
  376. #else
  377. } catch (ArgumentException ex) {
  378. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
  379. Assert.IsNotNull (ex.Message, "#B3");
  380. Assert.IsNull (ex.ParamName, "#B4");
  381. Assert.IsNull (ex.InnerException, "#B5");
  382. }
  383. #endif
  384. try {
  385. nud.Value = -1000;
  386. Assert.Fail ("#C1");
  387. #if NET_2_0
  388. } catch (ArgumentOutOfRangeException ex) {
  389. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
  390. Assert.IsNotNull (ex.Message, "#C3");
  391. Assert.IsNotNull (ex.ParamName, "#C4");
  392. Assert.AreEqual ("Value", ex.ParamName, "#C5");
  393. Assert.IsNull (ex.InnerException, "#C6");
  394. }
  395. #else
  396. } catch (ArgumentException ex) {
  397. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
  398. Assert.IsNotNull (ex.Message, "#C3");
  399. Assert.IsNull (ex.ParamName, "#C4");
  400. Assert.IsNull (ex.InnerException, "#C5");
  401. }
  402. #endif
  403. nud.BeginInit ();
  404. nud.Value = 1000;
  405. Assert.AreEqual (1000, nud.Value, "#D1");
  406. nud.Value = 1000;
  407. Assert.AreEqual (1000, nud.Value, "#D2");
  408. nud.Value = -1000;
  409. Assert.AreEqual (-1000, nud.Value, "#D3");
  410. nud.EndInit ();
  411. try {
  412. nud.Value = -1000;
  413. Assert.Fail ("#E1");
  414. #if NET_2_0
  415. } catch (ArgumentOutOfRangeException ex) {
  416. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#E2");
  417. Assert.IsNotNull (ex.Message, "#E3");
  418. Assert.IsNotNull (ex.ParamName, "#E4");
  419. Assert.AreEqual ("Value", ex.ParamName, "#E5");
  420. Assert.IsNull (ex.InnerException, "#E6");
  421. }
  422. #else
  423. } catch (ArgumentException ex) {
  424. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");
  425. Assert.IsNotNull (ex.Message, "#E3");
  426. Assert.IsNull (ex.ParamName, "#E4");
  427. Assert.IsNull (ex.InnerException, "#E5");
  428. }
  429. #endif
  430. }
  431. void NumericUpDown_TextChanged (object sender, EventArgs e)
  432. {
  433. text_changed++;
  434. }
  435. void NumericUpDown_ValueChanged (object sender, EventArgs e)
  436. {
  437. value_changed++;
  438. }
  439. public class NumericNew : NumericUpDown
  440. {
  441. public bool update_edit_text_called = false;
  442. public bool validate_edit_text_called = false;
  443. private ArrayList _callStack = new ArrayList ();
  444. public ArrayList CallStack {
  445. get { return _callStack; }
  446. }
  447. public bool user_edit {
  448. get {
  449. return UserEdit;
  450. }
  451. set {
  452. UserEdit = value;
  453. }
  454. }
  455. public bool changing_text {
  456. get {
  457. return ChangingText;
  458. }
  459. set {
  460. ChangingText = value;
  461. }
  462. }
  463. public void Reset ()
  464. {
  465. update_edit_text_called = false;
  466. validate_edit_text_called = false;
  467. _callStack.Clear ();
  468. }
  469. protected override void UpdateEditText ()
  470. {
  471. _callStack.Add ("UpdateEditText");
  472. update_edit_text_called = true;
  473. base.UpdateEditText ();
  474. }
  475. protected override void ValidateEditText ()
  476. {
  477. _callStack.Add ("ValidateEditText");
  478. validate_edit_text_called = true;
  479. base.ValidateEditText ();
  480. }
  481. }
  482. [Test]
  483. public void DomainUpDownStandardPropTest ()
  484. {
  485. DomainUpDown d1 = new DomainUpDown ();
  486. Assert.AreEqual (0, d1.Items.Count, "#24");
  487. Assert.AreEqual (false, d1.Sorted, "#25");
  488. Assert.AreEqual (false, d1.Wrap, "#26");
  489. Assert.AreEqual ("System.Windows.Forms.DomainUpDown, Items.Count: 0, SelectedIndex: -1", d1.ToString (), "#26a");
  490. d1.Items.Add ("item1");
  491. d1.Items.Add ("item2");
  492. d1.Items.Add ("item3");
  493. d1.Items.Add ("item4");
  494. Assert.AreEqual (4, d1.Items.Count, "#27");
  495. Assert.AreEqual (-1, d1.SelectedIndex, "#28");
  496. Assert.AreEqual (null, d1.SelectedItem, "#29");
  497. }
  498. [Test]
  499. [Category ("NotWorking")]
  500. public void DomainUpDownEnhancedPropTest ()
  501. {
  502. DomainUpDown d1 = new DomainUpDown ();
  503. d1.Items.Add ("item1");
  504. d1.Items.Add ("item2");
  505. d1.Items.Add ("item3");
  506. d1.Items.Add ("item4");
  507. d1.SelectedIndex = 3;
  508. Assert.AreEqual (3, d1.SelectedIndex, "#30");
  509. d1.Items.Remove ("item1");
  510. Assert.AreEqual (3, d1.Items.Count, "#31");
  511. Assert.AreEqual (2, d1.SelectedIndex, "#32");
  512. d1.Items.Remove ("item4");
  513. Assert.AreEqual (2, d1.Items.Count, "#33");
  514. Assert.AreEqual (-1, d1.SelectedIndex, "#34");
  515. Assert.AreEqual (null, d1.SelectedItem, "#35");
  516. // strange, ArgumentOutOfRangeException on windows
  517. // d1.SelectedIndex = 1;
  518. //Assert.AreEqual (1, d1.SelectedIndex, "#36");
  519. d1.Items.Clear ();
  520. Assert.AreEqual (0, d1.Items.Count, "#37");
  521. Assert.AreEqual (-1, d1.SelectedIndex, "#38");
  522. Assert.AreEqual (null, d1.SelectedItem, "#39");
  523. d1.Items.Add ("zitem1");
  524. d1.Items.Add ("oitem2");
  525. d1.Items.Add ("mitem3");
  526. d1.Items.Add ("aitem4");
  527. d1.SelectedIndex = 0;
  528. Assert.AreEqual ("zitem1", d1.SelectedItem.ToString (), "#40");
  529. d1.Sorted = true;
  530. Assert.AreEqual ("aitem4", d1.SelectedItem.ToString (), "#41");
  531. Assert.AreEqual ("aitem4", d1.Items[0].ToString (), "#42");
  532. d1.Items.Clear ();
  533. d1.Items.Add ("item1");
  534. d1.Items.Add ("item2");
  535. d1.Items.Add ("item3");
  536. d1.Items.Add ("item4");
  537. d1.SelectedIndex = 0;
  538. d1.UpButton ();
  539. Assert.AreEqual ("item1", d1.SelectedItem.ToString (), "#43");
  540. d1.DownButton ();
  541. Assert.AreEqual ("item2", d1.SelectedItem.ToString (), "#44");
  542. d1.SelectedIndex = 0;
  543. d1.Wrap = true;
  544. d1.UpButton ();
  545. Assert.AreEqual ("item4", d1.SelectedItem.ToString (), "#45");
  546. d1.DownButton ();
  547. Assert.AreEqual ("item1", d1.SelectedItem.ToString (), "#46");
  548. d1.Text = "item3";
  549. Assert.AreEqual (null, d1.SelectedItem, "#47");
  550. }
  551. [Test] // bug #80620
  552. public void DomainUpDownClientRectangle_Borders ()
  553. {
  554. DomainUpDown dud = new DomainUpDown ();
  555. dud.CreateControl ();
  556. Assert.AreEqual (dud.ClientRectangle, new DomainUpDown ().ClientRectangle);
  557. }
  558. [Test]
  559. [Category ("NotWorking")]
  560. public void DomainUpDown_SelectedIndex ()
  561. {
  562. MockDomainUpDown dud = new MockDomainUpDown ();
  563. dud.SelectedItemChanged += new EventHandler (DomainUpDown_SelectedItemChanged);
  564. dud.TextChanged += new EventHandler (DomainUpDown_TextChanged);
  565. Assert.AreEqual (1, dud.CallStack.Count, "#A1");
  566. Assert.AreEqual ("set_Text: (0)", dud.CallStack [0], "#A2");
  567. Assert.AreEqual (0, selected_item_changed, "#A3");
  568. Assert.AreEqual (0, text_changed, "#A4");
  569. Assert.AreEqual (-1, dud.SelectedIndex, "#A5");
  570. string itemA = "itemA";
  571. dud.Items.Add (itemA);
  572. Assert.AreEqual (1, dud.CallStack.Count, "#B1");
  573. Assert.AreEqual (0, selected_item_changed, "#B2");
  574. Assert.AreEqual (0, text_changed, "#B3");
  575. Assert.AreEqual (-1, dud.SelectedIndex, "#B4");
  576. dud.SelectedIndex = 0;
  577. Assert.AreEqual (4, dud.CallStack.Count, "#C1");
  578. Assert.AreEqual ("UpdateEditText", dud.CallStack [1], "#C2");
  579. Assert.AreEqual ("set_Text:itemA (5)", dud.CallStack [2], "#C3");
  580. Assert.AreEqual ("OnChanged", dud.CallStack [3], "#C4");
  581. Assert.AreEqual (1, selected_item_changed, "#C5");
  582. Assert.AreEqual (1, text_changed, "#C6");
  583. Assert.AreEqual (0, dud.SelectedIndex, "#C7");
  584. dud.SelectedIndex = 0;
  585. Assert.AreEqual (4, dud.CallStack.Count, "#D1");
  586. Assert.AreEqual (1, selected_item_changed, "#D2");
  587. Assert.AreEqual (1, text_changed, "#D3");
  588. Assert.AreEqual (0, dud.SelectedIndex, "#D4");
  589. dud.SelectedIndex = -1;
  590. Assert.AreEqual (4, dud.CallStack.Count, "#E1");
  591. Assert.AreEqual (1, selected_item_changed, "#E2");
  592. Assert.AreEqual (1, text_changed, "#E3");
  593. Assert.AreEqual (-1, dud.SelectedIndex, "#E4");
  594. dud.SelectedIndex = 0;
  595. Assert.AreEqual (6, dud.CallStack.Count, "#F1");
  596. Assert.AreEqual ("UpdateEditText", dud.CallStack [4], "#F2");
  597. Assert.AreEqual ("set_Text:itemA (5)", dud.CallStack [5], "#F3");
  598. Assert.AreEqual (1, selected_item_changed, "#F4");
  599. Assert.AreEqual (1, text_changed, "#F5");
  600. Assert.AreEqual (0, dud.SelectedIndex, "#F6");
  601. string itemAbis = "itemA";
  602. dud.Items.Add (itemAbis);
  603. Assert.AreEqual (6, dud.CallStack.Count, "#G1");
  604. Assert.AreEqual (1, selected_item_changed, "#G2");
  605. Assert.AreEqual (1, text_changed, "#G3");
  606. Assert.AreEqual (0, dud.SelectedIndex, "#G4");
  607. dud.SelectedIndex = 1;
  608. Assert.AreEqual (8, dud.CallStack.Count, "#H1");
  609. Assert.AreEqual ("UpdateEditText", dud.CallStack [6], "#H2");
  610. Assert.AreEqual ("set_Text:itemA (5)", dud.CallStack [7], "#H3");
  611. Assert.AreEqual (1, selected_item_changed, "#H4");
  612. Assert.AreEqual (1, text_changed, "#H5");
  613. Assert.AreEqual (1, dud.SelectedIndex, "#H6");
  614. string itemB = "itemB";
  615. dud.Items.Add (itemB);
  616. Assert.AreEqual (8, dud.CallStack.Count, "#I1");
  617. Assert.AreEqual (1, selected_item_changed, "#I2");
  618. Assert.AreEqual (1, text_changed, "#I3");
  619. Assert.AreEqual (1, dud.SelectedIndex, "#I4");
  620. dud.SelectedIndex = 2;
  621. Assert.AreEqual (11, dud.CallStack.Count, "#J1");
  622. Assert.AreEqual ("UpdateEditText", dud.CallStack [8], "#J2");
  623. Assert.AreEqual ("set_Text:itemB (5)", dud.CallStack [9], "#J3");
  624. Assert.AreEqual ("OnChanged", dud.CallStack [10], "#J4");
  625. Assert.AreEqual (2, selected_item_changed, "#J5");
  626. Assert.AreEqual (2, text_changed, "#J6");
  627. Assert.AreEqual (2, dud.SelectedIndex, "#J7");
  628. }
  629. [Test]
  630. [Category ("NotWorking")]
  631. public void DomainUpDown_Items_Add ()
  632. {
  633. MockItem itemA = new MockItem ("itemA");
  634. MockItem itemB = new MockItem ("itemB");
  635. MockItem itemC = new MockItem ("itemC");
  636. MockDomainUpDown dud = new MockDomainUpDown ();
  637. dud.SelectedItemChanged += new EventHandler (DomainUpDown_SelectedItemChanged);
  638. dud.TextChanged += new EventHandler (DomainUpDown_TextChanged);
  639. dud.Reset ();
  640. dud.Items.Add (itemA);
  641. Assert.AreEqual (0, dud.CallStack.Count, "#A1");
  642. Assert.AreEqual (0, selected_item_changed, "#A2");
  643. Assert.AreEqual (0, text_changed, "#A3");
  644. Assert.AreEqual (-1, dud.SelectedIndex, "#A4");
  645. Assert.AreEqual (string.Empty, dud.Text, "#A5");
  646. Assert.AreEqual (1, dud.Items.Count, "#A6");
  647. Assert.AreSame (itemA, dud.Items [0], "#A7");
  648. dud.Items.Add (itemC);
  649. Assert.AreEqual (0, dud.CallStack.Count, "#B1");
  650. Assert.AreEqual (0, selected_item_changed, "#B2");
  651. Assert.AreEqual (0, text_changed, "#B3");
  652. Assert.AreEqual (-1, dud.SelectedIndex, "#B4");
  653. Assert.AreEqual (string.Empty, dud.Text, "#B5");
  654. Assert.AreEqual (2, dud.Items.Count, "#B6");
  655. Assert.AreSame (itemC, dud.Items [1], "#B7");
  656. dud.Items.Add (itemA);
  657. Assert.AreEqual (0, dud.CallStack.Count, "#C1");
  658. Assert.AreEqual (0, selected_item_changed, "#C2");
  659. Assert.AreEqual (0, text_changed, "#C3");
  660. Assert.AreEqual (-1, dud.SelectedIndex, "#C4");
  661. Assert.AreEqual (string.Empty, dud.Text, "#C5");
  662. Assert.AreEqual (3, dud.Items.Count, "#C6");
  663. Assert.AreSame (itemA, dud.Items [2], "#C7");
  664. dud.Sorted = true;
  665. Assert.AreEqual (3, dud.Items.Count, "#D1");
  666. Assert.AreSame (itemA, dud.Items [0], "#D2");
  667. Assert.AreSame (itemA, dud.Items [1], "#D3");
  668. Assert.AreSame (itemC, dud.Items [2], "#D4");
  669. // adding item causes re-sort
  670. dud.Items.Add (itemB);
  671. Assert.AreEqual (0, dud.CallStack.Count, "#E1");
  672. Assert.AreEqual (0, selected_item_changed, "#E2");
  673. Assert.AreEqual (0, text_changed, "#E3");
  674. Assert.AreEqual (-1, dud.SelectedIndex, "#E4");
  675. Assert.AreEqual (string.Empty, dud.Text, "#E5");
  676. Assert.AreEqual (4, dud.Items.Count, "#E6");
  677. Assert.AreSame (itemA, dud.Items [0], "#E7");
  678. Assert.AreSame (itemA, dud.Items [1], "#E8");
  679. Assert.AreSame (itemB, dud.Items [2], "#E9");
  680. Assert.AreSame (itemC, dud.Items [3], "#E10");
  681. }
  682. [Test]
  683. [Category ("NotWorking")]
  684. public void DomainUpDown_Items_Indexer ()
  685. {
  686. MockItem itemA = new MockItem ("itemA");
  687. MockItem itemAbis = new MockItem ("itemA");
  688. MockItem itemB = new MockItem ("itemB");
  689. MockItem itemC = new MockItem ("itemC");
  690. MockItem itemD = new MockItem ("itemD");
  691. MockItem itemE = new MockItem ("itemE");
  692. TestHelper.RemoveWarning (itemAbis);
  693. MockDomainUpDown dud = new MockDomainUpDown ();
  694. dud.SelectedItemChanged += new EventHandler (DomainUpDown_SelectedItemChanged);
  695. dud.TextChanged += new EventHandler (DomainUpDown_TextChanged);
  696. dud.Items.Add (itemC);
  697. dud.Items.Add (itemA);
  698. dud.Items.Add (itemB);
  699. dud.Items.Add (itemA);
  700. dud.SelectedIndex = 1;
  701. dud.Reset ();
  702. Reset ();
  703. Assert.AreSame (itemC, dud.Items [0], "#A1");
  704. Assert.AreSame (itemA, dud.Items [1], "#A2");
  705. Assert.AreSame (itemB, dud.Items [2], "#A3");
  706. Assert.AreSame (itemA, dud.Items [3], "#A4");
  707. Assert.AreEqual (itemA.Text, dud.Text, "#A5");
  708. dud.Items [3] = itemD;
  709. Assert.AreEqual (0, dud.CallStack.Count, "#B1");
  710. Assert.AreEqual (0, selected_item_changed, "#B2");
  711. Assert.AreEqual (0, text_changed, "#B3");
  712. Assert.AreEqual (1, dud.SelectedIndex, "#B4");
  713. Assert.AreEqual (itemA.Text, dud.Text, "#B5");
  714. dud.Items [1] = itemE;
  715. Assert.AreEqual (3, dud.CallStack.Count, "#C1");
  716. Assert.AreEqual ("UpdateEditText", dud.CallStack [0], "#C2");
  717. Assert.AreEqual ("set_Text:itemE (5)", dud.CallStack [1], "#C3");
  718. Assert.AreEqual ("OnChanged", dud.CallStack [2], "#C4");
  719. Assert.AreEqual (1, selected_item_changed, "#C5");
  720. Assert.AreEqual (1, text_changed, "#C6");
  721. Assert.AreEqual (1, dud.SelectedIndex, "#C7");
  722. Assert.AreEqual (itemE.Text, dud.Text, "#C8");
  723. dud.Sorted = true;
  724. Assert.AreEqual (8, dud.CallStack.Count, "#D1");
  725. Assert.AreEqual ("UpdateEditText", dud.CallStack [3], "#D2");
  726. Assert.AreEqual ("set_Text:itemC (5)", dud.CallStack [4], "#D3");
  727. Assert.AreEqual ("OnChanged", dud.CallStack [5], "#D4");
  728. Assert.AreEqual ("UpdateEditText", dud.CallStack [6], "#D5");
  729. Assert.AreEqual ("set_Text:itemC (5)", dud.CallStack [7], "#D6");
  730. Assert.AreEqual (2, selected_item_changed, "#D7");
  731. Assert.AreEqual (2, text_changed, "#D8");
  732. Assert.AreEqual (1, dud.SelectedIndex, "#D9");
  733. Assert.AreEqual (itemC.Text, dud.Text, "#D10");
  734. Assert.AreSame (itemB, dud.Items [0], "#D11");
  735. Assert.AreSame (itemC, dud.Items [1], "#D12");
  736. Assert.AreSame (itemD, dud.Items [2], "#D13");
  737. Assert.AreSame (itemE, dud.Items [3], "#D14");
  738. dud.Items [3] = itemA;
  739. Assert.AreEqual (13, dud.CallStack.Count, "#E1");
  740. Assert.AreEqual ("UpdateEditText", dud.CallStack [8], "#E2");
  741. Assert.AreEqual ("set_Text:itemB (5)", dud.CallStack [9], "#E3");
  742. Assert.AreEqual ("OnChanged", dud.CallStack [10], "#E4");
  743. Assert.AreEqual ("UpdateEditText", dud.CallStack [11], "#E5");
  744. Assert.AreEqual ("set_Text:itemB (5)", dud.CallStack [12], "#E6");
  745. Assert.AreEqual (3, selected_item_changed, "#E7");
  746. Assert.AreEqual (3, text_changed, "#E8");
  747. Assert.AreEqual (1, dud.SelectedIndex, "#E9");
  748. Assert.AreEqual (itemB.Text, dud.Text, "#E10");
  749. }
  750. [Test]
  751. [Category ("NotWorking")]
  752. public void DomainUpDown_Items_Indexer_Null ()
  753. {
  754. MockDomainUpDown dud = new MockDomainUpDown ();
  755. dud.Items.Add ("itemA");
  756. dud.Items.Add ("itemB");
  757. dud.Items.Add ("itemC");
  758. dud.SelectedIndex = 0;
  759. // TODO: report as MS bug
  760. dud.Items [2] = null;
  761. dud.Items [1] = null;
  762. try {
  763. dud.Items [0] = null;
  764. Assert.Fail ();
  765. } catch (NullReferenceException ex) {
  766. TestHelper.RemoveWarning (ex);
  767. }
  768. }
  769. [Test]
  770. public void DomainUpDown_Items_Insert ()
  771. {
  772. // TODO
  773. }
  774. [Test]
  775. public void DomainUpDown_Items_Remove ()
  776. {
  777. // TODO
  778. }
  779. [Test]
  780. public void DomainUpDown_Items_RemoveAt ()
  781. {
  782. // TODO
  783. }
  784. [Test]
  785. [Category ("NotWorking")]
  786. public void DomainUpDown_SelectedIndex_Invalid ()
  787. {
  788. DomainUpDown dud = new DomainUpDown ();
  789. dud.Items.Add ("item1");
  790. try {
  791. dud.SelectedIndex = -2;
  792. Assert.Fail ("#A1");
  793. #if NET_2_0
  794. } catch (ArgumentOutOfRangeException ex) {
  795. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  796. Assert.IsNotNull (ex.Message, "#A3");
  797. Assert.IsNotNull (ex.ParamName, "#A4");
  798. Assert.AreEqual ("SelectedIndex", ex.ParamName, "#A5");
  799. Assert.IsNull (ex.InnerException, "#A6");
  800. }
  801. #else
  802. } catch (ArgumentException ex) {
  803. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
  804. Assert.IsNotNull (ex.Message, "#A3");
  805. Assert.IsNull (ex.ParamName, "#A4");
  806. Assert.IsNull (ex.InnerException, "#A5");
  807. }
  808. #endif
  809. try {
  810. dud.SelectedIndex = 1;
  811. Assert.Fail ("#B1");
  812. #if NET_2_0
  813. } catch (ArgumentOutOfRangeException ex) {
  814. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  815. Assert.IsNotNull (ex.Message, "#A3");
  816. Assert.IsNotNull (ex.ParamName, "#A4");
  817. Assert.AreEqual ("SelectedIndex", ex.ParamName, "#A5");
  818. Assert.IsNull (ex.InnerException, "#A6");
  819. }
  820. #else
  821. } catch (ArgumentException ex) {
  822. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
  823. Assert.IsNotNull (ex.Message, "#B3");
  824. Assert.IsNull (ex.ParamName, "#B4");
  825. Assert.IsNull (ex.InnerException, "#B5");
  826. }
  827. #endif
  828. }
  829. [Test]
  830. public void DomainUpDown_SelectedItem_Null ()
  831. {
  832. DomainUpDown dud = new DomainUpDown ();
  833. dud.Items.Add ("item1");
  834. dud.SelectedIndex = 0;
  835. Assert.AreEqual (0, dud.SelectedIndex, "#A1");
  836. Assert.IsNotNull (dud.SelectedItem, "#A2");
  837. dud.SelectedItem = null;
  838. Assert.AreEqual (-1, dud.SelectedIndex, "#B1");
  839. Assert.IsNull (dud.SelectedItem, "#B2");
  840. }
  841. void DomainUpDown_TextChanged (object sender, EventArgs e)
  842. {
  843. text_changed++;
  844. }
  845. void DomainUpDown_SelectedItemChanged (object sender, EventArgs e)
  846. {
  847. selected_item_changed++;
  848. }
  849. public class MockDomainUpDown : DomainUpDown
  850. {
  851. private ArrayList _callStack = new ArrayList ();
  852. public ArrayList CallStack {
  853. get { return _callStack; }
  854. }
  855. public bool user_edit {
  856. get {
  857. return UserEdit;
  858. }
  859. set {
  860. UserEdit = value;
  861. }
  862. }
  863. public bool changing_text {
  864. get {
  865. return ChangingText;
  866. }
  867. set {
  868. ChangingText = value;
  869. }
  870. }
  871. public void Reset ()
  872. {
  873. _callStack.Clear ();
  874. }
  875. public override string Text {
  876. get {
  877. return base.Text;
  878. }
  879. set {
  880. if (value == null)
  881. _callStack.Add ("set_Text:null");
  882. else
  883. _callStack.Add ("set_Text:" + value + " (" + value.Length + ")");
  884. base.Text = value;
  885. }
  886. }
  887. protected override void OnChanged (object source, EventArgs e)
  888. {
  889. _callStack.Add ("OnChanged");
  890. base.OnChanged (source, e);
  891. }
  892. protected override void UpdateEditText ()
  893. {
  894. _callStack.Add ("UpdateEditText");
  895. base.UpdateEditText ();
  896. }
  897. protected override void ValidateEditText ()
  898. {
  899. _callStack.Add ("ValidateEditText");
  900. base.ValidateEditText ();
  901. }
  902. }
  903. private int selected_item_changed = 0;
  904. private int text_changed = 0;
  905. private int value_changed = 0;
  906. public class MockItem
  907. {
  908. public MockItem (string text)
  909. {
  910. _text = text;
  911. }
  912. public string Text {
  913. get { return _text; }
  914. }
  915. public override string ToString ()
  916. {
  917. return _text;
  918. }
  919. private readonly string _text;
  920. }
  921. }
  922. }