PageRenderTime 31ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/jsdoc-toolkit/app/t/TestDoc.js

http://jsdoc-toolkit.googlecode.com/
JavaScript | 144 lines | 121 code | 20 blank | 3 comment | 37 complexity | b2b6c69537dcd89333b243b24f93b9f7 MD5 | raw file
  1. var TestDoc = {
  2. fails: 0,
  3. plans: 0,
  4. passes: 0,
  5. results: []
  6. };
  7. TestDoc.record = function(result) {
  8. TestDoc.results.push(result);
  9. if (typeof result.verdict == "boolean") {
  10. if (result.verdict === false) TestDoc.fails++;
  11. if (result.verdict === true) TestDoc.passes++;
  12. }
  13. }
  14. TestDoc.prove = function(filePath) {
  15. if (typeof document != "undefined" && typeof document.write != "undefined") {
  16. if (TestDoc.console) print = function(s) { TestDoc.console.appendChild(document.createTextNode(s+"\n")); }
  17. else print = function(s) { document.write(s+"<br />"); }
  18. }
  19. TestDoc.run(TestDoc.readFile(filePath));
  20. }
  21. TestDoc.run = function(src) {
  22. try { eval(src); } catch(e) { print("# ERROR! "+e); }
  23. var chunks = src.split(/\/\*t:/);
  24. var run = function(chunk) {
  25. // local shortcuts
  26. var is = TestDoc.assertEquals;
  27. var isnt = TestDoc.assertNotEquals;
  28. var plan = TestDoc.plan;
  29. var requires = TestDoc.requires;
  30. try { eval(chunk); } catch(e) { print("# ERROR! "+e); }
  31. }
  32. for (var start = -1, end = 0; (start = src.indexOf("/*t:", end)) > end; start = end) {
  33. run(
  34. src.substring(
  35. start+4,
  36. (end = src.indexOf("*/", start))
  37. )
  38. );
  39. }
  40. }
  41. TestDoc.Result = function(verdict, message) {
  42. this.verdict = verdict;
  43. this.message = message;
  44. }
  45. TestDoc.Result.prototype.toString = function() {
  46. if (typeof this.verdict == "boolean") {
  47. return (this.verdict? "ok" : "not ok") + " " + (++TestDoc.report.counter) + " - " + this.message;
  48. }
  49. return "# " + this.message;
  50. }
  51. TestDoc.requires = function(file) {
  52. if (!TestDoc.requires.loaded[file]) {
  53. load(file);
  54. TestDoc.requires.loaded[file] = true;
  55. }
  56. }
  57. TestDoc.requires.loaded = {};
  58. TestDoc.report = function() {
  59. TestDoc.report.counter = 0;
  60. print("1.."+TestDoc.plans);
  61. for (var i = 0; i < TestDoc.results.length; i++) {
  62. print(TestDoc.results[i]);
  63. }
  64. print("----------------------------------------");
  65. if (TestDoc.fails == 0 && TestDoc.passes == TestDoc.plans) {
  66. print("All tests successful.");
  67. }
  68. else {
  69. 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)+".")
  70. }
  71. }
  72. TestDoc.plan = function(n, message) {
  73. TestDoc.plans += n;
  74. TestDoc.record(new TestDoc.Result(null, message+" ("+n+" tests)"));
  75. }
  76. TestDoc.assertEquals = function(a, b, message) {
  77. var result = (a == b);
  78. if (!result) message += "\n#\n# " + a + " does not equal " + b + "\n#";
  79. TestDoc.record(new TestDoc.Result(result, message));
  80. }
  81. TestDoc.assertNotEquals = function(a, b, message) {
  82. var result = (a != b);
  83. if (!result) message += "\n#\n# " + a + " equals " + b + "\n#";
  84. TestDoc.record(new TestDoc.Result(result, message));
  85. }
  86. TestDoc.readFile = (function(){
  87. // rhino
  88. if (typeof readFile == "function") {
  89. return function(url) {
  90. var text = readFile(url);
  91. return text || "";
  92. }
  93. }
  94. // a web browser
  95. else {
  96. return function(url) {
  97. var httpRequest;
  98. if (window.XMLHttpRequest) { // Mozilla, Safari, etc
  99. httpRequest = new XMLHttpRequest();
  100. }
  101. else if (window.ActiveXObject) { // IE
  102. try {
  103. httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
  104. }
  105. catch (e) {
  106. try {
  107. httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
  108. }
  109. catch (e) {
  110. }
  111. }
  112. }
  113. if (!httpRequest) { throw "Cannot create HTTP Request."; }
  114. httpRequest.open('GET', url, false);
  115. httpRequest.send('');
  116. if (httpRequest.readyState == 4) {
  117. if (httpRequest.status >= 400) {
  118. throw "The HTTP Request returned an error code: "+httpRequest.status;
  119. }
  120. }
  121. return httpRequest.responseText || "";
  122. }
  123. }
  124. })();