📄 connect.js
字号:
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); } ]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -