|
1 | 1 | /*!
|
2 |
| - * Myrtle - A JavaScript Unit Testing Framework |
| 2 | + * Tyrtle - A JavaScript Unit Testing Framework |
3 | 3 | *
|
4 | 4 | * Copyright (c) 2011 Nick Fisher
|
5 | 5 | * Licensed under the Creative Commons BY-SA License
|
|
88 | 88 | Tyrtle.PASS = PASS;
|
89 | 89 | Tyrtle.FAIL = FAIL;
|
90 | 90 | Tyrtle.SKIP = SKIP;
|
| 91 | + Tyrtle.setRenderer = function (renderer) { |
| 92 | + this.renderer = renderer; |
| 93 | + }; |
91 | 94 | extend(Tyrtle, {
|
92 | 95 | passes : 0,
|
93 | 96 | fails : 0,
|
94 | 97 | errors : 0,
|
95 | 98 | skips : 0,
|
96 | 99 | ////
|
97 | 100 | module : function (name, body) {
|
98 |
| - this.modules.push(new Module(name, body)); |
| 101 | + var m = new Module(name, body); |
| 102 | + m.tyrtle = this; |
| 103 | + this.modules.push(m); |
99 | 104 | },
|
100 | 105 | run : function (options) {
|
101 | 106 | var runNext,
|
102 | 107 | i = -1,
|
103 | 108 | l = this.modules.length,
|
104 | 109 | tyrtle = this
|
105 | 110 | ;
|
106 |
| - |
| 111 | + Tyrtle.renderer.beforeRun(this); |
107 | 112 | runNext = function () {
|
108 | 113 | var mod;
|
109 | 114 | ++i;
|
110 | 115 | if (i === l) {
|
111 |
| - // all done |
| 116 | + Tyrtle.renderer.afterRun(tyrtle); |
112 | 117 | tyrtle.callback();
|
113 | 118 | } else {
|
114 | 119 | mod = tyrtle.modules[i];
|
|
123 | 128 | runNext();
|
124 | 129 | },
|
125 | 130 | runModule : function (mod, callback) {
|
126 |
| - mod.run(callback); |
| 131 | + var self = this; |
| 132 | + Tyrtle.renderer.beforeModule(mod, this); |
| 133 | + mod.run(function () { |
| 134 | + Tyrtle.renderer.afterModule(mod, self); |
| 135 | + callback(); |
| 136 | + }); |
127 | 137 | }
|
128 | 138 | });
|
129 | 139 | }());
|
|
133 | 143 | (function () {
|
134 | 144 | Module = function (name, body) {
|
135 | 145 | this.name = name;
|
136 |
| - this.body = body; |
| 146 | + this.tests = []; |
| 147 | + body.call(this); // TODO: could provide a reduced api here |
137 | 148 | };
|
138 | 149 | extend(Module, {
|
139 |
| - tests : null, |
140 |
| - passes : 0, |
141 |
| - fails : 0, |
142 |
| - skips : 0, |
143 |
| - errors : 0, |
| 150 | + tests : null, // array of tests |
| 151 | + tyrtle : null, // reference to the owner Tyrtle instance |
| 152 | + passes : 0, // } |
| 153 | + fails : 0, // } counts of the test results |
| 154 | + skips : 0, // } |
| 155 | + errors : 0, // } |
| 156 | + ////////////////// |
144 | 157 | test : function (name, fn) {
|
145 | 158 | this.tests.push(new Test(name, fn));
|
146 | 159 | },
|
147 | 160 | run : function (callback) {
|
148 |
| - if (this.tests === null) { |
149 |
| - this.tests = []; |
150 |
| - this.body(); |
151 |
| - } |
152 | 161 | var runNext,
|
153 | 162 | i = -1,
|
154 | 163 | l = this.tests.length,
|
|
184 | 193 | runNext();
|
185 | 194 | },
|
186 | 195 | runTest : function (test, callback) {
|
187 |
| - // todo: befores and afters here |
188 |
| - test.run(callback); |
| 196 | + var m = this, t = this.tyrtle; |
| 197 | + Tyrtle.renderer.beforeTest(test, m, t); |
| 198 | + test.run(function () { |
| 199 | + Tyrtle.renderer.afterTest(test, m, t); |
| 200 | + callback(); |
| 201 | + }); |
189 | 202 | }
|
190 | 203 | });
|
191 | 204 | }());
|
|
227 | 240 | });
|
228 | 241 | }());
|
229 | 242 |
|
230 |
| - AssertionError = function (msg) { |
| 243 | + AssertionError = function (msg, args, userMessage) { |
231 | 244 | this.name = "AssertionError";
|
232 |
| - this.message = msg; |
| 245 | + this.message = msg + (userMessage ? ": " + userMessage : ""); |
| 246 | + this.args = args; |
233 | 247 | };
|
234 | 248 |
|
235 | 249 | SkipMe = function (reason) {
|
236 | 250 | this.message = reason;
|
237 | 251 | };
|
| 252 | + |
| 253 | + ////////////////// |
| 254 | + // Assertions // |
| 255 | + ////////////////// |
238 | 256 | (function () {
|
239 | 257 | var AssertThat, fail, assertions;
|
240 | 258 |
|
|
244 | 262 | assert.that = assert;
|
245 | 263 |
|
246 | 264 | fail = function (message, args, userMessage) {
|
247 |
| - throw new AssertionError(message); |
| 265 | + throw new AssertionError(message, args, userMessage); |
248 | 266 | };
|
249 | 267 |
|
250 | 268 | AssertThat = function (actual) {
|
|
289 | 307 | });
|
290 | 308 | extend(AssertThat, assertions);
|
291 | 309 | }());
|
| 310 | + |
292 | 311 | //#JSCOVERAGE_IF
|
293 | 312 | if (typeof module !== 'undefined') {
|
294 | 313 | module.exports = Tyrtle;
|
|
0 commit comments