a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
250 lines
6.3 KiB
C#
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 ();
|
|
}
|
|
|
|
}
|
|
}
|