@qooxdoo/framework
Version:
The JS Framework for Coders
277 lines (221 loc) • 7.87 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Christian Hagendorn (chris_schmidt)
************************************************************************ */
qx.Class.define("qx.test.ui.selection.AbstractSingleSelectonTest",
{
extend : qx.test.ui.LayoutTestCase,
type : "abstract",
members :
{
_widget : null,
_mode : null,
_selection : null,
_notInSelection : null,
_getChildren : function() {
throw new Error("Abstract method call: _getChildren()");
},
_createTestElement : function(name)
{
throw new Error("Abstract method call: _createTestElement()");
},
_assertArrayEquals : function(expected, found, message)
{
expected.sort();
found.sort();
this.assertArrayEquals(expected, found, message);
},
testGetSelection : function()
{
var result = this._widget.getSelection();
this._assertArrayEquals(this._selection, result,
"The result of the selection is wrong");
},
testSetSelection : function()
{
this._testSetSelection([this._notInSelection[0]]);
},
testDisabledSetSelection : function()
{
this._widget.setEnabled(false);
this._testSetSelection([this._notInSelection[0]]);
},
_testSetSelection : function(selection)
{
var that = this;
var widget = this._widget;
this._selection = selection;
// Tests that the event is fired and the event contains the right widget
this.assertEventFired(widget, "changeSelection", function()
{
widget.setSelection(that._selection);
that.flush();
}, function(event)
{
var data = event.getData();
that._assertArrayEquals(that._selection, data, "The result of the" +
" 'changeSelection' event is wrong!");
}, "'changeSelection' event not fired!");
// Tests the result from "getSelection"
var result = this._widget.getSelection();
this._assertArrayEquals(this._selection, result, "The result of" +
" 'getSelection' method is wrong!");
},
testSameSetSelection : function()
{
var that = this;
var widget = this._widget;
this._assertArrayEquals(this._selection, this._widget.getSelection(),
"The test setup is wrong!");
this.assertEventNotFired(widget, "changeSelection", function() {
widget.setSelection(that._selection);
}, function(event) {}, "'changeSelection' event fired!");
},
testSetSelectionWithNotChildElement : function()
{
var testElement = this._createTestElement("Test Element");
var that = this;
this.assertException(function() {
that._widget.setSelection([testElement]);
}, Error, null, "No error occurs by trying to select an element" +
" which isn't a child element!");
testElement.destroy();
},
testSetSelectionWithTooMuchElements : function()
{
var newSelection = [this._selection[0], this._notInSelection[0]];
var that = this;
this.assertException(function() {
that._widget.setSelection(newSelection);
}, Error, null, "It isn't possible to select more than one element!");
this._assertArrayEquals(this._selection, this._widget.getSelection(),
"The wrong setSelection call has changed the old seclection!");
},
testResetSelection : function()
{
var widget = this._widget;
var that = this;
//Tests that the event is fired and the event contains nothing
this.assertEventFired(widget, "changeSelection", function () {
widget.resetSelection();
that.flush();
}, function(event) {
if (that._mode === "one")
{
that._assertArrayEquals([that._getChildren()[0]], event.getData(),
"The first element isn't selected!");
} else {
that.assertIdentical(0, event.getData().length, "Event isn't empty!");
}
}, "'changeSelection' event not fired!");
// Tests that no item is selected
var result = this._widget.getSelection();
if (this._mode === "one")
{
this._assertArrayEquals([this._getChildren()[0]], result,
"The first element isn't selected!");
} else {
this.assertIdentical(0, result.length, "The result isn't empty!");
}
},
testDisabledResetSelection : function()
{
this._widget.setEnabled(false);
this.testResetSelection();
},
testResetSelectionWithEmptySelection : function()
{
var widget = this._widget;
var that = this;
//Tests that the event is fired and the event contains nothing
this.assertEventFired(widget, "changeSelection", function () {
widget.setSelection([]);
that.flush();
}, function(event) {
if (that._mode === "one")
{
that._assertArrayEquals([that._getChildren()[0]], event.getData(),
"The first element isn't selected!");
} else {
that.assertIdentical(0, event.getData().length, "Event isn't empty!");
}
}, "'changeSelection' event not fired!");
// Tests that no item is selected
var result = this._widget.getSelection();
if (this._mode === "one")
{
this._assertArrayEquals([this._getChildren()[0]], result,
"The first element isn't selected!");
} else {
this.assertIdentical(0, result.length, "The result isn't empty!");
}
},
testIsSelected : function()
{
var result = this._widget.isSelected(this._selection[0]);
this.assertTrue(result, "The wrong item is selected!");
var notSelected = this._notInSelection[0];
result = this._widget.isSelected(notSelected);
this.assertFalse(result, "The wrong item is selected!");
},
testIsSelectedWithNotChildElement : function()
{
var testElement = this._createTestElement("Test Element");
var that = this;
this.assertException(function() {
that._widget.isSelected(testElement);
}, Error, null, "No error occurs by calling 'isSelected' with an" +
" element which isn't a child element!");
testElement.destroy();
},
testIsSelectionEmpty : function()
{
var result = this._widget.isSelectionEmpty();
this.assertFalse(result, "The selection is empty!");
this._widget.resetSelection();
this.flush();
result = this._widget.isSelectionEmpty();
if (this._mode === "one")
{
this.assertFalse(result, "The selection is empty!");
} else {
this.assertTrue(result, "The selection isn't empty!");
}
},
testGetSelectables : function()
{
var items = this._getChildren();
var found = this._widget.getSelectables(true);
this._assertArrayEquals(items, found,
"This list of the returned selectables are wrong!");
},
testDisabledGetSelectables : function()
{
this._widget.setEnabled(false);
this.testGetSelectables();
},
testGetUserSelectables : function()
{
var selectables = [];
var items = this._getChildren();
for (var i = 0; i < items.length; i++)
{
if (i % 2 == 0) {
selectables.push(items[i]);
} else {
items[i].setEnabled(false);
}
}
var found = this._widget.getSelectables();
this._assertArrayEquals(selectables, found,
"This list of the returned selectables are wrong!");
}
}
});