diff options
| author | Stephen Blott | 2014-12-30 15:19:21 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2014-12-30 15:19:21 +0000 | 
| commit | 2e9b9105601a2ea9f454875e776b00baec4299d8 (patch) | |
| tree | 759d1f88f0dbc39265fa0641dc8f02b6a18d441d /tests | |
| parent | a4a591156f451c1d360530fce6674189f384b452 (diff) | |
| parent | c3df7699527f88c660e0d61fafdd1ad334236d77 (diff) | |
| download | vimium-2e9b9105601a2ea9f454875e776b00baec4299d8.tar.bz2 | |
Merge branch 'smblott-link-hints-overlap' into post-1.46
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.html | 1 | ||||
| -rw-r--r-- | tests/dom_tests/dom_utils_test.coffee | 6 | ||||
| -rw-r--r-- | tests/unit_tests/rect_test.coffee | 232 | 
3 files changed, 233 insertions, 6 deletions
| diff --git a/tests/dom_tests/dom_tests.html b/tests/dom_tests/dom_tests.html index 7b154d24..a764b42d 100644 --- a/tests/dom_tests/dom_tests.html +++ b/tests/dom_tests/dom_tests.html @@ -32,6 +32,7 @@      <script type="text/javascript" src="../../lib/utils.js"></script>      <script type="text/javascript" src="../../lib/keyboard_utils.js"></script>      <script type="text/javascript" src="../../lib/dom_utils.js"></script> +    <script type="text/javascript" src="../../lib/rect.js"></script>      <script type="text/javascript" src="../../lib/handler_stack.js"></script>      <script type="text/javascript" src="../../lib/clipboard.js"></script>      <script type="text/javascript" src="../../content_scripts/ui_component.js"></script> diff --git a/tests/dom_tests/dom_utils_test.coffee b/tests/dom_tests/dom_utils_test.coffee index 130a3014..ad8bde3c 100644 --- a/tests/dom_tests/dom_utils_test.coffee +++ b/tests/dom_tests/dom_utils_test.coffee @@ -50,12 +50,6 @@ context "Check visibility",      assert.isTrue (DomUtils.getVisibleClientRect document.getElementById 'foo') != null      assert.isTrue (DomUtils.getVisibleClientRect document.getElementById 'bar') != null -  should "detect opacity:0 links as hidden", -> -    document.getElementById("test-div").innerHTML = """ -    <a id='foo' style='opacity:0'>test</a> -    """ -    assert.equal null, DomUtils.getVisibleClientRect document.getElementById 'foo' -    should "detect links that contain only floated / absolutely-positioned divs as visible", ->      document.getElementById("test-div").innerHTML = """      <a id='foo'> diff --git a/tests/unit_tests/rect_test.coffee b/tests/unit_tests/rect_test.coffee new file mode 100644 index 00000000..cfb26b05 --- /dev/null +++ b/tests/unit_tests/rect_test.coffee @@ -0,0 +1,232 @@ +require "./test_helper.js" +extend(global, require "../../lib/rect.js") + +context "Rect", +  should "set rect properties correctly", -> +    [x1, y1, x2, y2] = [1, 2, 3, 4] +    rect = Rect.create x1, y1, x2, y2 +    assert.equal rect.left, x1 +    assert.equal rect.top, y1 +    assert.equal rect.right, x2 +    assert.equal rect.bottom, y2 +    assert.equal rect.width, x2 - x1 +    assert.equal rect.height, y2 - y1 + +  should "translate rect horizontally", -> +    [x1, y1, x2, y2] = [1, 2, 3, 4] +    x = 5 +    rect1 = Rect.create x1, y1, x2, y2 +    rect2 = Rect.translate rect1, x + +    assert.equal rect1.left + x, rect2.left +    assert.equal rect1.right + x, rect2.right + +    assert.equal rect1.width, rect2.width +    assert.equal rect1.height, rect2.height +    assert.equal rect1.top, rect2.top +    assert.equal rect1.bottom, rect2.bottom + +  should "translate rect vertically", -> +    [x1, y1, x2, y2] = [1, 2, 3, 4] +    y = 5 +    rect1 = Rect.create x1, y1, x2, y2 +    rect2 = Rect.translate rect1, undefined, y + +    assert.equal rect1.top + y, rect2.top +    assert.equal rect1.bottom + y, rect2.bottom + +    assert.equal rect1.width, rect2.width +    assert.equal rect1.height, rect2.height +    assert.equal rect1.left, rect2.left +    assert.equal rect1.right, rect2.right + +context "Rect subtraction", +  context "unchanged by rects outside", +    should "left, above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -2, -2, -1, -1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "left", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -2, 0, -1, 1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "left, below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -2, 2, -1, 3 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right, above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 2, -2, 3, -1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 2, 0, 3, 1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right, below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 2, 2, 3, 3 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 0, -2, 1, -1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 0, 2, 1, 3 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +  context "unchanged by rects touching", +    should "left, above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -1, -1, 0, 0 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "left", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -1, 0, 0, 1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "left, below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create -1, 1, 0, 2 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right, above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 1, -1, 2, 0 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 1, 0, 2, 1 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "right, below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 1, 1, 2, 2 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "above", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 0, -1, 1, 0 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +    should "below", -> +      rect1 = Rect.create 0, 0, 1, 1 +      rect2 = Rect.create 0, 1, 1, 2 + +      rects = Rect.subtract rect1, rect2 +      assert.equal rects.length, 1 +      rect = rects[0] +      assert.isTrue Rect.equals rect1, rect + +  should "have nothing when subtracting itself", -> +    rect = Rect.create 0, 0, 1, 1 +    rects = Rect.subtract rect, rect +    assert.equal rects.length, 0 + +  should "not overlap subtracted rect", -> +    rect = Rect.create 0, 0, 3, 3 +    for x in [-2..2] +      for y in [-2..2] +        for width in [1..3] +          for height in [1..3] +            subtractRect = Rect.create x, y, (x + width), (y + height) +            resultRects = Rect.subtract rect, subtractRect +            for resultRect in resultRects +              assert.isFalse Rect.contains subtractRect, resultRect + +  should "be contained in original rect", -> +    rect = Rect.create 0, 0, 3, 3 +    for x in [-2..2] +      for y in [-2..2] +        for width in [1..3] +          for height in [1..3] +            subtractRect = Rect.create x, y, (x + width), (y + height) +            resultRects = Rect.subtract rect, subtractRect +            for resultRect in resultRects +              assert.isTrue Rect.contains rect, resultRect + +  should "contain the  subtracted rect in the original minus the results", -> +    rect = Rect.create 0, 0, 3, 3 +    for x in [-2..2] +      for y in [-2..2] +        for width in [1..3] +          for height in [1..3] +            subtractRect = Rect.create x, y, (x + width), (y + height) +            resultRects = Rect.subtract rect, subtractRect +            resultComplement = [Rect.copy rect] +            for resultRect in resultRects +              resultComplement = Array::concat.apply [], +                (resultComplement.map (rect) -> Rect.subtract rect, resultRect) +            assert.isTrue (resultComplement.length == 0 or resultComplement.length == 1) +            if resultComplement.length == 1 +              complementRect = resultComplement[0] +              assert.isTrue Rect.contains subtractRect, complementRect | 
