@qooxdoo/framework
Version:
The JS Framework for Coders
136 lines (107 loc) • 3.97 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2017 Martijn Evers, The Netherlands
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Martijn Evers (mever)
************************************************************************ */
qx.Class.define("qx.test.ui.form.VirtualSelectBox",
{
extend : qx.test.ui.LayoutTestCase,
members :
{
setUp : function()
{
this.__selectBox = new qx.ui.form.VirtualSelectBox();
this.getRoot().add(this.__selectBox);
this.flush();
},
tearDown : function()
{
this.base(arguments);
this.__selectBox.destroy();
this.__selectBox = null;
},
__simulateUiInteraction : function() {
// focus -> array key down -> array key down -> enter
this.__selectBox.getSelection().setItem(0, this.__selectBox.getModel().getItem(1));
},
testChangeValueEvent : function()
{
var m = qx.data.marshal.Json.createModel(["a", "b"]);
this.__selectBox.addListenerOnce("changeValue", function(e) {
this.assertIdentical("a", e.getData());
this.assertNull(e.getOldData());
}.bind(this));
this.__selectBox.setModel(m);
this.__selectBox.addListenerOnce("changeValue", function(e) {
this.assertIdentical("b", e.getData());
this.assertIdentical("a", e.getOldData());
}.bind(this));
this.__simulateUiInteraction();
},
testChangeModelWhileNotVisible : function()
{
"use strict";
var selectBox = new qx.ui.form.VirtualSelectBox(); // We don't want to use a selectbox that has been added to a layout item.
selectBox.setLabelPath('b');
var items = qx.data.marshal.Json.createModel([{
a: 123,
b: 'item 1'
}, {
a: 456,
b: 'item 2'
}]);
items.setAutoDisposeItems(true);
selectBox.setModel(items);
try {
items.pop();
} catch (e) {
this.assertTrue(false, "Changing the model should not cause an exception in VirtualDropDownList#_getAvailableHeight");
}
items.dispose();
},
"test dropdown list same width as selectbox" : function () {
"use strict";
var test = this;
var m = qx.data.marshal.Json.createModel([
"asdddddddddddddddddddddddddddddddddddddddddddddddddddd",
"dsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]);
this.__selectBox.setAllowGrowDropDown(false);
this.__selectBox.setModel(m);
this.__selectBox.setWidth(150);
this.__selectBox.open();
this.flush();
setTimeout(function () {
test.assertIdentical(test.__selectBox.getWidth(), test.__selectBox.getBounds().width);
test.assertIdentical(test.__selectBox.getWidth(), test.__selectBox.getChildControl('dropdown').getBounds().width);
test.resume();
}, 10);
this.wait();
},
"test dropdown list wider than selectbox" : function () {
"use strict";
var test = this;
var m = qx.data.marshal.Json.createModel([
"asddddddddddddddddddddddddddddddddddddddddddddddddddddasddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"dsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]);
this.__selectBox.setAllowGrowDropDown(true);
this.__selectBox.setModel(m);
this.__selectBox.setWidth(150);
this.__selectBox.open();
this.flush();
setTimeout(function () {
test.assertIdentical(test.__selectBox.getWidth(), test.__selectBox.getBounds().width);
test.assertTrue(test.__selectBox.getChildControl('dropdown').getBounds().width > 666, "dropdown could not fit the whole item");
test.resume();
}, 10);
this.wait();
}
}
});