SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

333 lines
9.4 KiB

/*
Copyright (c) 2004-2006, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
http://dojotoolkit.org/community/licensing.shtml
*/
dojo.require("dojo.event.*");
function testObjectClass(){
this.funcCallCount = 0;
this.lastReturn = null;
this.secondLastReturn = null;
this.func1 = function(arg1, arg2){
this.funcCallCount++;
this.secondLastReturn = this.lastReturn;
this.lastReturn = "func1, arg1: "+arg1+", arg2: "+arg2;
jum.debug(this.lastReturn);
return this.lastReturn;
}
this.func2 = function(arg1, arg2){
this.funcCallCount++;
this.secondLastReturn = this.lastReturn;
this.lastReturn = "func2, arg1: "+arg1+", arg2: "+arg2;
jum.debug(this.lastReturn);
return this.lastReturn;
}
this.argSwapAroundAdvice = function(miObj){
// dojo.hostenv.println("in adviceFromFunc1ToFunc2");
var tmp = miObj.args[1];
miObj.args[1] = miObj.args[0];
miObj.args[0] = tmp;
// dojo.hostenv.println(miObj.args.length);
// return obj[funcName].apply(obj, argsArr);
ret = miObj.proceed();
return ret;
}
}
function test_event_callPrecedence(){
// from bug #70
var obj1 = new testObjectClass();
obj1.ctr = 0;
obj1.increment = function(){ this.ctr++; }
dojo.event.connect(obj1, "func1", function(){
obj1.increment();
dojo.event.connect(obj1, "func1", obj1, "increment");
});
obj1.func1();
jum.assertEquals("test", obj1.ctr, 1);
}
function test_event_beforeAround(){
var obj1 = new testObjectClass();
dojo.event.connect("before", obj1, "func1", obj1, "func2", obj1, "argSwapAroundAdvice");
jum.assertTrue("test1", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test2", obj1.secondLastReturn, "func2, arg1: 2, arg2: 1");
jum.assertEquals("test3", obj1.lastReturn, "func1, arg1: 1, arg2: 2");
}
function test_event_before(){
var obj1 = new testObjectClass();
dojo.event.connect("before", obj1, "func1", obj1, "func2");
jum.assertTrue("test4", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
// we expected func2 to fire before func1 and neither to mangle arguments
jum.assertEquals("test5", obj1.secondLastReturn, "func2, arg1: 1, arg2: 2");
// so the most recent return should be from func1
jum.assertEquals("test6", obj1.lastReturn, "func1, arg1: 1, arg2: 2");
}
function test_event_connectBefore(){
var obj1 = new testObjectClass();
var obj2 = new testObjectClass();
dj_global._testConnectBeforeFunc = function(arg1, arg2){
obj2.funcCallCount++;
obj2.secondLastReturn = obj2.lastReturn;
obj2.lastReturn = "func1, arg1: "+arg1+", arg2: "+arg2;
return obj2.lastReturn;
}
dojo.event.connectBefore(obj1, "func1", obj1, "func2");
jum.assertTrue("test7", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
// we expected func2 to fire before func1 and neither to mangle arguments
jum.assertEquals("test8", obj1.secondLastReturn, "func2, arg1: 1, arg2: 2");
// so the most recent return should be from func1
jum.assertEquals("test9", obj1.lastReturn, "func1, arg1: 1, arg2: 2");
dojo.event.connectBefore("_testConnectBeforeFunc", obj2, "func2");
jum.assertTrue("test10", _testConnectBeforeFunc("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test11", obj2.funcCallCount, 2);
}
function test_event_afterAround(){
var obj1 = new testObjectClass();
dojo.event.connect("after", obj1, "func1", obj1, "func2", obj1, "argSwapAroundAdvice");
jum.assertTrue("test7", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test8", obj1.lastReturn, "func2, arg1: 2, arg2: 1");
jum.assertEquals("test9", obj1.secondLastReturn, "func1, arg1: 1, arg2: 2");
}
function test_event_after(){
var obj1 = new testObjectClass();
dojo.event.connect("after", obj1, "func1", obj1, "func2");
jum.assertTrue("test10", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test11", obj1.secondLastReturn, "func1, arg1: 1, arg2: 2");
jum.assertEquals("test12", obj1.lastReturn, "func2, arg1: 1, arg2: 2");
}
function test_event_around(){
var obj1 = new testObjectClass();
dojo.event.connect("around", obj1, "func1", obj1, "argSwapAroundAdvice");
jum.assertTrue("test13", obj1.func1("1", "2")=="func1, arg1: 2, arg2: 1");
jum.assertEquals("test14", obj1.lastReturn, "func1, arg1: 2, arg2: 1");
jum.assertEquals("test15", obj1.secondLastReturn, null);
}
function test_event_connectAround(){
var obj1 = new testObjectClass();
dojo.event.connectAround(obj1, "func1", obj1, "argSwapAroundAdvice");
jum.assertTrue("test13", obj1.func1("1", "2")=="func1, arg1: 2, arg2: 1");
jum.assertEquals("test14", obj1.lastReturn, "func1, arg1: 2, arg2: 1");
jum.assertEquals("test15", obj1.secondLastReturn, null);
}
function test_event_kwConnect(){
var obj1 = new testObjectClass();
// test to see if "after" gets set as the default type
dojo.event.kwConnect({
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func2"
});
jum.assertTrue("test16", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test17", obj1.secondLastReturn, "func1, arg1: 1, arg2: 2");
jum.assertEquals("test18", obj1.lastReturn, "func2, arg1: 1, arg2: 2");
}
function test_event_connectOnce(){
var obj1 = new testObjectClass();
// connect once via kwConnect()
dojo.event.kwConnect({
once: true,
type: "after",
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func2"
});
// and then through connect()
dojo.event.connect("after", obj1, "func1", obj1, "func2", null, null, true);
jum.assertTrue("test19", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test20", obj1.funcCallCount, 2);
}
function test_event_disconnect(){
var obj1 = new testObjectClass();
dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.disconnect("after", obj1, "func1", obj1, "func2");
jum.assertTrue("test21", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test22", obj1.funcCallCount, 1);
jum.assertEquals("test23", obj1.secondLastReturn, null);
}
function test_event_disconnectOnce(){
var obj1 = new testObjectClass();
dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.disconnect("after", obj1, "func1", obj1, "func2", null, null, true);
jum.assertTrue("test24", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test25", obj1.funcCallCount, 2);
jum.assertTrue("test26", obj1.secondLastReturn != null);
}
function test_event_kwDisconnect(){
var obj1 = new testObjectClass();
// dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.kwConnect({
type: "after",
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func2"
});
dojo.event.kwDisconnect({
type: "after",
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func2"
});
jum.assertTrue("test27", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test28", obj1.funcCallCount, 1);
jum.assertEquals("test29", obj1.secondLastReturn, null);
}
function test_event_kwDisconnectOnce(){
var obj1 = new testObjectClass();
dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.connect("after", obj1, "func1", obj1, "func2");
dojo.event.kwDisconnect({
type: "after",
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func2",
once: true
});
jum.assertTrue("test30", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test31", obj1.funcCallCount, 2);
}
function test_event_implicitAfter(){
var obj1 = new testObjectClass();
dojo.event.connect(obj1, "func1", obj1, "func2");
jum.assertTrue("test32", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test33", obj1.funcCallCount, 2);
jum.assertEquals("test34", obj1.secondLastReturn, "func1, arg1: 1, arg2: 2");
}
function test_event_anonymous(){
var obj1 = new testObjectClass();
dojo.event.connect(obj1, "func1", function(){
obj1.funcCallCount++;
});
obj1.func1("1", "2");
jum.assertEquals("test35", 2, obj1.funcCallCount);
}
function test_event_adviceMsg(){
var obj1 = new testObjectClass();
obj1.func3 = function(kwa){
this.argsLen = arguments.length;
this.miArgsLen = kwa.args.length;
this.srcObj = kwa.object;
}
dojo.event.kwConnect({
type: "after",
srcObj: obj1,
srcFunc: "func1",
adviceObj: obj1,
adviceFunc: "func3",
adviceMsg: true
});
obj1.func1("1", "2", "3", "4", "5");
jum.assertEquals("test36", 1, obj1.argsLen);
jum.assertEquals("test37", 5, obj1.miArgsLen);
jum.assertEquals("test38", obj1, obj1.srcObj);
var obj2 = {
foo: function(){
}
};
var obj3 = {
bar: function(mi){
this.srcObj = mi.object;
}
};
dojo.event.kwConnect({
srcObj: obj2,
srcFunc: "foo",
adviceObj: obj3,
adviceFunc: "bar",
adviceMsg: true
});
obj2.foo();
jum.assertTrue("test39", obj2 === obj3.srcObj);
}
function test_event_disconnectFP(){
var obj1 = new testObjectClass();
dojo.event.connect(obj1, "func1", obj1, obj1.func2);
dojo.event.disconnect(obj1, "func1", obj1, obj1.func2);
jum.assertTrue("test40", obj1.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test41", obj1.funcCallCount, 1);
var obj2 = new testObjectClass();
dojo.event.connect("after", obj2, obj2.func1, obj2, obj2.func2);
dojo.event.disconnect("after", obj2, obj2.func1, obj2, obj2.func2);
jum.assertTrue("test42", obj2.func1("1", "2")=="func1, arg1: 1, arg2: 2");
jum.assertEquals("test43", obj2.funcCallCount, 1);
}