diff options
| -rw-r--r-- | test_harnesses/automated.html | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/test_harnesses/automated.html b/test_harnesses/automated.html new file mode 100644 index 00000000..03c6d673 --- /dev/null +++ b/test_harnesses/automated.html @@ -0,0 +1,147 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <script type="text/javascript" src="../lib/utils.js"></script> + <script type="text/javascript" src="../lib/keyboardUtils.js"></script> + <script type="text/javascript" src="../linkHints.js"></script> + <script type="text/javascript" src="../lib/clipboard.js"></script> + <script type="text/javascript" src="../vimiumFrontend.js"></script> + <script type="text/javascript" src="shoulda.js/shoulda.js"></script> + <script type="text/javascript"> + /* + * Dispatching keyboard events via the DOM would require async tests, + * which tend to be more complicated. Here we create mock events and + * invoke the handlers directly. + */ + function mockKeyboardEvent(keyChar) { + var event = {}; + event.charCode = keyCodes[keyChar] !== undefined ? keyCodes[keyChar] : keyChar.charCodeAt(0); + event.keyIdentifier = "U+00" + event.charCode.toString(16); + event.keyCode = event.charCode; + event.stopPropagation = function(){}; + event.preventDefault = function(){}; + return event; + } + + var testVariables = {}; + + /* + * Generate tests that are common to both default and filtered + * link hinting modes. + */ + function createGeneralHintTests(isFilteredMode) { + context("Link hints", + setup(function() { + settings.values.filterLinkHints = isFilteredMode ? "true" : "false"; + initializeLinkHints(); + }), + should("create hints when activated, discard them when deactivated", function() { + linkHints.activateMode(); + assert.isFalse(linkHints.hintMarkerContainingDiv == null); + linkHints.deactivateMode(); + assert.isTrue(linkHints.hintMarkerContainingDiv == null); + }), + context("Positioning", + setup(function() { + linkHints.activateMode(); + }), + tearDown(function() { + linkHints.deactivateMode(); + }), + should("position item 1", function() { + assert.equal(19, linkHints.hintMarkers[0].getClientRects()[0].left); + assert.equal(17, linkHints.hintMarkers[0].getClientRects()[0].top); + }), + should("position item 2", function() { + stub(testVariables, "originalLeft", linkHints.hintMarkers[1].getClientRects()[0].left); + stub(testVariables, "originalTop", linkHints.hintMarkers[1].getClientRects()[0].left); + linkHints.deactivateMode(); + document.body.style.position = "relative"; + linkHints.activateMode(); + assert.equal(testVariables.originalLeft, linkHints.hintMarkers[1].getClientRects()[0].left); + assert.equal(testVariables.originalTop, linkHints.hintMarkers[1].getClientRects()[0].top); + document.body.style.position = "static"; + }) + ) + ); + } + createGeneralHintTests(false); + createGeneralHintTests(true); + + context("Alphabetical link hints", + setup(function() { + settings.values.filterLinkHints = "false"; + initializeLinkHints(); + linkHints.activateMode(); + }), + tearDown(function() { + linkHints.deactivateMode(); + }), + should("label the hints correctly", function() { + var hintStrings = ["ss", "sa", "sd"]; + stub(testVariables, "hintStrings", "sad"); + for (var i = 0; i < 3; i++) + assert.equal(hintStrings[i], + linkHints.hintMarkers[i].getAttribute("hintString")); + }), + should("narrow the hints", function() { + linkHints.onKeyDownInMode(mockKeyboardEvent("A")); + assert.equal("none", + linkHints.hintMarkers[0].style.display); + assert.equal("", + linkHints.hintMarkers[15].style.display); + }) + ); + + context("Filtered link hints", + setup(function() { + settings.values.filterLinkHints = "true"; + initializeLinkHints(); + linkHints.activateMode(); + }), + tearDown(function() { + linkHints.deactivateMode(); + }), + should("label the hints correctly", function() { + for (var i = 0; i < 16; i++) + assert.equal((i + 1).toString(), + linkHints.hintMarkers[i].getAttribute("hintString")); + }), + should("narrow the hints", function() { + linkHints.onKeyDownInMode(mockKeyboardEvent("T")); + linkHints.onKeyDownInMode(mockKeyboardEvent("R")); + assert.equal("none", + linkHints.hintMarkers[0].style.display); + assert.equal("1", + linkHints.hintMarkers[1].getAttribute("hintString")); + assert.equal("", + linkHints.hintMarkers[1].style.display); + }) + ); + + // ensure the extension has time to load before commencing the tests + document.addEventListener("DOMContentLoaded", function(){ + setTimeout(Tests.run, 200); + }); + </script> + </head> + <body> + <a id="1" style="position: absolute; top: 17px; left: 19px;">test</a> + <a id="2">tress</a> + <a id="3">trait</a> + <a id="4">trait</a> + <a id="5">trait</a> + <a id="6">trait</a> + <a id="7">trait</a> + <a id="8">trait</a> + <a id="9">trait</a> + <a id="10">trait</a> + <a id="11">trait</a> + <a id="12">trait</a> + <a id="13">trait</a> + <a id="14">trait</a> + <a id="15">trait</a> + <a id="16">trait</a> + </body> +</html> |
