SendKeysTest.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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 : TestHelper {
  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. protected override void SetUp () {
  103. keys.Clear();
  104. base.SetUp ();
  105. }
  106. [Test]
  107. public void SendKeysTest2() {
  108. f = new Form();
  109. f.Activated +=new EventHandler(SendKeysTest2_activated);
  110. c = new Custom();
  111. f.Controls.Add(c);
  112. Application.Run(f);
  113. c.Dispose();
  114. }
  115. private void SendKeysTest2_activated(object sender, EventArgs e) {
  116. SendKeys.SendWait("+(abc){BACKSPACE 2}");
  117. t = new Timer();
  118. t.Interval = 1;
  119. t.Tick +=new EventHandler(SendKeysTest2_tick);
  120. t.Start();
  121. }
  122. private void SendKeysTest2_tick(object sender, EventArgs e) {
  123. t.Stop();
  124. if (f.InvokeRequired) {
  125. f.Invoke (new EventHandler (SendKeysTest2_tick), new object [] {sender, e});
  126. return;
  127. }
  128. Assert.AreEqual(12, keys.Count, "#A1");
  129. Keys k = (Keys)keys.Dequeue();
  130. Assert.IsFalse(k.up, "#A2");
  131. Assert.IsTrue(k.shift, "#A3");
  132. Assert.IsFalse(k.ctrl, "#A4");
  133. Assert.IsFalse(k.alt, "#A5");
  134. k = (Keys)keys.Dequeue();
  135. Assert.IsFalse(k.up, "#A7");
  136. Assert.IsTrue(k.shift, "#A8");
  137. Assert.IsFalse(k.ctrl, "#A9");
  138. Assert.IsFalse(k.alt, "#A10");
  139. Assert.AreEqual("A, Shift", k.key, "#A11");
  140. k = (Keys)keys.Dequeue();
  141. Assert.IsTrue(k.up, "#A12");
  142. Assert.IsTrue(k.shift, "#A13");
  143. Assert.IsFalse(k.ctrl, "#A14");
  144. Assert.IsFalse(k.alt, "#A15");
  145. Assert.AreEqual("A, Shift", k.key, "#A16");
  146. k = (Keys)keys.Dequeue();
  147. Assert.IsFalse(k.up, "#A17");
  148. Assert.IsTrue(k.shift, "#A18");
  149. Assert.IsFalse(k.ctrl, "#A19");
  150. Assert.IsFalse(k.alt, "#A20");
  151. Assert.AreEqual("B, Shift", k.key, "#A21");
  152. k = (Keys)keys.Dequeue();
  153. Assert.IsTrue(k.up, "#A22");
  154. Assert.IsTrue(k.shift, "#A23");
  155. Assert.IsFalse(k.ctrl, "#A24");
  156. Assert.IsFalse(k.alt, "#A25");
  157. Assert.AreEqual("B, Shift", k.key, "#A26");
  158. k = (Keys)keys.Dequeue();
  159. Assert.IsFalse(k.up, "#A27");
  160. Assert.IsTrue(k.shift, "#A28");
  161. Assert.IsFalse(k.ctrl, "#A28");
  162. Assert.IsFalse(k.alt, "#A29");
  163. Assert.AreEqual("C, Shift", k.key, "#A30");
  164. k = (Keys)keys.Dequeue();
  165. Assert.IsTrue(k.up, "#A31");
  166. Assert.IsTrue(k.shift, "#A32");
  167. Assert.IsFalse(k.ctrl, "#A33");
  168. Assert.IsFalse(k.alt, "#A34");
  169. Assert.AreEqual("C, Shift", k.key, "#A35");
  170. k = (Keys)keys.Dequeue();
  171. Assert.IsTrue(k.up, "#A36");
  172. Assert.IsFalse(k.shift, "#A37");
  173. Assert.IsFalse(k.ctrl, "#A38");
  174. Assert.IsFalse(k.alt, "#A39");
  175. Assert.AreEqual("ShiftKey", k.key, "#A40");
  176. k = (Keys)keys.Dequeue();
  177. Assert.IsFalse(k.up, "#b1");
  178. Assert.IsFalse(k.shift, "#b2");
  179. Assert.IsFalse(k.ctrl, "#b3");
  180. Assert.IsFalse(k.alt, "#b4");
  181. Assert.AreEqual("Back", k.key, "#b5");
  182. k = (Keys)keys.Dequeue();
  183. Assert.IsTrue(k.up, "#b6");
  184. Assert.IsFalse(k.shift, "#b7");
  185. Assert.IsFalse(k.ctrl, "#b8");
  186. Assert.IsFalse(k.alt, "#b9");
  187. Assert.AreEqual("Back", k.key, "#b10");
  188. k = (Keys)keys.Dequeue();
  189. Assert.IsFalse(k.up, "#c1");
  190. Assert.IsFalse(k.shift, "#c2");
  191. Assert.IsFalse(k.ctrl, "#c3");
  192. Assert.IsFalse(k.alt, "#c4");
  193. Assert.AreEqual("Back", k.key, "#c5");
  194. k = (Keys)keys.Dequeue();
  195. Assert.IsTrue(k.up, "#c6");
  196. Assert.IsFalse(k.shift, "#c7");
  197. Assert.IsFalse(k.ctrl, "#c8");
  198. Assert.IsFalse(k.alt, "#c9");
  199. Assert.AreEqual("Back", k.key, "#c10");
  200. Assert.AreEqual(0, keys.Count, "#d1");
  201. Assert.AreEqual("A", c.Text, "#e1");
  202. t.Dispose();
  203. f.Close ();
  204. }
  205. }
  206. }