PageRenderTime 130ms CodeModel.GetById 82ms app.highlight 39ms RepoModel.GetById 1ms app.codeStats 1ms

/js/lib/Socket.IO-node/support/expresso/docs/api.html

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
HTML | 946 lines | 880 code | 66 blank | 0 comment | 0 complexity | ba30517e78cbc91e7d05663219349257 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1<a href="http://github.com/visionmedia/expresso"><img alt="Fork me on GitHub" id="ribbon" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a><html>
  2	<head>
  3		<title>Expresso</title>
  4		<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  5		<style>body {
  6    margin: 0;
  7    padding: 0;
  8    font: 14px/1.5 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
  9    color: #252519;
 10}
 11a {
 12    color: #252519;
 13}
 14a:hover {
 15    text-decoration: underline;
 16    color: #19469D;
 17}
 18p {
 19    margin: 12px 0;
 20}
 21h1, h2, h3 {
 22    margin: 0;
 23    padding: 0;
 24}
 25table#source {
 26    width: 100%;
 27    border-collapse: collapse;
 28}
 29table#source td:first-child {
 30    padding: 30px 40px 30px 40px;
 31    vertical-align: top;
 32}
 33table#source td:first-child,
 34table#source td:first-child pre {
 35    width: 450px;
 36}
 37table#source td:last-child {
 38    padding: 30px 0 30px 40px;
 39    border-left: 1px solid #E5E5EE;
 40    background: #F5F5FF;
 41}
 42table#source tr {
 43    border-bottom: 1px solid #E5E5EE;
 44}
 45table#source tr.filename {
 46    padding-top: 40px;
 47    border-top: 1px solid #E5E5EE;
 48}
 49table#source tr.filename td:first-child {
 50    text-transform: capitalize;
 51}
 52table#source tr.filename td:last-child {
 53    font-size: 12px;
 54}
 55table#source tr.filename h2 {
 56    margin: 0;
 57    padding: 0;
 58    cursor: pointer;
 59}
 60table#source tr.code h1,
 61table#source tr.code h2,
 62table#source tr.code h3 {
 63    margin-top: 30px;
 64    font-family: "Lucida Grande", "Helvetica Nueue", Arial, sans-serif;
 65    font-size: 18px;
 66}
 67table#source tr.code h2 {
 68    font-size: 16px;
 69}
 70table#source tr.code h3 {
 71    font-size: 14px;
 72}
 73table#source tr.code ul {
 74    margin: 15px 0 15px 35px;
 75    padding: 0;
 76}
 77table#source tr.code ul li {
 78    margin: 0;
 79    padding: 1px 0;
 80}
 81table#source tr.code ul li p {
 82    margin: 0;
 83    padding: 0;
 84}
 85table#source tr.code td:first-child pre {
 86    padding: 20px;
 87}
 88#ribbon {
 89    position: fixed;
 90    top: 0;
 91    right: 0;
 92}
 93code .string { color: #219161; }
 94code .regexp { color: #219161; }
 95code .keyword { color: #954121; }
 96code .number { color: #19469D; }
 97code .comment { color: #bbb; }
 98code .this { color: #19469D; }</style>
 99		<script>
100			$(function(){
101				$('tr.code').hide();
102				$('tr.filename').toggle(function(){
103					$(this).nextUntil('.filename').fadeIn();
104				}, function(){
105					$(this).nextUntil('.filename').fadeOut();
106				});
107			});
108		</script>
109	</head>
110	<body>
111<table id="source"><tbody><tr><td><h1>Expresso</h1><p>Insanely fast TDD framework for <a href="http://nodejs.org">node</a> featuring code coverage reporting.</p></td><td></td></tr><tr class="filename"><td><h2 id="bin/expresso"><a href="api.html#">expresso</a></h2></td><td>bin/expresso</td></tr><tr class="code">
112<td class="docs">
113<h1>!/usr/bin/env node</h1>
114</td>
115<td class="code">
116<pre><code>
117 * <span class="class">Expresso</span>
118 * <span class="class">Copyright</span>(<span class="variable">c</span>) <span class="class">TJ</span> <span class="class">Holowaychuk</span> &<span class="variable">lt</span>;<span class="variable">tj</span>@<span class="variable">vision</span>-<span class="variable">media</span>.<span class="variable">ca</span>&<span class="variable">gt</span>;
119 * (<span class="class">MIT</span> <span class="class">Licensed</span>)
120 </code></pre>
121</td>
122</tr>
123<tr class="code">
124<td class="docs">
125<p>Module dependencies.
126 </p>
127</td>
128<td class="code">
129<pre><code><span class="keyword">var</span> <span class="variable">assert</span> = <span class="variable">require</span>(<span class="string">'assert'</span>),
130    <span class="variable">childProcess</span> = <span class="variable">require</span>(<span class="string">'child_process'</span>),
131    <span class="variable">http</span> = <span class="variable">require</span>(<span class="string">'http'</span>),
132    <span class="variable">path</span> = <span class="variable">require</span>(<span class="string">'path'</span>),
133    <span class="variable">sys</span> = <span class="variable">require</span>(<span class="string">'sys'</span>),
134    <span class="variable">cwd</span> = <span class="variable">process</span>.<span class="variable">cwd</span>(),
135    <span class="variable">fs</span> = <span class="variable">require</span>(<span class="string">'fs'</span>),
136    <span class="variable">defer</span>;</code></pre>
137</td>
138</tr>
139<tr class="code">
140<td class="docs">
141<p>Expresso version.
142 </p>
143</td>
144<td class="code">
145<pre><code><span class="keyword">var</span> <span class="variable">version</span> = <span class="string">'0.6.4'</span>;</code></pre>
146</td>
147</tr>
148<tr class="code">
149<td class="docs">
150<p>Failure count.
151 </p>
152</td>
153<td class="code">
154<pre><code><span class="keyword">var</span> <span class="variable">failures</span> = <span class="number integer">0</span>;</code></pre>
155</td>
156</tr>
157<tr class="code">
158<td class="docs">
159<p>Number of tests executed.
160 </p>
161</td>
162<td class="code">
163<pre><code><span class="keyword">var</span> <span class="variable">testcount</span> = <span class="number integer">0</span>;</code></pre>
164</td>
165</tr>
166<tr class="code">
167<td class="docs">
168<p>Whitelist of tests to run.
169 </p>
170</td>
171<td class="code">
172<pre><code><span class="keyword">var</span> <span class="variable">only</span> = [];</code></pre>
173</td>
174</tr>
175<tr class="code">
176<td class="docs">
177<p>Boring output.
178 </p>
179</td>
180<td class="code">
181<pre><code><span class="keyword">var</span> <span class="variable">boring</span> = <span class="variable">false</span>;</code></pre>
182</td>
183</tr>
184<tr class="code">
185<td class="docs">
186<p>Growl notifications.
187 </p>
188</td>
189<td class="code">
190<pre><code><span class="keyword">var</span> <span class="variable">growl</span> = <span class="variable">false</span>;</code></pre>
191</td>
192</tr>
193<tr class="code">
194<td class="docs">
195<p>Server port.
196 </p>
197</td>
198<td class="code">
199<pre><code><span class="keyword">var</span> <span class="variable">port</span> = <span class="number integer">5555</span>;</code></pre>
200</td>
201</tr>
202<tr class="code">
203<td class="docs">
204<p>Watch mode.
205 </p>
206</td>
207<td class="code">
208<pre><code><span class="keyword">var</span> <span class="variable">watch</span> = <span class="variable">false</span>;</code></pre>
209</td>
210</tr>
211<tr class="code">
212<td class="docs">
213<p>Execute serially.
214 </p>
215</td>
216<td class="code">
217<pre><code><span class="keyword">var</span> <span class="variable">serial</span> = <span class="variable">false</span>;</code></pre>
218</td>
219</tr>
220<tr class="code">
221<td class="docs">
222<p>Default timeout.
223 </p>
224</td>
225<td class="code">
226<pre><code><span class="keyword">var</span> <span class="variable">timeout</span> = <span class="number integer">2000</span>;</code></pre>
227</td>
228</tr>
229<tr class="code">
230<td class="docs">
231<p>Usage documentation.
232 </p>
233</td>
234<td class="code">
235<pre><code><span class="keyword">var</span> <span class="variable">usage</span> = <span class="string">''</span>
236    + <span class="string">'[bold]{Usage}: expresso [options] &lt;file ...&gt;'</span>
237    + <span class="string">'\n'</span>
238    + <span class="string">'\n[bold]{Options}:'</span>
239    + <span class="string">'\n  -w, --watch          Watch for modifications and re-execute tests'</span>
240    + <span class="string">'\n  -g, --growl          Enable growl notifications'</span>
241    + <span class="string">'\n  -c, --coverage       Generate and report test coverage'</span>
242    + <span class="string">'\n  -t, --timeout MS     Timeout in milliseconds, defaults to 2000'</span>
243    + <span class="string">'\n  -r, --require PATH   Require the given module path'</span>
244    + <span class="string">'\n  -o, --only TESTS     Execute only the comma sperated TESTS (can be set several times)'</span>
245    + <span class="string">'\n  -I, --include PATH   Unshift the given path to require.paths'</span>
246    + <span class="string">'\n  -p, --port NUM       Port number for test servers, starts at 5555'</span>
247    + <span class="string">'\n  -s, --serial         Execute tests serially'</span>
248    + <span class="string">'\n  -b, --boring         Suppress ansi-escape colors'</span>
249    + <span class="string">'\n  -v, --version        Output version number'</span>
250    + <span class="string">'\n  -h, --help           Display help information'</span>
251    + <span class="string">'\n'</span>;
252
253<span class="comment">// Parse arguments</span>
254
255<span class="keyword">var</span> <span class="variable">files</span> = [],
256    <span class="variable">args</span> = <span class="variable">process</span>.<span class="variable">argv</span>.<span class="variable">slice</span>(<span class="number integer">2</span>);
257
258<span class="keyword">while</span> (<span class="variable">args</span>.<span class="variable">length</span>) {
259    <span class="keyword">var</span> <span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>();
260    <span class="keyword">switch</span> (<span class="variable">arg</span>) {
261        <span class="keyword">case</span> <span class="string">'-h'</span>:
262        <span class="keyword">case</span> <span class="string">'--help'</span>:
263            <span class="variable">print</span>(<span class="variable">usage</span> + <span class="string">'\n'</span>);
264            <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
265            <span class="keyword">break</span>;
266        <span class="keyword">case</span> <span class="string">'-v'</span>:
267        <span class="keyword">case</span> <span class="string">'--version'</span>:
268            <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">version</span>);
269            <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
270            <span class="keyword">break</span>;
271        <span class="keyword">case</span> <span class="string">'-i'</span>:
272        <span class="keyword">case</span> <span class="string">'-I'</span>:
273        <span class="keyword">case</span> <span class="string">'--include'</span>:
274            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
275                <span class="variable">require</span>.<span class="variable">paths</span>.<span class="variable">unshift</span>(<span class="variable">arg</span>);
276            } <span class="keyword">else</span> {
277                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--include requires a path'</span>);
278            }
279            <span class="keyword">break</span>;
280        <span class="keyword">case</span> <span class="string">'-o'</span>:
281        <span class="keyword">case</span> <span class="string">'--only'</span>:
282            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
283                <span class="variable">only</span> = <span class="variable">only</span>.<span class="variable">concat</span>(<span class="variable">arg</span>.<span class="variable">split</span>(<span class="regexp">/ *, */</span>));
284            } <span class="keyword">else</span> {
285                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--only requires comma-separated test names'</span>);
286            }
287            <span class="keyword">break</span>;
288        <span class="keyword">case</span> <span class="string">'-p'</span>:
289        <span class="keyword">case</span> <span class="string">'--port'</span>:
290            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
291                <span class="variable">port</span> = <span class="variable">parseInt</span>(<span class="variable">arg</span>, <span class="number integer">10</span>);
292            } <span class="keyword">else</span> {
293                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--port requires a number'</span>);
294            }
295            <span class="keyword">break</span>;
296        <span class="keyword">case</span> <span class="string">'-r'</span>:
297        <span class="keyword">case</span> <span class="string">'--require'</span>:
298            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
299                <span class="variable">require</span>(<span class="variable">arg</span>);
300            } <span class="keyword">else</span> {
301                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--require requires a path'</span>);
302            }
303            <span class="keyword">break</span>;
304        <span class="keyword">case</span> <span class="string">'-t'</span>:
305        <span class="keyword">case</span> <span class="string">'--timeout'</span>:
306          <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
307            <span class="variable">timeout</span> = <span class="variable">parseInt</span>(<span class="variable">arg</span>, <span class="number integer">10</span>);
308          } <span class="keyword">else</span> {
309            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--timeout requires an argument'</span>);
310          }
311          <span class="keyword">break</span>;
312        <span class="keyword">case</span> <span class="string">'-c'</span>:
313        <span class="keyword">case</span> <span class="string">'--cov'</span>:
314        <span class="keyword">case</span> <span class="string">'--coverage'</span>:
315            <span class="variable">defer</span> = <span class="variable">true</span>;
316            <span class="variable">childProcess</span>.<span class="variable">exec</span>(<span class="string">'rm -fr lib-cov &amp;&amp; node-jscoverage lib lib-cov'</span>, <span class="keyword">function</span>(<span class="variable">err</span>){
317                <span class="keyword">if</span> (<span class="variable">err</span>) <span class="keyword">throw</span> <span class="variable">err</span>;
318                <span class="variable">require</span>.<span class="variable">paths</span>.<span class="variable">unshift</span>(<span class="string">'lib-cov'</span>);
319                <span class="variable">run</span>(<span class="variable">files</span>);
320            })
321            <span class="keyword">break</span>;
322        <span class="keyword">case</span> <span class="string">'-b'</span>:
323        <span class="keyword">case</span> <span class="string">'--boring'</span>:
324        	<span class="variable">boring</span> = <span class="variable">true</span>;
325        	<span class="keyword">break</span>;
326        <span class="keyword">case</span> <span class="string">'-w'</span>:
327        <span class="keyword">case</span> <span class="string">'--watch'</span>:
328            <span class="variable">watch</span> = <span class="variable">true</span>;
329            <span class="keyword">break</span>;
330        <span class="keyword">case</span> <span class="string">'-g'</span>:
331        <span class="keyword">case</span> <span class="string">'--growl'</span>:
332            <span class="variable">growl</span> = <span class="variable">true</span>;
333            <span class="keyword">break</span>;
334        <span class="keyword">case</span> <span class="string">'-s'</span>:
335        <span class="keyword">case</span> <span class="string">'--serial'</span>:
336            <span class="variable">serial</span> = <span class="variable">true</span>;
337            <span class="keyword">break</span>;
338        <span class="keyword">default</span>:
339            <span class="keyword">if</span> (<span class="regexp">/\.js$/</span>.<span class="variable">test</span>(<span class="variable">arg</span>)) {
340                <span class="variable">files</span>.<span class="variable">push</span>(<span class="variable">arg</span>);
341            }
342            <span class="keyword">break</span>;
343    }
344}</code></pre>
345</td>
346</tr>
347<tr class="code">
348<td class="docs">
349<p>Colorized sys.error().</p>
350
351<h2></h2>
352
353<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li></ul>
354</td>
355<td class="code">
356<pre><code><span class="keyword">function</span> <span class="variable">print</span>(<span class="variable">str</span>){
357    <span class="variable">sys</span>.<span class="variable">error</span>(<span class="variable">colorize</span>(<span class="variable">str</span>));
358}</code></pre>
359</td>
360</tr>
361<tr class="code">
362<td class="docs">
363<p>Colorize the given string using ansi-escape sequences.
364Disabled when --boring is set.</p>
365
366<h2></h2>
367
368<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
369</td>
370<td class="code">
371<pre><code><span class="keyword">function</span> <span class="variable">colorize</span>(<span class="variable">str</span>){
372    <span class="keyword">var</span> <span class="variable">colors</span> = { <span class="variable">bold</span>: <span class="number integer">1</span>, <span class="variable">red</span>: <span class="number integer">31</span>, <span class="variable">green</span>: <span class="number integer">32</span>, <span class="variable">yellow</span>: <span class="number integer">33</span> };
373    <span class="keyword">return</span> <span class="variable">str</span>.<span class="variable">replace</span>(<span class="regexp">/\[(\w+)\]\{([^]*?)\}/g</span>, <span class="keyword">function</span>(<span class="variable">_</span>, <span class="variable">color</span>, <span class="variable">str</span>){
374        <span class="keyword">return</span> <span class="variable">boring</span>
375            ? <span class="variable">str</span>
376            : <span class="string">'\x1B['</span> + <span class="variable">colors</span>[<span class="variable">color</span>] + <span class="string">'m'</span> + <span class="variable">str</span> + <span class="string">'\x1B[0m'</span>;
377    });
378}
379
380<span class="comment">// Alias deepEqual as eql for complex equality</span>
381
382<span class="variable">assert</span>.<span class="variable">eql</span> = <span class="variable">assert</span>.<span class="variable">deepEqual</span>;</code></pre>
383</td>
384</tr>
385<tr class="code">
386<td class="docs">
387<p>Assert that <code>val</code> is null.</p>
388
389<h2></h2>
390
391<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
392</td>
393<td class="code">
394<pre><code><span class="variable">assert</span>.<span class="variable">isNull</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
395    <span class="variable">assert</span>.<span class="variable">strictEqual</span>(<span class="keyword">null</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
396};</code></pre>
397</td>
398</tr>
399<tr class="code">
400<td class="docs">
401<p>Assert that <code>val</code> is not null.</p>
402
403<h2></h2>
404
405<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
406</td>
407<td class="code">
408<pre><code><span class="variable">assert</span>.<span class="variable">isNotNull</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
409    <span class="variable">assert</span>.<span class="variable">notStrictEqual</span>(<span class="keyword">null</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
410};</code></pre>
411</td>
412</tr>
413<tr class="code">
414<td class="docs">
415<p>Assert that <code>val</code> is undefined.</p>
416
417<h2></h2>
418
419<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
420</td>
421<td class="code">
422<pre><code><span class="variable">assert</span>.<span class="variable">isUndefined</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
423    <span class="variable">assert</span>.<span class="variable">strictEqual</span>(<span class="variable">undefined</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
424};</code></pre>
425</td>
426</tr>
427<tr class="code">
428<td class="docs">
429<p>Assert that <code>val</code> is not undefined.</p>
430
431<h2></h2>
432
433<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
434</td>
435<td class="code">
436<pre><code><span class="variable">assert</span>.<span class="variable">isDefined</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
437    <span class="variable">assert</span>.<span class="variable">notStrictEqual</span>(<span class="variable">undefined</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
438};</code></pre>
439</td>
440</tr>
441<tr class="code">
442<td class="docs">
443<p>Assert that <code>obj</code> is <code>type</code>.</p>
444
445<h2></h2>
446
447<ul><li><p><strong>param</strong>: <em>Mixed</em>  obj</p></li><li><p><strong>param</strong>: <em>String</em>  type</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
448</td>
449<td class="code">
450<pre><code><span class="variable">assert</span>.<span class="variable">type</span> = <span class="keyword">function</span>(<span class="variable">obj</span>, <span class="variable">type</span>, <span class="variable">msg</span>){
451    <span class="keyword">var</span> <span class="variable">real</span> = <span class="keyword">typeof</span> <span class="variable">obj</span>;
452    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="string">'typeof '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">obj</span>) + <span class="string">' is '</span> + <span class="variable">real</span> + <span class="string">', expected '</span> + <span class="variable">type</span>;
453    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">type</span> === <span class="variable">real</span>, <span class="variable">msg</span>);
454};</code></pre>
455</td>
456</tr>
457<tr class="code">
458<td class="docs">
459<p>Assert that <code>str</code> matches <code>regexp</code>.</p>
460
461<h2></h2>
462
463<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>RegExp</em>  regexp</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
464</td>
465<td class="code">
466<pre><code><span class="variable">assert</span>.<span class="variable">match</span> = <span class="keyword">function</span>(<span class="variable">str</span>, <span class="variable">regexp</span>, <span class="variable">msg</span>) {
467    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">str</span>) + <span class="string">' does not match '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">regexp</span>);
468    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">regexp</span>.<span class="variable">test</span>(<span class="variable">str</span>), <span class="variable">msg</span>);
469};</code></pre>
470</td>
471</tr>
472<tr class="code">
473<td class="docs">
474<p>Assert that <code>val</code> is within <code>obj</code>.</p>
475
476<h2>Examples</h2>
477
478<p>   assert.includes('foobar', 'bar');
479   assert.includes(['foo', 'bar'], 'foo');</p>
480
481<h2></h2>
482
483<ul><li><p><strong>param</strong>: <em>String | Array</em>  obj</p></li><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
484</td>
485<td class="code">
486<pre><code><span class="variable">assert</span>.<span class="variable">includes</span> = <span class="keyword">function</span>(<span class="variable">obj</span>, <span class="variable">val</span>, <span class="variable">msg</span>) {
487    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">obj</span>) + <span class="string">' does not include '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">val</span>);
488    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">obj</span>.<span class="variable">indexOf</span>(<span class="variable">val</span>) &<span class="variable">gt</span>;= <span class="number integer">0</span>, <span class="variable">msg</span>);
489};</code></pre>
490</td>
491</tr>
492<tr class="code">
493<td class="docs">
494<p>Assert length of <code>val</code> is <code>n</code>.</p>
495
496<h2></h2>
497
498<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>Number</em>  n</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
499</td>
500<td class="code">
501<pre><code><span class="variable">assert</span>.<span class="variable">length</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">n</span>, <span class="variable">msg</span>) {
502    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">val</span>) + <span class="string">' has length of '</span> + <span class="variable">val</span>.<span class="variable">length</span> + <span class="string">', expected '</span> + <span class="variable">n</span>;
503    <span class="variable">assert</span>.<span class="variable">equal</span>(<span class="variable">n</span>, <span class="variable">val</span>.<span class="variable">length</span>, <span class="variable">msg</span>);
504};</code></pre>
505</td>
506</tr>
507<tr class="code">
508<td class="docs">
509<p>Assert response from <code>server</code> with
510the given <code>req</code> object and <code>res</code> assertions object.</p>
511
512<h2></h2>
513
514<ul><li><p><strong>param</strong>: <em>Server</em>  server</p></li><li><p><strong>param</strong>: <em>Object</em>  req</p></li><li><p><strong>param</strong>: <em>Object | Function</em>  res</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
515</td>
516<td class="code">
517<pre><code><span class="variable">assert</span>.<span class="variable">response</span> = <span class="keyword">function</span>(<span class="variable">server</span>, <span class="variable">req</span>, <span class="variable">res</span>, <span class="variable">msg</span>){
518    <span class="comment">// Callback as third or fourth arg</span>
519    <span class="keyword">var</span> <span class="variable">callback</span> = <span class="keyword">typeof</span> <span class="variable">res</span> === <span class="string">'function'</span>
520        ? <span class="variable">res</span>
521        : <span class="keyword">typeof</span> <span class="variable">msg</span> === <span class="string">'function'</span>
522            ? <span class="variable">msg</span>
523            : <span class="keyword">function</span>(){};
524
525    <span class="comment">// Default messate to test title</span>
526    <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable">msg</span> === <span class="string">'function'</span>) <span class="variable">msg</span> = <span class="keyword">null</span>;
527    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">assert</span>.<span class="variable">testTitle</span>;
528    <span class="variable">msg</span> += <span class="string">'. '</span>;
529
530    <span class="comment">// Pending responses</span>
531    <span class="variable">server</span>.<span class="variable">__pending</span> = <span class="variable">server</span>.<span class="variable">__pending</span> || <span class="number integer">0</span>;
532    <span class="variable">server</span>.<span class="variable">__pending</span>++;
533
534    <span class="comment">// Create client</span>
535    <span class="keyword">if</span> (!<span class="variable">server</span>.<span class="variable">fd</span>) {
536        <span class="variable">server</span>.<span class="variable">listen</span>(<span class="variable">server</span>.<span class="variable">__port</span> = <span class="variable">port</span>++, <span class="string">'127.0.0.1'</span>);
537        <span class="variable">server</span>.<span class="variable">client</span> = <span class="variable">http</span>.<span class="variable">createClient</span>(<span class="variable">server</span>.<span class="variable">__port</span>);
538    }
539
540    <span class="comment">// Issue request</span>
541    <span class="keyword">var</span> <span class="variable">timer</span>,
542        <span class="variable">client</span> = <span class="variable">server</span>.<span class="variable">client</span>,
543        <span class="variable">method</span> = <span class="variable">req</span>.<span class="variable">method</span> || <span class="string">'GET'</span>,
544        <span class="variable">status</span> = <span class="variable">res</span>.<span class="variable">status</span> || <span class="variable">res</span>.<span class="variable">statusCode</span>,
545        <span class="variable">data</span> = <span class="variable">req</span>.<span class="variable">data</span> || <span class="variable">req</span>.<span class="variable">body</span>,
546        <span class="variable">requestTimeout</span> = <span class="variable">req</span>.<span class="variable">timeout</span> || <span class="number integer">0</span>;
547
548    <span class="keyword">var</span> <span class="variable">request</span> = <span class="variable">client</span>.<span class="variable">request</span>(<span class="variable">method</span>, <span class="variable">req</span>.<span class="variable">url</span>, <span class="variable">req</span>.<span class="variable">headers</span>);
549
550    <span class="comment">// Timeout</span>
551    <span class="keyword">if</span> (<span class="variable">requestTimeout</span>) {
552        <span class="variable">timer</span> = <span class="variable">setTimeout</span>(<span class="keyword">function</span>(){
553            --<span class="variable">server</span>.<span class="variable">__pending</span> || <span class="variable">server</span>.<span class="variable">close</span>();
554            <span class="keyword">delete</span> <span class="variable">req</span>.<span class="variable">timeout</span>;
555            <span class="variable">assert</span>.<span class="variable">fail</span>(<span class="variable">msg</span> + <span class="string">'Request timed out after '</span> + <span class="variable">requestTimeout</span> + <span class="string">'ms.'</span>);
556        }, <span class="variable">requestTimeout</span>);
557    }
558
559    <span class="keyword">if</span> (<span class="variable">data</span>) <span class="variable">request</span>.<span class="variable">write</span>(<span class="variable">data</span>);
560    <span class="variable">request</span>.<span class="variable">addListener</span>(<span class="string">'response'</span>, <span class="keyword">function</span>(<span class="variable">response</span>){
561        <span class="variable">response</span>.<span class="variable">body</span> = <span class="string">''</span>;
562        <span class="variable">response</span>.<span class="variable">setEncoding</span>(<span class="string">'utf8'</span>);
563        <span class="variable">response</span>.<span class="variable">addListener</span>(<span class="string">'data'</span>, <span class="keyword">function</span>(<span class="variable">chunk</span>){ <span class="variable">response</span>.<span class="variable">body</span> += <span class="variable">chunk</span>; });
564        <span class="variable">response</span>.<span class="variable">addListener</span>(<span class="string">'end'</span>, <span class="keyword">function</span>(){
565            --<span class="variable">server</span>.<span class="variable">__pending</span> || <span class="variable">server</span>.<span class="variable">close</span>();
566            <span class="keyword">if</span> (<span class="variable">timer</span>) <span class="variable">clearTimeout</span>(<span class="variable">timer</span>);
567
568            <span class="comment">// Assert response body</span>
569            <span class="keyword">if</span> (<span class="variable">res</span>.<span class="variable">body</span> !== <span class="variable">undefined</span>) {
570                <span class="keyword">var</span> <span class="variable">eql</span> = <span class="variable">res</span>.<span class="variable">body</span> <span class="variable">instanceof</span> <span class="class">RegExp</span>
571                  ? <span class="variable">res</span>.<span class="variable">body</span>.<span class="variable">test</span>(<span class="variable">response</span>.<span class="variable">body</span>)
572                  : <span class="variable">res</span>.<span class="variable">body</span> === <span class="variable">response</span>.<span class="variable">body</span>;
573                <span class="variable">assert</span>.<span class="variable">ok</span>(
574                    <span class="variable">eql</span>,
575                    <span class="variable">msg</span> + <span class="string">'Invalid response body.\n'</span>
576                        + <span class="string">'    Expected: '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">res</span>.<span class="variable">body</span>) + <span class="string">'\n'</span>
577                        + <span class="string">'    Got: '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">response</span>.<span class="variable">body</span>)
578                );
579            }
580
581            <span class="comment">// Assert response status</span>
582            <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable">status</span> === <span class="string">'number'</span>) {
583                <span class="variable">assert</span>.<span class="variable">equal</span>(
584                    <span class="variable">response</span>.<span class="variable">statusCode</span>,
585                    <span class="variable">status</span>,
586                    <span class="variable">msg</span> + <span class="variable">colorize</span>(<span class="string">'Invalid response status code.\n'</span>
587                        + <span class="string">'    Expected: [green]{'</span> + <span class="variable">status</span> + <span class="string">'}\n'</span>
588                        + <span class="string">'    Got: [red]{'</span> + <span class="variable">response</span>.<span class="variable">statusCode</span> + <span class="string">'}'</span>)
589                );
590            }
591
592            <span class="comment">// Assert response headers</span>
593            <span class="keyword">if</span> (<span class="variable">res</span>.<span class="variable">headers</span>) {
594                <span class="keyword">var</span> <span class="variable">keys</span> = <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">res</span>.<span class="variable">headers</span>);
595                <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">i</span> = <span class="number integer">0</span>, <span class="variable">len</span> = <span class="variable">keys</span>.<span class="variable">length</span>; <span class="variable">i</span> &<span class="variable">lt</span>; <span class="variable">len</span>; ++<span class="variable">i</span>) {
596                    <span class="keyword">var</span> <span class="variable">name</span> = <span class="variable">keys</span>[<span class="variable">i</span>],
597                        <span class="variable">actual</span> = <span class="variable">response</span>.<span class="variable">headers</span>[<span class="variable">name</span>.<span class="variable">toLowerCase</span>()],
598                        <span class="variable">expected</span> = <span class="variable">res</span>.<span class="variable">headers</span>[<span class="variable">name</span>],
599                        <span class="variable">eql</span> = <span class="variable">expected</span> <span class="variable">instanceof</span> <span class="class">RegExp</span>
600                          ? <span class="variable">expected</span>.<span class="variable">test</span>(<span class="variable">actual</span>)
601                          : <span class="variable">expected</span> == <span class="variable">actual</span>;
602                    <span class="variable">assert</span>.<span class="variable">ok</span>(
603                        <span class="variable">eql</span>,
604                        <span class="variable">msg</span> + <span class="variable">colorize</span>(<span class="string">'Invalid response header [bold]{'</span> + <span class="variable">name</span> + <span class="string">'}.\n'</span>
605                            + <span class="string">'    Expected: [green]{'</span> + <span class="variable">expected</span> + <span class="string">'}\n'</span>
606                            + <span class="string">'    Got: [red]{'</span> + <span class="variable">actual</span> + <span class="string">'}'</span>)
607                    );
608                }
609            }
610
611            <span class="comment">// Callback</span>
612            <span class="variable">callback</span>(<span class="variable">response</span>);
613        });
614    });
615    <span class="variable">request</span>.<span class="variable">end</span>();
616};</code></pre>
617</td>
618</tr>
619<tr class="code">
620<td class="docs">
621<p>Pad the given string to the maximum width provided.</p>
622
623<h2></h2>
624
625<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>Number</em>  width</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
626</td>
627<td class="code">
628<pre><code><span class="keyword">function</span> <span class="variable">lpad</span>(<span class="variable">str</span>, <span class="variable">width</span>) {
629    <span class="variable">str</span> = <span class="class">String</span>(<span class="variable">str</span>);
630    <span class="keyword">var</span> <span class="variable">n</span> = <span class="variable">width</span> - <span class="variable">str</span>.<span class="variable">length</span>;
631    <span class="keyword">if</span> (<span class="variable">n</span> &<span class="variable">lt</span>; <span class="number integer">1</span>) <span class="keyword">return</span> <span class="variable">str</span>;
632    <span class="keyword">while</span> (<span class="variable">n</span>--) <span class="variable">str</span> = <span class="string">' '</span> + <span class="variable">str</span>;
633    <span class="keyword">return</span> <span class="variable">str</span>;
634}</code></pre>
635</td>
636</tr>
637<tr class="code">
638<td class="docs">
639<p>Pad the given string to the maximum width provided.</p>
640
641<h2></h2>
642
643<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>Number</em>  width</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
644</td>
645<td class="code">
646<pre><code><span class="keyword">function</span> <span class="variable">rpad</span>(<span class="variable">str</span>, <span class="variable">width</span>) {
647    <span class="variable">str</span> = <span class="class">String</span>(<span class="variable">str</span>);
648    <span class="keyword">var</span> <span class="variable">n</span> = <span class="variable">width</span> - <span class="variable">str</span>.<span class="variable">length</span>;
649    <span class="keyword">if</span> (<span class="variable">n</span> &<span class="variable">lt</span>; <span class="number integer">1</span>) <span class="keyword">return</span> <span class="variable">str</span>;
650    <span class="keyword">while</span> (<span class="variable">n</span>--) <span class="variable">str</span> = <span class="variable">str</span> + <span class="string">' '</span>;
651    <span class="keyword">return</span> <span class="variable">str</span>;
652}</code></pre>
653</td>
654</tr>
655<tr class="code">
656<td class="docs">
657<p>Report test coverage.</p>
658
659<h2></h2>
660
661<ul><li><p><strong>param</strong>: <em>Object</em>  cov</p></li></ul>
662</td>
663<td class="code">
664<pre><code><span class="keyword">function</span> <span class="variable">reportCoverage</span>(<span class="variable">cov</span>) {
665    <span class="variable">populateCoverage</span>(<span class="variable">cov</span>);
666    <span class="comment">// Stats</span>
667    <span class="variable">print</span>(<span class="string">'\n   [bold]{Test Coverage}\n'</span>);
668    <span class="keyword">var</span> <span class="variable">sep</span> = <span class="string">'   +------------------------------------------+----------+------+------+--------+'</span>,
669        <span class="variable">lastSep</span> = <span class="string">'                                              +----------+------+------+--------+'</span>;
670    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
671    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="string">'   | filename                                 | coverage | LOC  | SLOC | missed |'</span>);
672    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
673    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
674        <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
675        <span class="keyword">if</span> (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">file</span>)) {
676            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'   | '</span> + <span class="variable">rpad</span>(<span class="variable">name</span>, <span class="number integer">40</span>));
677            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="variable">coverage</span>.<span class="variable">toFixed</span>(<span class="number integer">2</span>), <span class="number integer">8</span>));
678            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="class">LOC</span>, <span class="number integer">4</span>));
679            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="class">SLOC</span>, <span class="number integer">4</span>));
680            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="variable">totalMisses</span>, <span class="number integer">6</span>));
681            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' |\n'</span>);
682        }
683    }
684    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
685    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'     '</span> + <span class="variable">rpad</span>(<span class="string">''</span>, <span class="number integer">40</span>));
686    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="variable">coverage</span>.<span class="variable">toFixed</span>(<span class="number integer">2</span>), <span class="number integer">8</span>));
687    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="class">LOC</span>, <span class="number integer">4</span>));
688    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="class">SLOC</span>, <span class="number integer">4</span>));
689    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="variable">totalMisses</span>, <span class="number integer">6</span>));
690    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' |\n'</span>);
691    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">lastSep</span>);
692    <span class="comment">// Source</span>
693    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
694        <span class="keyword">if</span> (<span class="variable">name</span>.<span class="variable">match</span>(<span class="regexp">/\.js$/</span>)) {
695            <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
696            <span class="variable">print</span>(<span class="string">'\n   [bold]{'</span> + <span class="variable">name</span> + <span class="string">'}:'</span>);
697            <span class="variable">print</span>(<span class="variable">file</span>.<span class="variable">source</span>);
698            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'\n'</span>);
699        }
700    }
701}</code></pre>
702</td>
703</tr>
704<tr class="code">
705<td class="docs">
706<p>Populate code coverage data.</p>
707
708<h2></h2>
709
710<ul><li><p><strong>param</strong>: <em>Object</em>  cov</p></li></ul>
711</td>
712<td class="code">
713<pre><code><span class="keyword">function</span> <span class="variable">populateCoverage</span>(<span class="variable">cov</span>) {
714    <span class="variable">cov</span>.<span class="class">LOC</span> = 
715    <span class="variable">cov</span>.<span class="class">SLOC</span> =
716    <span class="variable">cov</span>.<span class="variable">totalFiles</span> =
717    <span class="variable">cov</span>.<span class="variable">totalHits</span> =
718    <span class="variable">cov</span>.<span class="variable">totalMisses</span> = 
719    <span class="variable">cov</span>.<span class="variable">coverage</span> = <span class="number integer">0</span>;
720    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
721        <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
722        <span class="keyword">if</span> (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">file</span>)) {
723            <span class="comment">// Stats</span>
724            ++<span class="variable">cov</span>.<span class="variable">totalFiles</span>;
725            <span class="variable">cov</span>.<span class="variable">totalHits</span> += <span class="variable">file</span>.<span class="variable">totalHits</span> = <span class="variable">coverage</span>(<span class="variable">file</span>, <span class="variable">true</span>);
726            <span class="variable">cov</span>.<span class="variable">totalMisses</span> += <span class="variable">file</span>.<span class="variable">totalMisses</span> = <span class="variable">coverage</span>(<span class="variable">file</span>, <span class="variable">false</span>);
727            <span class="variable">file</span>.<span class="variable">totalLines</span> = <span class="variable">file</span>.<span class="variable">totalHits</span> + <span class="variable">file</span>.<span class="variable">totalMisses</span>;
728            <span class="variable">cov</span>.<span class="class">SLOC</span> += <span class="variable">file</span>.<span class="class">SLOC</span> = <span class="variable">file</span>.<span class="variable">totalLines</span>;
729            <span class="keyword">if</span> (!<span class="variable">file</span>.<span class="variable">source</span>) <span class="variable">file</span>.<span class="variable">source</span> = [];
730            <span class="variable">cov</span>.<span class="class">LOC</span> += <span class="variable">file</span>.<span class="class">LOC</span> = <span class="variable">file</span>.<span class="variable">source</span>.<span class="variable">length</span>;
731            <span class="variable">file</span>.<span class="variable">coverage</span> = (<span class="variable">file</span>.<span class="variable">totalHits</span> / <span class="variable">file</span>.<span class="variable">totalLines</span>) * <span class="number integer">100</span>;
732            <span class="comment">// Source</span>
733            <span class="keyword">var</span> <span class="variable">width</span> = <span class="variable">file</span>.<span class="variable">source</span>.<span class="variable">length</span>.<span class="variable">toString</span>().<span class="variable">length</span>;
734            <span class="variable">file</span>.<span class="variable">source</span> = <span class="varia…

Large files files are truncated, but you can click here to view the full file