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> | 
