diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo-1.6/dojox/widget/DocTester.xd.js | |
Diffstat (limited to 'js/dojo-1.6/dojox/widget/DocTester.xd.js')
| -rw-r--r-- | js/dojo-1.6/dojox/widget/DocTester.xd.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/widget/DocTester.xd.js b/js/dojo-1.6/dojox/widget/DocTester.xd.js new file mode 100644 index 0000000..1d759b9 --- /dev/null +++ b/js/dojo-1.6/dojox/widget/DocTester.xd.js @@ -0,0 +1,106 @@ +/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.widget.DocTester"],
+["require", "dojo.string"],
+["require", "dijit._Widget"],
+["require", "dijit._Templated"],
+["require", "dojox.form.BusyButton"],
+["require", "dojox.testing.DocTest"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.widget.DocTester"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.widget.DocTester"] = true;
+dojo.provide("dojox.widget.DocTester");
+
+dojo.require("dojo.string");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.form.BusyButton");
+dojo.require("dojox.testing.DocTest");
+
+dojo.declare('dojox.widget.DocTester',
+ [dijit._Widget, dijit._Templated],
+ {
+ // summary: A widget to run DocTests inside an HTML page.
+ //
+ templateString: dojo.cache("dojox.widget", "DocTester/DocTester.html", "<div dojoAttachPoint=\"domNode\" class=\"dojoxDocTester\">\r\n\t<div dojoAttachPoint=\"containerNode\"></div>\r\n\t<button dojoType=\"dojox.form.BusyButton\" busyLabel=\"Testing...\" dojoAttachPoint=\"runButtonNode\">Run tests</button>\r\n\t<button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"resetButtonNode\" style=\"display:none;\">Reset</button>\r\n\t<span>\r\n\t\t<span dojoAttachPoint=\"numTestsNode\">0</span> tests,\r\n\t\t<span dojoAttachPoint=\"numTestsOkNode\">0</span> passed,\r\n\t\t<span dojoAttachPoint=\"numTestsNokNode\">0</span> failed\r\n\t</span>\r\n</div>\r\n"),
+ widgetsInTemplate: true,
+
+ _fillContent:function(/*DomNode*/source){
+ // summary: Overridden from _Templates.js, which actually just takes care of filling the containerNode.
+ var src = source.innerHTML;
+ this.doctests = new dojox.testing.DocTest();
+ this.tests = this.doctests.getTestsFromString(this._unescapeHtml(src));
+ var lineNumbers = dojo.map(this.tests, 'return item.line-1');
+ var lines = src.split("\n");
+ var actualResultHtml = '<div class="actualResult">FAILED, actual result was: <span class="result"></span></div>';
+ var content = '<pre class="testCase testNum0 odd">';
+ for (var i=0; i<lines.length; i++){
+ var index = dojo.indexOf(lineNumbers, i);
+ if (index>0 && index!=-1){
+ var evenOdd = index%2 ? "even" : "odd";
+ content += actualResultHtml;
+ content += '</pre><pre class="testCase testNum'+ index +' '+evenOdd+'">';
+ }
+ content += lines[i].replace(/^\s+/, "")+"\n";
+ }
+ content += actualResultHtml + '</pre>';
+ this.containerNode.innerHTML = content;
+ },
+
+ postCreate:function(){
+ this.inherited("postCreate", arguments);
+ dojo.connect(this.runButtonNode, "onClick", dojo.hitch(this, "runTests"));
+ dojo.connect(this.resetButtonNode, "onClick", dojo.hitch(this, "reset"));
+ this.numTestsNode.innerHTML = this.tests.length;
+ },
+
+ runTests:function(){
+ var results = {ok:0, nok:0};
+ for (var i=0; i<this.tests.length; i++){
+ var ret = this.doctests.runTest(this.tests[i].commands, this.tests[i].expectedResult);
+ dojo.query(".testNum"+i, this.domNode).addClass(ret.success ? "resultOk" : "resultNok");
+ if (!ret.success){
+ results.nok++;
+ this.numTestsNokNode.innerHTML = results.nok;
+ var act = dojo.query(".testNum"+i+" .actualResult", this.domNode)[0];
+ dojo.style(act, "display", "inline");
+ dojo.query(".result", act)[0].innerHTML = dojo.toJson(ret.actualResult);
+ } else {
+ results.ok++;
+ this.numTestsOkNode.innerHTML = results.ok;
+ }
+ }
+ this.runButtonNode.cancel();
+ dojo.style(this.runButtonNode.domNode, "display", "none");
+ dojo.style(this.resetButtonNode.domNode, "display", "");
+ },
+
+ reset:function(){
+ // summary: Reset the DocTester visuals and enable the "Run tests" button again.
+ dojo.style(this.runButtonNode.domNode, "display", "");
+ dojo.style(this.resetButtonNode.domNode, "display", "none");
+ this.numTestsOkNode.innerHTML = "0";
+ this.numTestsNokNode.innerHTML = "0";
+ dojo.query(".actualResult", this.domNode).style("display", "none");
+ dojo.query(".testCase", this.domNode).removeClass("resultOk").removeClass("resultNok");
+ },
+
+ _unescapeHtml:function(/*string*/str){
+ // TODO Should become dojo.html.unentities() or so, when exists use instead
+ // summary:
+ // Adds escape sequences for special characters in XML: &<>"'
+ str = String(str).replace(/&/gm, "&").replace(/</gm, "<")
+ .replace(/>/gm, ">").replace(/"/gm, '"');
+ return str; // string
+ }
+ }
+);
+
+}
+
+}};});
|
