// // 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