From 665f17ce2c12105697b98655a6c398dd2ad63b2f Mon Sep 17 00:00:00 2001 From: Richard Worth Date: Mon, 9 Jun 2008 05:40:24 +0000 Subject: [PATCH] tests - added selectable unit tests --- tests/selectable.html | 46 ++++++++++ tests/selectable.js | 205 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 251 insertions(+) create mode 100644 tests/selectable.html create mode 100644 tests/selectable.js diff --git a/tests/selectable.html b/tests/selectable.html new file mode 100644 index 000000000..7f959ae87 --- /dev/null +++ b/tests/selectable.html @@ -0,0 +1,46 @@ + + + + jQuery UI Selectable Test Suite + + + + + + + + + + + + + + + + + + + + + + +

jQuery UI Selectable Test Suite

+ +

+ +
    + +
    + +
    + + + diff --git a/tests/selectable.js b/tests/selectable.js new file mode 100644 index 000000000..2c127b11f --- /dev/null +++ b/tests/selectable.js @@ -0,0 +1,205 @@ +/* + * selectable unit tests + */ + +// +// Selectable Test Helper Functions +// +var el; + +var drag = function(dx, dy) { + var off = el.offset(), pos = { clientX: off.left, clientY: off.top }; + el.simulate("mousedown", pos); + $(document).simulate("mousemove", pos); + pos.clientX += dx; + pos.clientY += dy; + $(document).simulate("mousemove", pos); + $(document).simulate("mouseup", pos); +} + +var border = function(el, side) { return parseInt(el.css('border-' + side + '-width')); } + +var margin = function(el, side) { return parseInt(el.css('margin-' + side)); } + +// Selectable Tests +module("selectable"); + +test("init", function() { + expect(6); + + $("#selectable1").selectable().remove(); + ok(true, '.selectable() called on element'); + + $([]).selectable().remove(); + ok(true, '.selectable() called on empty collection'); + + $("
    ").selectable().remove(); + ok(true, '.selectable() called on disconnected DOMElement'); + + $("
    ").selectable().selectable("foo").remove(); + ok(true, 'arbitrary method called after init'); + + el = $("
    ").selectable() + var foo = el.data("foo.selectable"); + el.remove(); + ok(true, 'arbitrary option getter after init'); + + $("
    ").selectable().data("foo.selectable", "bar").remove(); + ok(true, 'arbitrary option setter after init'); +}); + +test("destroy", function() { + expect(6); + + $("#selectable1").selectable().selectable("destroy").remove(); + ok(true, '.selectable("destroy") called on element'); + + $([]).selectable().selectable("destroy").remove(); + ok(true, '.selectable("destroy") called on empty collection'); + + $("
    ").selectable().selectable("destroy").remove(); + ok(true, '.selectable("destroy") called on disconnected DOMElement'); + + $("
    ").selectable().selectable("destroy").selectable("foo").remove(); + ok(true, 'arbitrary method called after destroy'); + + el = $("
    ").selectable(); + var foo = el.selectable("destroy").data("foo.selectable"); + el.remove(); + ok(true, 'arbitrary option getter after destroy'); + + $("
    ").selectable().selectable("destroy").data("foo.selectable", "bar").remove(); + ok(true, 'arbitrary option setter after destroy'); +}); + +test("defaults", function() { + el = $('#selectable1').selectable(); + var defaults = { + autoRefresh: true, + filter: '*' + }; + $.each(defaults, function(key, val) { + var actual = el.data(key + ".selectable"), expected = val, + method = (expected && expected.constructor == Object) ? + compare2 : equals; + method(actual, expected, key); + }); + el.remove(); +}); + +module("selectable: Options"); + +test("autoRefresh", function() { + expect(3); + el = $("#selectable1"); + var actual, sel = $("*", el), selected = function() { actual += 1 }; + + actual = 0; + el = $("#selectable1").selectable({ autoRefresh: false, selected: selected }); + sel.hide(); + drag(1000, 1000); + equals(actual, sel.length); + el.selectable("destroy"); + + actual = 0; + sel.show(); + el = $("#selectable1").selectable({ autoRefresh: true, selected: selected }); + sel.hide(); + drag(1000, 1000); + equals(actual, 0); + sel.show(); + drag(1000, 1000); + equals(actual, sel.length); + el.selectable("destroy"); + sel.show(); +}); + +test("filter", function() { + expect(2); + el = $("#selectable1"); + var actual, sel = $("*", el), selected = function() { actual += 1 }; + + actual = 0; + el = $("#selectable1").selectable({ filter: '.special', selected: selected }); + drag(1000, 1000); + ok(sel.length != 1, "this test assumes more than 1 selectee"); + equals(actual, 1); + el.selectable("destroy"); +}); + +module("selectable: Methods"); + +test("disable", function() { + expect(2); + var fired = false; + + el = $("#selectable1"); + el.selectable({ + disabled: false, + start: function() { fired = true; } + }); + el.simulate("drag", 20, 20); + equals(fired, true, "start fired"); + el.selectable("disable"); + fired = false; + el.simulate("drag", 20, 20); + equals(fired, false, "start fired"); + el.selectable("destroy"); +}); + +test("enable", function() { + expect(2); + var fired = false; + + el = $("#selectable1"); + el.selectable({ + disabled: true, + start: function() { fired = true; } + }); + el.simulate("drag", 20, 20); + equals(fired, false, "start fired"); + el.selectable("enable"); + el.simulate("drag", 20, 20); + equals(fired, true, "start fired"); + el.selectable("destroy"); +}); + +test("toggle", function() { + expect(2); + + el = $("#selectable1").selectable({ disabled: true }).selectable("toggle"); + equals(el.data("disabled.selectable"), false, "disabled -> enabled"); + el.selectable("destroy"); + + el = $("#selectable1").selectable({ disabled: false }).selectable("toggle"); + equals(el.data("disabled.selectable"), true, "enabled -> disabled"); + el.selectable("destroy"); +}); + +module("selectable: Callbacks"); + +test("start", function() { + expect(2); + el = $("#selectable1"); + el.selectable({ + start: function(ev, ui) { + ok(true, "drag fired start callback"); + equals(this, el[0], "context of callback"); + } + }); + el.simulate("drag", 20, 20); +}); + +test("stop", function() { + expect(2); + el = $("#selectable1"); + el.selectable({ + start: function(ev, ui) { + ok(true, "drag fired stop callback"); + equals(this, el[0], "context of callback"); + } + }); + el.simulate("drag", 20, 20); +}); + +module("selectable: Tickets"); -- 2.39.5