chg: replaced ant with gradle
This commit is contained in:
parent
cee0be52e0
commit
5cbeb9f01d
609 changed files with 87626 additions and 638 deletions
460
modules/jala/tests/Form.js
Normal file
460
modules/jala/tests/Form.js
Normal file
|
@ -0,0 +1,460 @@
|
|||
//
|
||||
// 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("<b>" + el.name + "</b> (" + el.value + ")<br/>");
|
||||
if (el.attributes) {
|
||||
var attrList = el.attributes;
|
||||
for (var i=0; i<attrList.length; i++) {
|
||||
res.write(attrList[i].name + " = " + attrList[i].value + "<br/>");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 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<attrList.length; i++) {
|
||||
if (attrList[i].name == name) {
|
||||
if (attrList[i].value != value) {
|
||||
throw new jala.Test.TestException("",
|
||||
"assertAttribute: Expected value of attribute \"" + name + "\" to be equal to \"" + value + "\" (but it is \"" + attrList[i].value + "\" instead).");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new jala.Test.TestException("", "assertAttribute: Attribute " + name + " not included in attributes.");
|
||||
};
|
||||
|
||||
|
||||
var DataObject = function() {
|
||||
var props = {};
|
||||
this.setProperty = function (name, value) {
|
||||
props[name] = value;
|
||||
};
|
||||
this.getProperty = function(name) {
|
||||
return props[name];
|
||||
};
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
var getRequestData = function() {
|
||||
var fileupload = "Form.fileupload.doc";
|
||||
var imageupload = "Form.imageupload.jpg";
|
||||
return {
|
||||
alias: "aliasValue",
|
||||
desc: "descriptionValue",
|
||||
pushdate: "17.5.2007 11:32",
|
||||
category: "cat2",
|
||||
isonline: "1",
|
||||
test_submit: "Submit",
|
||||
imageupload: new Packages.helma.util.MimePart(
|
||||
imageupload,
|
||||
jala.Test.getTestFile(imageupload).toByteArray(),
|
||||
"image/jpeg"
|
||||
),
|
||||
fileupload: new Packages.helma.util.MimePart(
|
||||
fileupload,
|
||||
jala.Test.getTestFile(fileupload).toByteArray(),
|
||||
"application/msword"
|
||||
)
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var getConfig = function() {
|
||||
return {
|
||||
name: "test",
|
||||
className: "form",
|
||||
components:[
|
||||
{
|
||||
// name: "alias", deliberately left out, should construct name from label
|
||||
label: "Alias",
|
||||
help: "Enter alias.",
|
||||
minlength: 4,
|
||||
maxlength: 10,
|
||||
require: true,
|
||||
messages: {
|
||||
require: "Alias is required.",
|
||||
maxlength: "Alias is too long.",
|
||||
minlength: "Alias is too short."
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "desc",
|
||||
type: "textarea",
|
||||
rows: 3,
|
||||
cols: 30,
|
||||
require: true,
|
||||
getter: function(name) {
|
||||
return this.getProperty(name);
|
||||
},
|
||||
setter: function(name, val) {
|
||||
return this.setProperty(name, val);
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "pushdate",
|
||||
type: "date",
|
||||
dateFormat: "d.M.yyyy H:m",
|
||||
require: true
|
||||
},
|
||||
{
|
||||
name: "isonline",
|
||||
type: "checkbox"
|
||||
},
|
||||
{ name: "category",
|
||||
type: "select",
|
||||
options: function() {
|
||||
var arr = [];
|
||||
for (var i=0; i<4; i++) {
|
||||
arr[arr.length] = {
|
||||
value: "cat" + i,
|
||||
display: "Category " + i
|
||||
};
|
||||
}
|
||||
return arr;
|
||||
},
|
||||
getter: function(name) {
|
||||
return this.getProperty("category");
|
||||
},
|
||||
setter: function(name, value) {
|
||||
this.setProperty("category", value);
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "uploadfieldset",
|
||||
type: "fieldset",
|
||||
legend: "a fieldset",
|
||||
components:[
|
||||
{
|
||||
name: "fileupload",
|
||||
type: "file",
|
||||
maxlength: 500000,
|
||||
contenttype: "application/msword",
|
||||
},
|
||||
{
|
||||
name: "imageupload",
|
||||
type: "image",
|
||||
minwidth: 10,
|
||||
maxwidth: 200,
|
||||
minheight: 10,
|
||||
maxheight: 200
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "submit",
|
||||
type: "submit",
|
||||
value: "Submit this form"
|
||||
},
|
||||
{
|
||||
name: "cancel",
|
||||
type: "button",
|
||||
value: "Cancel edit"
|
||||
}
|
||||
]};
|
||||
};
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue