|
1 /** |
|
2 * @fileOverview |
|
3 * @name JsTestrun |
|
4 * @author Michael Mathews micmath@gmail.com |
|
5 * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/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 } |