1 if(!dojo._hasResource["tests._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["tests._base.connect"] = true;
3 dojo.provide("tests._base.connect");
16 // make 'iterations' connections to hub
17 // roughly half of which will be to 'good' and
19 // all connections to 'bad' are disconnected
20 // test can then be performed on the values
21 // 'failures' and 'successes'
22 markAndSweepTest = function(iterations){
25 for(var i=0; i<iterations; i++){
26 if(Math.random() < 0.5){
27 marked.push(dojo.connect('hub', bad));
29 dojo.connect('hub', good);
32 // Randomize markers (only if the count isn't very high)
33 if(i < Math.pow(10, 4)){
36 var m = Math.floor(Math.random() * marked.length);
42 for(var m=0; m<marked.length; m++){
43 dojo.disconnect(marked[m]);
48 // return number of disconnected functions that fired (should be 0)
52 markAndSweepSubscribersTest = function(iterations){
53 var topic = "hubbins";
56 for(var i=0; i<iterations; i++){
57 if(Math.random() < 0.5){
58 marked.push(dojo.subscribe(topic, bad));
60 dojo.subscribe(topic, good);
63 // Randomize markers (only if the count isn't very high)
64 if(i < Math.pow(10, 4)){
67 var m = Math.floor(Math.random() * marked.length);
73 for(var m=0; m<marked.length; m++){
74 dojo.unsubscribe(marked[m]);
79 // return number of unsubscribed functions that fired (should be 0)
83 tests.register("tests._base.connect",
85 function smokeTest(t){
86 // foo sets ok to false
88 var foo = { "foo": function(){ ok=false; } };
89 // connected function sets ok to true
90 dojo.connect(foo, "foo", null, function(){ ok=true; });
94 function basicTest(t) {
108 var foobar = dojo.connect(obj, "foo", obj, "bar");
109 dojo.connect(obj, "bar", obj, "baz");
113 t.is('foobarbaz', out);
123 dojo.connect(obj, "foo", obj, "baz");
124 dojo.disconnect(foobar);
138 function hubConnectDisconnect1000(t){
139 t.is(0, markAndSweepTest(1000));
141 function args4Test(t){
142 // standard 4 args test
143 var ok, obj = { foo: function(){ok=false;}, bar: function(){ok=true} };
144 dojo.connect(obj, "foo", obj, "bar");
148 function args3Test(t){
151 dojo.global["gFoo"] = function(){ok=false;};
152 dojo.global["gOk"] = function(){ok=true;};
153 // 3 arg shorthand for globals (a)
154 var link = dojo.connect("gFoo", null, "gOk");
156 dojo.disconnect(link);
158 // 3 arg shorthand for globals (b)
159 link = dojo.connect(null, "gFoo", "gOk");
161 dojo.disconnect(link);
163 // verify disconnections
167 function args2Test(t){
170 dojo.global["gFoo"] = function(){ok=false;};
171 dojo.global["gOk"] = function(){ok=true;};
172 // 2 arg shorthand for globals
173 var link = dojo.connect("gFoo", "gOk");
175 dojo.disconnect(link);
177 // 2 arg shorthand for globals, alternate scoping
178 link = dojo.connect("gFoo", gOk);
180 dojo.disconnect(link);
183 function scopeTest1(t){
184 var foo = { ok: true, foo: function(){this.ok=false;} };
185 var bar = { ok: false, bar: function(){this.ok=true} };
186 // link foo.foo to bar.bar with natural scope
187 var link = dojo.connect(foo, "foo", bar, "bar");
192 function scopeTest2(t){
193 var foo = { ok: true, foo: function(){this.ok=false;} };
194 var bar = { ok: false, bar: function(){this.ok=true} };
195 // link foo.foo to bar.bar such that scope is always 'foo'
196 var link = dojo.connect(foo, "foo", bar.bar);
201 function connectPublisher(t){
202 var foo = { inc: 0, foo: function(){ this.inc++; } };
203 var bar = { inc: 0, bar: function(){ this.inc++; } };
204 var c1h = dojo.connectPublisher("/blah", foo, "foo");
205 var c2h = dojo.connectPublisher("/blah", foo, "foo");
206 dojo.subscribe("/blah", bar, "bar");
210 dojo.disconnect(c1h);
214 dojo.disconnect(c2h);
219 function publishSubscribe1000(t){
220 t.is(markAndSweepSubscribersTest(1000), 0);