New file |
0,0 → 1,225 |
if(!dojo._hasResource["tests._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["tests._base.connect"] = true; |
dojo.provide("tests._base.connect"); |
|
hub = function(){ |
} |
|
failures = 0; |
bad = function(){ |
failures++; |
} |
|
good = function(){ |
} |
|
// make 'iterations' connections to hub |
// roughly half of which will be to 'good' and |
// half to 'bad' |
// all connections to 'bad' are disconnected |
// test can then be performed on the values |
// 'failures' and 'successes' |
markAndSweepTest = function(iterations){ |
var marked = []; |
// connections |
for(var i=0; i<iterations; i++){ |
if(Math.random() < 0.5){ |
marked.push(dojo.connect('hub', bad)); |
}else{ |
dojo.connect('hub', good); |
} |
} |
// Randomize markers (only if the count isn't very high) |
if(i < Math.pow(10, 4)){ |
var rm = [ ]; |
while(marked.length){ |
var m = Math.floor(Math.random() * marked.length); |
rm.push(marked[m]); |
marked.splice(m, 1); |
} |
marked = rm; |
} |
for(var m=0; m<marked.length; m++){ |
dojo.disconnect(marked[m]); |
} |
// test |
failures = 0; |
hub(); |
// return number of disconnected functions that fired (should be 0) |
return failures; |
} |
|
markAndSweepSubscribersTest = function(iterations){ |
var topic = "hubbins"; |
var marked = []; |
// connections |
for(var i=0; i<iterations; i++){ |
if(Math.random() < 0.5){ |
marked.push(dojo.subscribe(topic, bad)); |
}else{ |
dojo.subscribe(topic, good); |
} |
} |
// Randomize markers (only if the count isn't very high) |
if(i < Math.pow(10, 4)){ |
var rm = [ ]; |
while(marked.length){ |
var m = Math.floor(Math.random() * marked.length); |
rm.push(marked[m]); |
marked.splice(m, 1); |
} |
marked = rm; |
} |
for(var m=0; m<marked.length; m++){ |
dojo.unsubscribe(marked[m]); |
} |
// test |
failures = 0; |
dojo.publish(topic); |
// return number of unsubscribed functions that fired (should be 0) |
return failures; |
} |
|
tests.register("tests._base.connect", |
[ |
function smokeTest(t){ |
// foo sets ok to false |
var ok = false; |
var foo = { "foo": function(){ ok=false; } }; |
// connected function sets ok to true |
dojo.connect(foo, "foo", null, function(){ ok=true; }); |
foo.foo(); |
t.is(true, ok); |
}, |
function basicTest(t) { |
var out = ''; |
var obj = { |
foo: function() { |
out += 'foo'; |
}, |
bar: function() { |
out += 'bar'; |
}, |
baz: function() { |
out += 'baz'; |
} |
}; |
// |
var foobar = dojo.connect(obj, "foo", obj, "bar"); |
dojo.connect(obj, "bar", obj, "baz"); |
// |
out = ''; |
obj.foo(); |
t.is('foobarbaz', out); |
// |
out = ''; |
obj.bar(); |
t.is('barbaz', out); |
// |
out = ''; |
obj.baz(); |
t.is('baz', out); |
// |
dojo.connect(obj, "foo", obj, "baz"); |
dojo.disconnect(foobar); |
// |
out = ''; |
obj.foo(); |
t.is('foobaz', out); |
// |
out = ''; |
obj.bar(); |
t.is('barbaz', out); |
// |
out = ''; |
obj.baz(); |
t.is('baz', out); |
}, |
function hubConnectDisconnect1000(t){ |
t.is(0, markAndSweepTest(1000)); |
}, |
function args4Test(t){ |
// standard 4 args test |
var ok, obj = { foo: function(){ok=false;}, bar: function(){ok=true} }; |
dojo.connect(obj, "foo", obj, "bar"); |
obj.foo(); |
t.is(true, ok); |
}, |
function args3Test(t){ |
// make some globals |
var ok; |
dojo.global["gFoo"] = function(){ok=false;}; |
dojo.global["gOk"] = function(){ok=true;}; |
// 3 arg shorthand for globals (a) |
var link = dojo.connect("gFoo", null, "gOk"); |
gFoo(); |
dojo.disconnect(link); |
t.is(true, ok); |
// 3 arg shorthand for globals (b) |
link = dojo.connect(null, "gFoo", "gOk"); |
gFoo(); |
dojo.disconnect(link); |
t.is(true, ok); |
// verify disconnections |
gFoo(); |
t.is(false, ok); |
}, |
function args2Test(t){ |
// make some globals |
var ok; |
dojo.global["gFoo"] = function(){ok=false;}; |
dojo.global["gOk"] = function(){ok=true;}; |
// 2 arg shorthand for globals |
var link = dojo.connect("gFoo", "gOk"); |
gFoo(); |
dojo.disconnect(link); |
t.is(true, ok); |
// 2 arg shorthand for globals, alternate scoping |
link = dojo.connect("gFoo", gOk); |
gFoo(); |
dojo.disconnect(link); |
t.is(true, ok); |
}, |
function scopeTest1(t){ |
var foo = { ok: true, foo: function(){this.ok=false;} }; |
var bar = { ok: false, bar: function(){this.ok=true} }; |
// link foo.foo to bar.bar with natural scope |
var link = dojo.connect(foo, "foo", bar, "bar"); |
foo.foo(); |
t.is(false, foo.ok); |
t.is(true, bar.ok); |
}, |
function scopeTest2(t){ |
var foo = { ok: true, foo: function(){this.ok=false;} }; |
var bar = { ok: false, bar: function(){this.ok=true} }; |
// link foo.foo to bar.bar such that scope is always 'foo' |
var link = dojo.connect(foo, "foo", bar.bar); |
foo.foo(); |
t.is(true, foo.ok); |
t.is(false, bar.ok); |
}, |
function connectPublisher(t){ |
var foo = { inc: 0, foo: function(){ this.inc++; } }; |
var bar = { inc: 0, bar: function(){ this.inc++; } }; |
var c1h = dojo.connectPublisher("/blah", foo, "foo"); |
var c2h = dojo.connectPublisher("/blah", foo, "foo"); |
dojo.subscribe("/blah", bar, "bar"); |
foo.foo(); |
t.is(1, foo.inc); |
t.is(2, bar.inc); |
dojo.disconnect(c1h); |
foo.foo(); |
t.is(2, foo.inc); |
t.is(3, bar.inc); |
dojo.disconnect(c2h); |
foo.foo(); |
t.is(3, foo.inc); |
t.is(3, bar.inc); |
}, |
function publishSubscribe1000(t){ |
t.is(markAndSweepSubscribersTest(1000), 0); |
} |
] |
); |
|
} |