* FormHandleTest.cs, ControlEventTest.cs, MenuStripTest.cs,
[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 {\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                 public void SetUp() {\r
123                         keys.Clear();\r
124                 }\r
125 \r
126 \r
127                 [Test]\r
128                 public void SendKeysTest2() {\r
129                         f = new Form();\r
130                         f.Activated +=new EventHandler(SendKeysTest2_activated);\r
131                         c = new Custom();\r
132                         f.Controls.Add(c);\r
133                         Application.Run(f);\r
134                         c.Dispose();\r
135                 }\r
136 \r
137 \r
138                 private void SendKeysTest2_activated(object sender, EventArgs e) {\r
139                         SendKeys.SendWait("+(abc){BACKSPACE 2}");\r
140 \r
141                         t = new Timer();\r
142                         t.Interval = 1;\r
143                         t.Tick +=new EventHandler(SendKeysTest2_tick);\r
144                         t.Start();\r
145                         \r
146                 }\r
147 \r
148                 private void SendKeysTest2_tick(object sender, EventArgs e) {\r
149                         t.Stop();\r
150                         if (f.InvokeRequired) {\r
151                                 f.Invoke (new EventHandler (SendKeysTest2_tick), new object [] {sender, e});\r
152                                 return;\r
153                         }\r
154                         Assert.AreEqual(12, keys.Count, "#A1");\r
155 \r
156                         Keys k = (Keys)keys.Dequeue();\r
157                         Assert.IsFalse(k.up, "#A2");\r
158                         Assert.IsTrue(k.shift, "#A3");\r
159                         Assert.IsFalse(k.ctrl, "#A4");\r
160                         Assert.IsFalse(k.alt, "#A5");\r
161 \r
162                         k = (Keys)keys.Dequeue();\r
163                         Assert.IsFalse(k.up, "#A7");\r
164                         Assert.IsTrue(k.shift, "#A8");\r
165                         Assert.IsFalse(k.ctrl, "#A9");\r
166                         Assert.IsFalse(k.alt, "#A10");\r
167                         Assert.AreEqual("A, Shift", k.key, "#A11");\r
168                         \r
169                         k = (Keys)keys.Dequeue();\r
170                         Assert.IsTrue(k.up, "#A12");\r
171                         Assert.IsTrue(k.shift, "#A13");\r
172                         Assert.IsFalse(k.ctrl, "#A14");\r
173                         Assert.IsFalse(k.alt, "#A15");\r
174                         Assert.AreEqual("A, Shift", k.key, "#A16");\r
175 \r
176                         k = (Keys)keys.Dequeue();\r
177                         Assert.IsFalse(k.up, "#A17");\r
178                         Assert.IsTrue(k.shift, "#A18");\r
179                         Assert.IsFalse(k.ctrl, "#A19");\r
180                         Assert.IsFalse(k.alt, "#A20");\r
181                         Assert.AreEqual("B, Shift", k.key, "#A21");\r
182 \r
183                         k = (Keys)keys.Dequeue();\r
184                         Assert.IsTrue(k.up, "#A22");\r
185                         Assert.IsTrue(k.shift, "#A23");\r
186                         Assert.IsFalse(k.ctrl, "#A24");\r
187                         Assert.IsFalse(k.alt, "#A25");\r
188                         Assert.AreEqual("B, Shift", k.key, "#A26");\r
189 \r
190                         k = (Keys)keys.Dequeue();\r
191                         Assert.IsFalse(k.up, "#A27");\r
192                         Assert.IsTrue(k.shift, "#A28");\r
193                         Assert.IsFalse(k.ctrl, "#A28");\r
194                         Assert.IsFalse(k.alt, "#A29");\r
195                         Assert.AreEqual("C, Shift", k.key, "#A30");\r
196 \r
197                         k = (Keys)keys.Dequeue();\r
198                         Assert.IsTrue(k.up, "#A31");\r
199                         Assert.IsTrue(k.shift, "#A32");\r
200                         Assert.IsFalse(k.ctrl, "#A33");\r
201                         Assert.IsFalse(k.alt, "#A34");\r
202                         Assert.AreEqual("C, Shift", k.key, "#A35");\r
203 \r
204                         k = (Keys)keys.Dequeue();\r
205                         Assert.IsTrue(k.up, "#A36");\r
206                         Assert.IsFalse(k.shift, "#A37");\r
207                         Assert.IsFalse(k.ctrl, "#A38");\r
208                         Assert.IsFalse(k.alt, "#A39");\r
209                         Assert.AreEqual("ShiftKey", k.key, "#A40");\r
210 \r
211                         k = (Keys)keys.Dequeue();\r
212                         Assert.IsFalse(k.up, "#b1");\r
213                         Assert.IsFalse(k.shift, "#b2");\r
214                         Assert.IsFalse(k.ctrl, "#b3");\r
215                         Assert.IsFalse(k.alt, "#b4");\r
216                         Assert.AreEqual("Back", k.key, "#b5");\r
217 \r
218                         k = (Keys)keys.Dequeue();\r
219                         Assert.IsTrue(k.up, "#b6");\r
220                         Assert.IsFalse(k.shift, "#b7");\r
221                         Assert.IsFalse(k.ctrl, "#b8");\r
222                         Assert.IsFalse(k.alt, "#b9");\r
223                         Assert.AreEqual("Back", k.key, "#b10");\r
224 \r
225                         k = (Keys)keys.Dequeue();\r
226                         Assert.IsFalse(k.up, "#c1");\r
227                         Assert.IsFalse(k.shift, "#c2");\r
228                         Assert.IsFalse(k.ctrl, "#c3");\r
229                         Assert.IsFalse(k.alt, "#c4");\r
230                         Assert.AreEqual("Back", k.key, "#c5");\r
231 \r
232                         k = (Keys)keys.Dequeue();\r
233                         Assert.IsTrue(k.up, "#c6");\r
234                         Assert.IsFalse(k.shift, "#c7");\r
235                         Assert.IsFalse(k.ctrl, "#c8");\r
236                         Assert.IsFalse(k.alt, "#c9");\r
237                         Assert.AreEqual("Back", k.key, "#c10");\r
238 \r
239                         Assert.AreEqual(0, keys.Count, "#d1");\r
240 \r
241                         Assert.AreEqual("A", c.Text, "#e1");\r
242 \r
243                         t.Dispose();\r
244                         f.Close ();\r
245                 }\r
246 \r
247         }\r
248 }\r