//
// Jala Project [http://opensvn.csie.org/traccgi/jala]
//
// Copyright 2004 ORF Online und Teletext GmbH
//
// Licensed under the Apache License, Version 2.0 (the ``License'');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an ``AS IS'' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// $Revision$
// $LastChangedBy$
// $LastChangedDate$
// $HeadURL$
//
/**
* a global variable containing the form instance
* @type jala.Form
*/
var form;
/**
* Create and configure the form object
*/
var setup = function() {
form = jala.Form.create(getConfig(), new DataObject());
// form.render(); // show the test form
return;
};
/**
* Test the form rendering mechanism
*/
var testFormRender = function() {
var html = new jala.HtmlDocument(form.renderAsString());
var list = html.getAll("*");
var idx = 2;
assertEqual(list[idx].name, "form");
assertAttribute(list[idx].attributes, "id", "test");
assertAttribute(list[idx].attributes, "class", "form");
assertAttribute(list[idx].attributes, "name", "test");
assertAttribute(list[idx].attributes, "enctype", "multipart/form-data");
assertAttribute(list[idx].attributes, "method", "post");
// alias / input
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testAlias");
assertAttribute(list[idx].attributes, "class", "component require");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testAliasControl");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testAliasControl");
assertAttribute(list[idx].attributes, "class", "input");
assertAttribute(list[idx].attributes, "type", "text");
assertAttribute(list[idx].attributes, "maxlength", "10");
assertAttribute(list[idx].attributes, "name", "alias");
assertAttribute(list[idx].attributes, "size", "20");
assertEqual(list[++idx].name, "div");
assertEqual(list[idx].value, "Enter alias.");
assertAttribute(list[idx].attributes, "class", "helpText");
// desc / textarea
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testDesc");
assertAttribute(list[idx].attributes, "class", "component require");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testDescControl");
assertEqual(list[++idx].name, "textarea");
assertAttribute(list[idx].attributes, "id", "testDescControl");
assertAttribute(list[idx].attributes, "class", "textarea");
assertAttribute(list[idx].attributes, "name", "desc");
assertAttribute(list[idx].attributes, "cols", "30");
assertAttribute(list[idx].attributes, "rows", "3");
// pushdate / date
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testPushdate");
assertAttribute(list[idx].attributes, "class", "component require");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testPushdateControl");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testPushdateControl");
assertAttribute(list[idx].attributes, "class", "date");
assertAttribute(list[idx].attributes, "type", "text");
assertAttribute(list[idx].attributes, "name", "pushdate");
// isonline / checkbox
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testIsonline");
assertAttribute(list[idx].attributes, "class", "component optional");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testIsonlineControl");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testIsonlineControl");
assertAttribute(list[idx].attributes, "type", "checkbox");
assertAttribute(list[idx].attributes, "class", "checkbox");
assertAttribute(list[idx].attributes, "name", "isonline");
assertAttribute(list[idx].attributes, "value", "1");
// category / select
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testCategory");
assertAttribute(list[idx].attributes, "class", "component optional");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testCategoryControl");
assertEqual(list[++idx].name, "select");
assertAttribute(list[idx].attributes, "id", "testCategoryControl");
assertAttribute(list[idx].attributes, "class", "select");
assertAttribute(list[idx].attributes, "name", "category");
assertAttribute(list[idx].attributes, "size", "1");
assertEqual(list[++idx].name, "option");
assertAttribute(list[idx].attributes, "value", "cat0");
assertEqual(list[++idx].name, "option");
assertAttribute(list[idx].attributes, "value", "cat1");
assertEqual(list[++idx].name, "option");
assertAttribute(list[idx].attributes, "value", "cat2");
assertEqual(list[++idx].name, "option");
assertAttribute(list[idx].attributes, "value", "cat3");
// fieldset
assertEqual(list[++idx].name, "fieldset");
assertEqual(list[++idx].name, "legend");
assertEqual(list[idx].value, "a fieldset");
// fileupload
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testFileupload");
assertAttribute(list[idx].attributes, "class", "component optional");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testFileuploadControl");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testFileuploadControl");
assertAttribute(list[idx].attributes, "class", "file");
assertAttribute(list[idx].attributes, "type", "file");
assertAttribute(list[idx].attributes, "accept", "application/msword");
assertAttribute(list[idx].attributes, "name", "fileupload");
// imageupload
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testImageupload");
assertAttribute(list[idx].attributes, "class", "component optional");
assertEqual(list[++idx].name, "label");
assertAttribute(list[idx].attributes, "for", "testImageuploadControl");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testImageuploadControl");
assertAttribute(list[idx].attributes, "class", "image");
assertAttribute(list[idx].attributes, "type", "file");
assertAttribute(list[idx].attributes, "name", "imageupload");
// submit
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testSubmit");
assertAttribute(list[idx].attributes, "class", "component");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testSubmitControl");
assertAttribute(list[idx].attributes, "class", "submit");
assertAttribute(list[idx].attributes, "name", "submit");
assertAttribute(list[idx].attributes, "value", "Submit this form");
assertAttribute(list[idx].attributes, "type", "submit");
// cancel
assertEqual(list[++idx].name, "div");
assertAttribute(list[idx].attributes, "id", "testCancel");
assertAttribute(list[idx].attributes, "class", "component");
assertEqual(list[++idx].name, "input");
assertAttribute(list[idx].attributes, "id", "testCancelControl");
assertAttribute(list[idx].attributes, "class", "button");
assertAttribute(list[idx].attributes, "name", "cancel");
assertAttribute(list[idx].attributes, "value", "Cancel edit");
assertAttribute(list[idx].attributes, "type", "button");
return;
}
/**
* Test the form validation mechanism
*/
var testFormValidate = function() {
var reqData = getRequestData();
// default userinput values that should validate
var tracker = form.validate(reqData);
assertFalse(tracker.hasError());
// now try invalid values in userinput:
reqData["alias"] = "a";
reqData["desc"] = "";
reqData["pushdate"] = "17.5.2007";
reqData["category"] = "invalidOption";
tracker = form.validate(reqData);
assertTrue(tracker.hasError());
assertEqual(tracker.errors["alias"], "Alias is too short.");
assertEqual(tracker.errors["desc"], "Please enter text into this field.");
assertEqual(tracker.errors["pushdate"], "This date cannot be parsed.");
assertEqual(tracker.errors["category"], "Please select a valid option.");
// reset to default userinput:
reqData = getRequestData();
// require a smaller image:
form.components.uploadfieldset.components.imageupload.require("maxwidth", 100, "Maximum width exceeded.");
tracker = form.validate(reqData);
assertTrue(tracker.hasError());
assertEqual(tracker.errors["imageupload"], "Maximum width exceeded.");
// undo image restriction:
form.components.uploadfieldset.components.imageupload.require("maxwidth", 200, "Maximum width exceeded.");
tracker = form.validate(reqData);
assertFalse(tracker.hasError());
return;
};
/**
* Test the form rendering mechanism in the case of an error
*/
var testFormRenderWithError = function() {
var reqData = getRequestData();
reqData["alias"] = "a";
var tracker = form.validate(reqData);
var html = new jala.HtmlDocument(form.renderAsString());
var list = html.getAll("*");
assertEqual(list[4].name, "div");
assertEqual(list[4].value, "Alias is too short.");
assertAttribute(list[4].attributes, "class", "errorText");
};
/**
* Test the form save mechanism
*/
var testFormSave = function() {
var dataObj = form.getDataObject();
var reqData = getRequestData();
var tracker = form.validate(reqData);
assertFalse(tracker.hasError());
form.save();
assertEqual(dataObj.alias, "aliasValue");
assertEqual(dataObj.getProperty("desc"), "descriptionValue");
assertEqual(dataObj.pushdate.toString(), new Date(2007, 4, 17, 11, 32, 0).toString());
assertEqual(dataObj.isonline, 1);
assertEqual(dataObj.getProperty("category"), "cat2");
return;
}
/**
* Helper function to dump an html element to the response
* @param {Object} el
*/
var debugElement = function(el) {
res.write("" + el.name + " (" + el.value + ")
");
if (el.attributes) {
var attrList = el.attributes;
for (var i=0; i");
}
}
};
/**
* Helper function to assert that a given attribute exists
* in an element
* @param {Array} attrList Array with attribute objects
* @param {String} name Name of attribute
* @param {String} value Value of attribute
*/
var assertAttribute = function(attrList, name, value) {
for (var i=0; i