aboutsummaryrefslogtreecommitdiffstats
path: root/test_harnesses/automated.html
diff options
context:
space:
mode:
Diffstat (limited to 'test_harnesses/automated.html')
-rw-r--r--test_harnesses/automated.html147
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>