Ticket #5899: dojoDeferredList.patch

File dojoDeferredList.patch, 3.8 kB (added by tvachon, 11 months ago)

Patch to fix problem + tests. (Updates to remove variable and not fix typo, since it's already been fixed in changeset 12508)

  • tests/DeferredList.js

     
     1dojo.provide("tests.DeferredList"); 
     2 
     3dojo.require("dojo.DeferredList"); 
     4 
     5doh.register("tests.DeferredList",  
     6        [ 
     7                function callback(t){ 
     8                        var d1 = new dojo.Deferred(); 
     9                        var d2 = new dojo.Deferred(); 
     10            var dl = new dojo.DeferredList([d1, d2]); 
     11            var fired = false; 
     12                        dl.addCallback(function(res){ 
     13                                doh.debug("debug from dojo.DeferredList callback"); 
     14                                return res; 
     15                        }); 
     16                        dl.addCallback(function(res){ 
     17                t.assertTrue(res.length == 2); 
     18                t.assertTrue(res[0][0]); 
     19                t.assertEqual(res[0][1], "foo"); 
     20                t.assertTrue(res[1][0]); 
     21                t.assertEqual(res[1][1], "bar"); 
     22                fired = true; 
     23                                return res; 
     24                        }); 
     25                        d1.callback("foo"); 
     26                        d2.callback("bar"); 
     27            t.assertTrue(fired); 
     28                }, 
     29 
     30                function errback(t){ 
     31                        var d1 = new dojo.Deferred(); 
     32                        var d2 = new dojo.Deferred(); 
     33            var dl = new dojo.DeferredList([d1, d2]); 
     34            var fired = false; 
     35            var e1 = new Error("foo"); 
     36            var e2 = new Error("bar"); 
     37 
     38                        dl.addCallback(function(res){ 
     39                                doh.debug("debug from dojo.DeferredList callback"); 
     40                                return res; 
     41                        }); 
     42                        dl.addCallback(function(res){ 
     43                t.assertTrue(res.length == 2); 
     44                t.assertTrue(!res[0][0]); 
     45 
     46                t.assertEqual(res[0][1], e1); 
     47                t.assertTrue(!res[1][0]); 
     48                t.assertEqual(res[1][1], e2); 
     49                fired = true; 
     50                                return res; 
     51                        }); 
     52                        d1.errback(e1); 
     53                        d2.errback(e2); 
     54            t.assertTrue(fired); 
     55                }, 
     56 
     57 
     58                function mixed(t){ 
     59                        var d1 = new dojo.Deferred(); 
     60                        var d2 = new dojo.Deferred(); 
     61            var dl = new dojo.DeferredList([d1, d2]); 
     62            var fired = false; 
     63            var e = new Error("foo"); 
     64 
     65                        dl.addCallback(function(res){ 
     66                                doh.debug("debug from dojo.DeferredList callback"); 
     67                                return res; 
     68                        }); 
     69                        dl.addCallback(function(res){ 
     70                t.assertTrue(res.length == 2); 
     71                t.assertTrue(!res[0][0]); 
     72 
     73                t.assertEqual(res[0][1], e); 
     74                t.assertTrue(res[1][0]); 
     75                t.assertEqual(res[1][1], "bar"); 
     76                fired = true; 
     77                                return res; 
     78                        }); 
     79                        d1.errback(e); 
     80                        d2.callback("bar"); 
     81            t.assertTrue(fired); 
     82                },  
     83 
     84        function gather(t){ 
     85                        var d1 = new dojo.Deferred(); 
     86                        var d2 = new dojo.Deferred(); 
     87            var dl = dojo.DeferredList.prototype.gatherResults([d1, d2]); 
     88            var fired = false; 
     89                        dl.addCallback(function(res){ 
     90                t.assertEqual(res[0], "foo"); 
     91                t.assertEqual(res[1], "bar"); 
     92                fired = true; 
     93                                return res; 
     94                        }); 
     95                        d1.callback("foo"); 
     96                        d2.callback("bar"); 
     97            t.assertTrue(fired); 
     98        } 
     99        ] 
     100); 
  • tests/module.js

     
    1919        dojo.require("tests.colors"); 
    2020        dojo.requireIf(dojo.isBrowser,"tests.cookie"); 
    2121        dojo.require("tests.fx"); 
     22        dojo.require("tests.DeferredList"); 
    2223}catch(e){ 
    2324        doh.debug(e); 
    2425} 
  • DeferredList.js

     
    4040                this.fireOnOneErrback = fireOnOneErrback; 
    4141                this.consumeErrors = consumeErrors; 
    4242 
    43                 var index = 0; 
    44  
    4543                dojo.forEach(this.list, function(d, index) { 
    4644                        d.addCallback(this, function(r) { this._cbDeferred(index, true, r); return r; }); 
    4745                        d.addErrback(this, function(r) { this._cbDeferred(index, false, r); return r; }); 
    48                         index++; 
    4946                },this); 
    5047        },