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