Spaces:
Sleeping
Sleeping
| var TestDoc = { | |
| fails: 0, | |
| plans: 0, | |
| passes: 0, | |
| results: [] | |
| }; | |
| TestDoc.record = function(result) { | |
| TestDoc.results.push(result); | |
| if (typeof result.verdict == "boolean") { | |
| if (result.verdict === false) TestDoc.fails++; | |
| if (result.verdict === true) TestDoc.passes++; | |
| } | |
| } | |
| TestDoc.prove = function(filePath) { | |
| if (typeof document != "undefined" && typeof document.write != "undefined") { | |
| if (TestDoc.console) print = function(s) { TestDoc.console.appendChild(document.createTextNode(s+"\n")); } | |
| else print = function(s) { document.write(s+"<br />"); } | |
| } | |
| TestDoc.run(TestDoc.readFile(filePath)); | |
| } | |
| TestDoc.run = function(src) { | |
| try { eval(src); } catch(e) { print("# ERROR! "+e); } | |
| var chunks = src.split(/\/\*t:/); | |
| var run = function(chunk) { | |
| // local shortcuts | |
| var is = TestDoc.assertEquals; | |
| var isnt = TestDoc.assertNotEquals; | |
| var plan = TestDoc.plan; | |
| var requires = TestDoc.requires; | |
| try { eval(chunk); } catch(e) { print("# ERROR! "+e); } | |
| } | |
| for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) { | |
| run( | |
| src.substring( | |
| start+4, | |
| (end = src.indexOf("*/", start)) | |
| ) | |
| ); | |
| } | |
| } | |
| TestDoc.Result = function(verdict, message) { | |
| this.verdict = verdict; | |
| this.message = message; | |
| } | |
| TestDoc.Result.prototype.toString = function() { | |
| if (typeof this.verdict == "boolean") { | |
| return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message; | |
| } | |
| return "# " + this.message; | |
| } | |
| TestDoc.requires = function(file) { | |
| if (!TestDoc.requires.loaded[file]) { | |
| load(file); | |
| TestDoc.requires.loaded[file] = true; | |
| } | |
| } | |
| TestDoc.requires.loaded = {}; | |
| TestDoc.report = function() { | |
| TestDoc.report.counter = 0; | |
| print("1.."+TestDoc.plans); | |
| for (var i = 0; i < TestDoc.results.length; i++) { | |
| print(TestDoc.results[i]); | |
| } | |
| print("----------------------------------------"); | |
| if (TestDoc.fails == 0 && TestDoc.passes == TestDoc.plans) { | |
| print("All tests successful."); | |
| } | |
| else { | |
| print("Failed " + TestDoc.fails + "/" + TestDoc.plans + " tests, "+((TestDoc.plans == 0)? 0 : Math.round(TestDoc.passes/(TestDoc.passes+TestDoc.fails)*10000)/100)+"% okay. Planned to run "+TestDoc.plans+", did run "+(TestDoc.passes+TestDoc.fails)+".") | |
| } | |
| } | |
| TestDoc.plan = function(n, message) { | |
| TestDoc.plans += n; | |
| TestDoc.record(new TestDoc.Result(null, message+" ("+n+" tests)")); | |
| } | |
| TestDoc.assertEquals = function(a, b, message) { | |
| var result = (a == b); | |
| if (!result) message += "\n#\n# " + a + " does not equal " + b + "\n#"; | |
| TestDoc.record(new TestDoc.Result(result, message)); | |
| } | |
| TestDoc.assertNotEquals = function(a, b, message) { | |
| var result = (a != b); | |
| if (!result) message += "\n#\n# " + a + " equals " + b + "\n#"; | |
| TestDoc.record(new TestDoc.Result(result, message)); | |
| } | |
| TestDoc.readFile = (function(){ | |
| // rhino | |
| if (typeof readFile == "function") { | |
| return function(url) { | |
| var text = readFile(url); | |
| return text || ""; | |
| } | |
| } | |
| // a web browser | |
| else { | |
| return function(url) { | |
| var httpRequest; | |
| if (window.XMLHttpRequest) { // Mozilla, Safari, etc | |
| httpRequest = new XMLHttpRequest(); | |
| } | |
| else if (window.ActiveXObject) { // IE | |
| try { | |
| httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); | |
| } | |
| catch (e) { | |
| try { | |
| httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); | |
| } | |
| catch (e) { | |
| } | |
| } | |
| } | |
| if (!httpRequest) { throw "Cannot create HTTP Request."; } | |
| httpRequest.open('GET', url, false); | |
| httpRequest.send(''); | |
| if (httpRequest.readyState == 4) { | |
| if (httpRequest.status >= 400) { | |
| throw "The HTTP Request returned an error code: "+httpRequest.status; | |
| } | |
| } | |
| return httpRequest.responseText || ""; | |
| } | |
| } | |
| })(); | |