helma/modules/jala/tests/ListRenderer.js

197 lines
6.1 KiB
JavaScript

//
// 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$
//
/**
* Construct different collections as basis for the tests
*/
// 1. ArrayList
var arrayList = new jala.ListRenderer.ArrayList((function() {
var coll = [];
for (var i=0; i<19; i++) {
coll[i] = {id: i, title: "Object Nr. " + i};
}
return coll;
})());
// 2. HopObject
var hopObject = new HopObject();
var obj;
for (var i=0; i<19; i++) {
obj = new HopObject();
obj.title = "HopObject Nr. " + i;
hopObject.add(obj);
}
// 3. Array
var array = [];
for (var i=0; i<19; i++) {
array[i] = {id: i, title: "Object Nr. " + i};
}
/**
* Test constructor
*/
var testConstructor = function() {
// should throw an exception when called without or with invalid arguments
assertThrows(function() {
new jala.ListRenderer(true);
});
assertThrows(function() {
new jala.ListRenderer();
});
// test constructor with arrayList
var list = new jala.ListRenderer(arrayList);
assertEqual(list.getCollection(), arrayList);
// test constructor with hopObjectCollection
list = new jala.ListRenderer(hopObject);
assertEqual(list.getCollection(), hopObject);
// test constructor with an array
list = new jala.ListRenderer(array);
assertEqual(list.getCollection().constructor, jala.ListRenderer.ArrayList);
// test backwards compatibility
var listParam = {
collection: hopObject,
href: "http://localhost/test",
urlParams: "one=two&three=four",
urlParamName: "seite",
itemsPerPage: 5,
maxPages: 3,
itemSkin: "preview",
};
var list = new jala.ListRenderer(listParam);
assertEqual(list.getCollection(), listParam.collection);
assertEqual(list.getBaseHref(), listParam.href);
assertEqual(list.getUrlParameters(), listParam.urlParams);
assertEqual(list.getUrlParameterName(), listParam.urlParamName);
assertEqual(list.getPageSize(), listParam.itemsPerPage);
assertEqual(list.getMaxPages(), listParam.maxPages);
assertEqual(list.getItemSkin(), listParam.itemSkin);
return;
};
/**
* Test the calculation of the page number under various circumstances
*/
var testPageCalculation = function() {
var list = new jala.ListRenderer(arrayList);
list.setPageSize(3);
assertEqual(list.getTotalPages(), 7);
// after setting maxPages, getTotalPages() should return this value
list.setMaxPages(3);
assertEqual(list.getTotalPages(), 3);
return;
};
/**
* Test the start and end index calculation
*/
var testIndexCalculation = function() {
var list = new jala.ListRenderer(arrayList);
list.setPageSize(5);
req.data.page = "456";
assertEqual(list.getStartIndex(), 15);
assertEqual(list.getEndIndex(), 18);
// test the appropriate macros too
assertEqual(list.currentStart_macro(), 16);
assertEqual(list.currentEnd_macro(), 19);
assertEqual(list.size_macro(), 19);
// limit the number of pages - the size_macro() should return the correct value
list.setMaxPages(2);
assertEqual(list.size_macro(), 10);
// reset req.data.page
delete req.data.page;
return;
};
/**
* Test the construction of page hrefs
*/
var testHrefs = function() {
var baseHref = "http://localhost/test/list";
var list = new jala.ListRenderer(arrayList);
list.setBaseHref(baseHref);
assertEqual(list.getBaseHref(), baseHref);
// getPageHref without argument should return the href of the first page
assertEqual(list.getPageHref(), baseHref + "?page=1");
// tweak req.data to simulate a request for a certain page
req.data.page = "2";
assertEqual(list.getPageHref(), baseHref + "?page=2");
// getPageHref with page number as argument
assertEqual(list.getPageHref(10), baseHref + "?page=10");
// invalid page arguments
req.data.page = "nada";
assertEqual(list.getPageHref(), baseHref + "?page=1");
// for page numbers < 0 return the href of the first page
req.data.page = "-10";
assertEqual(list.getPageHref(), baseHref + "?page=1");
// for page numbers exceeding the max. number of pages, return
// the href of the last page
req.data.page = "300";
assertEqual(list.getPageHref(), baseHref + "?page=2");
// now test changing the page url parameter name
list.setUrlParameterName("seite");
assertEqual(list.getPageHref(2), baseHref + "?seite=2");
// add additional url parameters
var params = "one=two&three=four";
list.setUrlParameters(params);
assertEqual(list.getPageHref(3), baseHref + "?" + params + "&seite=3");
// reset req.data.page
delete req.data.page;
return;
};
/**
* Test custom renderer
*/
var testRenderer = function() {
// a pseudo renderer to check if overriding default renderer works
var renderer = {
"list": {
"custom": function() {
return;
},
"default": function() {
return;
},
},
};
// use default renderer
var list = new jala.ListRenderer(arrayList);
assertEqual(list.getRenderFunction("list"),
jala.ListRenderer.defaultRenderer.list["default"]);
assertEqual(list.getRenderFunction("list", "nonexisting"),
jala.ListRenderer.defaultRenderer.list["default"]);
assertNull(list.getRenderFunction("nonexisting"));
// use custom renderer
list = new jala.ListRenderer(arrayList, renderer);
assertEqual(list.getRenderFunction("list", "custom"), renderer.list["custom"]);
assertEqual(list.getRenderFunction("list", "nonexisting"), renderer.list["default"]);
assertEqual(list.getRenderFunction("list"), renderer.list["default"]);
return;
};