source: Dev/trunk/src/client/dojox/widget/DocTester.js @ 513

Last change on this file since 513 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.3 KB
Line 
1dojo.provide("dojox.widget.DocTester");
2
3dojo.require("dojo.string");
4dojo.require("dijit._Widget");
5dojo.require("dijit._Templated");
6dojo.require("dojox.form.BusyButton");
7dojo.require("dojox.testing.DocTest");
8
9dojo.declare('dojox.widget.DocTester',
10        [dijit._Widget, dijit._Templated],
11        {
12                // summary:
13                //              A widget to run DocTests inside an HTML page.
14
15                templateString: dojo.cache('dojox.widget','DocTester/DocTester.html'),
16                widgetsInTemplate: true,
17       
18                _fillContent:function(/*DomNode*/source){
19                        // summary:
20                        //              Overridden from _Templates.js, which actually just takes care of filling the containerNode.
21                        var src = source.innerHTML;
22                        this.doctests = new dojox.testing.DocTest();
23                        this.tests = this.doctests.getTestsFromString(this._unescapeHtml(src));
24                        var lineNumbers = dojo.map(this.tests, 'return item.line-1');
25                        var lines = src.split("\n");
26                        var actualResultHtml = '<div class="actualResult">FAILED, actual result was: <span class="result"></span></div>';
27                        var content = '<pre class="testCase testNum0 odd">';
28                        for (var i=0; i<lines.length; i++){
29                                var index = dojo.indexOf(lineNumbers, i);
30                                if (index>0 && index!=-1){
31                                        var evenOdd = index%2 ? "even" : "odd";
32                                        content += actualResultHtml;
33                                        content += '</pre><pre class="testCase testNum'+ index +' '+evenOdd+'">';
34                                }
35                                content += lines[i].replace(/^\s+/, "")+"\n";
36                        }
37                        content += actualResultHtml + '</pre>';
38                        this.containerNode.innerHTML = content;
39                },
40       
41                postCreate:function(){
42                        this.inherited("postCreate", arguments);
43                        dojo.connect(this.runButtonNode, "onClick", dojo.hitch(this, "runTests"));
44                        dojo.connect(this.resetButtonNode, "onClick", dojo.hitch(this, "reset"));
45                        this.numTestsNode.innerHTML = this.tests.length;
46                },
47               
48                runTests:function(){
49                        var results = {ok:0, nok:0};
50                        for (var i=0; i<this.tests.length; i++){
51                                var ret = this.doctests.runTest(this.tests[i].commands, this.tests[i].expectedResult);
52                                dojo.query(".testNum"+i, this.domNode).addClass(ret.success ? "resultOk" : "resultNok");
53                                if (!ret.success){
54                                        results.nok++;
55                                        this.numTestsNokNode.innerHTML = results.nok;
56                                        var act = dojo.query(".testNum"+i+" .actualResult", this.domNode)[0];
57                                        dojo.style(act, "display", "inline");
58                                        dojo.query(".result", act)[0].innerHTML = dojo.toJson(ret.actualResult);
59                                } else {
60                                        results.ok++;
61                                        this.numTestsOkNode.innerHTML = results.ok;
62                                }
63                        }
64                        this.runButtonNode.cancel();
65                        dojo.style(this.runButtonNode.domNode, "display", "none");
66                        dojo.style(this.resetButtonNode.domNode, "display", "");
67                },
68               
69                reset:function(){
70                        // summary:
71                        //              Reset the DocTester visuals and enable the "Run tests" button again.
72                        dojo.style(this.runButtonNode.domNode, "display", "");
73                        dojo.style(this.resetButtonNode.domNode, "display", "none");
74                        this.numTestsOkNode.innerHTML = "0";
75                        this.numTestsNokNode.innerHTML = "0";
76                        dojo.query(".actualResult", this.domNode).style("display", "none");
77                        dojo.query(".testCase", this.domNode).removeClass("resultOk").removeClass("resultNok");
78                },
79               
80                _unescapeHtml:function(/* String */ str){
81                        // summary:
82                        //              Adds escape sequences for special characters in XML: &<>"'
83                        str = String(str).replace(/&amp;/gm, "&").replace(/&lt;/gm, "<")
84                                .replace(/&gt;/gm, ">").replace(/&quot;/gm, '"');
85                        // TODO Should become dojo.html.unentities() or so, when exists use instead
86                        return str; // String
87                }
88        }
89);
Note: See TracBrowser for help on using the repository browser.