Merge remote-tracking branch 'modules/master' into subtree
this merges the master head of https://github.com/helma-org/apps-modules-mirror into helma
This commit is contained in:
commit
226552bc24
53 changed files with 12023 additions and 0 deletions
183
modules/test/tests/HopObjectCollection.js
Normal file
183
modules/test/tests/HopObjectCollection.js
Normal file
|
@ -0,0 +1,183 @@
|
|||
tests = [
|
||||
"testSize",
|
||||
"testMaxSize",
|
||||
"testAddSmall",
|
||||
"testAddLarge",
|
||||
"testRemoveSmall",
|
||||
"testRemoveLarge",
|
||||
"testUpdateSmall",
|
||||
"testUpdateLarge",
|
||||
"testListSmall",
|
||||
"testListLarge",
|
||||
"testOrderLarge",
|
||||
"testOrderSmall"
|
||||
];
|
||||
|
||||
var helma, ikea;
|
||||
var small = 3, large = 1234;
|
||||
|
||||
function setup() {
|
||||
ikea = makeOrg('Ikea', large);
|
||||
helma = makeOrg('Helma', small);
|
||||
}
|
||||
|
||||
function testSize() {
|
||||
assertEqual(ikea.persons.size(), large);
|
||||
assertEqual(helma.persons.size(), small);
|
||||
}
|
||||
|
||||
function testMaxSize() {
|
||||
assertEqual(ikea.range.size(), 100);
|
||||
assertEqual(helma.range.size(), 0);
|
||||
var person = ikea.range.get("Person Ikea 0150");
|
||||
assertNotNull(person);
|
||||
assertEqual(person, ikea.range.get(50));
|
||||
assertEqual(person, ikea.persons.get(150));
|
||||
assertEqual(50, ikea.range.indexOf(person));
|
||||
assertEqual(150, ikea.persons.indexOf(person));
|
||||
}
|
||||
|
||||
function testAddSmall() {
|
||||
testAdd(helma, small);
|
||||
}
|
||||
|
||||
function testAddLarge() {
|
||||
testAdd(ikea, large);
|
||||
}
|
||||
|
||||
// test directly adding to a collection
|
||||
function testAdd(org, size) {
|
||||
var person = new Person();
|
||||
person.name = "TestPerson";
|
||||
org.persons.add(person);
|
||||
assertEqual(org.persons.size(), size + 1);
|
||||
assertEqual(org.persons.indexOf(person), size);
|
||||
assertEqual(org.persons.contains(person), size);
|
||||
assertEqual(person.href(), org.persons.href() + "TestPerson/");
|
||||
// make sure the add has set the back-reference on the person object.
|
||||
// note that === comparison will return false if the
|
||||
// collection size exceeds the cache size.
|
||||
assertTrue(person.organisation == org);
|
||||
}
|
||||
|
||||
function testRemoveSmall() {
|
||||
testRemove(helma, small);
|
||||
}
|
||||
|
||||
function testRemoveLarge() {
|
||||
testRemove(ikea, large);
|
||||
}
|
||||
|
||||
// test directly removing from a collection
|
||||
function testRemove(org, size) {
|
||||
var person = org.persons.get(org.persons.size() - 1);
|
||||
person.remove();
|
||||
assertEqual(org.persons.size(), size);
|
||||
assertEqual(org.persons.indexOf(person), -1);
|
||||
assertEqual(org.persons.contains(person), -1);
|
||||
}
|
||||
|
||||
function testUpdateSmall() {
|
||||
testUpdate(helma, small);
|
||||
}
|
||||
|
||||
function testUpdateLarge() {
|
||||
testUpdate(ikea, large);
|
||||
}
|
||||
|
||||
// test indirectly adding to and removing form a collection
|
||||
function testUpdate(org, size) {
|
||||
var person = new Person();
|
||||
person.name = "TestPerson";
|
||||
person.organisation = org;
|
||||
person.persist();
|
||||
res.commit();
|
||||
assertEqual(org.persons.size(), size + 1);
|
||||
org.persons.prefetchChildren();
|
||||
assertEqual(org.persons.indexOf(person), size);
|
||||
assertEqual(org.persons.contains(person), size);
|
||||
assertEqual(person.href(), org.persons.href() + "TestPerson/");
|
||||
person.remove();
|
||||
res.commit();
|
||||
assertEqual(org.persons.size(), size);
|
||||
assertEqual(org.persons.indexOf(person), -1);
|
||||
assertEqual(org.persons.contains(person), -1);
|
||||
}
|
||||
|
||||
function testListSmall() {
|
||||
testList(helma, small);
|
||||
}
|
||||
|
||||
function testListLarge() {
|
||||
testList(ikea, large);
|
||||
}
|
||||
|
||||
function testList(org, size) {
|
||||
function iterate(list, start, length) {
|
||||
assertEqual(list.length, length);
|
||||
for (var i = 0; i < length; i++) {
|
||||
assertEqual(list[i].name, "Person " + org.name + (start + i).format(" 0000"));
|
||||
}
|
||||
}
|
||||
iterate(org.persons.list(), 0, size);
|
||||
org.persons.invalidate();
|
||||
iterate(org.persons.list(), 0, size);
|
||||
org.persons.invalidate();
|
||||
iterate(org.persons.list(1, size - 2), 1, size - 2);
|
||||
}
|
||||
|
||||
function testOrderLarge() {
|
||||
testOrder(ikea, ikea.persons.size() - 2);
|
||||
testOrder(ikea, Math.floor(ikea.persons.size() / 2));
|
||||
testOrder(ikea, 2);
|
||||
}
|
||||
|
||||
function testOrderSmall() {
|
||||
testOrder(helma, helma.persons.size() - 1);
|
||||
testOrder(helma, 1);
|
||||
testOrder(helma, 0);
|
||||
}
|
||||
|
||||
function testOrder(org, pos) {
|
||||
var person = new Person();
|
||||
person.name = "Person " + org.name + pos.format(" 0000") + "B";
|
||||
person.organisation = org;
|
||||
root.persons.add(person);
|
||||
res.commit();
|
||||
assertEqual(pos + 1, org.persons.indexOf(person));
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
var persons = root.persons.list();
|
||||
for each (var person in persons) {
|
||||
person.remove();
|
||||
}
|
||||
ikea.remove();
|
||||
helma.remove();
|
||||
}
|
||||
|
||||
function makeOrg(name, size) {
|
||||
var org = new Organisation();
|
||||
org.name = name;
|
||||
root.organisations.add(org);
|
||||
|
||||
for (var i = 0; i < size; i++) {
|
||||
var person = new Person();
|
||||
person.name = "Person " + name + i.format(" 0000");
|
||||
person.organisation = org;
|
||||
root.persons.add(person);
|
||||
}
|
||||
res.commit();
|
||||
return org;
|
||||
}
|
||||
|
||||
// debugging helpers
|
||||
function dumpDataChange(message) {
|
||||
res.debug(message + ": ");
|
||||
dumpDataChangeFor("Person");
|
||||
dumpDataChangeFor("Organisation");
|
||||
}
|
||||
|
||||
function dumpDataChangeFor(name) {
|
||||
res.debug(name + ": " + app.__app__.getDbMapping(name).getLastDataChange());
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue