can generate jsdoc; private methods marked as such
[dygraphs.git] / jsdoc-toolkit / app / frame / Testrun.js
diff --git a/jsdoc-toolkit/app/frame/Testrun.js b/jsdoc-toolkit/app/frame/Testrun.js
new file mode 100644 (file)
index 0000000..a33bb41
--- /dev/null
@@ -0,0 +1,129 @@
+/**
+ * @fileOverview
+ * @name JsTestrun
+ * @author Michael Mathews micmath@gmail.com
+ * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.4.0/jsdoc-toolkit/app/frame/Testrun.js $
+ * @revision $Id: Testrun.js 418 2008-01-15 21:40:33Z micmath $
+ * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a>
+ *          (See the accompanying README file for full details.)
+ */
+/**
+       Yet another unit testing tool for JavaScript.
+       @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a>
+       @param {object} testCases Properties are testcase names, values are functions to execute as tests.
+*/
+function testrun(testCases) {
+       var ran = 0;
+       for (t in testCases) {
+               var result = testCases[t]();
+               ran++;
+       }
+       
+       return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n";
+}
+
+
+testrun.count = 0;
+testrun.current = null;
+testrun.passes = 0;
+testrun.fails = 0;
+testrun.reportOut = "";
+
+/** @private */
+testrun.report = function(text) {
+       testrun.reportOut += text+"\n";
+}
+
+/**
+       Check if test evaluates to true.
+       @param {string} test To be evaluated.
+       @param {string} message Optional. To be displayed in the report.
+       @return {boolean} True if the string test evaluates to true.
+*/
+ok = function(test, message) {
+       testrun.count++;
+       
+       var result;
+       try {
+               result = eval(test);
+               
+               if (result) {
+                       testrun.passes++;
+                       testrun.report("    OK "+testrun.count+" - "+((message != null)? message : ""));
+               }
+               else {
+                       testrun.fails++;
+                       testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+               }
+       }
+       catch(e) {
+               testrun.fails++
+               testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+
+       }
+}
+
+/**
+       Check if test is same as expected.
+       @param {string} test To be evaluated.
+       @param {string} expected
+       @param {string} message Optional. To be displayed in the report. 
+       @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check.
+*/
+is = function(test, expected, message) {
+       testrun.count++;
+       
+       var result;
+       try {
+               result = eval(test);
+               
+               if (result == expected) {
+                       testrun.passes++
+                       testrun.report("    OK "+testrun.count+" - "+((message != null)? message : ""));
+               }
+               else {
+                       testrun.fails++
+                       testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+                       testrun.report("expected: "+expected);
+                       testrun.report("     got: "+result);
+               }
+       }
+       catch(e) {
+               testrun.fails++
+               testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+               testrun.report("expected: "+expected);
+               testrun.report("     got: "+result);}
+}
+
+/**
+       Check if test matches pattern.
+       @param {string} test To be evaluated.
+       @param {string} pattern Used to create a RegExp.
+       @param {string} message Optional. To be displayed in the report.
+       @return {boolean} True if test matches pattern.
+*/
+like = function(test, pattern, message) {
+       testrun.count++;
+
+       var result;
+       try {
+               result = eval(test);
+               var rgx = new RegExp(pattern);
+               
+               if (rgx.test(result)) {
+                       testrun.passes++
+                       testrun.report("    OK "+testrun.count+" - "+((message != null)? message : ""));
+               }
+               else {
+                       testrun.fails++
+                       testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+                       testrun.report("       this: "+result);
+                       testrun.report("is not like: "+pattern);
+               }
+       }
+       catch(e) {
+               testrun.fails++
+               testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
+       }
+}
\ No newline at end of file