2 // Copyright (c) 2007 Novell, Inc.
9 using System.Windows.Forms;
11 using NUnit.Framework;
13 namespace MonoTests.System.Windows.Forms
17 public class DataGridTextBoxTest : TestHelper {
18 class DataGridMock : DataGrid {
19 protected override void ColumnStartedEditing (Rectangle bounds)
21 // don't do anything here.
24 protected override void GridVScrolled (object sender, ScrollEventArgs se)
26 Console.WriteLine (Environment.StackTrace);
29 protected override void WndProc (ref Message m)
31 Console.WriteLine (Environment.StackTrace);
36 class TextBoxPoker : DataGridTextBox {
37 public bool ProcessKeyPreviewCalled = false;
38 public bool ProcessKeyPreviewReturnValue;
40 public bool ProcessKeyEventArgsCalled = false;
41 public bool ProcessKeyEventArgsReturnValue;
43 public TextBoxPoker ()
48 public void DoOnKeyPress (KeyPressEventArgs e)
53 public void DoOnMouseWheel (MouseEventArgs e)
55 base.OnMouseWheel (e);
58 public bool DoProcessKeyMessage (ref Message m)
60 return base.ProcessKeyMessage (ref m);
63 public void DoWndProc (ref Message m)
68 protected override bool ProcessKeyEventArgs (ref Message msg)
70 bool rv = base.ProcessKeyEventArgs (ref msg);
71 ProcessKeyEventArgsCalled = true;
72 ProcessKeyEventArgsReturnValue = rv;
73 return base.ProcessKeyEventArgs (ref msg);
76 protected override bool ProcessKeyPreview(ref Message msg)
78 bool rv = base.ProcessKeyPreview (ref msg);
79 ProcessKeyPreviewCalled = true;
80 ProcessKeyPreviewReturnValue = rv;
86 [Category ("NotWorking")]
87 public void TestDefaults ()
89 TextBoxPoker tb = new TextBoxPoker ();
90 Assert.AreEqual (SystemColors.Window, tb.BackColor, "1");
91 Assert.IsFalse (tb.AcceptsTab, "2");
95 [ExpectedException (typeof (NullReferenceException))]
96 public void TestKeyPress_NoGrid ()
98 TextBoxPoker tb = new TextBoxPoker ();
99 tb.DoOnKeyPress (new KeyPressEventArgs ('a'));
103 [ExpectedException (typeof (IndexOutOfRangeException))]
104 public void TestKeyPress_GridButNoColumns ()
106 TextBoxPoker tb = new TextBoxPoker ();
107 DataGrid dg = new DataGrid ();
109 tb.DoOnKeyPress (new KeyPressEventArgs ('a'));
113 public void TestKeyPress ()
115 TextBoxPoker tb = new TextBoxPoker ();
116 DataGridMock dg = new DataGridMock ();
119 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1");
121 tb.DoOnKeyPress (new KeyPressEventArgs ('a'));
122 Assert.IsFalse (tb.IsInEditOrNavigateMode, "2");
123 Assert.AreEqual ("", tb.Text, "3");
126 tb.IsInEditOrNavigateMode = true;
127 tb.DoOnKeyPress (new KeyPressEventArgs ('a'));
128 Assert.IsTrue (tb.IsInEditOrNavigateMode, "4");
129 Assert.AreEqual ("", tb.Text, "5");
133 [ExpectedException (typeof (NullReferenceException))]
134 [Category ("NotWorking")]
135 public void TestMouseWheel_NoGrid ()
137 TextBoxPoker tb = new TextBoxPoker ();
139 tb.DoOnMouseWheel (new MouseEventArgs (MouseButtons.None, 0, 0, 0, 10));
142 bool mouse_wheel_raised;
143 bool mouse_down_raised;
145 void mouse_wheel_handler (object sender, MouseEventArgs e)
147 mouse_wheel_raised = true;
150 void mouse_down_handler (object sender, MouseEventArgs e)
152 mouse_down_raised = true;
156 [Category ("NotWorking")]
157 public void TestMouseWheel ()
159 TextBoxPoker tb = new TextBoxPoker ();
160 DataGridMock dg = new DataGridMock ();
162 tb.MouseWheel += new MouseEventHandler (mouse_wheel_handler);
166 mouse_wheel_raised = false;
167 tb.DoOnMouseWheel (new MouseEventArgs (MouseButtons.None, 0, 0, 0, 10));
168 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1");
169 Assert.IsFalse (mouse_wheel_raised, "2");
171 tb.IsInEditOrNavigateMode = false;
172 tb.DoOnMouseWheel (new MouseEventArgs (MouseButtons.None, 0, 0, 0, 10));
173 Assert.IsFalse (tb.IsInEditOrNavigateMode, "3");
174 Assert.IsFalse (mouse_wheel_raised, "4");
178 [Category ("NotWorking")]
179 public void TestProcessKeyMessage_WM_CHAR ()
181 TextBoxPoker tb = new TextBoxPoker ();
182 DataGridMock dg = new DataGridMock ();
185 dg.Controls.Add (tb);
189 tb.IsInEditOrNavigateMode = true;
191 /* test Enter key behavior */
193 m.Msg = 0x0102 /* WM_CHAR */;
194 m.WParam = (IntPtr)Keys.Enter;
196 bool rv = tb.DoProcessKeyMessage (ref m);
197 Assert.AreEqual (0x0102, m.Msg, "1");
198 Assert.AreEqual (Keys.Enter, (Keys)m.WParam.ToInt32(), "2");
199 Assert.IsTrue (rv, "3");
200 Assert.IsTrue (tb.IsInEditOrNavigateMode, "4");
204 [Category ("NotWorking")]
205 public void TestProcessKeyMessage_WM_KEYDOWN ()
207 TextBoxPoker tb = new TextBoxPoker ();
208 DataGridMock dg = new DataGridMock ();
212 dg.Controls.Add (tb);
215 /* test F2 key behavior */
216 tb.IsInEditOrNavigateMode = false;
217 tb.Text = "hello world";
218 tb.SelectionStart = 0;
219 tb.SelectionLength = 5;
222 m.Msg = 0x0100 /* WM_KEYDOWN */;
223 m.WParam = (IntPtr)Keys.F2;
225 rv = tb.DoProcessKeyMessage (ref m);
226 Assert.AreEqual (0x0100, m.Msg, "1");
227 Assert.AreEqual (Keys.F2, (Keys)m.WParam.ToInt32(), "2");
228 Assert.IsTrue (rv, "3");
229 Assert.IsFalse (tb.IsInEditOrNavigateMode, "4");
231 Assert.AreEqual (0, tb.SelectionLength, "5");
232 Assert.AreEqual (tb.Text.Length, tb.SelectionStart, "6");
233 Assert.IsFalse (tb.ProcessKeyPreviewCalled, "7");
234 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "8");
235 tb.ProcessKeyPreviewCalled = false;
236 tb.ProcessKeyEventArgsCalled = false;
238 /* test enter behavior */
239 tb.IsInEditOrNavigateMode = true;
241 m.Msg = 0x0100 /* WM_KEYDOWN */;
242 m.WParam = (IntPtr)Keys.Enter;
244 rv = tb.DoProcessKeyMessage (ref m);
245 Assert.AreEqual (0x0100, m.Msg, "9");
246 Assert.AreEqual (Keys.Enter, (Keys)m.WParam.ToInt32(), "10");
247 Assert.IsFalse (rv, "11");
248 Assert.IsTrue (tb.IsInEditOrNavigateMode, "12");
249 Assert.IsTrue (tb.ProcessKeyPreviewCalled, "13");
250 Assert.IsFalse (tb.ProcessKeyPreviewReturnValue, "14");
251 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "15");
252 tb.ProcessKeyPreviewCalled = false;
253 tb.ProcessKeyEventArgsCalled = false;
255 /* test left behavior (within the string) */
256 tb.IsInEditOrNavigateMode = true;
257 tb.Text = "hello world";
258 tb.SelectionStart = 5;
259 tb.SelectionLength = 0;
262 m.Msg = 0x0100 /* WM_KEYDOWN */;
263 m.WParam = (IntPtr)Keys.Left;
265 rv = tb.DoProcessKeyMessage (ref m);
266 Assert.AreEqual (0x0100, m.Msg, "16");
267 Assert.AreEqual (Keys.Left, (Keys)m.WParam.ToInt32(), "17");
268 Assert.IsFalse (rv, "18");
269 Assert.IsTrue (tb.IsInEditOrNavigateMode, "19");
270 Assert.IsFalse (tb.ProcessKeyPreviewCalled, "20");
271 Assert.IsTrue (tb.ProcessKeyEventArgsCalled, "21");
272 Assert.IsFalse (tb.ProcessKeyEventArgsReturnValue, "21.5");
273 tb.ProcessKeyPreviewCalled = false;
274 tb.ProcessKeyEventArgsCalled = false;
276 /* test left behavior (at the left-most position) */
277 tb.IsInEditOrNavigateMode = true;
278 tb.Text = "hello world";
279 tb.SelectionStart = 0;
280 tb.SelectionLength = 0;
283 m.Msg = 0x0100 /* WM_KEYDOWN */;
284 m.WParam = (IntPtr)Keys.Left;
286 rv = tb.DoProcessKeyMessage (ref m);
287 Assert.AreEqual (0x0100, m.Msg, "22");
288 Assert.AreEqual (Keys.Left, (Keys)m.WParam.ToInt32(), "23");
289 Assert.IsFalse (rv, "24");
290 Assert.IsTrue (tb.IsInEditOrNavigateMode, "25");
291 Assert.IsTrue (tb.ProcessKeyPreviewCalled, "26");
292 Assert.IsFalse (tb.ProcessKeyPreviewReturnValue, "26");
293 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "27");
294 tb.ProcessKeyPreviewCalled = false;
295 tb.ProcessKeyEventArgsCalled = false;
297 /* test right behavior (within the string) */
298 tb.IsInEditOrNavigateMode = true;
299 tb.Text = "hello world";
300 tb.SelectionStart = 5;
301 tb.SelectionLength = 0;
304 m.Msg = 0x0100 /* WM_KEYDOWN */;
305 m.WParam = (IntPtr)Keys.Right;
307 rv = tb.DoProcessKeyMessage (ref m);
308 Assert.AreEqual (0x0100, m.Msg, "28");
309 Assert.AreEqual (Keys.Right, (Keys)m.WParam.ToInt32(), "29");
310 Assert.IsFalse (rv, "30");
311 Assert.IsTrue (tb.IsInEditOrNavigateMode, "31");
312 Assert.IsFalse (tb.ProcessKeyPreviewCalled, "32");
313 Assert.IsTrue (tb.ProcessKeyEventArgsCalled, "33");
314 Assert.IsFalse (tb.ProcessKeyEventArgsReturnValue, "33.5");
315 tb.ProcessKeyPreviewCalled = false;
316 tb.ProcessKeyEventArgsCalled = false;
318 /* test right behavior (at the left-most position) */
319 tb.IsInEditOrNavigateMode = true;
320 tb.Text = "hello world";
321 tb.SelectionStart = tb.Text.Length;
322 tb.SelectionLength = 0;
325 m.Msg = 0x0100 /* WM_KEYDOWN */;
326 m.WParam = (IntPtr)Keys.Right;
328 rv = tb.DoProcessKeyMessage (ref m);
329 Assert.AreEqual (0x0100, m.Msg, "34");
330 Assert.AreEqual (Keys.Right, (Keys)m.WParam.ToInt32(), "35");
331 Assert.IsFalse (rv, "36");
332 Assert.IsTrue (tb.IsInEditOrNavigateMode, "37");
333 Assert.IsTrue (tb.ProcessKeyPreviewCalled, "38");
334 Assert.IsFalse (tb.ProcessKeyPreviewReturnValue, "39");
335 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "40");
336 tb.ProcessKeyPreviewCalled = false;
337 tb.ProcessKeyEventArgsCalled = false;
339 /* test Tab behavior */
340 tb.IsInEditOrNavigateMode = false;
342 m.Msg = 0x0100 /* WM_KEYDOWN */;
343 m.WParam = (IntPtr)Keys.Tab;
345 rv = tb.DoProcessKeyMessage (ref m);
346 Assert.AreEqual (0x0100, m.Msg, "41");
347 Assert.AreEqual (Keys.Tab, (Keys)m.WParam.ToInt32(), "42");
348 Assert.IsFalse (rv, "43");
349 Assert.IsFalse (tb.IsInEditOrNavigateMode, "44");
350 Assert.IsFalse (tb.ProcessKeyPreviewCalled, "45");
351 Assert.IsTrue (tb.ProcessKeyEventArgsCalled, "46");
352 Assert.IsFalse (tb.ProcessKeyEventArgsReturnValue, "46.5");
353 tb.ProcessKeyPreviewCalled = false;
354 tb.ProcessKeyEventArgsCalled = false;
356 /* test Up behavior */
357 tb.IsInEditOrNavigateMode = false;
359 m.Msg = 0x0100 /* WM_KEYDOWN */;
360 m.WParam = (IntPtr)Keys.Up;
362 rv = tb.DoProcessKeyMessage (ref m);
363 Assert.AreEqual (0x0100, m.Msg, "47");
364 Assert.AreEqual (Keys.Up, (Keys)m.WParam.ToInt32(), "48");
365 Assert.IsFalse (rv, "49");
366 Assert.IsFalse (tb.IsInEditOrNavigateMode, "50");
367 Assert.IsTrue (tb.ProcessKeyPreviewCalled, "51");
368 Assert.IsFalse (tb.ProcessKeyPreviewReturnValue, "52");
369 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "53");
370 tb.ProcessKeyPreviewCalled = false;
371 tb.ProcessKeyEventArgsCalled = false;
373 /* test Down behavior */
374 tb.IsInEditOrNavigateMode = false;
376 m.Msg = 0x0100 /* WM_KEYDOWN */;
377 m.WParam = (IntPtr)Keys.Down;
379 rv = tb.DoProcessKeyMessage (ref m);
380 Assert.AreEqual (0x0100, m.Msg, "54");
381 Assert.AreEqual (Keys.Down, (Keys)m.WParam.ToInt32(), "55");
382 Assert.IsFalse (rv, "56");
383 Assert.IsFalse (tb.IsInEditOrNavigateMode, "57");
384 Assert.IsTrue (tb.ProcessKeyPreviewCalled, "58");
385 Assert.IsFalse (tb.ProcessKeyPreviewReturnValue, "59");
386 Assert.IsFalse (tb.ProcessKeyEventArgsCalled, "60");
387 tb.ProcessKeyPreviewCalled = false;
388 tb.ProcessKeyEventArgsCalled = false;
392 [Category ("NotWorking")]
393 public void TestWndProc_WM_LBUTTONDOWN ()
395 TextBoxPoker tb = new TextBoxPoker ();
396 DataGridMock dg = new DataGridMock ();
401 tb.MouseDown += new MouseEventHandler (mouse_down_handler);
403 tb.IsInEditOrNavigateMode = true;
406 m.Msg = 0x0201 /* WM_LBUTTONDOWN */;
407 m.LParam=(IntPtr) (10 << 16 | 10);
409 tb.DoWndProc (ref m);
411 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1");
412 Assert.IsTrue (mouse_down_raised, "2");
414 tb.IsInEditOrNavigateMode = false;
417 m.Msg = 0x0201 /* WM_LBUTTONDOWN */;
418 m.LParam=(IntPtr) (10 << 16 | 10);
420 tb.DoWndProc (ref m);
422 Assert.IsFalse (tb.IsInEditOrNavigateMode, "3");
423 Assert.IsTrue (mouse_down_raised, "4");