ruby-contract 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/COPYING +56 -0
  2. data/Manifest +85 -0
  3. data/README +32 -0
  4. data/TODO +83 -0
  5. data/doc/classes/Contract.html +599 -0
  6. data/doc/classes/Contract/Check.html +229 -0
  7. data/doc/classes/Contract/Check/All.html +172 -0
  8. data/doc/classes/Contract/Check/Any.html +172 -0
  9. data/doc/classes/Contract/Check/Block.html +172 -0
  10. data/doc/classes/Contract/Check/None.html +173 -0
  11. data/doc/classes/Contract/Check/Quack.html +172 -0
  12. data/doc/classes/Contract/ContractError.html +151 -0
  13. data/doc/classes/Contract/ContractException.html +162 -0
  14. data/doc/classes/Contract/ContractMismatch.html +134 -0
  15. data/doc/classes/Kernel.html +256 -0
  16. data/doc/classes/Method.html +135 -0
  17. data/doc/classes/MethodSignatureMixin.html +208 -0
  18. data/doc/classes/Module.html +526 -0
  19. data/doc/created.rid +1 -0
  20. data/doc/dot/f_0.dot +14 -0
  21. data/doc/dot/f_0.png +0 -0
  22. data/doc/dot/f_1.dot +14 -0
  23. data/doc/dot/f_1.png +0 -0
  24. data/doc/dot/f_2.dot +14 -0
  25. data/doc/dot/f_2.png +0 -0
  26. data/doc/dot/f_3.dot +112 -0
  27. data/doc/dot/f_3.png +0 -0
  28. data/doc/dot/f_4.dot +62 -0
  29. data/doc/dot/f_4.png +0 -0
  30. data/doc/dot/f_5.dot +62 -0
  31. data/doc/dot/f_5.png +0 -0
  32. data/doc/dot/f_6.dot +224 -0
  33. data/doc/dot/f_6.png +0 -0
  34. data/doc/dot/f_6_0.dot +24 -0
  35. data/doc/dot/f_6_0.png +0 -0
  36. data/doc/dot/f_6_1.dot +24 -0
  37. data/doc/dot/f_6_1.png +0 -0
  38. data/doc/dot/f_7.dot +62 -0
  39. data/doc/dot/f_7.png +0 -0
  40. data/doc/files/COPYING.html +168 -0
  41. data/doc/files/README.html +146 -0
  42. data/doc/files/TODO.html +240 -0
  43. data/doc/files/lib/contract/assertions_rb.html +118 -0
  44. data/doc/files/lib/contract/exception_rb.html +125 -0
  45. data/doc/files/lib/contract/integration_rb.html +130 -0
  46. data/doc/files/lib/contract/overrides_rb.html +118 -0
  47. data/doc/files/lib/contract_rb.html +127 -0
  48. data/doc/fr_class_index.html +40 -0
  49. data/doc/fr_file_index.html +34 -0
  50. data/doc/fr_method_index.html +45 -0
  51. data/doc/index.html +24 -0
  52. data/doc/rdoc-style.css +208 -0
  53. data/lib/contract.rb +146 -0
  54. data/lib/contract/assertions.rb +42 -0
  55. data/lib/contract/exception.rb +95 -0
  56. data/lib/contract/integration.rb +664 -0
  57. data/lib/contract/overrides.rb +41 -0
  58. data/setup.rb +1360 -0
  59. data/test/coverage/_-lib-contract-assertions_rb.html +526 -0
  60. data/test/coverage/_-lib-contract-exception_rb.html +632 -0
  61. data/test/coverage/_-lib-contract-integration_rb.html +1450 -0
  62. data/test/coverage/_-lib-contract-overrides_rb.html +524 -0
  63. data/test/coverage/_-lib-contract_rb.html +724 -0
  64. data/test/coverage/__-lib-contract-assertions_rb.html +484 -0
  65. data/test/coverage/__-lib-contract-exception_rb.html +537 -0
  66. data/test/coverage/__-lib-contract-integration_rb.html +946 -0
  67. data/test/coverage/__-lib-contract-overrides_rb.html +483 -0
  68. data/test/coverage/__-lib-contract_rb.html +583 -0
  69. data/test/coverage/index.html +93 -0
  70. data/test/tc_all.rb +8 -0
  71. data/test/tc_contract.rb +109 -0
  72. data/test/tc_exception.rb +43 -0
  73. data/test/tc_integration.rb +357 -0
  74. metadata +136 -0
@@ -0,0 +1,632 @@
1
+ <?xml version="1.0" encoding="ISO-8859-15"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml">
5
+ <head><title>./lib/contract/exception.rb - coverage</title>
6
+ <style type="text/css">body {
7
+ background-color: rgb(180, 180, 180);
8
+ }
9
+ span.marked {
10
+ background-color: rgb(185, 200, 200);
11
+ display: block;
12
+ }
13
+ span.inferred {
14
+ background-color: rgb(180, 195, 195);
15
+ display: block;
16
+ }
17
+ span.run0 {
18
+ background-color: rgb(178, 204, 255);
19
+ display: block;
20
+ }
21
+ span.run1 {
22
+ background-color: rgb(178, 206, 255);
23
+ display: block;
24
+ }
25
+ span.run2 {
26
+ background-color: rgb(178, 209, 255);
27
+ display: block;
28
+ }
29
+ span.run3 {
30
+ background-color: rgb(178, 211, 255);
31
+ display: block;
32
+ }
33
+ span.run4 {
34
+ background-color: rgb(178, 214, 255);
35
+ display: block;
36
+ }
37
+ span.run5 {
38
+ background-color: rgb(178, 218, 255);
39
+ display: block;
40
+ }
41
+ span.run6 {
42
+ background-color: rgb(178, 220, 255);
43
+ display: block;
44
+ }
45
+ span.run7 {
46
+ background-color: rgb(178, 223, 255);
47
+ display: block;
48
+ }
49
+ span.run8 {
50
+ background-color: rgb(178, 225, 255);
51
+ display: block;
52
+ }
53
+ span.run9 {
54
+ background-color: rgb(178, 228, 255);
55
+ display: block;
56
+ }
57
+ span.run10 {
58
+ background-color: rgb(178, 232, 255);
59
+ display: block;
60
+ }
61
+ span.run11 {
62
+ background-color: rgb(178, 234, 255);
63
+ display: block;
64
+ }
65
+ span.run12 {
66
+ background-color: rgb(178, 237, 255);
67
+ display: block;
68
+ }
69
+ span.run13 {
70
+ background-color: rgb(178, 239, 255);
71
+ display: block;
72
+ }
73
+ span.run14 {
74
+ background-color: rgb(178, 242, 255);
75
+ display: block;
76
+ }
77
+ span.run15 {
78
+ background-color: rgb(178, 246, 255);
79
+ display: block;
80
+ }
81
+ span.run16 {
82
+ background-color: rgb(178, 248, 255);
83
+ display: block;
84
+ }
85
+ span.run17 {
86
+ background-color: rgb(178, 251, 255);
87
+ display: block;
88
+ }
89
+ span.run18 {
90
+ background-color: rgb(178, 253, 255);
91
+ display: block;
92
+ }
93
+ span.run19 {
94
+ background-color: rgb(178, 255, 253);
95
+ display: block;
96
+ }
97
+ span.run20 {
98
+ background-color: rgb(178, 255, 249);
99
+ display: block;
100
+ }
101
+ span.run21 {
102
+ background-color: rgb(178, 255, 247);
103
+ display: block;
104
+ }
105
+ span.run22 {
106
+ background-color: rgb(178, 255, 244);
107
+ display: block;
108
+ }
109
+ span.run23 {
110
+ background-color: rgb(178, 255, 242);
111
+ display: block;
112
+ }
113
+ span.run24 {
114
+ background-color: rgb(178, 255, 239);
115
+ display: block;
116
+ }
117
+ span.run25 {
118
+ background-color: rgb(178, 255, 235);
119
+ display: block;
120
+ }
121
+ span.run26 {
122
+ background-color: rgb(178, 255, 233);
123
+ display: block;
124
+ }
125
+ span.run27 {
126
+ background-color: rgb(178, 255, 230);
127
+ display: block;
128
+ }
129
+ span.run28 {
130
+ background-color: rgb(178, 255, 228);
131
+ display: block;
132
+ }
133
+ span.run29 {
134
+ background-color: rgb(178, 255, 225);
135
+ display: block;
136
+ }
137
+ span.run30 {
138
+ background-color: rgb(178, 255, 221);
139
+ display: block;
140
+ }
141
+ span.run31 {
142
+ background-color: rgb(178, 255, 219);
143
+ display: block;
144
+ }
145
+ span.run32 {
146
+ background-color: rgb(178, 255, 216);
147
+ display: block;
148
+ }
149
+ span.run33 {
150
+ background-color: rgb(178, 255, 214);
151
+ display: block;
152
+ }
153
+ span.run34 {
154
+ background-color: rgb(178, 255, 211);
155
+ display: block;
156
+ }
157
+ span.run35 {
158
+ background-color: rgb(178, 255, 207);
159
+ display: block;
160
+ }
161
+ span.run36 {
162
+ background-color: rgb(178, 255, 205);
163
+ display: block;
164
+ }
165
+ span.run37 {
166
+ background-color: rgb(178, 255, 202);
167
+ display: block;
168
+ }
169
+ span.run38 {
170
+ background-color: rgb(178, 255, 200);
171
+ display: block;
172
+ }
173
+ span.run39 {
174
+ background-color: rgb(178, 255, 197);
175
+ display: block;
176
+ }
177
+ span.run40 {
178
+ background-color: rgb(178, 255, 193);
179
+ display: block;
180
+ }
181
+ span.run41 {
182
+ background-color: rgb(178, 255, 191);
183
+ display: block;
184
+ }
185
+ span.run42 {
186
+ background-color: rgb(178, 255, 188);
187
+ display: block;
188
+ }
189
+ span.run43 {
190
+ background-color: rgb(178, 255, 186);
191
+ display: block;
192
+ }
193
+ span.run44 {
194
+ background-color: rgb(178, 255, 183);
195
+ display: block;
196
+ }
197
+ span.run45 {
198
+ background-color: rgb(178, 255, 179);
199
+ display: block;
200
+ }
201
+ span.run46 {
202
+ background-color: rgb(179, 255, 178);
203
+ display: block;
204
+ }
205
+ span.run47 {
206
+ background-color: rgb(182, 255, 178);
207
+ display: block;
208
+ }
209
+ span.run48 {
210
+ background-color: rgb(184, 255, 178);
211
+ display: block;
212
+ }
213
+ span.run49 {
214
+ background-color: rgb(187, 255, 178);
215
+ display: block;
216
+ }
217
+ span.run50 {
218
+ background-color: rgb(191, 255, 178);
219
+ display: block;
220
+ }
221
+ span.run51 {
222
+ background-color: rgb(193, 255, 178);
223
+ display: block;
224
+ }
225
+ span.run52 {
226
+ background-color: rgb(196, 255, 178);
227
+ display: block;
228
+ }
229
+ span.run53 {
230
+ background-color: rgb(198, 255, 178);
231
+ display: block;
232
+ }
233
+ span.run54 {
234
+ background-color: rgb(201, 255, 178);
235
+ display: block;
236
+ }
237
+ span.run55 {
238
+ background-color: rgb(205, 255, 178);
239
+ display: block;
240
+ }
241
+ span.run56 {
242
+ background-color: rgb(207, 255, 178);
243
+ display: block;
244
+ }
245
+ span.run57 {
246
+ background-color: rgb(210, 255, 178);
247
+ display: block;
248
+ }
249
+ span.run58 {
250
+ background-color: rgb(212, 255, 178);
251
+ display: block;
252
+ }
253
+ span.run59 {
254
+ background-color: rgb(215, 255, 178);
255
+ display: block;
256
+ }
257
+ span.run60 {
258
+ background-color: rgb(219, 255, 178);
259
+ display: block;
260
+ }
261
+ span.run61 {
262
+ background-color: rgb(221, 255, 178);
263
+ display: block;
264
+ }
265
+ span.run62 {
266
+ background-color: rgb(224, 255, 178);
267
+ display: block;
268
+ }
269
+ span.run63 {
270
+ background-color: rgb(226, 255, 178);
271
+ display: block;
272
+ }
273
+ span.run64 {
274
+ background-color: rgb(229, 255, 178);
275
+ display: block;
276
+ }
277
+ span.run65 {
278
+ background-color: rgb(233, 255, 178);
279
+ display: block;
280
+ }
281
+ span.run66 {
282
+ background-color: rgb(235, 255, 178);
283
+ display: block;
284
+ }
285
+ span.run67 {
286
+ background-color: rgb(238, 255, 178);
287
+ display: block;
288
+ }
289
+ span.run68 {
290
+ background-color: rgb(240, 255, 178);
291
+ display: block;
292
+ }
293
+ span.run69 {
294
+ background-color: rgb(243, 255, 178);
295
+ display: block;
296
+ }
297
+ span.run70 {
298
+ background-color: rgb(247, 255, 178);
299
+ display: block;
300
+ }
301
+ span.run71 {
302
+ background-color: rgb(249, 255, 178);
303
+ display: block;
304
+ }
305
+ span.run72 {
306
+ background-color: rgb(252, 255, 178);
307
+ display: block;
308
+ }
309
+ span.run73 {
310
+ background-color: rgb(255, 255, 178);
311
+ display: block;
312
+ }
313
+ span.run74 {
314
+ background-color: rgb(255, 252, 178);
315
+ display: block;
316
+ }
317
+ span.run75 {
318
+ background-color: rgb(255, 248, 178);
319
+ display: block;
320
+ }
321
+ span.run76 {
322
+ background-color: rgb(255, 246, 178);
323
+ display: block;
324
+ }
325
+ span.run77 {
326
+ background-color: rgb(255, 243, 178);
327
+ display: block;
328
+ }
329
+ span.run78 {
330
+ background-color: rgb(255, 240, 178);
331
+ display: block;
332
+ }
333
+ span.run79 {
334
+ background-color: rgb(255, 238, 178);
335
+ display: block;
336
+ }
337
+ span.run80 {
338
+ background-color: rgb(255, 234, 178);
339
+ display: block;
340
+ }
341
+ span.run81 {
342
+ background-color: rgb(255, 232, 178);
343
+ display: block;
344
+ }
345
+ span.run82 {
346
+ background-color: rgb(255, 229, 178);
347
+ display: block;
348
+ }
349
+ span.run83 {
350
+ background-color: rgb(255, 226, 178);
351
+ display: block;
352
+ }
353
+ span.run84 {
354
+ background-color: rgb(255, 224, 178);
355
+ display: block;
356
+ }
357
+ span.run85 {
358
+ background-color: rgb(255, 220, 178);
359
+ display: block;
360
+ }
361
+ span.run86 {
362
+ background-color: rgb(255, 218, 178);
363
+ display: block;
364
+ }
365
+ span.run87 {
366
+ background-color: rgb(255, 215, 178);
367
+ display: block;
368
+ }
369
+ span.run88 {
370
+ background-color: rgb(255, 212, 178);
371
+ display: block;
372
+ }
373
+ span.run89 {
374
+ background-color: rgb(255, 210, 178);
375
+ display: block;
376
+ }
377
+ span.run90 {
378
+ background-color: rgb(255, 206, 178);
379
+ display: block;
380
+ }
381
+ span.run91 {
382
+ background-color: rgb(255, 204, 178);
383
+ display: block;
384
+ }
385
+ span.run92 {
386
+ background-color: rgb(255, 201, 178);
387
+ display: block;
388
+ }
389
+ span.run93 {
390
+ background-color: rgb(255, 198, 178);
391
+ display: block;
392
+ }
393
+ span.run94 {
394
+ background-color: rgb(255, 196, 178);
395
+ display: block;
396
+ }
397
+ span.run95 {
398
+ background-color: rgb(255, 192, 178);
399
+ display: block;
400
+ }
401
+ span.run96 {
402
+ background-color: rgb(255, 189, 178);
403
+ display: block;
404
+ }
405
+ span.run97 {
406
+ background-color: rgb(255, 187, 178);
407
+ display: block;
408
+ }
409
+ span.run98 {
410
+ background-color: rgb(255, 184, 178);
411
+ display: block;
412
+ }
413
+ span.run99 {
414
+ background-color: rgb(255, 182, 178);
415
+ display: block;
416
+ }
417
+
418
+ div.overview {
419
+ border-bottom: 8px solid black;
420
+ }
421
+ </style></head>
422
+ <body><div class="overview">
423
+ <table>
424
+ <tr><td>filename</td><td><tt>./lib/contract/exception.rb</tt></td></tr>
425
+ <tr><td>total coverage</td><td>50.0</td></tr>
426
+ <tr><td>code coverage</td><td>50.0</td></tr>
427
+ </table>
428
+ </div>
429
+ <pre><span class="inferred"> 1 # This file contains things needed to map Test::Unit status objects to
430
+ 2 # Exceptions, Exception related infrastructure and similar things.
431
+ 3 #
432
+ 4 # See Contract::ContractException, Contract::ContractMismatch and
433
+ 5 # Contract::ContractError.
434
+ 6
435
+ 7
436
+ </span><span class="marked"> 8 class Contract &lt; Test::Unit::TestCase
437
+ </span><span class="inferred"> 9 # Exceptions raised by Contract contain some useful meta-information.
438
+ 10 # This module is mixed into Exceptions that provide such information.
439
+ </span><span class="marked"> 11 module ContractException
440
+ </span><span class="inferred"> 12 def ce_initialize(original_message, backtrace, test_object,
441
+ </span><span class="marked"> 13 test_method, test_contract, *more) # :nodoc:
442
+ 14 @original_message = original_message
443
+ 15 message = original_message.dup
444
+ 16 detail = &quot; for #{test_object.inspect} in &quot; +
445
+ </span><span class="inferred"> 17 &quot;#{test_contract.inspect}&quot;
446
+ </span><span class="marked"> 18 message[/(\s*)[.!?]?\s*\Z/, 1] = detail
447
+ 19 Exception.instance_method(:initialize).bind(self).call(message)
448
+ </span><span class="inferred"> 20
449
+ </span><span class="marked"> 21 set_backtrace(backtrace)
450
+ 22 @test_object = test_object
451
+ 23 @test_method = test_method
452
+ 24 @test_contract = test_contract
453
+ </span><span class="inferred"> 25 end
454
+ </span><span class="marked"> 26 private :ce_initialize
455
+ </span><span class="inferred"> 27
456
+ 28 # What object was tested when this Exception was raised?
457
+ </span><span class="marked"> 29 attr_reader :test_object
458
+ </span><span class="inferred"> 30 # What method implemented that test?
459
+ </span><span class="marked"> 31 attr_reader :test_method
460
+ </span><span class="inferred"> 32 # What contract was that method part of?
461
+ </span><span class="marked"> 33 attr_reader :test_contract
462
+ </span><span class="inferred"> 34 # The original, unfiltered exception message.
463
+ </span><span class="marked"> 35 attr_reader :original_message
464
+ </span><span class="inferred"> 36 end
465
+ 37
466
+ 38 # Represents a failed test in a contract. This means that an object
467
+ 39 # simply does not fulfill one of the parts of a contract. Subclass of
468
+ 40 # TypeError.
469
+ </span><span class="marked"> 41 class ContractMismatch &lt; TypeError
470
+ 42 def initialize(*args) # :nodoc:
471
+ 43 ce_initialize(*args)
472
+ </span><span class="inferred"> 44 end
473
+ 45
474
+ </span><span class="marked"> 46 include ContractException
475
+ </span><span class="inferred"> 47 end
476
+ 48
477
+ 49 # Represents an unexpected failure while processing a contract test.
478
+ 50 # This is more critical than ContractMismatch and usually means that
479
+ 51 # something is wrong with the test itself.
480
+ </span><span class="marked"> 52 class ContractError &lt; StandardError
481
+ 53 def initialize(*args) # :nodoc:
482
+ 54 @type = args.pop
483
+ 55 ce_initialize(*args)
484
+ </span><span class="inferred"> 56 end
485
+ 57
486
+ 58 # The type of the original Exception that triggered the unexpected
487
+ 59 # failure.
488
+ </span><span class="marked"> 60 attr_reader :type
489
+ </span><span class="inferred"> 61
490
+ </span><span class="marked"> 62 include ContractException
491
+ </span><span class="inferred"> 63 end
492
+ 64
493
+ 65
494
+ 66 # Maps a Test::Unit::Failure instance to an actual Exception with the
495
+ 67 # specified meta data.
496
+ </span><span class="marked"> 68 def self.failure_to_exception(failure, object, contract) # :nodoc:
497
+ 69 ContractMismatch.new(failure.message, failure.location, object,
498
+ </span><span class="inferred"> 70 extract_method_name(failure.test_name), contract)
499
+ 71 end
500
+ 72
501
+ 73 # Maps a Test::Unit::Error instance to an actual Exception with the
502
+ 74 # specified meta data.
503
+ </span><span class="marked"> 75 def self.error_to_exception(error, object, contract) # :nodoc:
504
+ 76 original = error.exception
505
+ 77 ContractError.new(original.message, original.backtrace, object,
506
+ </span><span class="inferred"> 78 extract_method_name(error.test_name), contract, original.class)
507
+ 79 end
508
+ 80
509
+ 81 # Maps a Test::Unit fault (either a Failure or Error) to an actual
510
+ 82 # exception with the specified meta data.
511
+ </span><span class="marked"> 83 def self.fault_to_exception(fault, *args) # :nodoc:
512
+ 84 if fault.is_a?(Test::Unit::Failure) then
513
+ 85 failure_to_exception(fault, *args)
514
+ </span><span class="inferred"> 86 else
515
+ </span><span class="marked"> 87 error_to_exception(fault, *args)
516
+ </span><span class="inferred"> 88 end
517
+ 89 end
518
+ 90
519
+ 91 # Extracts the method name from a Test::Unit test_name style String.
520
+ </span><span class="marked"> 92 def self.extract_method_name(test_name) # :nodoc:
521
+ 93 test_name[/\A(.+?)\(.+?\)\Z/, 1]
522
+ </span><span class="inferred"> 94 end
523
+ 95 end
524
+ </span><span class="false"> 96 # This file contains things needed to map Test::Unit status objects to
525
+ 97 # Exceptions, Exception related infrastructure and similar things.
526
+ 98 #
527
+ 99 # See Contract::ContractException, Contract::ContractMismatch and
528
+ 100 # Contract::ContractError.
529
+ 101
530
+ 102
531
+ 103 class Contract &lt; Test::Unit::TestCase
532
+ 104 # Exceptions raised by Contract contain some useful meta-information.
533
+ 105 # This module is mixed into Exceptions that provide such information.
534
+ 106 module ContractException
535
+ 107 def ce_initialize(original_message, backtrace, test_object,
536
+ 108 test_method, test_contract, *more) # :nodoc:
537
+ 109 @original_message = original_message
538
+ 110 message = original_message.dup
539
+ 111 detail = &quot; for #{test_object.inspect} in &quot; +
540
+ 112 &quot;#{test_contract.inspect}&quot;
541
+ 113 message[/(\s*)[.!?]?\s*\Z/, 1] = detail
542
+ 114 Exception.instance_method(:initialize).bind(self).call(message)
543
+ 115
544
+ 116 set_backtrace(backtrace)
545
+ 117 @test_object = test_object
546
+ 118 @test_method = test_method
547
+ 119 @test_contract = test_contract
548
+ 120 end
549
+ 121 private :ce_initialize
550
+ 122
551
+ 123 # What object was tested when this Exception was raised?
552
+ 124 attr_reader :test_object
553
+ 125 # What method implemented that test?
554
+ 126 attr_reader :test_method
555
+ 127 # What contract was that method part of?
556
+ 128 attr_reader :test_contract
557
+ 129 # The original, unfiltered exception message.
558
+ 130 attr_reader :original_message
559
+ 131 end
560
+ 132
561
+ 133 # Represents a failed test in a contract. This means that an object
562
+ 134 # simply does not fulfill one of the parts of a contract. Subclass of
563
+ 135 # TypeError.
564
+ 136 class ContractMismatch &lt; TypeError
565
+ 137 def initialize(*args) # :nodoc:
566
+ 138 ce_initialize(*args)
567
+ 139 end
568
+ 140
569
+ 141 include ContractException
570
+ 142 end
571
+ 143
572
+ 144 # Represents an unexpected failure while processing a contract test.
573
+ 145 # This is more critical than ContractMismatch and usually means that
574
+ 146 # something is wrong with the test itself.
575
+ 147 class ContractError &lt; StandardError
576
+ 148 def initialize(*args) # :nodoc:
577
+ 149 @type = args.pop
578
+ 150 ce_initialize(*args)
579
+ 151 end
580
+ 152
581
+ 153 # The type of the original Exception that triggered the unexpected
582
+ 154 # failure.
583
+ 155 attr_reader :type
584
+ 156
585
+ 157 include ContractException
586
+ 158 end
587
+ 159
588
+ 160
589
+ 161 # Maps a Test::Unit::Failure instance to an actual Exception with the
590
+ 162 # specified meta data.
591
+ 163 def self.failure_to_exception(failure, object, contract) # :nodoc:
592
+ 164 ContractMismatch.new(failure.message, failure.location, object,
593
+ 165 extract_method_name(failure.test_name), contract)
594
+ 166 end
595
+ 167
596
+ 168 # Maps a Test::Unit::Error instance to an actual Exception with the
597
+ 169 # specified meta data.
598
+ 170 def self.error_to_exception(error, object, contract) # :nodoc:
599
+ 171 original = error.exception
600
+ 172 ContractError.new(original.message, original.backtrace, object,
601
+ 173 extract_method_name(error.test_name), contract, original.class)
602
+ 174 end
603
+ 175
604
+ 176 # Maps a Test::Unit fault (either a Failure or Error) to an actual
605
+ 177 # exception with the specified meta data.
606
+ 178 def self.fault_to_exception(fault, *args) # :nodoc:
607
+ 179 if fault.is_a?(Test::Unit::Failure) then
608
+ 180 failure_to_exception(fault, *args)
609
+ 181 else
610
+ 182 error_to_exception(fault, *args)
611
+ 183 end
612
+ 184 end
613
+ 185
614
+ 186 # Extracts the method name from a Test::Unit test_name style String.
615
+ 187 def self.extract_method_name(test_name) # :nodoc:
616
+ 188 test_name[/\A(.+?)\(.+?\)\Z/, 1]
617
+ 189 end
618
+ 190 end
619
+ </span></pre>
620
+ <hr />
621
+ <p>
622
+ <a href="http://validator.w3.org/check/referer">
623
+ <img src="http://www.w3.org/Icons/valid-xhtml11"
624
+ alt="Valid XHTML 1.1!" height="31" width="88" />
625
+ </a>
626
+ <a href="http://jigsaw.w3.org/css-validator/">
627
+ <img style="border:0;width:88px;height:31px"
628
+ src="http://jigsaw.w3.org/css-validator/images/vcss"
629
+ alt="Valid CSS!" />
630
+ </a>
631
+ </p>
632
+ </body></html>