diff --git a/test/module/webpage/keydown-event.js b/test/module/webpage/keydown-event.js
new file mode 100644
index 00000000..f8ede6b8
--- /dev/null
+++ b/test/module/webpage/keydown-event.js
@@ -0,0 +1,19 @@
+var assert = require('../../assert');
+var webpage = require('webpage');
+
+var page = webpage.create();
+
+page.evaluate(function() {
+ window.addEventListener('keydown', function(event) {
+ window.loggedEvent = window.loggedEvent || [];
+ window.loggedEvent.push(event);
+ }, false);
+});
+
+page.sendEvent('keydown', page.event.key.A);
+var loggedEvent = page.evaluate(function() {
+ return window.loggedEvent;
+});
+
+assert.equal(loggedEvent.length, 1);
+assert.equal(loggedEvent[0].which, page.event.key.A);
diff --git a/test/module/webpage/keypress-event.js b/test/module/webpage/keypress-event.js
new file mode 100644
index 00000000..7abbc7d2
--- /dev/null
+++ b/test/module/webpage/keypress-event.js
@@ -0,0 +1,64 @@
+var assert = require('../../assert');
+var webpage = require('webpage');
+
+var page = webpage.create();
+
+page.evaluate(function() {
+ window.addEventListener('keypress', function(event) {
+ window.loggedEvent = window.loggedEvent || [];
+ window.loggedEvent.push(event);
+ }, false);
+});
+
+page.sendEvent('keypress', page.event.key.C);
+var loggedEvent = page.evaluate(function() {
+ return window.loggedEvent;
+});
+
+assert.equal(loggedEvent.length, 1);
+assert.equal(loggedEvent[0].which, page.event.key.C);
+
+
+// Send keypress events to an input element and observe the effect.
+
+page.content = '';
+page.evaluate(function() {
+ document.querySelector('input').focus();
+});
+
+function getText() {
+ return page.evaluate(function() {
+ return document.querySelector('input').value;
+ });
+}
+
+page.sendEvent('keypress', page.event.key.A);
+assert.equal(getText(), 'A');
+page.sendEvent('keypress', page.event.key.B);
+assert.equal(getText(), 'AB');
+page.sendEvent('keypress', page.event.key.Backspace);
+assert.equal(getText(), 'A');
+page.sendEvent('keypress', page.event.key.Backspace);
+assert.equal(getText(), '');
+
+page.sendEvent('keypress', 'XYZ');
+assert.equal(getText(), 'XYZ');
+
+// Special character: A with umlaut
+page.sendEvent('keypress', 'ä');
+assert.equal(getText(), 'XYZä');
+
+// 0x02000000 is the Shift modifier.
+page.sendEvent('keypress', page.event.key.Home, null, null, 0x02000000);
+page.sendEvent('keypress', page.event.key.Delete);
+assert.equal(getText(), '');
+
+// Cut and Paste
+// 0x04000000 is the Control modifier.
+page.sendEvent('keypress', 'ABCD');
+assert.equal(getText(), 'ABCD');
+page.sendEvent('keypress', page.event.key.Home, null, null, 0x02000000);
+page.sendEvent('keypress', 'x', null, null, 0x04000000);
+assert.equal(getText(), '');
+page.sendEvent('keypress', 'v', null, null, 0x04000000);
+assert.equal(getText(), 'ABCD');
diff --git a/test/module/webpage/keyup-event.js b/test/module/webpage/keyup-event.js
new file mode 100644
index 00000000..0eca174c
--- /dev/null
+++ b/test/module/webpage/keyup-event.js
@@ -0,0 +1,19 @@
+var assert = require('../../assert');
+var webpage = require('webpage');
+
+var page = webpage.create();
+
+page.evaluate(function() {
+ window.addEventListener('keyup', function(event) {
+ window.loggedEvent = window.loggedEvent || [];
+ window.loggedEvent.push(event);
+ }, false);
+});
+
+page.sendEvent('keyup', page.event.key.B);
+var loggedEvent = page.evaluate(function() {
+ return window.loggedEvent;
+});
+
+assert.equal(loggedEvent.length, 1);
+assert.equal(loggedEvent[0].which, page.event.key.B);
diff --git a/test/webpage-spec.js b/test/webpage-spec.js
index 630f77de..15f34c2c 100644
--- a/test/webpage-spec.js
+++ b/test/webpage-spec.js
@@ -173,157 +173,6 @@ describe("WebPage object", function() {
checkViewportSize(page, {height:300,width:400});
- it("should handle keydown event", function() {
- runs(function() {
- page.evaluate(function() {
- window.addEventListener('keydown', function(event) {
- window.loggedEvent = window.loggedEvent || {};
- window.loggedEvent.keydown = event;
- }, false);
- });
- page.sendEvent('keydown', page.event.key.A);
- });
-
- waits(50);
-
- runs(function() {
- var event = page.evaluate(function() {
- return window.loggedEvent.keydown;
- });
- expect(event.which).toEqual(page.event.key.A);
- });
- });
-
- it("should handle keyup event", function() {
- runs(function() {
- page.evaluate(function() {
- window.addEventListener('keyup', function(event) {
- window.loggedEvent = window.loggedEvent || {};
- window.loggedEvent.keyup = event;
- }, false);
- });
- page.sendEvent('keyup', page.event.key.A);
- });
-
- waits(50);
-
- runs(function() {
- var event = page.evaluate(function() {
- return window.loggedEvent.keyup;
- });
- expect(event.which).toEqual(page.event.key.A);
- });
- });
-
- it("should handle keypress event", function() {
- runs(function() {
- page.evaluate(function() {
- window.addEventListener('keypress', function(event) {
- window.loggedEvent = window.loggedEvent || {};
- window.loggedEvent.keypress = event;
- }, false);
- });
- page.sendEvent('keypress', page.event.key.A);
- });
-
- waits(50);
-
- runs(function() {
- var event = page.evaluate(function() {
- return window.loggedEvent.keypress;
- });
- expect(event.which).toEqual(page.event.key.A);
- });
- });
-
- it("should handle keypress event with inputs", function() {
- runs(function() {
- page.content = '';
- page.evaluate(function() {
- document.querySelector('input').focus();
- });
- var getText = function() {
- return page.evaluate(function() {
- return document.querySelector('input').value;
- });
- };
- page.sendEvent('keypress', page.event.key.A);
- expect(getText()).toEqual("A");
- page.sendEvent('keypress', page.event.key.B);
- expect(getText()).toEqual("AB");
- page.sendEvent('keypress', page.event.key.Backspace);
- expect(getText()).toEqual("A");
- });
- });
-
- it("should handle keypress event of string with inputs", function() {
- runs(function() {
- page.content = '';
- page.evaluate(function() {
- document.querySelector('input').focus();
- });
- page.sendEvent('keypress', "ABCD");
- // 0x02000000 is the Shift modifier.
- page.sendEvent('keypress', page.event.key.Home, null, null, 0x02000000);
- page.sendEvent('keypress', page.event.key.Delete);
- var text = page.evaluate(function() {
- return document.querySelector('input').value;
- });
- expect(text).toEqual("");
- });
- });
-
- it("should handle key events with modifier keys", function() {
- runs(function() {
- page.content = '';
- page.evaluate(function() {
- document.querySelector('input').focus();
- });
- page.sendEvent('keypress', "ABCD");
- var text = page.evaluate(function() {
- return document.querySelector('input').value;
- });
- expect(text).toEqual("ABCD");
- });
- });
-
- it("should send proper key codes for text", function () {
- runs(function() {
- page.content = '';
- page.evaluate(function() {
- document.querySelector('input').focus();
- });
- page.sendEvent('keypress', "ABCD");
- // 0x02000000 is the Shift modifier.
- page.sendEvent('keypress', page.event.key.Home, null, null, 0x02000000);
- // 0x04000000 is the Control modifier.
- page.sendEvent('keypress', 'x', null, null, 0x04000000);
- var text = page.evaluate(function() {
- return document.querySelector('input').value;
- });
- expect(text).toEqual("");
- page.sendEvent('keypress', 'v', null, null, 0x04000000);
- text = page.evaluate(function() {
- return document.querySelector('input').value;
- });
- expect(text).toEqual("ABCD");
- });
- });
-
- it("should handle keypress event of umlaut char with inputs", function() {
- runs(function() {
- page.content = '';
- page.evaluate(function() {
- document.querySelector('input').focus();
- });
- page.sendEvent('keypress', "ä");
- var text = page.evaluate(function() {
- return document.querySelector('input').value;
- });
- expect(text).toEqual("ä");
- });
- });
-
it("should handle mousedown event", function() {
runs(function() {
page.evaluate(function() {