SendKeysTest.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /**
  2. * SendKeysTest.cs: Test cases for SendKeys
  3. *
  4. * These tests can only run in ms.net one at a time.
  5. * Since ms.net apparently hooks the keyboard to
  6. * implement this, running two tests in a row
  7. * makes the second test run before the hook
  8. * of the first test is released, effectively
  9. * hanging the keyboard. CTRL-ALT-DEL releases
  10. * the keyboard, but the test still hangs.
  11. * Running each test separately works.
  12. *
  13. * Author:
  14. * Andreia Gaita ([email protected])
  15. *
  16. * (C) 2005 Novell, Inc. (http://www.novell.com)
  17. *
  18. */
  19. using System;
  20. using System.Windows.Forms;
  21. using System.Drawing;
  22. using System.Reflection;
  23. using System.Text;
  24. using System.Collections;
  25. using NUnit.Framework;
  26. namespace MonoTests.System.Windows.Forms
  27. {
  28. [TestFixture]
  29. [Category("NotDotNet")]
  30. [Category("NotWithXvfb")]
  31. [Category("Interactive")]
  32. public class SendKeysTest {
  33. static Queue keys = new Queue();
  34. internal struct Keys {
  35. public string key;
  36. public bool up;
  37. public bool shift;
  38. public bool ctrl;
  39. public bool alt;
  40. public Keys(string key, bool up, bool shift, bool ctrl, bool alt) {
  41. this.key = key;
  42. this.up = up;
  43. this.shift = shift;
  44. this.ctrl = ctrl;
  45. this.alt = alt;
  46. }
  47. }
  48. internal class Custom: TextBox {
  49. protected override void OnKeyDown(KeyEventArgs e) {
  50. keys.Enqueue(new Keys(e.KeyData.ToString(), false, e.Shift, e.Control, e.Alt));
  51. base.OnKeyDown (e);
  52. }
  53. protected override void OnKeyUp(KeyEventArgs e) {
  54. keys.Enqueue(new Keys(e.KeyData.ToString(), true, e.Shift, e.Control, e.Alt));
  55. base.OnKeyUp (e);
  56. }
  57. }
  58. public SendKeysTest() {
  59. }
  60. Form f;
  61. Timer t;
  62. Custom c;
  63. [Test]
  64. public void SendKeysTest1() {
  65. f = new Form();
  66. f.Activated +=new EventHandler(SendKeysTest1_activated);
  67. c = new Custom();
  68. f.Controls.Add(c);
  69. Application.Run(f);
  70. c.Dispose();
  71. }
  72. private void SendKeysTest1_activated(object sender, EventArgs e) {
  73. SendKeys.SendWait("a");
  74. t = new Timer();
  75. t.Interval = 1;
  76. t.Tick +=new EventHandler(SendKeysTest1_tick);
  77. t.Start();
  78. }
  79. private void SendKeysTest1_tick(object sender, EventArgs e) {
  80. if (f.InvokeRequired) {
  81. f.Invoke (new EventHandler (SendKeysTest1_tick), new object [] { sender, e });
  82. return;
  83. }
  84. t.Stop();
  85. Assert.AreEqual(2, keys.Count, "#A1");
  86. Keys k = (Keys)keys.Dequeue();
  87. Assert.IsFalse(k.up, "#A2");
  88. Assert.IsFalse(k.shift, "#A3");
  89. Assert.IsFalse(k.ctrl, "#A4");
  90. Assert.IsFalse(k.alt, "#A5");
  91. Assert.AreEqual("A", k.key, "#A6");
  92. k = (Keys)keys.Dequeue();
  93. Assert.IsTrue(k.up, "#A2");
  94. Assert.IsFalse(k.shift, "#A3");
  95. Assert.IsFalse(k.ctrl, "#A4");
  96. Assert.IsFalse(k.alt, "#A5");
  97. Assert.AreEqual("A", k.key, "#A6");
  98. t.Dispose();
  99. f.Close ();
  100. }
  101. [SetUp]
  102. public void SetUp() {
  103. keys.Clear();
  104. }
  105. [Test]
  106. public void SendKeysTest2() {
  107. f = new Form();
  108. f.Activated +=new EventHandler(SendKeysTest2_activated);
  109. c = new Custom();
  110. f.Controls.Add(c);
  111. Application.Run(f);
  112. c.Dispose();
  113. }
  114. private void SendKeysTest2_activated(object sender, EventArgs e) {
  115. SendKeys.SendWait("+(abc){BACKSPACE 2}");
  116. t = new Timer();
  117. t.Interval = 1;
  118. t.Tick +=new EventHandler(SendKeysTest2_tick);
  119. t.Start();
  120. }
  121. private void SendKeysTest2_tick(object sender, EventArgs e) {
  122. t.Stop();
  123. if (f.InvokeRequired) {
  124. f.Invoke (new EventHandler (SendKeysTest2_tick), new object [] {sender, e});
  125. return;
  126. }
  127. Assert.AreEqual(12, keys.Count, "#A1");
  128. Keys k = (Keys)keys.Dequeue();
  129. Assert.IsFalse(k.up, "#A2");
  130. Assert.IsTrue(k.shift, "#A3");
  131. Assert.IsFalse(k.ctrl, "#A4");
  132. Assert.IsFalse(k.alt, "#A5");
  133. k = (Keys)keys.Dequeue();
  134. Assert.IsFalse(k.up, "#A7");
  135. Assert.IsTrue(k.shift, "#A8");
  136. Assert.IsFalse(k.ctrl, "#A9");
  137. Assert.IsFalse(k.alt, "#A10");
  138. Assert.AreEqual("A, Shift", k.key, "#A11");
  139. k = (Keys)keys.Dequeue();
  140. Assert.IsTrue(k.up, "#A12");
  141. Assert.IsTrue(k.shift, "#A13");
  142. Assert.IsFalse(k.ctrl, "#A14");
  143. Assert.IsFalse(k.alt, "#A15");
  144. Assert.AreEqual("A, Shift", k.key, "#A16");
  145. k = (Keys)keys.Dequeue();
  146. Assert.IsFalse(k.up, "#A17");
  147. Assert.IsTrue(k.shift, "#A18");
  148. Assert.IsFalse(k.ctrl, "#A19");
  149. Assert.IsFalse(k.alt, "#A20");
  150. Assert.AreEqual("B, Shift", k.key, "#A21");
  151. k = (Keys)keys.Dequeue();
  152. Assert.IsTrue(k.up, "#A22");
  153. Assert.IsTrue(k.shift, "#A23");
  154. Assert.IsFalse(k.ctrl, "#A24");
  155. Assert.IsFalse(k.alt, "#A25");
  156. Assert.AreEqual("B, Shift", k.key, "#A26");
  157. k = (Keys)keys.Dequeue();
  158. Assert.IsFalse(k.up, "#A27");
  159. Assert.IsTrue(k.shift, "#A28");
  160. Assert.IsFalse(k.ctrl, "#A28");
  161. Assert.IsFalse(k.alt, "#A29");
  162. Assert.AreEqual("C, Shift", k.key, "#A30");
  163. k = (Keys)keys.Dequeue();
  164. Assert.IsTrue(k.up, "#A31");
  165. Assert.IsTrue(k.shift, "#A32");
  166. Assert.IsFalse(k.ctrl, "#A33");
  167. Assert.IsFalse(k.alt, "#A34");
  168. Assert.AreEqual("C, Shift", k.key, "#A35");
  169. k = (Keys)keys.Dequeue();
  170. Assert.IsTrue(k.up, "#A36");
  171. Assert.IsFalse(k.shift, "#A37");
  172. Assert.IsFalse(k.ctrl, "#A38");
  173. Assert.IsFalse(k.alt, "#A39");
  174. Assert.AreEqual("ShiftKey", k.key, "#A40");
  175. k = (Keys)keys.Dequeue();
  176. Assert.IsFalse(k.up, "#b1");
  177. Assert.IsFalse(k.shift, "#b2");
  178. Assert.IsFalse(k.ctrl, "#b3");
  179. Assert.IsFalse(k.alt, "#b4");
  180. Assert.AreEqual("Back", k.key, "#b5");
  181. k = (Keys)keys.Dequeue();
  182. Assert.IsTrue(k.up, "#b6");
  183. Assert.IsFalse(k.shift, "#b7");
  184. Assert.IsFalse(k.ctrl, "#b8");
  185. Assert.IsFalse(k.alt, "#b9");
  186. Assert.AreEqual("Back", k.key, "#b10");
  187. k = (Keys)keys.Dequeue();
  188. Assert.IsFalse(k.up, "#c1");
  189. Assert.IsFalse(k.shift, "#c2");
  190. Assert.IsFalse(k.ctrl, "#c3");
  191. Assert.IsFalse(k.alt, "#c4");
  192. Assert.AreEqual("Back", k.key, "#c5");
  193. k = (Keys)keys.Dequeue();
  194. Assert.IsTrue(k.up, "#c6");
  195. Assert.IsFalse(k.shift, "#c7");
  196. Assert.IsFalse(k.ctrl, "#c8");
  197. Assert.IsFalse(k.alt, "#c9");
  198. Assert.AreEqual("Back", k.key, "#c10");
  199. Assert.AreEqual(0, keys.Count, "#d1");
  200. Assert.AreEqual("A", c.Text, "#e1");
  201. t.Dispose();
  202. f.Close ();
  203. }
  204. }
  205. }