Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

250 lines
6.3 KiB
C#

/**
* SendKeysTest.cs: Test cases for SendKeys
*
* These tests can only run in ms.net one at a time.
* Since ms.net apparently hooks the keyboard to
* implement this, running two tests in a row
* makes the second test run before the hook
* of the first test is released, effectively
* hanging the keyboard. CTRL-ALT-DEL releases
* the keyboard, but the test still hangs.
* Running each test separately works.
*
* Author:
* Andreia Gaita (avidigal@novell.com)
*
* (C) 2005 Novell, Inc. (http://www.novell.com)
*
*/
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Collections;
using NUnit.Framework;
namespace MonoTests.System.Windows.Forms
{
[TestFixture]
[Category("NotDotNet")]
[Category("NotWithXvfb")]
[Category("Interactive")]
public class SendKeysTest : TestHelper {
static Queue keys = new Queue();
internal struct Keys {
public string key;
public bool up;
public bool shift;
public bool ctrl;
public bool alt;
public Keys(string key, bool up, bool shift, bool ctrl, bool alt) {
this.key = key;
this.up = up;
this.shift = shift;
this.ctrl = ctrl;
this.alt = alt;
}
}
internal class Custom: TextBox {
protected override void OnKeyDown(KeyEventArgs e) {
keys.Enqueue(new Keys(e.KeyData.ToString(), false, e.Shift, e.Control, e.Alt));
base.OnKeyDown (e);
}
protected override void OnKeyUp(KeyEventArgs e) {
keys.Enqueue(new Keys(e.KeyData.ToString(), true, e.Shift, e.Control, e.Alt));
base.OnKeyUp (e);
}
}
public SendKeysTest() {
}
Form f;
Timer t;
Custom c;
[Test]
public void SendKeysTest1() {
f = new Form();
f.Activated +=new EventHandler(SendKeysTest1_activated);
c = new Custom();
f.Controls.Add(c);
Application.Run(f);
c.Dispose();
}
private void SendKeysTest1_activated(object sender, EventArgs e) {
SendKeys.SendWait("a");
t = new Timer();
t.Interval = 1;
t.Tick +=new EventHandler(SendKeysTest1_tick);
t.Start();
}
private void SendKeysTest1_tick(object sender, EventArgs e) {
if (f.InvokeRequired) {
f.Invoke (new EventHandler (SendKeysTest1_tick), new object [] { sender, e });
return;
}
t.Stop();
Assert.AreEqual(2, keys.Count, "#A1");
Keys k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#A2");
Assert.IsFalse(k.shift, "#A3");
Assert.IsFalse(k.ctrl, "#A4");
Assert.IsFalse(k.alt, "#A5");
Assert.AreEqual("A", k.key, "#A6");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#A2");
Assert.IsFalse(k.shift, "#A3");
Assert.IsFalse(k.ctrl, "#A4");
Assert.IsFalse(k.alt, "#A5");
Assert.AreEqual("A", k.key, "#A6");
t.Dispose();
f.Close ();
}
[SetUp]
protected override void SetUp () {
keys.Clear();
base.SetUp ();
}
[Test]
public void SendKeysTest2() {
f = new Form();
f.Activated +=new EventHandler(SendKeysTest2_activated);
c = new Custom();
f.Controls.Add(c);
Application.Run(f);
c.Dispose();
}
private void SendKeysTest2_activated(object sender, EventArgs e) {
SendKeys.SendWait("+(abc){BACKSPACE 2}");
t = new Timer();
t.Interval = 1;
t.Tick +=new EventHandler(SendKeysTest2_tick);
t.Start();
}
private void SendKeysTest2_tick(object sender, EventArgs e) {
t.Stop();
if (f.InvokeRequired) {
f.Invoke (new EventHandler (SendKeysTest2_tick), new object [] {sender, e});
return;
}
Assert.AreEqual(12, keys.Count, "#A1");
Keys k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#A2");
Assert.IsTrue(k.shift, "#A3");
Assert.IsFalse(k.ctrl, "#A4");
Assert.IsFalse(k.alt, "#A5");
k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#A7");
Assert.IsTrue(k.shift, "#A8");
Assert.IsFalse(k.ctrl, "#A9");
Assert.IsFalse(k.alt, "#A10");
Assert.AreEqual("A, Shift", k.key, "#A11");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#A12");
Assert.IsTrue(k.shift, "#A13");
Assert.IsFalse(k.ctrl, "#A14");
Assert.IsFalse(k.alt, "#A15");
Assert.AreEqual("A, Shift", k.key, "#A16");
k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#A17");
Assert.IsTrue(k.shift, "#A18");
Assert.IsFalse(k.ctrl, "#A19");
Assert.IsFalse(k.alt, "#A20");
Assert.AreEqual("B, Shift", k.key, "#A21");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#A22");
Assert.IsTrue(k.shift, "#A23");
Assert.IsFalse(k.ctrl, "#A24");
Assert.IsFalse(k.alt, "#A25");
Assert.AreEqual("B, Shift", k.key, "#A26");
k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#A27");
Assert.IsTrue(k.shift, "#A28");
Assert.IsFalse(k.ctrl, "#A28");
Assert.IsFalse(k.alt, "#A29");
Assert.AreEqual("C, Shift", k.key, "#A30");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#A31");
Assert.IsTrue(k.shift, "#A32");
Assert.IsFalse(k.ctrl, "#A33");
Assert.IsFalse(k.alt, "#A34");
Assert.AreEqual("C, Shift", k.key, "#A35");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#A36");
Assert.IsFalse(k.shift, "#A37");
Assert.IsFalse(k.ctrl, "#A38");
Assert.IsFalse(k.alt, "#A39");
Assert.AreEqual("ShiftKey", k.key, "#A40");
k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#b1");
Assert.IsFalse(k.shift, "#b2");
Assert.IsFalse(k.ctrl, "#b3");
Assert.IsFalse(k.alt, "#b4");
Assert.AreEqual("Back", k.key, "#b5");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#b6");
Assert.IsFalse(k.shift, "#b7");
Assert.IsFalse(k.ctrl, "#b8");
Assert.IsFalse(k.alt, "#b9");
Assert.AreEqual("Back", k.key, "#b10");
k = (Keys)keys.Dequeue();
Assert.IsFalse(k.up, "#c1");
Assert.IsFalse(k.shift, "#c2");
Assert.IsFalse(k.ctrl, "#c3");
Assert.IsFalse(k.alt, "#c4");
Assert.AreEqual("Back", k.key, "#c5");
k = (Keys)keys.Dequeue();
Assert.IsTrue(k.up, "#c6");
Assert.IsFalse(k.shift, "#c7");
Assert.IsFalse(k.ctrl, "#c8");
Assert.IsFalse(k.alt, "#c9");
Assert.AreEqual("Back", k.key, "#c10");
Assert.AreEqual(0, keys.Count, "#d1");
Assert.AreEqual("A", c.Text, "#e1");
t.Dispose();
f.Close ();
}
}
}