can generate jsdoc; private methods marked as such
[dygraphs.git] / jsdoc-toolkit / app / frame / Testrun.js
1 /**
2 * @fileOverview
3 * @name JsTestrun
4 * @author Michael Mathews micmath@gmail.com
5 * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/tags/jsdoc_toolkit-2.4.0/jsdoc-toolkit/app/frame/Testrun.js $
6 * @revision $Id: Testrun.js 418 2008-01-15 21:40:33Z micmath $
7 * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a>
8 * (See the accompanying README file for full details.)
9 */
10
11 /**
12 Yet another unit testing tool for JavaScript.
13 @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a>
14 @param {object} testCases Properties are testcase names, values are functions to execute as tests.
15 */
16 function testrun(testCases) {
17 var ran = 0;
18 for (t in testCases) {
19 var result = testCases[t]();
20 ran++;
21 }
22
23 return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n";
24 }
25
26
27 testrun.count = 0;
28 testrun.current = null;
29 testrun.passes = 0;
30 testrun.fails = 0;
31 testrun.reportOut = "";
32
33 /** @private */
34 testrun.report = function(text) {
35 testrun.reportOut += text+"\n";
36 }
37
38 /**
39 Check if test evaluates to true.
40 @param {string} test To be evaluated.
41 @param {string} message Optional. To be displayed in the report.
42 @return {boolean} True if the string test evaluates to true.
43 */
44 ok = function(test, message) {
45 testrun.count++;
46
47 var result;
48 try {
49 result = eval(test);
50
51 if (result) {
52 testrun.passes++;
53 testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
54 }
55 else {
56 testrun.fails++;
57 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
58 }
59 }
60 catch(e) {
61 testrun.fails++
62 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
63
64 }
65 }
66
67 /**
68 Check if test is same as expected.
69 @param {string} test To be evaluated.
70 @param {string} expected
71 @param {string} message Optional. To be displayed in the report.
72 @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check.
73 */
74 is = function(test, expected, message) {
75 testrun.count++;
76
77 var result;
78 try {
79 result = eval(test);
80
81 if (result == expected) {
82 testrun.passes++
83 testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
84 }
85 else {
86 testrun.fails++
87 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
88 testrun.report("expected: "+expected);
89 testrun.report(" got: "+result);
90 }
91 }
92 catch(e) {
93 testrun.fails++
94 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
95 testrun.report("expected: "+expected);
96 testrun.report(" got: "+result);}
97 }
98
99 /**
100 Check if test matches pattern.
101 @param {string} test To be evaluated.
102 @param {string} pattern Used to create a RegExp.
103 @param {string} message Optional. To be displayed in the report.
104 @return {boolean} True if test matches pattern.
105 */
106 like = function(test, pattern, message) {
107 testrun.count++;
108
109 var result;
110 try {
111 result = eval(test);
112 var rgx = new RegExp(pattern);
113
114 if (rgx.test(result)) {
115 testrun.passes++
116 testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
117 }
118 else {
119 testrun.fails++
120 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
121 testrun.report(" this: "+result);
122 testrun.report("is not like: "+pattern);
123 }
124 }
125 catch(e) {
126 testrun.fails++
127 testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
128 }
129 }