@qooxdoo/framework
Version:
The JS Framework for Coders
562 lines (434 loc) • 15.8 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2009 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:
* Martin Wittemann (martinwittemann)
************************************************************************ */
/**
* @ignore(qx.test.DummyFormRenderer)
*/
qx.Class.define("qx.test.ui.form.FormManager", {
extend: qx.test.ui.LayoutTestCase,
include: qx.dev.unit.MMock,
construct() {
super();
// create the test renderer
qx.Class.define("qx.test.DummyFormRenderer", {
extend: qx.ui.form.renderer.AbstractRenderer,
implement: qx.ui.form.renderer.IFormRenderer,
construct(form) {
this.groups = [];
this.buttons = [];
super(form);
},
properties: {
buttons: {},
groups: {}
},
members: {
addItems(items, names, title, itemsOptions, headerOptions) {
this.groups.push({
items: items,
names: names,
title: title,
headerOptions: headerOptions,
options: itemsOptions
});
},
addButton(button, options) {
this.buttons.push({ button: button, options: options });
}
}
});
},
members: {
__form: null,
__tf1: null,
__tf2: null,
setUp() {
this.__form = new qx.ui.form.Form();
this.__tf1 = new qx.ui.form.TextField();
this.__tf2 = new qx.ui.form.TextField();
},
tearDown() {
this.__tf2.dispose();
this.__tf1.dispose();
this.__form.dispose();
},
testValidationContext() {
var self = this;
// add the widgets
this.__form.add(
this.__tf2,
"TF2",
function () {
self.assertEquals(1, this.a);
},
null,
{ a: 1 }
);
this.__form.validate();
},
testAddTwo() {
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[0].items[1], this.__tf2);
// check the names
this.assertEquals(view.groups[0].names[0], "TF1");
this.assertEquals(view.groups[0].names[1], "TF2");
view.dispose();
},
testRemove() {
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[0].items[1], this.__tf2);
view.dispose();
// remove twice to see if the remove is reported correctly
this.assertTrue(this.__form.remove(this.__tf1));
this.assertFalse(this.__form.remove(this.__tf1));
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf2);
view.dispose();
},
testAddTwoWithValidator() {
// add the widgets
this.__tf1.setRequired(true);
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2", qx.util.Validate.email());
// validation should fail
this.assertFalse(this.__form.validate());
this.assertFalse(this.__tf1.getValid());
this.assertFalse(this.__tf2.getValid());
// correct the values
this.__tf1.setValue("a");
this.__tf2.setValue("ab@cd.ef");
// validation should be ok
this.assertTrue(this.__form.validate());
this.assertTrue(this.__tf1.getValid());
this.assertTrue(this.__tf2.getValid());
// check the validation manager itself
this.assertTrue(this.__form.getValidationManager().validate());
},
testAddTwoWithHeader() {
this.__form.addGroupHeader("affe");
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[0].items[1], this.__tf2);
// check the names
this.assertEquals(view.groups[0].names[0], "TF1");
this.assertEquals(view.groups[0].names[1], "TF2");
// check the title
this.assertEquals("affe", view.groups[0].title);
view.dispose();
},
testRemoveHeader() {
this.__form.addGroupHeader("affe0");
this.__form.add(this.__tf1, "TF1");
this.__form.addGroupHeader("affe1");
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[1].items[0], this.__tf2);
// check the title
this.assertEquals("affe0", view.groups[0].title);
this.assertEquals("affe1", view.groups[1].title);
view.dispose();
// remove twice to see if the remove is reported correctly
this.assertTrue(this.__form.removeGroupHeader("affe1"));
this.assertFalse(this.__form.removeGroupHeader("affe1"));
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[0].items[1], this.__tf2);
this.assertEquals("affe0", view.groups[0].title);
view.dispose();
},
testAddTwoWithTwoGroups() {
this.__form.addGroupHeader("affe");
this.__form.add(this.__tf1, "TF1");
this.__form.addGroupHeader("affee");
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[1].items[0], this.__tf2);
// check the names
this.assertEquals(view.groups[0].names[0], "TF1");
this.assertEquals(view.groups[1].names[0], "TF2");
// check the title
this.assertEquals("affe", view.groups[0].title);
this.assertEquals("affee", view.groups[1].title);
view.dispose();
},
testAddTwoButtons() {
var b1 = new qx.ui.form.Button();
var b2 = new qx.ui.form.RepeatButton();
this.__form.addButton(b1);
this.__form.addButton(b2);
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the buttons
this.assertEquals(b1, view.buttons[0].button);
this.assertEquals(b2, view.buttons[1].button);
b2.dispose();
b1.dispose();
view.dispose();
},
testRemoveButton() {
var b1 = new qx.ui.form.Button();
var b2 = new qx.ui.form.RepeatButton();
this.__form.addButton(b1);
this.__form.addButton(b2);
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the buttons
this.assertEquals(b1, view.buttons[0].button);
this.assertEquals(b2, view.buttons[1].button);
view.dispose();
// remove twice to see if the remove is reported correctly
this.assertTrue(this.__form.removeButton(b1));
this.assertFalse(this.__form.removeButton(b1));
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the button
this.assertEquals(b2, view.buttons[0].button);
view.dispose();
b2.dispose();
b1.dispose();
},
testAddTwoWithButtons() {
var b1 = new qx.ui.form.Button();
var b2 = new qx.ui.form.RepeatButton();
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.addButton(b1);
this.__form.add(this.__tf2, "TF2");
this.__form.addButton(b2);
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(view.groups[0].items[0], this.__tf1);
this.assertEquals(view.groups[0].items[1], this.__tf2);
// check the names
this.assertEquals(view.groups[0].names[0], "TF1");
this.assertEquals(view.groups[0].names[1], "TF2");
// check the buttons
this.assertEquals(b1, view.buttons[0].button);
this.assertEquals(b2, view.buttons[1].button);
b2.dispose();
b1.dispose();
view.dispose();
},
testAddTwoWithOptions() {
// add the widgets
this.__form.add(this.__tf1, "TF1", null, "tf1", null, { a: 1 });
this.__form.add(this.__tf2, "TF2", null, "tf2", null, { a: 2 });
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the items
this.assertEquals(1, view.groups[0].options[0].a);
this.assertEquals(2, view.groups[0].options[1].a);
view.dispose();
},
testAddTwoWithButtonsOptions() {
var b1 = new qx.ui.form.Button();
var b2 = new qx.ui.form.RepeatButton();
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.addButton(b1, { a: 1 });
this.__form.add(this.__tf2, "TF2");
this.__form.addButton(b2, { a: 2 });
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the buttons options
this.assertEquals(1, view.buttons[0].options.a);
this.assertEquals(2, view.buttons[1].options.a);
b2.dispose();
b1.dispose();
view.dispose();
},
testAddTwoWithHeaderOptions() {
this.__form.addGroupHeader("affe", { a: 1 });
this.__form.add(this.__tf1, "TF1");
this.__form.addGroupHeader("affee", { a: 2 });
this.__form.add(this.__tf2, "TF2");
// get the view
var view = new qx.test.DummyFormRenderer(this.__form);
// check the title
this.assertEquals(1, view.groups[0].headerOptions.a);
this.assertEquals(2, view.groups[1].headerOptions.a);
view.dispose();
},
testResetter() {
// set the init values of the textfields
this.__tf1.setValue("aaaa");
this.__tf2.setValue("bbbb");
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2");
// set some other values
this.__tf1.setValue("111");
this.__tf2.setValue("222");
this.__form.reset();
// check
this.assertEquals("aaaa", this.__tf1.getValue());
this.assertEquals("bbbb", this.__tf2.getValue());
},
testAll() {
var widgets = [];
widgets.push(new qx.ui.control.DateChooser());
widgets.push(new qx.ui.form.CheckBox());
widgets.push(new qx.ui.form.ComboBox());
widgets.push(new qx.ui.form.DateField());
widgets.push(new qx.ui.form.List());
widgets.push(new qx.ui.form.PasswordField());
widgets.push(new qx.ui.form.RadioButton());
widgets.push(new qx.ui.form.SelectBox());
widgets.push(new qx.ui.form.Slider());
widgets.push(new qx.ui.form.Spinner());
widgets.push(new qx.ui.form.TextArea());
widgets.push(new qx.ui.form.TextField());
widgets.push(new qx.ui.groupbox.CheckGroupBox());
widgets.push(new qx.ui.form.RadioButtonGroup());
widgets.push(new qx.ui.groupbox.RadioGroupBox());
// add all
for (var i = 0; i < widgets.length; i++) {
this.__form.add(widgets[i], "name" + i);
}
// reset
this.__form.reset();
// validate
this.assertTrue(this.__form.validate());
// get rid of the widgets
for (var i = 0; i < widgets.length; i++) {
widgets[i].dispose();
}
},
testGetItems() {
// add the widgets
this.__form.add(this.__tf1, "TF1", null, "a");
this.__form.add(this.__tf2, "TF2", null, "b");
var items = this.__form.getItems();
this.assertEquals(items.a, this.__tf1);
this.assertEquals(items.b, this.__tf2);
},
testGetItemsFallback() {
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "T F 2");
var items = this.__form.getItems();
this.assertEquals(items.TF1, this.__tf1);
this.assertEquals(items.TF2, this.__tf2);
},
testGetItemsMixedWithGroups() {
// add the widgets
this.__form.add(this.__tf1, "TF1");
this.__form.add(this.__tf2, "TF2", null, "b");
this.__form.addGroupHeader("x");
var tf3 = new qx.ui.form.TextField();
this.__form.add(tf3, "TF3");
var items = this.__form.getItems();
this.assertEquals(items.TF1, this.__tf1);
this.assertEquals(items.b, this.__tf2);
this.assertEquals(items.TF3, tf3);
tf3.destroy();
},
testRedefineResetter() {
// just call the method and check if its not throwing an error
// all other stuff is tested in the resetter unit tests
this.__form.redefineResetter();
},
testEvent() {
var handler = this.spy();
this.__form.addListener("change", handler);
this.__form.add(this.__tf1, "TF1");
this.assertCalledOnce(handler);
this.__form.addGroupHeader("GROUP");
this.assertCalledTwice(handler);
this.__form.add(this.__tf2, "TF2");
this.assertEquals(3, handler.callCount);
this.__form.remove(this.__tf1);
this.assertEquals(4, handler.callCount);
this.__form.removeGroupHeader("GROUP");
this.assertEquals(5, handler.callCount);
var b = new qx.ui.form.Button();
this.__form.addButton(b);
this.assertEquals(6, handler.callCount);
this.__form.removeButton(b);
this.assertEquals(7, handler.callCount);
b.dispose();
},
testSingleRenderer() {
var b1 = new qx.ui.form.Button();
// add the widgets
this.__form.addGroupHeader("header");
this.__form.add(this.__tf1, "TF1");
this.__form.addButton(b1);
// just check if the renderer is created without an error
new qx.ui.form.renderer.Single(this.__form).dispose();
b1.dispose();
},
testSinglePlaceholderRenderer() {
var b1 = new qx.ui.form.Button();
// add the widgets
this.__form.addGroupHeader("header");
this.__form.add(this.__tf1, "TF1");
this.__form.addButton(b1);
// just check if the renderer is created without an error
new qx.ui.form.renderer.SinglePlaceholder(this.__form).dispose();
b1.dispose();
},
testDoubleRenderer() {
var b1 = new qx.ui.form.Button();
// add the widgets
this.__form.addGroupHeader("header");
this.__form.add(this.__tf1, "TF1");
this.__form.addButton(b1);
// just check if the renderer is created without an error
new qx.ui.form.renderer.Double(this.__form).dispose();
b1.dispose();
},
testGetItem() {
var f1 = new qx.ui.form.TextField();
var f2 = new qx.ui.form.TextField();
var f3 = new qx.ui.form.TextField();
this.__form.add(f1, "a");
this.__form.add(f2, "c");
this.__form.add(f3, "label", null, "x");
this.assertIdentical(f1, this.__form.getItem("a"));
this.assertNull(this.__form.getItem("b"));
this.assertIdentical(f2, this.__form.getItem("c"));
this.assertNull(this.__form.getItem("label"));
this.assertIdentical(f3, this.__form.getItem("x"));
[f1, f2, f3].forEach(function (o) {
o.dispose();
});
}
}
});