dfect 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,872 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <title>Dfect</title>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
+ <link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" />
9
+ <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen" />
10
+ <script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
11
+ <script src="../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
12
+ <script src="../js/main.js" type="text/javascript" charset="utf-8"></script>
13
+ </head>
14
+
15
+ <body>
16
+ <div class="banner">
17
+ <h1>
18
+ <span class="type">Module</span>
19
+ Dfect
20
+
21
+ </h1>
22
+ <ul class="files">
23
+
24
+ <li><a href="../files/lib/dfect_rb.html">lib/dfect.rb</a></li>
25
+
26
+ </ul>
27
+ </div>
28
+ <div id="bodyContent">
29
+ <div id="content">
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+ <div class="sectiontitle">Methods</div>
40
+ <dl class="methods">
41
+
42
+ <dt>#</dt>
43
+ <dd>
44
+ <ul>
45
+
46
+ <li><a href="#M000001"><</a>,</li>
47
+
48
+ <li><a href="#M000003"><<</a>,</li>
49
+
50
+ <li><a href="#M000002">></a>,</li>
51
+
52
+ <li><a href="#M000004">>></a></li>
53
+
54
+ </ul>
55
+ </dd>
56
+
57
+ <dt>C</dt>
58
+ <dd>
59
+ <ul>
60
+
61
+ <li><a href="#M000008">C</a></li>
62
+
63
+ </ul>
64
+ </dd>
65
+
66
+ <dt>D</dt>
67
+ <dd>
68
+ <ul>
69
+
70
+ <li><a href="#M000000">D</a></li>
71
+
72
+ </ul>
73
+ </dd>
74
+
75
+ <dt>E</dt>
76
+ <dd>
77
+ <ul>
78
+
79
+ <li><a href="#M000007">E</a></li>
80
+
81
+ </ul>
82
+ </dd>
83
+
84
+ <dt>F</dt>
85
+ <dd>
86
+ <ul>
87
+
88
+ <li><a href="#M000006">F</a></li>
89
+
90
+ </ul>
91
+ </dd>
92
+
93
+ <dt>T</dt>
94
+ <dd>
95
+ <ul>
96
+
97
+ <li><a href="#M000005">T</a></li>
98
+
99
+ </ul>
100
+ </dd>
101
+
102
+ <dt>R</dt>
103
+ <dd>
104
+ <ul>
105
+
106
+ <li><a href="#M000009">run</a></li>
107
+
108
+ </ul>
109
+ </dd>
110
+
111
+ <dt>S</dt>
112
+ <dd>
113
+ <ul>
114
+
115
+ <li><a href="#M000010">stop</a></li>
116
+
117
+ </ul>
118
+ </dd>
119
+
120
+ </dl>
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+ <div class="sectiontitle">Constants</div>
131
+ <table border='0' cellpadding='5'>
132
+
133
+ <tr valign='top'>
134
+ <td class="attr-name">D</td>
135
+ <td>=</td>
136
+ <td class="attr-value">self</td>
137
+ </tr>
138
+
139
+ <tr valign='top'>
140
+ <td>&nbsp;</td>
141
+ <td colspan="2" class="attr-desc"><p>
142
+ Allows before and after hooks to be specified via the D() method syntax
143
+ when this module is mixed-in:
144
+ </p>
145
+ <pre>
146
+ D .&lt; { puts &quot;before each nested test&quot; }
147
+ D .&gt; { puts &quot;after each nested test&quot; }
148
+ D .&lt;&lt; { puts &quot;before all nested tests&quot; }
149
+ D .&gt;&gt; { puts &quot;after all nested tests&quot; }
150
+ </pre>
151
+ </td>
152
+ </tr>
153
+
154
+
155
+ </table>
156
+
157
+
158
+
159
+ <div class="sectiontitle">Attributes</div>
160
+ <table border='0' cellpadding='5'>
161
+
162
+ <tr valign='top'>
163
+ <td class='attr-rw'>
164
+ [R]
165
+ </td>
166
+ <td class='attr-name'>report</td>
167
+ <td class='attr-desc'><p>
168
+ Hash of test results, assembled by <a href="Dfect.html#M000009">run</a>.
169
+ </p>
170
+ <dl>
171
+ <dt>:execution</dt><dd>Hierarchical trace of all tests executed, where each test is represented by
172
+ its description, is mapped to an Array of nested tests, and may contain
173
+ zero or more assertion failures.
174
+
175
+ <p>
176
+ Assertion failures are represented as a Hash:
177
+ </p>
178
+ <dl>
179
+ <dt>&#8220;fail&#8220;</dt><dd>Description of the assertion failure.
180
+
181
+ </dd>
182
+ <dt>&#8220;code&#8220;</dt><dd>Source code surrounding the point of failure.
183
+
184
+ </dd>
185
+ <dt>&#8220;vars&#8220;</dt><dd>Local variables visible at the point of failure.
186
+
187
+ </dd>
188
+ <dt>&#8220;call&#8220;</dt><dd>Stack trace leading to the point of failure.
189
+
190
+ </dd>
191
+ </dl>
192
+ </dd>
193
+ <dt>:statistics</dt><dd>Hash of counts of major events in test execution:
194
+
195
+ <dl>
196
+ <dt>:passed_assertions</dt><dd>Number of assertions that held true.
197
+
198
+ </dd>
199
+ <dt>:failed_assertions</dt><dd>Number of assertions that did not hold true.
200
+
201
+ </dd>
202
+ <dt>:uncaught_exceptions</dt><dd>Number of exceptions that were not rescued.
203
+
204
+ </dd>
205
+ </dl>
206
+ </dd>
207
+ </dl></td>
208
+ </tr>
209
+
210
+ <tr valign='top'>
211
+ <td class='attr-rw'>
212
+ [RW]
213
+ </td>
214
+ <td class='attr-name'>options</td>
215
+ <td class='attr-desc'><p>
216
+ Hash of choices that affect how <a href="Dfect.html">Dfect</a> operates.
217
+ </p>
218
+ <dl>
219
+ <dt>:debug</dt><dd>Launch an interactive debugger during assertion failures so the user can
220
+ investigate them.
221
+
222
+ <p>
223
+ The default value is $DEBUG.
224
+ </p>
225
+ </dd>
226
+ <dt>:quiet</dt><dd>Do not print the report after executing all tests.
227
+
228
+ <p>
229
+ The default value is false.
230
+ </p>
231
+ </dd>
232
+ </dl></td>
233
+ </tr>
234
+
235
+ </table>
236
+
237
+
238
+
239
+ <div class="sectiontitle">Class Public methods</div>
240
+
241
+ <div class="method">
242
+ <div class="title" id="M000001">
243
+
244
+ <a name="M000001"></a><b>&lt;</b>(&amp;block)
245
+
246
+ </div>
247
+
248
+ <div class="description">
249
+
250
+ <p>
251
+ Registers the given block to be executed before each nested test inside
252
+ this test.
253
+ </p>
254
+ <h4>Examples</h4>
255
+ <pre>
256
+ D .&lt; { puts &quot;before each nested test&quot; }
257
+
258
+ D .&lt; do
259
+ puts &quot;before each nested test&quot;
260
+ end
261
+ </pre>
262
+
263
+ </div>
264
+
265
+
266
+
267
+
268
+ <div class="sourcecode">
269
+ <p class="source-link">
270
+ Source: <a href="javascript:toggleSource('M000001_source')" id="l_M000001_source">show</a>
271
+
272
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L124" target="_blank" class="github_url">on GitHub</a>
273
+
274
+ </p>
275
+ <div id="M000001_source" class="dyn-source">
276
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 124</span>
277
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&lt;</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
278
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
279
+ <span class="ruby-ivar">@curr_suite</span>.<span class="ruby-identifier">before_each</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">block</span>
280
+ <span class="ruby-keyword kw">end</span></pre>
281
+ </div>
282
+ </div>
283
+
284
+ </div>
285
+
286
+ <div class="method">
287
+ <div class="title" id="M000003">
288
+
289
+ <a name="M000003"></a><b>&lt;&lt;</b>(&amp;block)
290
+
291
+ </div>
292
+
293
+ <div class="description">
294
+
295
+ <p>
296
+ Registers the given block to be executed before all nested tests inside
297
+ this test.
298
+ </p>
299
+ <h4>Examples</h4>
300
+ <pre>
301
+ D .&lt;&lt; { puts &quot;before all nested tests&quot; }
302
+
303
+ D .&lt;&lt; do
304
+ puts &quot;before all nested tests&quot;
305
+ end
306
+ </pre>
307
+
308
+ </div>
309
+
310
+
311
+
312
+
313
+ <div class="sourcecode">
314
+ <p class="source-link">
315
+ Source: <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show</a>
316
+
317
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L158" target="_blank" class="github_url">on GitHub</a>
318
+
319
+ </p>
320
+ <div id="M000003_source" class="dyn-source">
321
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 158</span>
322
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
323
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
324
+ <span class="ruby-ivar">@curr_suite</span>.<span class="ruby-identifier">before_all</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">block</span>
325
+ <span class="ruby-keyword kw">end</span></pre>
326
+ </div>
327
+ </div>
328
+
329
+ </div>
330
+
331
+ <div class="method">
332
+ <div class="title" id="M000002">
333
+
334
+ <a name="M000002"></a><b>&gt;</b>(&amp;block)
335
+
336
+ </div>
337
+
338
+ <div class="description">
339
+
340
+ <p>
341
+ Registers the given block to be executed after each nested test inside this
342
+ test.
343
+ </p>
344
+ <h4>Examples</h4>
345
+ <pre>
346
+ D .&gt; { puts &quot;after each nested test&quot; }
347
+
348
+ D .&gt; do
349
+ puts &quot;after each nested test&quot;
350
+ end
351
+ </pre>
352
+
353
+ </div>
354
+
355
+
356
+
357
+
358
+ <div class="sourcecode">
359
+ <p class="source-link">
360
+ Source: <a href="javascript:toggleSource('M000002_source')" id="l_M000002_source">show</a>
361
+
362
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L141" target="_blank" class="github_url">on GitHub</a>
363
+
364
+ </p>
365
+ <div id="M000002_source" class="dyn-source">
366
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 141</span>
367
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&gt;</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
368
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
369
+ <span class="ruby-ivar">@curr_suite</span>.<span class="ruby-identifier">after_each</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">block</span>
370
+ <span class="ruby-keyword kw">end</span></pre>
371
+ </div>
372
+ </div>
373
+
374
+ </div>
375
+
376
+ <div class="method">
377
+ <div class="title" id="M000004">
378
+
379
+ <a name="M000004"></a><b>&gt;&gt;</b>(&amp;block)
380
+
381
+ </div>
382
+
383
+ <div class="description">
384
+
385
+ <p>
386
+ Registers the given block to be executed after all nested tests inside this
387
+ test.
388
+ </p>
389
+ <h4>Examples</h4>
390
+ <pre>
391
+ D .&gt;&gt; { puts &quot;after all nested tests&quot; }
392
+
393
+ D .&gt;&gt; do
394
+ puts &quot;after all nested tests&quot;
395
+ end
396
+ </pre>
397
+
398
+ </div>
399
+
400
+
401
+
402
+
403
+ <div class="sourcecode">
404
+ <p class="source-link">
405
+ Source: <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show</a>
406
+
407
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L175" target="_blank" class="github_url">on GitHub</a>
408
+
409
+ </p>
410
+ <div id="M000004_source" class="dyn-source">
411
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 175</span>
412
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
413
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
414
+ <span class="ruby-ivar">@curr_suite</span>.<span class="ruby-identifier">after_all</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">block</span>
415
+ <span class="ruby-keyword kw">end</span></pre>
416
+ </div>
417
+ </div>
418
+
419
+ </div>
420
+
421
+ <div class="method">
422
+ <div class="title" id="M000008">
423
+
424
+ <a name="M000008"></a><b>C</b>(message = nil, symbol = nil, &amp;block)
425
+
426
+ </div>
427
+
428
+ <div class="description">
429
+
430
+ <p>
431
+ Asserts that the given symbol is thrown when the given block is executed,
432
+ and returns the value that was thrown along with the symbol.
433
+ </p>
434
+ <h4>Parameters</h4>
435
+ <dl>
436
+ <dt>message</dt><dd>Optional message to show in the report if this assertion fails.
437
+
438
+ </dd>
439
+ <dt>symbol</dt><dd>Symbol that must be thrown by the given block.
440
+
441
+ </dd>
442
+ </dl>
443
+ <h4>Examples</h4>
444
+ <pre>
445
+ # no message specified:
446
+
447
+ C(:foo) { throw :foo } # passes
448
+
449
+ C(:foo) { throw :bar } # fails
450
+ C(:foo) { } # fails
451
+
452
+ # message specified:
453
+
454
+ C( &quot;:foo must be thrown&quot;, :foo ) { throw :bar } # fails
455
+ </pre>
456
+
457
+ </div>
458
+
459
+
460
+
461
+
462
+ <div class="sourcecode">
463
+ <p class="source-link">
464
+ Source: <a href="javascript:toggleSource('M000008_source')" id="l_M000008_source">show</a>
465
+
466
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L342" target="_blank" class="github_url">on GitHub</a>
467
+
468
+ </p>
469
+ <div id="M000008_source" class="dyn-source">
470
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 342</span>
471
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">C</span> <span class="ruby-identifier">message</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">symbol</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
472
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
473
+
474
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Symbol</span> <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">symbol</span>
475
+ <span class="ruby-identifier">symbol</span> = <span class="ruby-identifier">message</span>
476
+ <span class="ruby-identifier">message</span> = <span class="ruby-keyword kw">nil</span>
477
+ <span class="ruby-keyword kw">end</span>
478
+
479
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'symbol must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">symbol</span>
480
+
481
+ <span class="ruby-identifier">symbol</span> = <span class="ruby-identifier">symbol</span>.<span class="ruby-identifier">to_sym</span>
482
+ <span class="ruby-identifier">message</span> <span class="ruby-operator">||=</span> <span class="ruby-node">&quot;block must throw #{symbol.inspect}&quot;</span>
483
+
484
+ <span class="ruby-comment cmt"># if nothing was thrown, the result of catch()</span>
485
+ <span class="ruby-comment cmt"># is simply the result of executing the block</span>
486
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">catch</span>(<span class="ruby-identifier">symbol</span>) { <span class="ruby-identifier">call</span> <span class="ruby-identifier">block</span>; <span class="ruby-keyword kw">self</span> }
487
+
488
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">self</span>
489
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:failed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
490
+ <span class="ruby-identifier">debug</span> <span class="ruby-identifier">block</span>, <span class="ruby-identifier">message</span>
491
+ <span class="ruby-keyword kw">else</span>
492
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:passed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
493
+ <span class="ruby-identifier">result</span>
494
+ <span class="ruby-keyword kw">end</span>
495
+ <span class="ruby-keyword kw">end</span></pre>
496
+ </div>
497
+ </div>
498
+
499
+ </div>
500
+
501
+ <div class="method">
502
+ <div class="title" id="M000000">
503
+
504
+ <a name="M000000"></a><b>D</b>(description = caller.first, &amp;block)
505
+
506
+ </div>
507
+
508
+ <div class="description">
509
+
510
+ <p>
511
+ Defines a new test, composed of the given description and the given block
512
+ to execute.
513
+ </p>
514
+ <p>
515
+ A test may contain nested tests.
516
+ </p>
517
+ <h4>Parameters</h4>
518
+ <dl>
519
+ <dt>description</dt><dd>A short summary of the test being defined.
520
+
521
+ </dd>
522
+ </dl>
523
+ <h4>Examples</h4>
524
+ <pre>
525
+ D &quot;a new array&quot; do
526
+ D .&lt; { @array = [] }
527
+
528
+ D &quot;must be empty&quot; do
529
+ T { @array.empty? }
530
+ end
531
+
532
+ D &quot;when populated&quot; do
533
+ D .&lt; { @array.push 55 }
534
+
535
+ D &quot;must not be empty&quot; do
536
+ F { @array.empty? }
537
+ end
538
+ end
539
+ end
540
+ </pre>
541
+
542
+ </div>
543
+
544
+
545
+
546
+
547
+ <div class="sourcecode">
548
+ <p class="source-link">
549
+ Source: <a href="javascript:toggleSource('M000000_source')" id="l_M000000_source">show</a>
550
+
551
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L107" target="_blank" class="github_url">on GitHub</a>
552
+
553
+ </p>
554
+ <div id="M000000_source" class="dyn-source">
555
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 107</span>
556
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">D</span> <span class="ruby-identifier">description</span> = <span class="ruby-identifier">caller</span>.<span class="ruby-identifier">first</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
557
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
558
+ <span class="ruby-ivar">@curr_suite</span>.<span class="ruby-identifier">tests</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Suite</span><span class="ruby-operator">::</span><span class="ruby-constant">Test</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">description</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">block</span>)
559
+ <span class="ruby-keyword kw">end</span></pre>
560
+ </div>
561
+ </div>
562
+
563
+ </div>
564
+
565
+ <div class="method">
566
+ <div class="title" id="M000007">
567
+
568
+ <a name="M000007"></a><b>E</b>(message = nil, *kinds, &amp;block)
569
+
570
+ </div>
571
+
572
+ <div class="description">
573
+
574
+ <p>
575
+ Asserts that one of the given kinds of exceptions is raised when the given
576
+ block is executed, and returns the exception that was raised.
577
+ </p>
578
+ <h4>Parameters</h4>
579
+ <dl>
580
+ <dt>message</dt><dd>Optional message to show in the report if this assertion fails.
581
+
582
+ </dd>
583
+ <dt>kinds</dt><dd>Exception classes that must be raised by the given block.
584
+
585
+ <p>
586
+ If none are given, then StandardError is assumed (similar to how a plain
587
+ &#8216;rescue&#8217; statement without any arguments catches
588
+ StandardError).
589
+ </p>
590
+ </dd>
591
+ </dl>
592
+ <h4>Examples</h4>
593
+ <pre>
594
+ # no exceptions specified:
595
+
596
+ E { } # fails
597
+ E { raise } # passes
598
+
599
+ # single exception specified:
600
+
601
+ E( ArgumentError ) { raise ArgumentError }
602
+ E( &quot;argument must be invalid&quot;, ArgumentError ) { raise ArgumentError }
603
+
604
+ # multiple exceptions specified:
605
+
606
+ E( SyntaxError, NameError ) { eval &quot;...&quot; }
607
+ E( &quot;string must compile&quot;, SyntaxError, NameError ) { eval &quot;...&quot; }
608
+ </pre>
609
+
610
+ </div>
611
+
612
+
613
+
614
+
615
+ <div class="sourcecode">
616
+ <p class="source-link">
617
+ Source: <a href="javascript:toggleSource('M000007_source')" id="l_M000007_source">show</a>
618
+
619
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L285" target="_blank" class="github_url">on GitHub</a>
620
+
621
+ </p>
622
+ <div id="M000007_source" class="dyn-source">
623
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 285</span>
624
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">E</span> <span class="ruby-identifier">message</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">kinds</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
625
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
626
+
627
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Class</span>
628
+ <span class="ruby-identifier">kinds</span>.<span class="ruby-identifier">unshift</span> <span class="ruby-identifier">message</span>
629
+ <span class="ruby-identifier">message</span> = <span class="ruby-keyword kw">nil</span>
630
+ <span class="ruby-keyword kw">end</span>
631
+
632
+ <span class="ruby-identifier">kinds</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">StandardError</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">kinds</span>.<span class="ruby-identifier">empty?</span>
633
+ <span class="ruby-identifier">message</span> <span class="ruby-operator">||=</span> <span class="ruby-node">&quot;block must raise #{kinds.join ' or '}&quot;</span>
634
+
635
+ <span class="ruby-keyword kw">begin</span>
636
+ <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>
637
+
638
+ <span class="ruby-keyword kw">rescue</span> <span class="ruby-operator">*</span><span class="ruby-identifier">kinds</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">raised</span>
639
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:passed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
640
+
641
+ <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">raised</span>
642
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:failed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
643
+
644
+ <span class="ruby-comment cmt"># debug the uncaught exception...</span>
645
+ <span class="ruby-identifier">debug_uncaught_exception</span> <span class="ruby-identifier">block</span>, <span class="ruby-identifier">raised</span>
646
+
647
+ <span class="ruby-comment cmt"># ...in addition to debugging this assertion</span>
648
+ <span class="ruby-identifier">debug</span> <span class="ruby-identifier">block</span>, [<span class="ruby-identifier">message</span>, {<span class="ruby-value str">'block raised'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">raised</span>}]
649
+ <span class="ruby-keyword kw">end</span>
650
+
651
+ <span class="ruby-identifier">raised</span>
652
+ <span class="ruby-keyword kw">end</span></pre>
653
+ </div>
654
+ </div>
655
+
656
+ </div>
657
+
658
+ <div class="method">
659
+ <div class="title" id="M000006">
660
+
661
+ <a name="M000006"></a><b>F</b>(message = 'block must yield false (nil || false)', &amp;block)
662
+
663
+ </div>
664
+
665
+ <div class="description">
666
+
667
+ <p>
668
+ Asserts that the result of the given block is either nil or false and
669
+ returns that result.
670
+ </p>
671
+ <h4>Parameters</h4>
672
+ <dl>
673
+ <dt>message</dt><dd>Optional message to show in the report if this assertion fails.
674
+
675
+ </dd>
676
+ </dl>
677
+ <h4>Examples</h4>
678
+ <pre>
679
+ # no message specified:
680
+
681
+ F { true } # fails
682
+
683
+ F { false } # passes
684
+ F { nil } # passes
685
+
686
+ # message specified:
687
+
688
+ F( &quot;computers do not doublethink&quot; ) { 2 + 2 == 5 } # passes
689
+ </pre>
690
+
691
+ </div>
692
+
693
+
694
+
695
+
696
+ <div class="sourcecode">
697
+ <p class="source-link">
698
+ Source: <a href="javascript:toggleSource('M000006_source')" id="l_M000006_source">show</a>
699
+
700
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L239" target="_blank" class="github_url">on GitHub</a>
701
+
702
+ </p>
703
+ <div id="M000006_source" class="dyn-source">
704
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 239</span>
705
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">F</span> <span class="ruby-identifier">message</span> = <span class="ruby-value str">'block must yield false (nil || false)'</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
706
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
707
+
708
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span> = <span class="ruby-identifier">call</span>(<span class="ruby-identifier">block</span>)
709
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:failed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
710
+ <span class="ruby-identifier">debug</span> <span class="ruby-identifier">block</span>, <span class="ruby-identifier">message</span>
711
+ <span class="ruby-keyword kw">else</span>
712
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:passed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
713
+ <span class="ruby-keyword kw">end</span>
714
+
715
+ <span class="ruby-identifier">result</span>
716
+ <span class="ruby-keyword kw">end</span></pre>
717
+ </div>
718
+ </div>
719
+
720
+ </div>
721
+
722
+ <div class="method">
723
+ <div class="title" id="M000005">
724
+
725
+ <a name="M000005"></a><b>T</b>(message = 'block must yield true (!nil &amp;&amp; !false)', &amp;block)
726
+
727
+ </div>
728
+
729
+ <div class="description">
730
+
731
+ <p>
732
+ Asserts that the result of the given block is neither nil nor false and
733
+ returns that result.
734
+ </p>
735
+ <h4>Parameters</h4>
736
+ <dl>
737
+ <dt>message</dt><dd>Optional message to show in the report if this assertion fails.
738
+
739
+ </dd>
740
+ </dl>
741
+ <h4>Examples</h4>
742
+ <pre>
743
+ # no message specified:
744
+
745
+ T { true } # passes
746
+
747
+ T { false } # fails
748
+ T { nil } # fails
749
+
750
+ # message specified:
751
+
752
+ T( &quot;computers do not doublethink&quot; ) { 2 + 2 != 5 } # passes
753
+ </pre>
754
+
755
+ </div>
756
+
757
+
758
+
759
+
760
+ <div class="sourcecode">
761
+ <p class="source-link">
762
+ Source: <a href="javascript:toggleSource('M000005_source')" id="l_M000005_source">show</a>
763
+
764
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L203" target="_blank" class="github_url">on GitHub</a>
765
+
766
+ </p>
767
+ <div id="M000005_source" class="dyn-source">
768
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 203</span>
769
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">T</span> <span class="ruby-identifier">message</span> = <span class="ruby-value str">'block must yield true (!nil &amp;&amp; !false)'</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
770
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'block must be given'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">block</span>
771
+
772
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">result</span> = <span class="ruby-identifier">call</span>(<span class="ruby-identifier">block</span>)
773
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:passed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
774
+ <span class="ruby-keyword kw">else</span>
775
+ <span class="ruby-ivar">@exec_stats</span>[<span class="ruby-identifier">:failed_assertions</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
776
+ <span class="ruby-identifier">debug</span> <span class="ruby-identifier">block</span>, <span class="ruby-identifier">message</span>
777
+ <span class="ruby-keyword kw">end</span>
778
+
779
+ <span class="ruby-identifier">result</span>
780
+ <span class="ruby-keyword kw">end</span></pre>
781
+ </div>
782
+ </div>
783
+
784
+ </div>
785
+
786
+ <div class="method">
787
+ <div class="title" id="M000009">
788
+
789
+ <a name="M000009"></a><b>run</b>()
790
+
791
+ </div>
792
+
793
+ <div class="description">
794
+
795
+ <p>
796
+ Executes all tests defined thus far and stores the results in <a
797
+ href="Dfect.html#report">report</a>.
798
+ </p>
799
+
800
+ </div>
801
+
802
+
803
+
804
+
805
+ <div class="sourcecode">
806
+ <p class="source-link">
807
+ Source: <a href="javascript:toggleSource('M000009_source')" id="l_M000009_source">show</a>
808
+
809
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L371" target="_blank" class="github_url">on GitHub</a>
810
+
811
+ </p>
812
+ <div id="M000009_source" class="dyn-source">
813
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 371</span>
814
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>
815
+ <span class="ruby-comment cmt"># clear previous results</span>
816
+ <span class="ruby-ivar">@exec_stats</span>.<span class="ruby-identifier">clear</span>
817
+ <span class="ruby-ivar">@exec_trace</span>.<span class="ruby-identifier">clear</span>
818
+ <span class="ruby-ivar">@test_stack</span>.<span class="ruby-identifier">clear</span>
819
+
820
+ <span class="ruby-comment cmt"># make new results</span>
821
+ <span class="ruby-identifier">catch</span> <span class="ruby-identifier">:stop_dfect_execution</span> <span class="ruby-keyword kw">do</span>
822
+ <span class="ruby-identifier">execute</span>
823
+ <span class="ruby-keyword kw">end</span>
824
+
825
+ <span class="ruby-comment cmt"># print new results</span>
826
+ <span class="ruby-identifier">puts</span> <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">to_yaml</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:quiet</span>]
827
+ <span class="ruby-keyword kw">end</span></pre>
828
+ </div>
829
+ </div>
830
+
831
+ </div>
832
+
833
+ <div class="method">
834
+ <div class="title" id="M000010">
835
+
836
+ <a name="M000010"></a><b>stop</b>()
837
+
838
+ </div>
839
+
840
+ <div class="description">
841
+
842
+ <p>
843
+ Stops the execution of the <a href="Dfect.html#M000009">run</a> method or
844
+ raises an exception if that method is not currently executing.
845
+ </p>
846
+
847
+ </div>
848
+
849
+
850
+
851
+
852
+ <div class="sourcecode">
853
+ <p class="source-link">
854
+ Source: <a href="javascript:toggleSource('M000010_source')" id="l_M000010_source">show</a>
855
+
856
+ | <a href="http://github.com/sunaku/dfect/blob/92165fb328974d547b1a9656a2ae92f9c84c96fb/lib/dfect.rb#L390" target="_blank" class="github_url">on GitHub</a>
857
+
858
+ </p>
859
+ <div id="M000010_source" class="dyn-source">
860
+ <pre><span class="ruby-comment cmt"># File lib/dfect.rb, line 390</span>
861
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
862
+ <span class="ruby-identifier">throw</span> <span class="ruby-identifier">:stop_dfect_execution</span>
863
+ <span class="ruby-keyword kw">end</span></pre>
864
+ </div>
865
+ </div>
866
+
867
+ </div>
868
+
869
+ </div>
870
+ </div>
871
+ </body>
872
+ </html>