2006-12-19 Daniel Nauck <dna@mono-project.de>
[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         public class SendKeysTest {\r
33 \r
34                 static Queue keys = new Queue();\r
35 \r
36                 internal struct Keys {\r
37                         public string key;\r
38                         public bool up;\r
39                         public bool shift;\r
40                         public bool ctrl;\r
41                         public bool alt;\r
42 \r
43                         public Keys(string key, bool up, bool shift, bool ctrl, bool alt) {\r
44                                 this.key = key;\r
45                                 this.up = up;\r
46                                 this.shift = shift;\r
47                                 this.ctrl = ctrl;\r
48                                 this.alt = alt;\r
49                         }\r
50                 }\r
51 \r
52                 internal class Custom: TextBox {\r
53 \r
54                         protected override void OnKeyDown(KeyEventArgs e) {\r
55                                 keys.Enqueue(new Keys(e.KeyData.ToString(), false, e.Shift, e.Control, e.Alt));\r
56                                 base.OnKeyDown (e);\r
57                         }\r
58 \r
59                         protected override void OnKeyUp(KeyEventArgs e) {\r
60                                 keys.Enqueue(new Keys(e.KeyData.ToString(), true, e.Shift, e.Control, e.Alt));\r
61                                 base.OnKeyUp (e);\r
62                         }\r
63                 }\r
64 \r
65                 \r
66                 \r
67                 public SendKeysTest() {\r
68                 }\r
69 \r
70                 Form f;\r
71                 Timer t;\r
72                 Custom c;\r
73 \r
74                 [Test]\r
75                 public void SendKeysTest1() {\r
76                         f = new Form();\r
77                         f.Activated +=new EventHandler(SendKeysTest1_activated);\r
78                         c = new Custom();\r
79                         f.Controls.Add(c);\r
80                         Application.Run(f);\r
81                         c.Dispose();\r
82                 }\r
83 \r
84                 private void SendKeysTest1_activated(object sender, EventArgs e) {\r
85                         SendKeys.SendWait("a");\r
86 \r
87                         t = new  Timer();\r
88                         t.Interval = 0;\r
89                         t.Tick +=new EventHandler(SendKeysTest1_tick);\r
90                         t.Start();\r
91                         \r
92                 }\r
93 \r
94                 private void SendKeysTest1_tick(object sender, EventArgs e) {\r
95                         t.Stop();\r
96                         Assert.AreEqual(2, keys.Count, "#A1");\r
97                         Keys k = (Keys)keys.Dequeue();\r
98                         Assert.IsFalse(k.up, "#A2");\r
99                         Assert.IsFalse(k.shift, "#A3");\r
100                         Assert.IsFalse(k.ctrl, "#A4");\r
101                         Assert.IsFalse(k.alt, "#A5");\r
102                         Assert.AreEqual("A", k.key, "#A6");\r
103 \r
104                         k = (Keys)keys.Dequeue();\r
105                         Assert.IsTrue(k.up, "#A2");\r
106                         Assert.IsFalse(k.shift, "#A3");\r
107                         Assert.IsFalse(k.ctrl, "#A4");\r
108                         Assert.IsFalse(k.alt, "#A5");\r
109                         Assert.AreEqual("A", k.key, "#A6");\r
110                         \r
111                         t.Dispose();\r
112                         Application.Exit();\r
113                 }\r
114 \r
115                 [SetUp]\r
116                 public void SetUp() {\r
117                         keys.Clear();\r
118                 }\r
119 \r
120 \r
121                 [Test]\r
122                 public void SendKeysTest2() {\r
123                         f = new Form();\r
124                         f.Activated +=new EventHandler(SendKeysTest2_activated);\r
125                         c = new Custom();\r
126                         f.Controls.Add(c);\r
127                         Application.Run(f);\r
128                         c.Dispose();\r
129                 }\r
130 \r
131 \r
132                 private void SendKeysTest2_activated(object sender, EventArgs e) {\r
133                         SendKeys.SendWait("+(abc){BACKSPACE 2}");\r
134 \r
135                         t = new Timer();\r
136                         t.Interval = 0;\r
137                         t.Tick +=new EventHandler(SendKeysTest2_tick);\r
138                         t.Start();\r
139                         \r
140                 }\r
141 \r
142                 private void SendKeysTest2_tick(object sender, EventArgs e) {\r
143                         t.Stop();\r
144                         Assert.AreEqual(12, keys.Count, "#A1");\r
145 \r
146                         Keys k = (Keys)keys.Dequeue();\r
147                         Assert.IsFalse(k.up, "#A2");\r
148                         Assert.IsTrue(k.shift, "#A3");\r
149                         Assert.IsFalse(k.ctrl, "#A4");\r
150                         Assert.IsFalse(k.alt, "#A5");\r
151 \r
152                         k = (Keys)keys.Dequeue();\r
153                         Assert.IsFalse(k.up, "#A7");\r
154                         Assert.IsTrue(k.shift, "#A8");\r
155                         Assert.IsFalse(k.ctrl, "#A9");\r
156                         Assert.IsFalse(k.alt, "#A10");\r
157                         Assert.AreEqual("A, Shift", k.key, "#A11");\r
158                         \r
159                         k = (Keys)keys.Dequeue();\r
160                         Assert.IsTrue(k.up, "#A12");\r
161                         Assert.IsTrue(k.shift, "#A13");\r
162                         Assert.IsFalse(k.ctrl, "#A14");\r
163                         Assert.IsFalse(k.alt, "#A15");\r
164                         Assert.AreEqual("A, Shift", k.key, "#A16");\r
165 \r
166                         k = (Keys)keys.Dequeue();\r
167                         Assert.IsFalse(k.up, "#A17");\r
168                         Assert.IsTrue(k.shift, "#A18");\r
169                         Assert.IsFalse(k.ctrl, "#A19");\r
170                         Assert.IsFalse(k.alt, "#A20");\r
171                         Assert.AreEqual("B, Shift", k.key, "#A21");\r
172 \r
173                         k = (Keys)keys.Dequeue();\r
174                         Assert.IsTrue(k.up, "#A22");\r
175                         Assert.IsTrue(k.shift, "#A23");\r
176                         Assert.IsFalse(k.ctrl, "#A24");\r
177                         Assert.IsFalse(k.alt, "#A25");\r
178                         Assert.AreEqual("B, Shift", k.key, "#A26");\r
179 \r
180                         k = (Keys)keys.Dequeue();\r
181                         Assert.IsFalse(k.up, "#A27");\r
182                         Assert.IsTrue(k.shift, "#A28");\r
183                         Assert.IsFalse(k.ctrl, "#A28");\r
184                         Assert.IsFalse(k.alt, "#A29");\r
185                         Assert.AreEqual("C, Shift", k.key, "#A30");\r
186 \r
187                         k = (Keys)keys.Dequeue();\r
188                         Assert.IsTrue(k.up, "#A31");\r
189                         Assert.IsTrue(k.shift, "#A32");\r
190                         Assert.IsFalse(k.ctrl, "#A33");\r
191                         Assert.IsFalse(k.alt, "#A34");\r
192                         Assert.AreEqual("C, Shift", k.key, "#A35");\r
193 \r
194                         k = (Keys)keys.Dequeue();\r
195                         Assert.IsTrue(k.up, "#A36");\r
196                         Assert.IsFalse(k.shift, "#A37");\r
197                         Assert.IsFalse(k.ctrl, "#A38");\r
198                         Assert.IsFalse(k.alt, "#A39");\r
199                         Assert.AreEqual("ShiftKey", k.key, "#A40");\r
200 \r
201                         k = (Keys)keys.Dequeue();\r
202                         Assert.IsFalse(k.up, "#b1");\r
203                         Assert.IsFalse(k.shift, "#b2");\r
204                         Assert.IsFalse(k.ctrl, "#b3");\r
205                         Assert.IsFalse(k.alt, "#b4");\r
206                         Assert.AreEqual("Back", k.key, "#b5");\r
207 \r
208                         k = (Keys)keys.Dequeue();\r
209                         Assert.IsTrue(k.up, "#b6");\r
210                         Assert.IsFalse(k.shift, "#b7");\r
211                         Assert.IsFalse(k.ctrl, "#b8");\r
212                         Assert.IsFalse(k.alt, "#b9");\r
213                         Assert.AreEqual("Back", k.key, "#b10");\r
214 \r
215                         k = (Keys)keys.Dequeue();\r
216                         Assert.IsFalse(k.up, "#c1");\r
217                         Assert.IsFalse(k.shift, "#c2");\r
218                         Assert.IsFalse(k.ctrl, "#c3");\r
219                         Assert.IsFalse(k.alt, "#c4");\r
220                         Assert.AreEqual("Back", k.key, "#c5");\r
221 \r
222                         k = (Keys)keys.Dequeue();\r
223                         Assert.IsTrue(k.up, "#c6");\r
224                         Assert.IsFalse(k.shift, "#c7");\r
225                         Assert.IsFalse(k.ctrl, "#c8");\r
226                         Assert.IsFalse(k.alt, "#c9");\r
227                         Assert.AreEqual("Back", k.key, "#c10");\r
228 \r
229                         Assert.AreEqual(0, keys.Count, "#d1");\r
230 \r
231                         Assert.AreEqual("A", c.Text, "#e1");\r
232 \r
233                         t.Dispose();\r
234                         Application.Exit();\r
235                 }\r
236 \r
237         }\r
238 }\r