Changeset 7624

Show
Ignore:
Timestamp:
03/16/07 02:12:09 (22 months ago)
Author:
alex
Message:

adding getTestCallback() method as discussed with Brian Skinner today in IRC (already doc'd in the porting guide). Almost have the test URL story figured out. Refs #2550

Location:
dojo/trunk/tests
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • dojo/trunk/tests/runner.html

    r7589 r7624  
    4242                        } 
    4343 
    44                         #testHost { 
     44                        .tabBody { 
    4545                                margin: 0px; 
    4646                                padding: 0px; 
     47                                /* 
    4748                                border: 1px solid black; 
     49                                */ 
    4850                                background-color: #DEDEDE; 
    4951                                border: 0px; 
     52                                width: 100%; 
     53                                height: 100%; 
     54                                position: absolute; 
     55                                left: 0px;  
     56                                top: 0px; 
     57                                overflow: auto; 
     58                        } 
     59 
     60                        #logBody { 
     61                                padding-left: 5px; 
     62                                padding-top: 5px; 
     63                                font-family: Monaco, monospace; 
     64                                white-space: pre; 
    5065                        } 
    5166 
     
    7691                        .header { 
    7792                                border: 1px solid #DEDEDE; 
     93                        } 
     94 
     95                        button.tab { 
     96                                border-width: 1px 1px 0px 1px; 
     97                                border-style: solid; 
     98                                border-color: #DEDEDE; 
     99                                margin-right: 5px; 
    78100                        } 
    79101 
     
    157179                                        </span> 
    158180                                </td> 
    159                                 <td width="*" class="header"> 
    160                                         <button>Test Page</button> 
    161                                         <button>Log</button> 
     181                                <td width="*" class="header" valign="bottom"> 
     182                                        <button class="tab" onclick="showTestPage();">Test Page</button> 
     183                                        <button class="tab" onclick="showLogPage();">Log</button> 
    162184                                </td> 
    163185                        </tr> 
     
    195217                                </td> 
    196218                                <td> 
    197                                         <iframe id="testHost"  
    198                                                 style="height: 99%; width: 100%;"></iframe> 
    199                                         <!-- 
    200                                                 src="http://redesign.dojotoolkit.org"></iframe> 
    201                                         --> 
     219                                        <div style="position: relative; width: 99%; height: 100%; top: 0px; left: 0px;"> 
     220                                                <div id="logBody" class="tabBody" 
     221                                                        style="z-index: 1;">thinger blah blah 
     222                                                </div> 
     223                                                <iframe id="testBody" class="tabBody" 
     224                                                        style="z-index: 0;"></iframe> 
     225                                                <!-- 
     226                                                        src="http://redesign.dojotoolkit.org"></iframe> 
     227                                                --> 
     228                                        </div> 
    202229                                </td> 
    203230                        </tr> 
  • dojo/trunk/tests/runner.js

    r7589 r7624  
    124124 
    125125tests.extend(tests.Deferred, { 
     126        getTestCallback: function(cb, scope){ 
     127                var _this = this; 
     128                return function(){ 
     129                        try{ 
     130                                cb.apply(scope||window||_this, arguments); 
     131                        }catch(e){ 
     132                                _this.errback(e); 
     133                                return; 
     134                        } 
     135                        _this.callback(true); 
     136                } 
     137        }, 
     138 
    126139        getFunctionFromArgs: function(){ 
    127140                var a = arguments; 
     
    521534 
    522535                                tg.inFlight++; 
     536                                ret.groupName = groupName; 
     537                                ret.fixture = fixture; 
    523538 
    524539                                ret.addErrback(function(err){ 
  • dojo/trunk/tests/_base.js

    r7589 r7624  
    7171                                runTest: function(t){ 
    7272                                        var d = new tests.Deferred(); 
    73                                         setTimeout(function(){ 
    74                                                 d.callback(true); 
    75                                         }, 50); 
     73                                        setTimeout(d.getTestCallback(function(){ 
     74                                                t.isTrue(true); 
     75                                                t.isFalse(false); 
     76                                        }), 50); 
    7677                                        return d; 
    7778                                } 
  • dojo/trunk/tests/_browserRunner.js

    r7589 r7624  
    33} 
    44 
     5// FIXME: need to "look up" to see what we should define/redefine if we're 
     6// loaded in the child iframe for testing. 
    57// FIXME: need to add prompting for monkey-do testing 
    68// FIXME: need to implement progress bar 
     
    911 
    1012(function(){ 
    11         // borrowed from Dojo, etc. 
    12         var byId = function(id){ 
    13                 return document.getElementById(id); 
     13        if(window.parent === window){ 
     14                // we're the top-dog window. 
     15 
     16                // borrowed from Dojo, etc. 
     17                var byId = function(id){ 
     18                        return document.getElementById(id); 
     19                } 
     20 
     21                var _addOnEvt = function(       type,           // string 
     22                                                                        refOrName,      // function or string 
     23                                                                        scope){         // object, defaults is window 
     24 
     25                        if(!scope){ scope = window; } 
     26 
     27                        var funcRef = refOrName; 
     28                        if(typeof refOrName == "string"){ 
     29                                funcRef = scope[refOrName]; 
     30                        } 
     31                        var enclosedFunc = function(){ return funcRef.apply(scope, arguments); }; 
     32 
     33                        if(window["attachEvent"]){ 
     34                                window.attachEvent("on"+type, enclosedFunc); 
     35                        }else if(window["addEventListener"]){ 
     36                                window.addEventListener(type, enclosedFunc, false); 
     37                        }else if(document["addEventListener"]){ 
     38                                document.addEventListener(type, enclosedFunc, false); 
     39                        } 
     40                }; 
     41 
     42                // 
     43                // Over-ride or implement base runner.js-provided methods 
     44                // 
     45                if(window["console"]){ 
     46                        if(console.info){ 
     47                                tests.debug = console.debug; 
     48                        }else{ 
     49                                tests.debug = function(){ 
     50                                        var msg = ""; 
     51                                        for(var x=0; x<arguments.length; x++){ 
     52                                                msg += " "+arguments[x]; 
     53                                        } 
     54                                        console.log("DEBUG:"+msg); 
     55                                } 
     56                        } 
     57                } 
     58 
     59                var loaded = false; 
     60                var groupTemplate = null; 
     61                var testTemplate = null; 
     62 
     63                var groupNodes = {}; 
     64 
     65                var addGroupToList = function(group){ 
     66                        var tb = byId("testList").tBodies[0]; 
     67                        var tg = groupTemplate.cloneNode(true); 
     68                        var tds = tg.getElementsByTagName("td"); 
     69                        var cb = tds[0].getElementsByTagName("input")[0]; 
     70                        cb.group = group; 
     71                        cb.onclick = function(evt){ 
     72                                tests._groups[group].skip = (!this.checked); 
     73                        } 
     74                        tds[1].innerHTML = group; 
     75                        tds[2].innerHTML = ""; 
     76 
     77                        tb.appendChild(tg); 
     78                        return tg; 
     79                } 
     80 
     81                var addFixtureToList = function(group, fixture){ 
     82                        var cgn = groupNodes[group]; 
     83                        var tn = testTemplate.cloneNode(true); 
     84                        var tds = tn.getElementsByTagName("td"); 
     85 
     86                        tds[1].innerHTML = fixture.name; 
     87                        tds[2].innerHTML = ""; 
     88 
     89                        var nn = (cgn.__lastFixture||cgn.__groupNode).nextSibling; 
     90                        if(nn){ 
     91                                nn.parentNode.insertBefore(tn, nn); 
     92                        }else{ 
     93                                cgn.__groupNode.parentNode.appendChild(tn); 
     94                        } 
     95                        return cgn.__lastFixture = tn; 
     96                } 
     97 
     98                var getFixtureNode = function(group, fixture){ 
     99                        if(groupNodes[group]){ 
     100                                return groupNodes[group][fixture.name]; 
     101                        } 
     102                        return null; 
     103                } 
     104 
     105                var getGroupNode = function(group){ 
     106                        if(groupNodes[group]){ 
     107                                return groupNodes[group].__groupNode; 
     108                        } 
     109                        return null; 
     110                } 
     111 
     112                var updateBacklog = []; 
     113                tests._updateTestList = function(group, fixture, unwindingBacklog){ 
     114                        if(!loaded){ 
     115                                if(group && fixture){ 
     116                                        updateBacklog.push([group, fixture]); 
     117                                } 
     118                                return; 
     119                        }else if((updateBacklog.length)&&(!unwindingBacklog)){ 
     120                                var tr; 
     121                                while(tr=updateBacklog.shift()){ 
     122                                        tests._updateTestList(tr[0], tr[1], true); 
     123                                } 
     124                        } 
     125                        if(group && fixture){ 
     126                                if(!groupNodes[group]){ 
     127                                        groupNodes[group] = { 
     128                                                "__groupNode": addGroupToList(group) 
     129                                        }; 
     130                                } 
     131                                if(!groupNodes[group][fixture.name]){ 
     132                                        groupNodes[group][fixture.name] = addFixtureToList(group, fixture) 
     133                                } 
     134                        } 
     135                } 
     136 
     137                tests._testRegistered = tests._updateTestList; 
     138 
     139                tests._groupStarted = function(group){ 
     140                        getGroupNode(group).className = "inProgress"; 
     141                } 
     142 
     143                tests._groupFinished = function(group, success){ 
     144                        getGroupNode(group).className = (success) ? "success" : "failure"; 
     145                } 
     146 
     147                tests._testStarted = function(group, fixture){ 
     148                        getFixtureNode(group, fixture).className = "inProgress"; 
     149                        fixture.startTime = new Date(); 
     150                } 
     151 
     152                tests._testFinished = function(group, fixture, success){ 
     153                        this.debug(((success) ? "PASSED" : "FAILED"), "test:", fixture.name); 
     154                        var fn = getFixtureNode(group, fixture); 
     155                        fn.className = (success) ? "success" : "failure"; 
     156                        fn.getElementsByTagName("td")[2].innerHTML = ((new Date())-fixture.startTime)+"ms"; 
     157                } 
     158 
     159                //  
     160                // Utility code for runner.html 
     161                // 
     162                var tabzidx = 1; 
     163                showTestPage = function(){ 
     164                        byId("testBody").style.zIndex = ++tabzidx; 
     165                } 
     166 
     167                showLogPage = function(){ 
     168                        byId("logBody").style.zIndex = ++tabzidx; 
     169                } 
     170 
     171                var runAll = true; 
     172                toggleRunAll = function(){ 
     173                        // would be easier w/ query...sigh 
     174                        runAll = (!runAll); 
     175                        var tb = byId("testList").tBodies[0]; 
     176                        var inputs = tb.getElementsByTagName("input"); 
     177                        var x=0; var tn; 
     178                        while(tn=inputs[x++]){ 
     179                                tn.checked = runAll; 
     180                                tests._groups[tn.group].skip = (!runAll); 
     181                        } 
     182                } 
     183 
     184                var listHeightTimer = null; 
     185                var setListHeight = function(){ 
     186                        if(listHeightTimer){ 
     187                                clearTimeout(listHeightTimer); 
     188                        } 
     189                        var tl = byId("testList"); 
     190                        if(!tl){ return; } 
     191                        listHeightTimer = setTimeout(function(){ 
     192                                tl.style.display = "none"; 
     193                                tl.style.display = ""; 
     194 
     195                        }, 10); 
     196                } 
     197 
     198                _addOnEvt("resize", setListHeight); 
     199                _addOnEvt("load", setListHeight); 
     200                _addOnEvt("load", function(){ 
     201                        loaded = true; 
     202                        groupTemplate = byId("groupTemplate"); 
     203                        if(!groupTemplate){  
     204                                // make sure we've got an ammenable DOM structure 
     205                                return; 
     206                        } 
     207                        groupTemplate.parentNode.removeChild(groupTemplate); 
     208                        groupTemplate.style.display = ""; 
     209                        testTemplate = byId("testTemplate"); 
     210                        testTemplate.parentNode.removeChild(testTemplate); 
     211                        testTemplate.style.display = ""; 
     212                        tests._updateTestList(); 
     213                }); 
     214 
     215                _addOnEvt("load",  
     216                        function(){ 
     217                                if(!byId("play")){  
     218                                        // make sure we've got an ammenable DOM structure 
     219                                        return; 
     220                                } 
     221                                var isRunning = false; 
     222                                var toggleRunning = function(){ 
     223                                        // ugg, this would be so much better w/ dojo.query() 
     224                                        if(isRunning){ 
     225                                                byId("play").style.display = byId("pausedMsg").style.display = ""; 
     226                                                byId("playingMsg").style.display = byId("pause").style.display = "none"; 
     227                                                isRunning = false; 
     228                                        }else{ 
     229                                                byId("play").style.display = byId("pausedMsg").style.display = "none"; 
     230                                                byId("playingMsg").style.display = byId("pause").style.display = ""; 
     231                                                isRunning = true; 
     232                                        } 
     233                                } 
     234                                tests._onEnd = toggleRunning; 
     235                                var btns = byId("toggleButtons").getElementsByTagName("span"); 
     236                                var node; var idx=0; 
     237                                while(node=btns[idx++]){ 
     238                                        node.onclick = toggleRunning; 
     239                                } 
     240                        } 
     241                ); 
     242        }else{ 
     243                // we're in an iframe environment. Time to mix it up a bit. 
     244                tests = window.parent.tests; 
    14245        } 
    15246 
    16         var _addOnEvt = function(       type,           // string 
    17                                                                 refOrName,      // function or string 
    18                                                                 scope){         // object, defaults is window 
    19  
    20                 if(!scope){ scope = window; } 
    21  
    22                 var funcRef = refOrName; 
    23                 if(typeof refOrName == "string"){ 
    24                         funcRef = scope[refOrName]; 
    25                 } 
    26                 var enclosedFunc = function(){ return funcRef.apply(scope, arguments); }; 
    27  
    28                 if(window["attachEvent"]){ 
    29                         window.attachEvent("on"+type, enclosedFunc); 
    30                 }else if(window["addEventListener"]){ 
    31                         window.addEventListener(type, enclosedFunc, false); 
    32                 }else if(document["addEventListener"]){ 
    33                         document.addEventListener(type, enclosedFunc, false); 
    34                 } 
    35         }; 
    36  
    37         // 
    38         // Over-ride or implement base runner.js-provided methods 
    39         // 
    40         if(window["console"]){ 
    41                 if(console.info){ 
    42                         tests.debug = console.debug; 
    43                 }else{ 
    44                         tests.debug = function(){ 
    45                                 var msg = ""; 
    46                                 for(var x=0; x<arguments.length; x++){ 
    47                                         msg += " "+arguments[x]; 
    48                                 } 
    49                                 console.log("DEBUG:"+msg); 
    50                         } 
    51                 } 
    52         } 
    53  
    54         var loaded = false; 
    55         var groupTemplate = null; 
    56         var testTemplate = null; 
    57  
    58         var groupNodes = {}; 
    59  
    60         var addGroupToList = function(group){ 
    61                 var tb = byId("testList").tBodies[0]; 
    62                 var tg = groupTemplate.cloneNode(true); 
    63                 var tds = tg.getElementsByTagName("td"); 
    64                 var cb = tds[0].getElementsByTagName("input")[0]; 
    65                 cb.group = group; 
    66                 cb.onclick = function(evt){ 
    67                         tests._groups[group].skip = (!this.checked); 
    68                 } 
    69                 tds[1].innerHTML = group; 
    70                 tds[2].innerHTML = ""; 
    71  
    72                 tb.appendChild(tg); 
    73                 return tg; 
    74         } 
    75  
    76         var addFixtureToList = function(group, fixture){ 
    77                 var cgn = groupNodes[group]; 
    78                 var tn = testTemplate.cloneNode(true); 
    79                 var tds = tn.getElementsByTagName("td"); 
    80  
    81                 tds[1].innerHTML = fixture.name; 
    82                 tds[2].innerHTML = ""; 
    83  
    84                 var nn = (cgn.__lastFixture||cgn.__groupNode).nextSibling; 
    85                 if(nn){ 
    86                         nn.parentNode.insertBefore(tn, nn); 
    87                 }else{ 
    88                         cgn.__groupNode.parentNode.appendChild(tn); 
    89                 } 
    90                 return cgn.__lastFixture = tn; 
    91         } 
    92  
    93         var getFixtureNode = function(group, fixture){ 
    94                 if(groupNodes[group]){ 
    95                         return groupNodes[group][fixture.name]; 
    96                 } 
    97                 return null; 
    98         } 
    99  
    100         var getGroupNode = function(group){ 
    101                 if(groupNodes[group]){ 
    102                         return groupNodes[group].__groupNode; 
    103                 } 
    104                 return null; 
    105         } 
    106  
    107         var updateBacklog = []; 
    108         tests._updateTestList = function(group, fixture, unwindingBacklog){ 
    109                 if(!loaded){ 
    110                         if(group && fixture){ 
    111                                 updateBacklog.push([group, fixture]); 
    112                         } 
    113                         return; 
    114                 }else if((updateBacklog.length)&&(!unwindingBacklog)){ 
    115                         var tr; 
    116                         while(tr=updateBacklog.shift()){ 
    117                                 tests._updateTestList(tr[0], tr[1], true); 
    118                         } 
    119                 } 
    120                 if(group && fixture){ 
    121                         if(!groupNodes[group]){ 
    122                                 groupNodes[group] = { 
    123                                         "__groupNode": addGroupToList(group) 
    124                                 }; 
    125                         } 
    126                         if(!groupNodes[group][fixture.name]){ 
    127                                 groupNodes[group][fixture.name] = addFixtureToList(group, fixture) 
    128                         } 
    129                 } 
    130         } 
    131  
    132         tests._testRegistered = tests._updateTestList; 
    133  
    134         tests._groupStarted = function(group){ 
    135                 getGroupNode(group).className = "inProgress"; 
    136         } 
    137  
    138         tests._groupFinished = function(group, success){ 
    139                 getGroupNode(group).className = (success) ? "success" : "failure"; 
    140         } 
    141  
    142         tests._testStarted = function(group, fixture){ 
    143                 getFixtureNode(group, fixture).className = "inProgress"; 
    144                 fixture.startTime = new Date(); 
    145         } 
    146  
    147         tests._testFinished = function(group, fixture, success){ 
    148                 this.debug(((success) ? "PASSED" : "FAILED"), "test:", fixture.name); 
    149                 var fn = getFixtureNode(group, fixture); 
    150                 fn.className = (success) ? "success" : "failure"; 
    151                 fn.getElementsByTagName("td")[2].innerHTML = ((new Date())-fixture.startTime)+"ms"; 
    152         } 
    153  
    154         //  
    155         // Utility code for runner.html 
    156         // 
    157         var runAll = true; 
    158         toggleRunAll = function(){ 
    159                 // would be easier w/ query...sigh 
    160                 runAll = (!runAll); 
    161                 var tb = byId("testList").tBodies[0]; 
    162                 var inputs = tb.getElementsByTagName("input"); 
    163                 var x=0; var tn; 
    164                 while(tn=inputs[x++]){ 
    165                         tn.checked = runAll; 
    166                         tests._groups[tn.group].skip = (!runAll); 
    167                 } 
    168         } 
    169  
    170         var listHeightTimer = null; 
    171         var setListHeight = function(){ 
    172                 if(listHeightTimer){ 
    173                         clearTimeout(listHeightTimer); 
    174                 } 
    175                 var tl = byId("testList"); 
    176                 listHeightTimer = setTimeout(function(){ 
    177                         tl.style.display = "none"; 
    178                         tl.style.display = ""; 
    179  
    180                 }, 10); 
    181         } 
    182  
    183         _addOnEvt("resize", setListHeight); 
    184         _addOnEvt("load", setListHeight); 
    185         _addOnEvt("load", function(){ 
    186                 loaded = true; 
    187                 groupTemplate = byId("groupTemplate"); 
    188                 groupTemplate.parentNode.removeChild(groupTemplate); 
    189                 groupTemplate.style.display = ""; 
    190                 testTemplate = byId("testTemplate"); 
    191                 testTemplate.parentNode.removeChild(testTemplate); 
    192                 testTemplate.style.display = ""; 
    193                 tests._updateTestList(); 
    194         }); 
    195  
    196         _addOnEvt("load",  
    197                 function(){ 
    198                         var isRunning = false; 
    199                         var toggleRunning = function(){ 
    200                                 // ugg, this would be so much better w/ dojo.query() 
    201                                 if(isRunning){ 
    202                                         byId("play").style.display = byId("pausedMsg").style.display = ""; 
    203                                         byId("playingMsg").style.display = byId("pause").style.display = "none"; 
    204                                         isRunning = false; 
    205                                 }else{ 
    206                                         byId("play").style.display = byId("pausedMsg").style.display = "none"; 
    207                                         byId("playingMsg").style.display = byId("pause").style.display = ""; 
    208                                         isRunning = true; 
    209                                 } 
    210                         } 
    211                         tests._onEnd = toggleRunning; 
    212                         var btns = byId("toggleButtons").getElementsByTagName("span"); 
    213                         var node; var idx=0; 
    214                         while(node=btns[idx++]){ 
    215                                 node.onclick = toggleRunning; 
    216                         } 
    217                 } 
    218         ); 
    219  
    220247})();