dfect 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CREDITS +2 -2
  2. data/HISTORY +306 -0
  3. data/INSTALL +35 -0
  4. data/README +95 -0
  5. data/USAGE +393 -0
  6. data/doc/api/Dfect.html +3179 -0
  7. data/doc/api/Object.html +107 -0
  8. data/doc/api/_index.html +107 -0
  9. data/doc/api/class_list.html +36 -0
  10. data/doc/api/css/common.css +1 -0
  11. data/doc/api/css/full_list.css +50 -0
  12. data/doc/api/css/style.css +268 -0
  13. data/doc/api/file.LICENSE.html +73 -0
  14. data/doc/api/file_list.html +38 -0
  15. data/doc/api/frames.html +13 -0
  16. data/doc/api/index.html +72 -13
  17. data/doc/api/js/app.js +99 -0
  18. data/doc/api/js/full_list.js +106 -0
  19. data/doc/api/js/{jquery-1.3.2.min.js → jquery.js} +0 -0
  20. data/doc/api/method_list.html +339 -0
  21. data/doc/api/top-level-namespace.html +87 -0
  22. data/doc/index.erb +16 -9
  23. data/doc/index.html +1057 -726
  24. data/lib/dfect.rb +431 -284
  25. data/lib/dfect/auto.rb +2 -6
  26. data/lib/dfect/inochi.rb +48 -0
  27. data/lib/dfect/inochi.yaml +75 -0
  28. data/lib/dfect/mini.rb +1 -5
  29. data/lib/dfect/spec.rb +6 -13
  30. data/lib/dfect/unit.rb +21 -33
  31. data/test/dfect/inochi_test.rb +17 -0
  32. data/test/{dfect.rb → dfect_test.rb} +167 -7
  33. data/test/runner +25 -0
  34. data/test/test_helper.rb +1 -0
  35. metadata +43 -55
  36. data/doc/api/apple-touch-icon.png +0 -0
  37. data/doc/api/classes/Class.html +0 -73
  38. data/doc/api/classes/Dfect.html +0 -1245
  39. data/doc/api/classes/Kernel.html +0 -322
  40. data/doc/api/classes/Object.html +0 -72
  41. data/doc/api/created.rid +0 -1
  42. data/doc/api/css/main.css +0 -263
  43. data/doc/api/css/panel.css +0 -383
  44. data/doc/api/css/reset.css +0 -53
  45. data/doc/api/favicon.ico +0 -0
  46. data/doc/api/files/CREDITS.html +0 -65
  47. data/doc/api/files/LICENSE.html +0 -76
  48. data/doc/api/files/lib/dfect/auto_rb.html +0 -80
  49. data/doc/api/files/lib/dfect/mini_rb.html +0 -77
  50. data/doc/api/files/lib/dfect/spec_rb.html +0 -73
  51. data/doc/api/files/lib/dfect/unit_rb.html +0 -73
  52. data/doc/api/files/lib/dfect_rb.html +0 -74
  53. data/doc/api/i/arrows.png +0 -0
  54. data/doc/api/i/results_bg.png +0 -0
  55. data/doc/api/i/tree_bg.png +0 -0
  56. data/doc/api/js/jquery-effect.js +0 -593
  57. data/doc/api/js/main.js +0 -22
  58. data/doc/api/js/searchdoc.js +0 -628
  59. data/doc/api/panel/index.html +0 -71
  60. data/doc/api/panel/search_index.js +0 -1
  61. data/doc/api/panel/tree.js +0 -1
  62. data/doc/history.erb +0 -161
  63. data/doc/intro.erb +0 -104
  64. data/doc/setup.erb +0 -107
  65. data/doc/usage.erb +0 -310
  66. data/rakefile +0 -21
@@ -0,0 +1,87 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=UTF-8" />
6
+ <title>Top Level Namespace</title>
7
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
8
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+
10
+ <script type="text/javascript" charset="utf-8">
11
+ relpath = '';
12
+ if (relpath != '') relpath += '/';
13
+ </script>
14
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
15
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
16
+
17
+ </head>
18
+ <body>
19
+ <script type="text/javascript" charset="utf-8">
20
+ if (window.top.frames.main) document.body.className = 'frames';
21
+ </script>
22
+
23
+ <div id="header">
24
+ <div id="menu">
25
+
26
+ <a href="_index.html">Index</a> &raquo;
27
+
28
+
29
+ <span class="title">Top Level Namespace</span>
30
+
31
+
32
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
33
+ </div>
34
+
35
+ <div id="search">
36
+ <a id="class_list_link" href="#">Class List</a>
37
+ <a id="method_list_link" href="#">Method List</a>
38
+ <a id ="file_list_link" href="#">File List</a>
39
+ </div>
40
+
41
+ <div class="clear"></div>
42
+ </div>
43
+
44
+ <iframe id="search_frame"></iframe>
45
+
46
+ <div id="content"><h1>Top Level Namespace
47
+
48
+
49
+ </h1>
50
+
51
+ <dl class="box">
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+ </dl>
60
+ <div class="clear"></div>
61
+
62
+ <h2>Defined Under Namespace</h2>
63
+ <p class="children">
64
+
65
+
66
+ <strong class="modules">Modules:</strong> <a href="Dfect.html" title="Dfect (module)">Dfect</a>
67
+
68
+
69
+
70
+ <strong class="classes">Classes:</strong> <a href="Object.html" title="Object (class)">Object</a>
71
+
72
+
73
+ </p>
74
+
75
+
76
+
77
+
78
+ </div>
79
+
80
+ <div id="footer">
81
+ Generated on Sun Mar 21 16:21:53 2010 by
82
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool">yard</a>
83
+ 0.5.3 (ruby-1.9.1).
84
+ </div>
85
+
86
+ </body>
87
+ </html>
data/doc/index.erb CHANGED
@@ -1,11 +1,18 @@
1
- %#--
2
- %# Copyright protects this work.
3
- %# See LICENSE file for details.
4
- %#++
1
+ % api_reference_url = 'api/index.html'
2
+ % api_reference = "[API reference](#{api_reference_url})"
3
+ % source_code_tool = '[Git](http://git-scm.com)'
4
+ % source_code_url = 'http://github.com/sunaku/dfect'
5
+ % issue_tracker_url = 'http://github.com/sunaku/dfect/issues'
5
6
 
6
- % Inochi.book :Dfect, self
7
+ %|part "Welcome"
8
+ %+ "../README"
7
9
 
8
- %+ "intro.erb"
9
- %+ "setup.erb"
10
- %+ "usage.erb"
11
- %+ "history.erb"
10
+ %|part "Setup"
11
+ %+ "../INSTALL"
12
+
13
+ %|part "Usage"
14
+ %+ "../USAGE"
15
+
16
+ %|part "History"
17
+ %|project_history
18
+ %+ "../HISTORY"
data/doc/index.html CHANGED
@@ -5,13 +5,13 @@
5
5
  <head>
6
6
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
7
7
 
8
- <meta name="generator" content="ERBook 9.0.0 &mdash; http://snk.tuxfamily.org/lib/erbook/"/>
8
+ <meta name="generator" content="ERBook 9.2.1 (2009-11-18) &mdash; http://snk.tuxfamily.org/lib/erbook/"/>
9
9
 
10
- <title>Dfect 1.1.0 &mdash; Assertion testing library for Ruby</title>
10
+ <title>Dfect &mdash; Assertion testing library for Ruby</title>
11
11
 
12
12
  <meta name="author" content="Suraj N. Kurapati"/>
13
13
 
14
- <meta name="date" content="27 October 2009"/>
14
+ <meta name="date" content="21 March 2010"/>
15
15
 
16
16
  <link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/dfect/ann.xml"/>
17
17
 
@@ -414,14 +414,14 @@
414
414
  .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
415
415
  .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
416
416
  ----------------------------------*/
417
- .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
418
- .ui-tabs .ui-tabs-nav { list-style: none; margin: 0; padding: .2em .2em 0; }
419
- .ui-tabs .ui-tabs-nav li { float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
420
- .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
421
- .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
417
+ .ui-tabs { padding: .2em; zoom: 1; }
418
+ .ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
419
+ .ui-tabs .ui-tabs-nav li { position: relative; float: left; margin: 0 .2em -1px 0; padding: 0; }
420
+ .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
421
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
422
422
  .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
423
423
  .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
424
- .ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
424
+ .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
425
425
  .ui-tabs .ui-tabs-hide { display: none !important; }
426
426
 
427
427
  /*]]>*/
@@ -440,7 +440,7 @@ em, strong, dt {
440
440
  blockquote {
441
441
  color: #333;
442
442
  font-style: italic;
443
- background-image: url(84728784);
443
+ background-image: url(cid:81899006);
444
444
  background-repeat: no-repeat;
445
445
  margin-left: 0;
446
446
  padding-left: 65px;
@@ -473,23 +473,23 @@ h1, h2, h3, h4, h5, h6, .title {
473
473
  font-weight: lighter;
474
474
  font-family: Constantia, "Book Antiqua", "URW Bookman L", serif; }
475
475
 
476
- #__lof__ h1, #__lof__ h2, #__lof__ h3, #__lof__ h4, #__lof__ h5, #__lof__ h6 {
476
+ #_floats h1, #_floats h2, #_floats h3, #_floats h4, #_floats h5, #_floats h6 {
477
477
  margin-top: 1.25em; }
478
478
 
479
- #__doc__ h1, #__doc__ h2, #__doc__ h3, #__doc__ h4, #__doc__ h5, #__doc__ h6 {
479
+ #_document h1, #_document h2, #_document h3, #_document h4, #_document h5, #_document h6 {
480
480
  margin-top: 2.5em;
481
481
  line-height: 1.25em; }
482
- #__doc__ h1 {
482
+ #_document h1 {
483
483
  font-size: 2.0em; }
484
- #__doc__ h2 {
484
+ #_document h2 {
485
485
  font-size: 1.8em; }
486
- #__doc__ h3 {
486
+ #_document h3 {
487
487
  font-size: 1.6em; }
488
- #__doc__ h4 {
488
+ #_document h4 {
489
489
  font-size: 1.4em; }
490
- #__doc__ h5 {
490
+ #_document h5 {
491
491
  font-size: 1.2em; }
492
- #__doc__ h6 {
492
+ #_document h6 {
493
493
  font-size: 1.0em; }
494
494
 
495
495
  table {
@@ -508,28 +508,33 @@ th, td {
508
508
  th {
509
509
  background-color: #F5F5F5; }
510
510
 
511
- #__header__ > .title {
511
+ #_header > .title {
512
512
  font-size: 2.25em; }
513
513
 
514
514
  @media print {
515
- #__header__ .printer_friendly_toggle {
515
+ #_header .printer_friendly_toggle {
516
516
  display: none; } }
517
517
 
518
518
  @media screen {
519
- #__header__ .printer_friendly_toggle {
520
- display: inline; } }
519
+ #_header .printer_friendly_toggle {
520
+ display: inline; }
521
+ #_header .printer_friendly_toggle label:hover {
522
+ cursor: pointer; } }
521
523
 
522
- #__abstract__ {
524
+ #_abstract {
523
525
  margin-bottom: 5em; }
524
526
 
525
- #__toc__ ul > li {
527
+ #_contents ul > li {
526
528
  list-style-type: none; }
527
- #__toc__ li ul {
529
+ #_contents li ul {
528
530
  padding-bottom: 1em; }
529
- #__toc__ > ul {
531
+ #_contents > ul {
530
532
  padding-left: 1em; }
531
533
 
532
- #__footer__ {
534
+ #_references > ol > li {
535
+ margin-bottom: 1em; }
536
+
537
+ #_footer {
533
538
  padding-top: 1em;
534
539
  text-align: center;
535
540
  margin: auto; }
@@ -541,25 +546,19 @@ th {
541
546
  display: block;
542
547
  margin-top: 0.25em; }
543
548
 
544
- .paragraph > .title, .tip > .title, .note > .title, .caution > .title, .warning > .title, .important > .title, .figure > .title, .table > .title, .example > .title, .equation > .title, .procedure > .title {
545
- font-size: large;
546
- margin-top: 2em; }
547
-
548
- .tip, .note, .caution, .warning, .important, .figure, .table, .example, .equation, .procedure {
549
- margin: 3em; }
550
-
551
- .tip .nav, .note .nav, .caution .nav, .warning .nav, .important .nav, .figure .nav, .table .nav, .example .nav, .equation .nav, .procedure .nav {
552
- margin-right: -3em; }
549
+ .paragraph > .title {
550
+ font-size: large; }
553
551
 
554
- .tip > .content, .note > .content, .caution > .content, .warning > .content, .important > .content, .figure > .content, .table > .content, .example > .content, .equation > .content, .procedure > .content {
552
+ ._float > .title {
553
+ font-size: large; }
554
+ ._float > .content {
555
555
  min-height: 48px; }
556
-
557
- .tip > .content > .icon, .note > .content > .icon, .caution > .content > .icon, .warning > .content > .icon, .important > .content > .icon {
558
- float: left;
559
- margin-top: 0;
560
- margin-right: 1em;
561
- margin-bottom: 1em;
562
- margin-left: 0; }
556
+ ._float > .content > .icon {
557
+ float: left;
558
+ margin-top: 0;
559
+ margin-right: 1em;
560
+ margin-bottom: 1em;
561
+ margin-left: 0; }
563
562
 
564
563
  .figure > .title {
565
564
  text-align: center; }
@@ -575,7 +574,10 @@ th {
575
574
  padding: 0.5em;
576
575
  background-color: #FFFFFF; }
577
576
 
578
- #__body__, #__abstract__ > .title, #__toc__ > .title, .part > .title, .chapter > .title, .section > .title, .paragraph > .title, #__bib__ > .title {
577
+ #_loading:before {
578
+ content: "Loading..."; }
579
+
580
+ #_body, #_abstract > .title, #_contents > .title, .part > .title, .chapter > .title, .section > .title, #_references > .title {
579
581
  display: none; }
580
582
 
581
583
  .tabs {
@@ -587,6 +589,9 @@ th {
587
589
  .ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
588
590
  cursor: pointer; }
589
591
 
592
+ li > p:first-child {
593
+ display: inline; }
594
+
590
595
  tt {
591
596
  background-color: #F0F8FF; }
592
597
 
@@ -597,8 +602,11 @@ pre {
597
602
  background-color: #F5FFDF;
598
603
  padding: 1em;
599
604
  display: inline-block;
600
- margin: 0;
601
- min-width: 92.5%; }
605
+ min-width: 95%;
606
+ margin: 0; }
607
+
608
+ ins ~ div {
609
+ margin-top: 1.5em; }
602
610
 
603
611
  code.para {
604
612
  cursor: text;
@@ -625,37 +633,60 @@ a {
625
633
  a:visited {
626
634
  color: #800080; }
627
635
  a[href]:not([href^="#"]) {
628
- background: url(84731990);
636
+ background: url(cid:82357576);
629
637
  background-position: center right;
630
638
  background-repeat: no-repeat;
631
639
  padding-right: 13px; }
632
640
 
633
- #__header__ > .logo {
641
+ #_header > .logo {
634
642
  text-align: center; }
635
- #__header__ > .title_and_subtitle {
643
+ #_header > .title_and_subtitle {
636
644
  float: left;
637
645
  margin-right: 1.5em; }
638
- #__header__ > .title_and_subtitle .title {
646
+ #_header > .title_and_subtitle .title {
639
647
  margin-top: 0.25em; }
640
- #__header__ > .authors_and_date {
648
+ #_header > .authors_and_date {
641
649
  text-align: right; }
642
- #__header__ > .authors_and_date .authors, #__header__ > .authors_and_date .date {
650
+ #_header > .authors_and_date .authors, #_header > .authors_and_date .date {
643
651
  margin-top: 0;
644
652
  margin-bottom: 0.25em; }
645
- #__header__ > .authors_and_date .date {
653
+ #_header > .authors_and_date .date {
646
654
  font-weight: lighter; }
647
655
 
648
- #__toc__ li ul {
656
+ #_contents li ul {
649
657
  border-left: thick solid #F5F5F5; }
650
- #__toc__ li ul:hover {
658
+ #_contents li ul:hover {
651
659
  border-color: #DCDCDC; }
652
660
 
653
- #__toc__ a:target, #__lof__ a:target {
654
- background: url(84731598);
661
+ #_contents a:target, #_floats a:target {
662
+ background: url(cid:82357212);
655
663
  background-position: center right;
656
664
  background-repeat: no-repeat;
657
665
  padding-right: 20px; }
658
666
 
667
+ .paragraph {
668
+ margin-top: 1.5em;
669
+ margin-bottom: 1.5em; }
670
+ .paragraph > .nav {
671
+ float: left; }
672
+ .paragraph > .title {
673
+ padding-left: 2.5em;
674
+ padding-top: 0.25em; }
675
+
676
+ ._float {
677
+ margin: 1.5em; }
678
+ ._float > .title {
679
+ padding-top: 0.5em;
680
+ padding-left: 1em;
681
+ padding-right: 1em; }
682
+ ._float > .nav {
683
+ position: relative;
684
+ z-index: 1;
685
+ top: 0.25em;
686
+ right: 0.25em; }
687
+ ._float > .content {
688
+ margin: 1em; }
689
+
659
690
  .nav {
660
691
  float: right;
661
692
  clear: right; }
@@ -664,14 +695,40 @@ a {
664
695
 
665
696
  .ui-tabs > .ui-tabs-panel > .nav {
666
697
  position: relative;
667
- margin-top: -3.375em;
668
- margin-right: -1em; }
698
+ margin-top: -3.4em;
699
+ margin-right: -1.25em; }
669
700
 
670
701
  .ui-tabs > .ui-tabs-nav > li:last-child {
671
702
  margin-right: 9em; }
672
703
 
673
- #__nfo__ > table td:first-child, #__nfo__ > .validations {
704
+ .ui-tabs > .ui-tabs-nav > li > a > .section_number {
705
+ display: none; }
706
+
707
+ #_about > table td:first-child, #_about > .validations {
708
+ text-align: center; }
709
+
710
+ #_search_form {
711
+ text-align: right;
712
+ font-weight: normal; }
713
+ #_search_form input {
714
+ margin-top: 0.25em; }
715
+ #_search_form input.initial {
716
+ color: gray;
717
+ font-style: italic; }
718
+ #_search_form #_search_start, #_search_form #_search_stop {
719
+ float: right;
720
+ margin: 0.1625em;
721
+ padding: 0.325em; }
722
+ #_search_form #_search_start:hover, #_search_form #_search_stop:hover {
723
+ cursor: pointer; }
724
+
725
+ #_search > .status {
674
726
  text-align: center; }
727
+ #_search > .results > .result > .excerpt:hover {
728
+ background-color: #FFFFE0;
729
+ cursor: pointer; }
730
+ #_search > .results > .result > .excerpt:hover * {
731
+ cursor: pointer; }
675
732
  /*]]>*/
676
733
  </style>
677
734
 
@@ -713,33 +770,39 @@ a:after {
713
770
  font-weight: normal;
714
771
  font-size: smaller; }
715
772
 
716
- .tabs > ul, .nav, #__lof__, #__nfo__ {
773
+ .tabs > ul, .nav, #_floats, #_about, #_search {
717
774
  display: none; }
718
775
 
719
- #__toc__, .part, .chapter, #__bib__ {
776
+ #_contents, .part, .chapter, #_references {
720
777
  page-break-before: always; }
721
778
 
722
- #__header__, #__footer__ {
779
+ #_header, #_footer {
723
780
  text-align: center; }
724
781
 
725
- #__header__ > .authors_and_date > .authors {
782
+ #_header > .authors_and_date > .authors {
726
783
  margin-top: 1.625em;
727
784
  margin-bottom: -0.25em; }
728
785
 
729
- .header_outside_above, #__header__, .header_outside_below, .logo {
786
+ .header_outside_above, #_header, .header_outside_below, .logo {
730
787
  margin-bottom: 5em; }
731
788
 
732
- .footer_outside_above, #__footer__, .footer_outside_below, #__bib__, #__nfo__ {
789
+ .footer_outside_above, #_footer, .footer_outside_below, #_references, #_about {
733
790
  margin-top: 5em; }
734
791
 
735
- #__header__ .header_inside_above, #__footer__ .footer_inside_above {
792
+ #_header .header_inside_above, #_footer .footer_inside_above {
736
793
  margin-bottom: 4em; }
737
794
 
738
- #__header__ .header_inside_below, #__footer__ .footer_inside_below {
795
+ #_header .header_inside_below, #_footer .footer_inside_below {
739
796
  margin-top: 4em; }
740
797
 
741
798
  .part > .title > big, .chapter > .title > big {
742
799
  padding-bottom: 0.5em; }
800
+
801
+ .paragraph > .title {
802
+ margin-top: 2em; }
803
+
804
+ ._float {
805
+ margin: 3em; }
743
806
  /*]]>*/
744
807
  </style>
745
808
 
@@ -786,6 +849,18 @@ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.bro
786
849
  * ui.core.js
787
850
  */
788
851
  (function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
852
+ * jQuery UI Progressbar 1.7.2
853
+ *
854
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
855
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
856
+ * and GPL (GPL-LICENSE.txt) licenses.
857
+ *
858
+ * http://docs.jquery.com/UI/Progressbar
859
+ *
860
+ * Depends:
861
+ * ui.core.js
862
+ */
863
+ (function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/*
789
864
  * jQuery UI Effects 1.7.2
790
865
  *
791
866
  * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
@@ -808,26 +883,57 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
808
883
  */
809
884
  (function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;
810
885
  $(function() {
811
- /*
812
- %< File.join(ERBook::INSTALL, 'LICENSE')
813
- */
886
+ /*(the ISC license)
814
887
 
815
- //
816
- // respond to changes in window location
817
- //
818
- var $last_hash = null;
888
+ Copyright 2006 Suraj N. Kurapati <sunaku@gmail.com>
819
889
 
820
- function on_hash_change() {
821
- var curr_hash = window.location.hash;
890
+ Permission to use, copy, modify, and/or distribute this software for any
891
+ purpose with or without fee is hereby granted, provided that the above
892
+ copyright notice and this permission notice appear in all copies.
822
893
 
823
- if (curr_hash && curr_hash != $last_hash) {
824
- $last_hash = curr_hash;
825
- reveal_hash(curr_hash);
894
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
895
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
896
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
897
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
898
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
899
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
900
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
901
+ */
902
+ "use strict";
903
+
904
+ //--------------------------------------------------------------------------
905
+ // utility logic
906
+ //--------------------------------------------------------------------------
907
+
908
+ //
909
+ // Returns the tab corresponding to the
910
+ // given panel in the given tabs widget.
911
+ //
912
+ function tab_by_panel(panel, tabs_widget) {
913
+ if (!tabs_widget) {
914
+ tabs_widget = panel.parent('.ui-tabs');
826
915
  }
827
916
 
828
- setTimeout(on_hash_change, 300);
917
+ return tabs_widget.find(
918
+ '.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
919
+ ).parent('li');
920
+ }
921
+
922
+ //
923
+ // Returns a jQuery element containing a jQuery UI icon of the given name.
924
+ //
925
+ function ui_icon(name) {
926
+ return $('<div/>').addClass('ui-state-default ui-corner-all').append(
927
+ $('<span/>').addClass('ui-icon ui-icon-' + name)
928
+ );
829
929
  }
830
930
 
931
+ //--------------------------------------------------------------------------
932
+ // document location
933
+ //--------------------------------------------------------------------------
934
+
935
+ var $last_hash;
936
+
831
937
  //
832
938
  // Sets the location bar hash to the given value.
833
939
  //
@@ -836,14 +942,12 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
836
942
  // the element corresponding to the given hash.
837
943
  //
838
944
  function set_hash(hash, prevent_jump) {
839
- if ($last_hash == hash) {
945
+ if (hash === $last_hash) {
840
946
  return;
841
947
  }
842
948
 
843
- var set_the_hash = function() {
844
- //
949
+ function set_the_hash() {
845
950
  // XXX: bypass on_hash_change() by setting $last_hash
846
- //
847
951
  window.location.hash = $last_hash = hash;
848
952
  }
849
953
 
@@ -876,7 +980,7 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
876
980
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
877
981
  // THE SOFTWARE.
878
982
  //
879
- // This plugin is documented at:
983
+ // The jQuery.LocalScroll plugin is documented at:
880
984
  //
881
985
  // http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
882
986
  //
@@ -884,12 +988,11 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
884
988
  //
885
989
  // http://flesler-plugins.googlecode.com/svn/trunk/jquery.localScroll/jquery.localScroll.js
886
990
  //
991
+
887
992
  var target_id = target.attr('id');
888
993
 
889
- //
890
994
  // temporarily place a dummy element at the current
891
995
  // screen position and give it the ID of the target
892
- //
893
996
  var original_screen_position = $(window).scrollTop();
894
997
 
895
998
  var dummy = $('<span/>').attr('id', target_id).css({
@@ -899,26 +1002,17 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
899
1002
 
900
1003
  target.removeAttr('id').before(dummy);
901
1004
 
902
- //
903
1005
  // when we set the hash, the browser will jump to the
904
1006
  // dummy, which is where the browser screen currently
905
1007
  // is, and therefore the jump will not be visualized!
906
- //
907
- console.log($(window).scrollTop())
908
- console.log(target)
909
1008
  set_the_hash();
910
- console.log($(window).scrollTop())
911
1009
 
912
- //
913
1010
  // undo the temporary changes
914
- //
915
1011
  dummy.remove();
916
1012
  target.attr('id', target_id);
917
1013
 
918
- //
919
1014
  // the above approach does not work for Opera and IE.
920
1015
  // they ignore the dummy and jump to the actual target
921
- //
922
1016
  $(window).scrollTop(original_screen_position);
923
1017
 
924
1018
  return;
@@ -928,35 +1022,19 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
928
1022
  set_the_hash();
929
1023
  }
930
1024
 
931
- //
932
- // Returns the tab corresponding to the
933
- // given panel in the given tabs widget.
934
- //
935
- function tab_by_panel(panel, tabs_widget) {
936
- if (!tabs_widget) {
937
- tabs_widget = panel.parent('.ui-tabs');
938
- }
939
-
940
- return tabs_widget.find(
941
- '.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
942
- ).parent('li');
943
- }
944
-
945
1025
  //
946
1026
  // Reveals the element at the given hash by (1) activating all
947
1027
  // tabs that contain it, (2) smoothly scrolling to it, and (3)
948
1028
  // updating the hash in the browser's location bar accordingly.
949
1029
  //
950
- function reveal_hash(hash) {
951
- var target = $(hash);
1030
+ function reveal(hash_or_elem, callback) {
1031
+ var target = $(hash_or_elem);
952
1032
 
953
1033
  if (target.length) {
954
1034
  var target_is_panel = target.is('div') &&
955
1035
  target.parent('.ui-tabs').length;
956
1036
 
957
- //
958
1037
  // reveal all tabs which contain the target
959
- //
960
1038
  if (target.is(':hidden')) {
961
1039
  var panels = target.parents('.ui-tabs > div:hidden').get().reverse();
962
1040
 
@@ -964,28 +1042,30 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
964
1042
  panels.push(target);
965
1043
  }
966
1044
 
967
- for (var i in panels) {
968
- var panel = $(panels[i]);
1045
+ $(panels).each(function() {
1046
+ var panel = $(this);
969
1047
  var tabs_widget = panel.parent('.ui-tabs');
970
1048
  var selected_index = tabs_widget.tabs('option', 'selected');
971
1049
 
972
- //
973
1050
  // map the panel to its tab because tabs do not
974
1051
  // have to be in the same order as their panels
975
- //
976
1052
  var tab = tab_by_panel(panel, tabs_widget);
977
1053
  var wanted_index = tab.prevAll('li').length;
978
1054
 
979
- if (wanted_index != selected_index) {
1055
+ if (wanted_index !== selected_index) {
980
1056
  tabs_widget.tabs('select', wanted_index);
981
1057
  }
982
- }
1058
+ });
1059
+ }
1060
+
1061
+ // scroll to nearest visible element if the target
1062
+ // is naturally hidden (e.g. because of a CSS rule)
1063
+ if (target.is(':hidden')) {
1064
+ target = target.closest(':not(:hidden)');
983
1065
  }
984
1066
 
985
- //
986
1067
  // scroll to the tab bar instead of the target
987
1068
  // because it contains the title for the target
988
- //
989
1069
  var scroll_target = target;
990
1070
 
991
1071
  if (target_is_panel) {
@@ -996,73 +1076,290 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
996
1076
  }
997
1077
  }
998
1078
 
999
- var scroll_offset = scroll_target.offset().top;
1079
+ var scroll_offset = Math.floor(scroll_target.offset().top);
1000
1080
 
1001
- //
1002
1081
  // set body height so that any element can be
1003
1082
  // brought to the top of the screen via scrolling
1004
- //
1005
1083
  var document_height = $(document).height();
1006
1084
  var window_height = $(window).height();
1007
1085
  if (document_height - scroll_offset <= window_height) {
1008
1086
  $('body').css('min-height', document_height + window_height);
1009
1087
  }
1010
1088
 
1089
+ var pending = true;
1011
1090
  $('html, body').animate(
1012
1091
  { scrollTop: scroll_offset }, 'slow', 'swing', function() {
1013
- set_hash(hash, target_is_panel);
1092
+ // prevent the body of this function from being
1093
+ // executed twice -- because there are 2 target
1094
+ // elements in the animation list and only one
1095
+ // of them actually works in different browsers!
1096
+ if (pending && scroll_offset === $(window).scrollTop()) {
1097
+ pending = false;
1098
+
1099
+ var target_id = target.attr('id');
1100
+ set_hash('#' + (target_id || '_reveal' + Math.random()),
1101
+ target_is_panel || !target_id);
1102
+
1103
+ if (callback && typeof(callback) === 'function') {
1104
+ callback();
1105
+ }
1106
+ }
1014
1107
  }
1015
1108
  );
1016
1109
  }
1017
1110
  }
1018
1111
 
1019
- //
1020
- // create jQuery UI tabs
1021
- //
1022
- $('.tabs').tabs();
1112
+ //--------------------------------------------------------------------------
1113
+ // search engine
1114
+ //--------------------------------------------------------------------------
1115
+
1116
+ // Adapted from the source code of the ":contains" selector from
1117
+ // the "Search on this Page" plugin by Waldek Mastykarz
1118
+ // <http://blog.mastykarz.nl>, which was (1) published online on
1119
+ // 17 November 2008 at <http://www.endusersharepoint.com/?p=951>
1120
+ // and <http://blog.mastykarz.nl/search-page-jquery/>, and was
1121
+ // (2) updated to work with jQuery 1.3 by "anonymous" here:
1122
+ // <http://stackoverflow.com/questions/187537>.
1123
+ jQuery.expr[':'].matches = function(a, i, m) {
1124
+ // compile the regexp during the first call to this
1125
+ // function only, so that subsequent calls are fast
1126
+ if (typeof(m[3]) === 'string') {
1127
+ m[3] = new RegExp(m[3], 'i');
1128
+ }
1129
+ return jQuery(a).text().match(m[3]);
1130
+ };
1131
+
1132
+ $('.tabs:first > ul').append(
1133
+ $('<li/>').append(
1134
+ $('<a/>').attr('id', '_search_link').attr('href', '#_search').
1135
+ text("Search")
1136
+ ).hide()
1137
+ ).append(
1138
+ $('<form/>').attr('id', '_search_form').append(
1139
+ $('<input/>').attr('type', 'text').attr('name', 'q').
1140
+ addClass('initial').attr('title', "Search with regular expression").focus(function() {
1141
+ var box = $(this);
1142
+
1143
+ if (box.is('.initial')) {
1144
+ box.val('').removeClass('initial');
1145
+ }
1146
+ }).blur(function() {
1147
+ var box = $(this);
1023
1148
 
1024
- //
1025
- // make internal hyperlinks reveal their targets when clicked
1026
- //
1027
- $('a[href^=#]').click(function() {
1028
- var link = $(this);
1029
- var hash = link.attr('href');
1149
+ if (! box.val().match(/\S/)) {
1150
+ box.val(box.attr('title')).addClass('initial');
1151
+ }
1152
+ }).blur()
1153
+ ).append(
1154
+ ui_icon('search').attr('id', '_search_start').click(function() {
1155
+ $('#_search_form').submit();
1156
+ })
1157
+ ).append(
1158
+ ui_icon('cancel').attr('id', '_search_stop').hide().click(function() {
1159
+ $(this).attr('clicked', 'clicked');
1160
+ })
1161
+ ).submit(function(event) {
1162
+ event.preventDefault();
1030
1163
 
1031
- if (link.parent('li').parent('.ui-tabs-nav').length) {
1032
- // tab clicks should not cause the screen to scroll
1033
- set_hash(hash, true);
1034
- }
1035
- else {
1036
- reveal_hash(hash);
1037
- }
1164
+ var search_box = $(this).find(':text');
1165
+ var query = search_box.val().replace(/^\s+|\s+$/g, '');
1038
1166
 
1039
- return false;
1040
- });
1167
+ // ignore empty queries
1168
+ if (search_box.is('.initial') || !query.match(/\S/)) {
1169
+ return;
1170
+ }
1041
1171
 
1042
- //
1043
- // checkbox for printer friendly stylesheet
1044
- //
1045
- $('#__header__ > .authors_and_date').append(
1172
+ // detect invalid regexps
1173
+ try {
1174
+ new RegExp(query);
1175
+ }
1176
+ catch(e) {
1177
+ alert(e);
1178
+ return;
1179
+ }
1180
+
1181
+ // one search at a time
1182
+ if (search_box.attr('disabled')) {
1183
+ return;
1184
+ }
1185
+
1186
+ search_box.attr('disabled', 'disabled');
1187
+
1188
+ // begin the search
1189
+ var status = $('#_search > .status');
1190
+ var results = $('#_search > .results');
1191
+
1192
+ // display the search results tab
1193
+ $('#_search_link').click().parent().show();
1194
+
1195
+ // clear previous search results
1196
+ results.text('');
1197
+ status.text("Searching...");
1198
+
1199
+ // timeout allows status updates to appear
1200
+ setTimeout(function() {
1201
+ var num_results = 0;
1202
+
1203
+ function emit_result(match) {
1204
+ // exclude matches from previous search results,
1205
+ // the table of contents, and jQuery UI tab bars
1206
+ if (match.closest('#_search, #_contents, .ui-tabs-nav').length) {
1207
+ return;
1208
+ }
1209
+
1210
+ var excerpt;
1211
+
1212
+ // resolve tab panels into their section title
1213
+ // because additional matches, which lie within
1214
+ // the content of these tab panels, will come
1215
+ if (match.is('.ui-tabs-panel')) {
1216
+ excerpt = match.find('.title:first').clone().show();
1217
+ }
1218
+ else {
1219
+ excerpt = match.clone();
1220
+ }
1221
+
1222
+ // highlight the query inside the match excerpt
1223
+ excerpt.html(excerpt.html().replace(
1224
+ new RegExp('(<[^>]*)?(' + query + ')', 'ig'),
1225
+ function($0, $1, $2) {
1226
+ // only highlight if not inside an XML tag literal
1227
+ return $1 ? $0 :
1228
+ '<span class="ui-state-error">' + $2 + '</span>';
1229
+ }
1230
+ ));
1231
+
1232
+ num_results += 1;
1233
+ var result = $('<li/>').addClass('result').append(
1234
+ $('<blockquote/>').addClass('excerpt').append(excerpt)
1235
+ ).attr('id', '_search' + num_results).click(
1236
+ function(event) {
1237
+ event.stopPropagation();
1238
+
1239
+ // save this search result's hash in browser history
1240
+ // before revealing the matching element so that
1241
+ // the user can press the back button to return to
1242
+ // this exact spot in the search results listing
1243
+ reveal(this, function() {
1244
+ if (!$(event.target).is('a')) {
1245
+ reveal(match);
1246
+ }
1247
+ });
1248
+ }
1249
+ );
1250
+
1251
+ // show bread-crumb trail for the match
1252
+ var first = true;
1253
+ match.parents('.ui-tabs-panel').each(function() {
1254
+ var panel = $(this);
1255
+ var tab = tab_by_panel(panel);
1256
+
1257
+ if (tab.length) {
1258
+ if (!first) {
1259
+ result.prepend(' &rang; ');
1260
+ }
1261
+ first = false;
1262
+
1263
+ result.prepend(tab.find('a').clone());
1264
+ }
1265
+ });
1266
+
1267
+ results.append(result);
1268
+
1269
+ // unhide any hidden elements in the search result
1270
+ result.find(':hidden').removeClass('ui-tabs-hide').show();
1271
+
1272
+ // remove tab bars (used for titles) and mini navigation menus
1273
+ result.find('.ui-tabs-nav, .ui-tabs-panel > .nav').remove();
1274
+ };
1275
+
1276
+ var matching_elems = $('#_body').
1277
+ find(':matches("'+ query.replace(/"/, '\\"') +'")');
1278
+
1279
+ status.text('').progressbar();
1280
+ var start_button = $('#_search_start').hide();
1281
+ var stop_button = $('#_search_stop').show();
1282
+
1283
+ var prev_match;
1284
+ var prev_elem;
1285
+
1286
+ function process_match(i, n) {
1287
+ status.progressbar('value', Math.round(i / n * 100));
1288
+
1289
+ var elem = matching_elems.eq(i);
1290
+
1291
+ // ascend to a larger container for more context
1292
+ var match = elem.closest('pre,ul,ol,dl,table,p,div');
1293
+ if (!match.length) {
1294
+ match = elem;
1295
+ }
1296
+
1297
+ if (
1298
+ prev_match && prev_match.length &&
1299
+ match.get(0) !== prev_match.get(0) && // unique matches only
1300
+ elem.parent().get(0) !== prev_elem.get(0) // leaf nodes only
1301
+ ) {
1302
+ emit_result(prev_match);
1303
+ }
1304
+
1305
+ prev_elem = elem;
1306
+ prev_match = match;
1307
+
1308
+ if (i < n && !stop_button.attr('clicked')) {
1309
+ // timeout allows status updates to appear
1310
+ setTimeout(function() { process_match(i + 1, n); }, 0);
1311
+ }
1312
+ else {
1313
+ // handle the last item in this two-stage prev/curr loop
1314
+ if (prev_match && prev_match.length) {
1315
+ emit_result(prev_match);
1316
+ }
1317
+
1318
+ status.progressbar('destroy').text("0 results".replace('0', num_results));
1319
+
1320
+ search_box.removeAttr('disabled');
1321
+ stop_button.hide().removeAttr('clicked');
1322
+ start_button.show();
1323
+ }
1324
+ }
1325
+
1326
+ process_match(0, matching_elems.length);
1327
+
1328
+ }, 0);
1329
+
1330
+ return false;
1331
+ })
1332
+ ).after(
1333
+ $('<div/>').attr('id', '_search').append(
1334
+ $('<p/>').addClass('status')
1335
+ ).append(
1336
+ $('<ol/>').addClass('results')
1337
+ )
1338
+ );
1339
+
1340
+ //--------------------------------------------------------------------------
1341
+ // create print preview toggle
1342
+ //--------------------------------------------------------------------------
1343
+
1344
+ $('#_header > .authors_and_date').append(
1046
1345
  $('<span/>').addClass('printer_friendly_toggle').append(
1047
- $('<input/>').attr('type', 'checkbox').click(function() {
1346
+ $('<input/>').attr('type', 'checkbox').
1347
+ attr('id', 'printer_friendly_toggle').click(function() {
1048
1348
  var checkbox = $(this);
1049
1349
 
1050
1350
  function change_media(src, dst) {
1051
1351
  var styles = $('style[media="'+ src +'"]');
1052
1352
  if (styles.length) {
1053
- //
1054
1353
  // try changing the media in-place
1055
- //
1056
1354
  var before = checkbox.offset();
1057
1355
  styles.attr('media', dst);
1058
1356
  var after = checkbox.offset();
1059
1357
 
1060
- if (after.top == before.top && after.left == before.left) {
1061
- //
1358
+ // but if that did not work
1359
+ if (after.top === before.top && after.left === before.left) {
1062
1360
  // try reinserting the <style> into document.
1063
1361
  // this works in Webkit browsers, which ignore
1064
1362
  // the in-place changing approach tried above.
1065
- //
1066
1363
  styles.each(function() {
1067
1364
  var style = $(this);
1068
1365
  var parent = style.parent();
@@ -1084,21 +1381,25 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1084
1381
  }
1085
1382
 
1086
1383
  return true;
1087
- })
1088
- ).append(" Printer friendly")
1384
+ }).css('margin-right', '0.3em')
1385
+ ).append(
1386
+ $('<label/>').attr('for', 'printer_friendly_toggle').
1387
+ text("Printer friendly")
1388
+ )
1089
1389
  );
1090
1390
 
1091
- //
1092
- // activate embedded data URIs
1093
- //
1094
- var data_uri_by_embed_uri = {"84731990":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC","84731598":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIkSURBVDiNjZJNSxtRFIbfc+cjmZkkfjSCEFuQtghCwUWj0KXb/IQs3GlBKBQ3waWLoNBfIBSkJYI/ILsupIsuGrIqLQGRoEak6KLNmExzZ+aeLuJMZ4oLz+7e97nPORwuMTMeUvOVvTrAW0TUZua1brN2AgAUCVZeH9aZeUsToh2Eaq21Xz3593h3U9P1vcKjojPyPDV0+z0wL3abtYEAgOWNxmYmY7x5ufTMnCsVV4QQn8rrDSduT7STny46mm7AzheEputTAFYBQIxz2llceOxYVgZP5maEbZkxMF/ZnQVg64YR+8xM1gbwCgBEeb0xC8B27GwMTE7mbKIxAKCsG8YouQ/dNDUiEU9QzjnZFFDIWZqmaauRwDAzuf8EYFYvYsFEwUkB+ZyFMBwDADwAKpmzYoDIiwQeM6eAMFQggnd37ARSDpN54EsQqB0JOreDPynAHXgQQrRjQeBrKYGUklkdA4AOoDMcjlKA63oyCMLju+MpK2XfXF4kERPA10hwKv3A/vzl+71At1mTAFINkkUP+crzld0egFLiyu82a2Y0AZY3DnvMnAJa+1Uz7kJ0npuaLmUsG74coX9zfRVlOgBogs6fPy2VZooT6LtDfPtxdpWQgZkPPLe/JDTdGvb7koGjKBMAEITq4OLyxnNvPZxdXEtmPkK6PgS+/+739c9bX47eg7me2kF5vZElom0Ab4noo1Jqu7Vf/XXPLkS3WUv9mb/vR+THZPMfuQAAAABJRU5ErkJggg==","84731220":"data:image/png;base64,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","84730758":"data:image/png;base64,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","84730296":"data:image/png;base64,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","84729764":"data:image/png;base64,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","84729302":"data:image/png;base64,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","84728784":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU3SURBVGiB7VlPaBRXHP5+82aTSLIrkY3YJR68VmuSPXlRPPQPGg05iD14sZfEUkpbPJQqQVJs0yQlkEDobaE9CaloTlI0InhYNOBi2yAFT0JxZW2ysn/cmTczvx4ym+7Ozs7uzK6kQj54zOzvzbz3fe/3583MEjPjbYay3QRaxY6A7caOgO2G2uoAExMTB4QQVy3LGrEsq+XxnFAUpcDMCVVVv71y5Ure2d/yhKqqLgwPDw8PDg6SEMLzWj8lu3ytlLLr9u3bXzx48OAlgJma+f3Rrcb4+HgoGo1+FI/HSUoJKWVDQpXnThsR1fSHQiEcP36849GjR2NtFxCLxYSu64qiKDBNsyXyAGBZVo3NNE2EQiEA2OU2dttj1gkvwn766+GNCvAi50eQF96IgCCrHVRQ2wW0Sq7tHhgfHw/FYrF69bELAAzDgGEYvsipqtoU+cA5MDExcUBV1Z/27t37vld97+rqEtPT056TOCGlRF9fH44dO4b9+/cHTmDAQ4AQ4uqpU6c+jMfj5Itdk0in07h27RrOnz+/ZWurByzLGjl8+DBpmlZVn5tBo/AhIuzbtw+GYSCfz6OnpycQ+UYCVCEEDMNoG/GKscHM6O7ursodv+Q9BfhBOypL0ErUsoBmCDda2WbKLTO75mJgAX43paB7QYWdiIjYsQK+X2gqB3WbqFmbc0wvQfZvBUC3815fHggaLl4hREQgoq1KV36kLh/LhYSZNQCdAKpeapoS0I5wqSciEokgEokgm80CAHbv3g0hxNY1hmHg3r17xvr6+q9u3BoKCLrCzfRJKTE3N2devHhRhMNh5HI5qKqKyclJSCl1+7bSxsbG8srKys8AXgcS4IzddnmEiEpPnjz5anFxcebChQvhPXv2AAA0TeOFhYUjxWJRBWAAKADYcBPQVBK3kqxeNgD86tWr35PJ5Oj8/PxGMpnUmRnRaLR09uzZAQAv7ZYB8I+zAgFtDiG/HiEi7u3tzV+/fn0tm82+p+v6lw8fPvyso6Ojo7+///uDBw8eWltbKwKo+7Ld0AOVIeRczRZXHwAgpRQA1GQy+Xp2dva7W7duHXr+/HnCNM2+EydOfAqAsLnQgohUIqri/EZDyE20Y1wqFoudAEI2SfXOnTvZqampr58+fTrAzO+cPn26z+ap2GIUKtdY1AkhIlIvX75cQ8rt6MfmNlWpVOqyyVU+8vLS0tLfAL5x2AGgasB6OdBJRKZpmnB+MqncdCptdlWpjO8tmxOKokBRFORyOWiaxrYAaZOz7GP53Ko4N5m5avIaAUQkAKi6rv+WSqVG4/G4UvlGJqVEPp+HEAKRSKSOfm9YloVnz56hUCi8XF1dTdvkpIN8pQDLrQK5CijrSCaT05ZldS4vL3/AzAIADQ0NWaOjoyoRIRwO4+7du3JlZUXA4dZGsPPhz8ePH/8AQLPb6zLxemRdibo8mxCAHrt1A+gAwGfOnDly7ty5xZGRkV0AsLq6Km/cuLGWSCQ+yWQymh8B+C8hS9jcpHLMXPPhthnUeICZmYh0bK4KAdABcCwWG+jv71dN08TNmzdLqVTqr6WlpY8zmUzN7uhDgG6LKAYhD7h4YKuDqBObn03EyZMno4ODg38cPXpUSaVShRcvXkwmEolfcrlc/Q+i3ignlQ6gyMxBx6m/EzOzZntCDAwM/AgA9+/fn02n01OJRKIQdEIbyuYUwYmXUdcDZVy6dOldZv7cNM3JmZmZdKsTth3OXdPZxsbGQo2u2c7W0AP/d7z1f/LtCNhu7AjYbrz1Av4F8/cV1apw1zkAAAAASUVORK5CYII=","84728322":"data:image/png;base64,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","84727874":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJOgAACToB8GSSSgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAS1SURBVFiF7ZddbBRVFMf/596Z3W3rtiwtUFsJFQhWMQSIWi0UKJHPlISvCGpiogkxig8SlBSj0Rij6YMPJhB9IyZqTFRC4pNKAgElplSIsRURRL6xtLRLu53dmbn3Hh9mFrZ1Kcs2pi9McnJndu8953c+7rkzxMwYz0uMq/W7AACssSpofo2qlJQfW6X66QNvs7rT9WOKQNP22Kz4xNqOadX1y1CkM0UDLH7dXlo3ddahV9a9O62m6n6/WD1FUS9qtbbMe6i5bUXDxkR/5h+AijVfBEBTa+TD1Q3PbJlX3xQ/39eFeKyyeOt3AvDIi2THJsivn1u5fUXt5LroxeRJMBjA2BoZFdIJm7fRBHFP+f4tLTvnRksism/oCjQrKOOjIlaFgWTSOX3pj0FmRiAGBszMBgyG1gqdZ38+cvh9tWGk7ttG4IltJXWTJtbsf37NjulplaSeVDeYDTRrGKMw6PahrKK89OH43FJjVAimYFhBax/aKFRXTEfn3+2T8+kfFaDpjUhD3X0z9m5e9lJNz9A5eCoDRughGxhoeF4ag+41aKOgtA9tfCgzfCwvmXRLG7cEWNRqbZ5d9+iulY2bKi8ku6CMAhGBmQFigAIAIzTYaLBQYFYwRsGwzhGD0eokL0DTzug7jXNWvjq/fkHFqd6jAANEwV4jQQEAgvwaykIoMGmwMGCjoTkACUZTOMDCndaelsZnn5oyubr0VE87iAQIBCKCEHRjyxOFBcY+UqofQ24SaX8IMACMALGEhRKAGYZ14QAEOL3XL2urzCDpdKMsloCAgLAEBBG0ceF4STg6ibRKwtVDYV0w2ABGM4xmaMUwiiE4ghnevFB1AQCHP1BbF7dG/pw+MPutWTNnVnZc/A5CANFoDBAaWmQgJUFIAkmCsAPdzATWDKIcUwwo30VGOQCDiEgyDw9H3rPgUJu/u/PEby8cO97R3TB1DWw7AtcMQlEGQhKERRA2QVqhhPfCDv4bBigDGmYIABEikqMCEJEAYHXs0ge62i+tPXjk+/Pz713FidIpECJQPsywLSAtcQNCWrnGEdTNzeBbACyim7/k2wUiFHlir//X4LneFtfd9+Xy5pYHrnKX7PXOQsjQS4tQYpcjEa0J8m+CvGvF0L4JR0ZpJA4wKEc3Idybt+uEdPEX9F0/l1rvet988uSS1Y+XJxKxC86vAYQlUFlWC75alT5/+kImaMPgoMOb4KQwxNdwlJlNb14DI8+CMEeRUOyc0X5sq/3mwgWN62vrE/HTqUOQNqEmXo8zR5z+z3Yc35BJwgGgAPiheCPus88uh4b/UwNhlepQ0TBp3+2/d/CHn9p+bz/TP2fialgyEuRYgEnCAZAB4OYYG6lDA/A4x+tbpWDkG07Q+gB9bI/63OvvOjXgDHy0fMWq6hRdBsNhIZEOAfI5kI1Chnl4W8wLEBJ6RGSyhsO5EoDs3Kd/TCUvrXOcb7/YuHZTHXE3ywgcAOlwfnbNDa9Hen67CGRBFAAV1oWdBQAgzh70T7rXe5pd79OvonbJg5E4hsII5AJ4AHQ+wwUB5IBkw4pwDwsAdOU4UiQGl8xc6r3cK3AtnMPBksK++Qp6I/o/r3H/MroL8C8JiYMXQa6AIwAAAABJRU5ErkJggg==","84727398":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJOgAACToB8GSSSgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASrSURBVFiF7ZdtaFZlGMd/133O2dgcmunUZDgzzIYvJIH2wU2UtDKKXkCCLIqiDyIWZfhCEYIRCUIgUvYhApMKKoUMDd9ymagzNHTGZNlSp5tz0z17e55zzn1ffXjOo8/WZuqH+SEfuLgOPPc5/9/1v677PhxRVW7nz9xW9TsAtwowZ7X4Ve/4i24bAFcoKb173MZH3h2yY8FSKRx8AGDqhBnpt57/eJ43aszhqqVSOugATh1i1Cx+ZvW0svEVNbNWFE4eVABVR1d4mfOpehY9+kb5tAkz9lSu8J8cNACnjshGpOMOTrcdY/7Dz42a/eBTmyqXFy6/medIfydh1Ur/64pxM+cGnq8igogICCJylXtieUXJsGF3FbV2NeLUouoYM3QCF1uaurfu//zb6oLoFX1f3S0BVK4q2PPmwg/mXOo6h4jBE58siMHINdNS6VbSUReKw6nDOcvw4tH4tij6ZvdnB21rasHeDdp5PQB/oD+6wxSN7acScYMRL8kCJE4IqCqqDtUsRHNHA8XB0OCFx5bM2rL3iyOz35Z5+9bp2YF0BpwBq5bYhkQuQ+ySbDPZTAYrIY4MTrLXlpBYM8Q25HJPMw1Xjsqzc1+aVFY26UDlqoKZNw3gXEzswiyEzYrHZHAS4gixksFKhJMIJyFWQjKuk/boIq1djbR0nuXYhd3Mnvl42eTxD22rXO6/2J/OgC2wGhO5ECMeBoPxPXwEMMk8CKHtpjPTRmfUTjrsxFqLs4qLFRtnZ6vxSh3Tx88fOaxk2PqqlYUV1R9mVt0QQCbupivTjmd8giDAOEirRV1M5Hrose3EGmYXK4gPngi5jaKAi5XQprmQqqe0ZGKh58mUG3NAkY50G80dfyEGvMDg+YLnC8YXjCcYD7zcjlAQp7icuCbhlIpRs4hSfuqnmu+/PLDWLmFNb6l/zYCIeFwdczBGMIasaALh+YIXGPxA8APBC6Q3oC/4vseM8idoOdfe9uuhXe8dWGuXAd51HcgeOHiqWQAREC9X8bXwEhfEZDnVKbndqQoFUszU0fM4WHOo6dSxhsW/b3bViZaKiNW8w6dvCwzgoUhRUELZ8PsxgcH3kyoDk3UhAUnFTaRtJ+queVbij2BicZXu3PPT37W7Wl9u+MXWX30u2CTHAwEkPXSttX8cvySmGBHIgKiIGAMogiDjxo8tHDHSL2rqqcM5AXWMKCyn1E2Jf9ixpfbIVx2vtZ+mLUHLtVT6avU6ikXEAAVAkOT86yA/Xv10+rb7ZhWPaOqpw8WOewqn4pqH9+zYuX1/zcbMsrCLHiACwj45rXrtHdHLAVV1ImITy2xiVX4FCjjAiqDGCL5vuHdIJQ3H21LVP/+4ueaTaH1yX5REnIQFonzxflugqlEyjPmiOeE4uccgqMHngSHzObzvRMtv1bVrjm6KtueJ5SByOa2qcV+9AWZAQxFxuWqT8MkOkAGMgI71prN123fnTlY3vn5yqz3RZ30OIgYyqmr70+r3ddxrQfZcCK5WnsTTH5X9GUXp83W7Ly2s30tznks5iIh+LL8hB/q4YQGb1xYDyKXLFzec2R+uO7Ofnj7i+l+ivQq88234vwf4B6YlTDQudkyaAAAAAElFTkSuQmCC","84726992":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABSlJREFUWIXdl1lsVUUYx/8zc7a7daUroXQhlkpoQ4sVA8b6gilbIEIDggEiEiSRFwzEJ/pCXXjgQR8sAW0I0QQSicZIiC9IsClFFqlC6HorXW/Xe+/p7b3nnpnxobbpJW1pS+uD3+N3vpn/b2b+c853gP9rrNp1WZtNHVlo4ZLDl/YzkC+lhAMUZ+9Uv3MCIHK6eraQ4sXvX9ri0tVvD2wtMt4oyaZPvP1rE1bf93ff/f72dGMWbAcKj1xMNYTSeGh7cbxUFNhcQpE2Lvxwz1Sj4czfvn4vONU4ulAAGicni/LTjYR4Jxo7g2jzjSAzJQ5Ll3iUCDUqphu3IACF7150MUqPvr4mS2/sCkICEEKic3AUhfkZBlXJjkUF0HW6JTXJTVwOHYOmNZHv80eQlRYHSFLyQgCrdlXOeKUkIRtezklVff5ITH7U4vC4dAjO00sOVzvnASDJ8vJPz5ghPZSz+ZNg9uaq/VNOQkmypjMaifKYvC0kKBn3eaI6Z4DsTZ9/mBTvOHZ0TxnbVV7q1hXlfO6mqi3P1nEhvIFg2NbU2Ol0hcIM2yAgPHcI5pwA8rd95iFEnN5UVqS19piQTMHO8lJFEHIpb+OZ1Mm1DLjT1jVsexyxizQ0hkF/CJSSlitXKmK353kAYc4rUpPilbQlcXjQ5MOv9zvgdjuwesVSw1b4yRgAxut7B4KGxgjIpDdLSpyOx20+Swh5dTqdaQEo2I6VKzKNJ0+HwIWEkBJ1j7rx6ppcnVIcTdt4xjVeawmHyYVE1BYTZ+5xqFCpxMOmHoVSXJgzAICSrPREtHX7JxKdfSaYoiIj2UMczJ7kBVuldExY/Gu83FQXrtc2WlLImtvVe5vmBJC5tdIppUh3OjUEQ1bMM29PAMsyl6gScgMAFB+6WECkuOlxaLBsCQkgM8lAR++wbO0cClpW9PgMi5wawBg1VACghMJ65mqFLRuMMUooSwYAytgxl6EWFOSlcv9oFJpCkehScb22kQsujzyoOTg8Z4DWxFxTEvDASBhOI9bZDk1BYCRsQwovADCCbbvfKsS6wizW548gJU5HQ4tPhsJRJcevTWu+GQFwpYJT0BbfoIl4V+xL0O3Q0NfvtyXFnZLD1SrnMlNRGf78O4BwlCMlXofKxhcisucHAEAKcbW1vdfKSHZP5AgBDI2if9g0OHi9orscACAkgS3Geo5AKIqoJSVltPbuud0t8wagjF3wdvUpTo0izjm2C4yOeYJzAS2smLe/2BdglA72Do0gwaki2aMhErFQ+9ArbFvMaL7nArT+dKKJc1FT/0eztTI7GZQQcCEmrpniUFQAICBnb/7eEtaZBOwofrzxyLI5P3Xv/L662QDM2BFlb69MQFRvXlf8UlIUKmnvCWBtfhpu1TXADEUeS0LfznmltCnU3V0jBN9DKIsQKU7Xn9tbNVMfOGsAAMgpr9qpG9p3b64vUhraBpCe5IQ5PMzbO3xsNBL9yvvzxx8AQNmBb4wbNQfDsxGdHM/tB9rcK66GI1Glpb1HZiS70DUwgrycpWx9aQEIJdvG6+YjPiuAZaY3GwA0hSHBrcOKcjxo9kGAQgqZWVJSPeV3fsEAnl470UIJqbVsLobNsY4nagtwPnbE/tRux6ICAIAQ5Hirt0sKbiPJY8Dj1DDoN0FABpuvVQYWHcB77WQdF/JUw1/Nlko44gyK5raOMICzLyIOzOHPaLjpl1vuvFuir3/otW7fAOO2vLw8FP7I670hXhRizpFdVmn856KLFf8AcP0p5DnhnVEAAAAASUVORK5CYII="};
1391
+ //--------------------------------------------------------------------------
1392
+ // activate base64 data URIs
1393
+ //--------------------------------------------------------------------------
1394
+
1395
+ var data_uri_by_embed_uri = {"cid:82357576":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC","cid:82357212":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIkSURBVDiNjZJNSxtRFIbfc+cjmZkkfjSCEFuQtghCwUWj0KXb/IQs3GlBKBQ3waWLoNBfIBSkJYI/ILsupIsuGrIqLQGRoEak6KLNmExzZ+aeLuJMZ4oLz+7e97nPORwuMTMeUvOVvTrAW0TUZua1brN2AgAUCVZeH9aZeUsToh2Eaq21Xz3593h3U9P1vcKjojPyPDV0+z0wL3abtYEAgOWNxmYmY7x5ufTMnCsVV4QQn8rrDSduT7STny46mm7AzheEputTAFYBQIxz2llceOxYVgZP5maEbZkxMF/ZnQVg64YR+8xM1gbwCgBEeb0xC8B27GwMTE7mbKIxAKCsG8YouQ/dNDUiEU9QzjnZFFDIWZqmaauRwDAzuf8EYFYvYsFEwUkB+ZyFMBwDADwAKpmzYoDIiwQeM6eAMFQggnd37ARSDpN54EsQqB0JOreDPynAHXgQQrRjQeBrKYGUklkdA4AOoDMcjlKA63oyCMLju+MpK2XfXF4kERPA10hwKv3A/vzl+71At1mTAFINkkUP+crzld0egFLiyu82a2Y0AZY3DnvMnAJa+1Uz7kJ0npuaLmUsG74coX9zfRVlOgBogs6fPy2VZooT6LtDfPtxdpWQgZkPPLe/JDTdGvb7koGjKBMAEITq4OLyxnNvPZxdXEtmPkK6PgS+/+739c9bX47eg7me2kF5vZElom0Ab4noo1Jqu7Vf/XXPLkS3WUv9mb/vR+THZPMfuQAAAABJRU5ErkJggg==","cid:82356834":"data:image/png;base64,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","cid:82356428":"data:image/png;base64,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","cid:82356008":"data:image/png;base64,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","cid:82355644":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAiESURBVGiB7ZpdbBzVFcd/Z2Znd2d3vbtm/RWvsbEdfyauSWzq2MZWEFVD5AqBaBpRVyaKoaakEBMEBRRVBaukKiqhQF+iioRU9MVUah+ChCIeEiXEIcRECShxxJflOqmxk8gmXq/Xu3v7sB84ju049oYUqUe6ujM7d+75/e+ZO/fMzIpSiu+zaTcbYKn2fwE32773Aiw3pFcR2QsvCWxSYAj8yw6/2qBUKNWuboiAv8FffIWFm8qam03Rdb744IOf/+fMmWzgJ6n2lfJL6E2RaqvL9VDVvfeak0ePEnj/fcruvttudbvX7hZZl2p/KRdghddKm5vN4MmTBM+cIdTfT+D4cSoaG50avI6IpNJfSgW8KXKn3eer9RUXy+XDh5O/Bz76CI/fjzszc9lu+FkqfaZUgAFvlDU1OQI9PajQt/NVhcOM9/RQWl/vssDOF0RSNvdSJuAtkRbnsmXLPbm5BHp7AdBXr8ZSXw/AxKef4vR4SPf73bfBI6nymxoBIqLBa+XNzc7Lhw6hIhHQNMwXX8SxYwcYBijF5SNHKK6rcwq8tEvEkQrXKRGwBx5MLyjIdrrdTJw6BYDR0oKlvBwtLw/bgw8CMPnZZ9hEyCwstFnhqVT4XrKAXSKGwCslzc3OywcPglKg65idnQCICPYtWxBHbMAv9/RQVFtraiK/+btI+lL9L1mABX6ZXVKSZtM0gn19AFg3bEArKEjeMbWMDOwPPQTA1OAg+vg4/pISyxT8dqn+lyRgl4jDItK1vKnJ8c2BAwCIzYb98cevuN2LCPaODsTjAWD8ww/Jr662aZrWsVfEvxSGJQmwwZP+FStMPRAg9NVXAFhbW9FzcpJtklHweDA7OgAIj4yghocpqKiwAH9YCsOiBewR8Wq6/mxhQ4P9m4MHY7BOJ+ZjjyXbJOATtX3TJrTMTAACvb3kVlYaumE8sFek9DsXoMP2/Ntvt6rhYabOnQPAtnkzkp4+KzyA5nDgeOIJACJjY4QHBritosKmwauL5ZDFPBPvEcmxGMbndz78sGO0u5vwyAji9eI5cABxuRAR3nvvPc7FheXm5rJ+/fqYw0iEi2vXEhkYQDNN0tav58N3350IBoPNm5X66HpZFhUBDV4qqq01wv39hEdGAGKTNA4P0N3dTVdXF11dXbzzzjsxeBGwWHBs2wZAdGKC0OefU1xZabfC64tkuT7bLVKk2+0bc1etMhIJm5aVha2t7YrLJi0tLXmOa5owAPP++7GUlQEQPH0an98vhtNZtVvkRzdcgAX+tHzNGluor4/I6CgA9i1b0EwzCQ/gdDqvEJAwEQFNw/XMMwCoUIjJs2cprqx0WhYRhesSsFfkB4bL9eOcykp9/MiRWAe33oo9nipMH+WZEUgcTxT7unUYq1YBsRTD4/Nher35u0V+esMEaPDnkvp6M3jyJNFAAABz61awWK5auKaPelpaWhJ8ulD3888DoCIRgmfOUFRe7tDh1etJtxcs4C2RRtstt/wwo7hYxo8dA0AvKcF2331XwcOVl830OTC9tjY0YGtqAiDU34/L4cDt86XfBptTLkDgjdL6esfE8eOoyUkAzG3bEF2/Cn62CMw8nqjdzz0Xa6QUwdOnKSwtdQjs6BYxUyZgr8h6Z1ZWiTc3l8DHHwNgqarCds89SZCZcNPngNPpnBUewLpqFWZLCwBT589jF+GW7GwzCFtTIyDm6fWyxkbn+NGjqHAYAMfTT18BMhNuoREQEdzPPgvxSAb7+sgvLjaVyPY9It4lC9gDG715eTkur5eJTz4BwKirw2hqmhMeoKioiPb2dtrb2yksLJwTHsBaWopzwwYAwhcuYASDZC1bZtFh+7X45k0lXhCxFMLAHRs35kRPnEjm+57ubow77pgTPlEPDAwAUFBQMCd8oo4MDnJ+zRpUKITudmOsXMnxnp6gFo0W/UKp83MxzhuBfHgko7jYbTcMgmfPAmC9664Fwb/88ss0NDTQ2NjIzp0754UXESx5ebja2mJixsaQ0VFy/X49CjvmY5wzAt0iZlBksK61NT10+DCTX34JInj37cNSWTkvvIhQU1PD0NAQADk5OfT29s4Jn6gjIyMM1tSgAgE008RaXU3vsWPBUCRS1a7UZ7NxzhmBCXgyp7zctExOxuABW0vLguABamtrk31VV1dfEx7AkpmJ59FHgViip0ZGyPP7DSu8MhfnrBHYJeIxNe3f9W1trsD+/UwNDoKuk75/P3pR0TVBRIQLFy7w9ttvA9Da2kpWVtY1zxERomNjDKxeTfTSJcRqxVZdzYkTJ4KRqamGNqU+nsk6awTssD2vqsqQixdj8ID9gQcWDA+QkZFBZ2cnnZ2dC4YH0D0evFtjS4AKhYgODZHv99u0ORK9qwT8VSRbdP2xgtpa2+V4wiZWK47OzgXBTy8LETpbW29HB3p2NhB7i+FLTxfdZlu9R2TtvAJExKrgd/kVFUZ0aIjw8HBsVMrKkg/q1wOyWKFit2PW1QGxRC88NMStOTmmBn+U6YsP0z5wiIgdcBmwLnvlSmPi0KFko/CpUwwXFc0U/51Z+Ouv8a5Ygervr/aCR0RGVXzyagAiogN2wBGFaGRyEt3nQwzjpkEnTdPQnE7CU1MAwakYZzLRS0RAj29bzsE/+w4f/nVlc7PNV1MDmhZ7WasURKOoaDS5jVKx/dm2E22i0W+3Z2s/89gsfoKTk3zR3z9xEf4xHmNNpsCilEJiDxBuIA1I+z08lQP3aeBFBNHmWbBT/aV/Wn8qvh+F0Uuw73noCsEocEkpFUwKABARJ+CKFwexMFmBqURf37Fpcf9hIAgEgHFgDBhLzIHkJFZKjYuIAiJACJiIH79ZAhKXdSTOECQGPj690VUrcfw2ZYuXhICbYRZiUUhEYFLNkjYs6s3c/5J97/9q8F/RUcwR4xicOQAAAABJRU5ErkJggg==","cid:81900308":"data:image/png;base64,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","cid:81899636":"data:image/png;base64,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","cid:81899006":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU3SURBVGiB7VlPaBRXHP5+82aTSLIrkY3YJR68VmuSPXlRPPQPGg05iD14sZfEUkpbPJQqQVJs0yQlkEDobaE9CaloTlI0InhYNOBi2yAFT0JxZW2ysn/cmTczvx4ym+7Ozs7uzK6kQj54zOzvzbz3fe/3583MEjPjbYay3QRaxY6A7caOgO2G2uoAExMTB4QQVy3LGrEsq+XxnFAUpcDMCVVVv71y5Ure2d/yhKqqLgwPDw8PDg6SEMLzWj8lu3ytlLLr9u3bXzx48OAlgJma+f3Rrcb4+HgoGo1+FI/HSUoJKWVDQpXnThsR1fSHQiEcP36849GjR2NtFxCLxYSu64qiKDBNsyXyAGBZVo3NNE2EQiEA2OU2dttj1gkvwn766+GNCvAi50eQF96IgCCrHVRQ2wW0Sq7tHhgfHw/FYrF69bELAAzDgGEYvsipqtoU+cA5MDExcUBV1Z/27t37vld97+rqEtPT056TOCGlRF9fH44dO4b9+/cHTmDAQ4AQ4uqpU6c+jMfj5Itdk0in07h27RrOnz+/ZWurByzLGjl8+DBpmlZVn5tBo/AhIuzbtw+GYSCfz6OnpycQ+UYCVCEEDMNoG/GKscHM6O7ursodv+Q9BfhBOypL0ErUsoBmCDda2WbKLTO75mJgAX43paB7QYWdiIjYsQK+X2gqB3WbqFmbc0wvQfZvBUC3815fHggaLl4hREQgoq1KV36kLh/LhYSZNQCdAKpeapoS0I5wqSciEokgEokgm80CAHbv3g0hxNY1hmHg3r17xvr6+q9u3BoKCLrCzfRJKTE3N2devHhRhMNh5HI5qKqKyclJSCl1+7bSxsbG8srKys8AXgcS4IzddnmEiEpPnjz5anFxcebChQvhPXv2AAA0TeOFhYUjxWJRBWAAKADYcBPQVBK3kqxeNgD86tWr35PJ5Oj8/PxGMpnUmRnRaLR09uzZAQAv7ZYB8I+zAgFtDiG/HiEi7u3tzV+/fn0tm82+p+v6lw8fPvyso6Ojo7+///uDBw8eWltbKwKo+7Ld0AOVIeRczRZXHwAgpRQA1GQy+Xp2dva7W7duHXr+/HnCNM2+EydOfAqAsLnQgohUIqri/EZDyE20Y1wqFoudAEI2SfXOnTvZqampr58+fTrAzO+cPn26z+ap2GIUKtdY1AkhIlIvX75cQ8rt6MfmNlWpVOqyyVU+8vLS0tLfAL5x2AGgasB6OdBJRKZpmnB+MqncdCptdlWpjO8tmxOKokBRFORyOWiaxrYAaZOz7GP53Ko4N5m5avIaAUQkAKi6rv+WSqVG4/G4UvlGJqVEPp+HEAKRSKSOfm9YloVnz56hUCi8XF1dTdvkpIN8pQDLrQK5CijrSCaT05ZldS4vL3/AzAIADQ0NWaOjoyoRIRwO4+7du3JlZUXA4dZGsPPhz8ePH/8AQLPb6zLxemRdibo8mxCAHrt1A+gAwGfOnDly7ty5xZGRkV0AsLq6Km/cuLGWSCQ+yWQymh8B+C8hS9jcpHLMXPPhthnUeICZmYh0bK4KAdABcCwWG+jv71dN08TNmzdLqVTqr6WlpY8zmUzN7uhDgG6LKAYhD7h4YKuDqBObn03EyZMno4ODg38cPXpUSaVShRcvXkwmEolfcrlc/Q+i3ignlQ6gyMxBx6m/EzOzZntCDAwM/AgA9+/fn02n01OJRKIQdEIbyuYUwYmXUdcDZVy6dOldZv7cNM3JmZmZdKsTth3OXdPZxsbGQo2u2c7W0AP/d7z1f/LtCNhu7AjYbrz1Av4F8/cV1apw1zkAAAAASUVORK5CYII=","cid:81898502":"data:image/png;base64,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","cid:81898012":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJOgAACToB8GSSSgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAS1SURBVFiF7ZddbBRVFMf/596Z3W3rtiwtUFsJFQhWMQSIWi0UKJHPlISvCGpiogkxig8SlBSj0Rij6YMPJhB9IyZqTFRC4pNKAgElplSIsRURRL6xtLRLu53dmbn3Hh9mFrZ1Kcs2pi9McnJndu8953c+7rkzxMwYz0uMq/W7AACssSpofo2qlJQfW6X66QNvs7rT9WOKQNP22Kz4xNqOadX1y1CkM0UDLH7dXlo3ddahV9a9O62m6n6/WD1FUS9qtbbMe6i5bUXDxkR/5h+AijVfBEBTa+TD1Q3PbJlX3xQ/39eFeKyyeOt3AvDIi2THJsivn1u5fUXt5LroxeRJMBjA2BoZFdIJm7fRBHFP+f4tLTvnRksism/oCjQrKOOjIlaFgWTSOX3pj0FmRiAGBszMBgyG1gqdZ38+cvh9tWGk7ttG4IltJXWTJtbsf37NjulplaSeVDeYDTRrGKMw6PahrKK89OH43FJjVAimYFhBax/aKFRXTEfn3+2T8+kfFaDpjUhD3X0z9m5e9lJNz9A5eCoDRughGxhoeF4ag+41aKOgtA9tfCgzfCwvmXRLG7cEWNRqbZ5d9+iulY2bKi8ku6CMAhGBmQFigAIAIzTYaLBQYFYwRsGwzhGD0eokL0DTzug7jXNWvjq/fkHFqd6jAANEwV4jQQEAgvwaykIoMGmwMGCjoTkACUZTOMDCndaelsZnn5oyubr0VE87iAQIBCKCEHRjyxOFBcY+UqofQ24SaX8IMACMALGEhRKAGYZ14QAEOL3XL2urzCDpdKMsloCAgLAEBBG0ceF4STg6ibRKwtVDYV0w2ABGM4xmaMUwiiE4ghnevFB1AQCHP1BbF7dG/pw+MPutWTNnVnZc/A5CANFoDBAaWmQgJUFIAkmCsAPdzATWDKIcUwwo30VGOQCDiEgyDw9H3rPgUJu/u/PEby8cO97R3TB1DWw7AtcMQlEGQhKERRA2QVqhhPfCDv4bBigDGmYIABEikqMCEJEAYHXs0ge62i+tPXjk+/Pz713FidIpECJQPsywLSAtcQNCWrnGEdTNzeBbACyim7/k2wUiFHlir//X4LneFtfd9+Xy5pYHrnKX7PXOQsjQS4tQYpcjEa0J8m+CvGvF0L4JR0ZpJA4wKEc3Idybt+uEdPEX9F0/l1rvet988uSS1Y+XJxKxC86vAYQlUFlWC75alT5/+kImaMPgoMOb4KQwxNdwlJlNb14DI8+CMEeRUOyc0X5sq/3mwgWN62vrE/HTqUOQNqEmXo8zR5z+z3Yc35BJwgGgAPiheCPus88uh4b/UwNhlepQ0TBp3+2/d/CHn9p+bz/TP2fialgyEuRYgEnCAZAB4OYYG6lDA/A4x+tbpWDkG07Q+gB9bI/63OvvOjXgDHy0fMWq6hRdBsNhIZEOAfI5kI1Chnl4W8wLEBJ6RGSyhsO5EoDs3Kd/TCUvrXOcb7/YuHZTHXE3ywgcAOlwfnbNDa9Hen67CGRBFAAV1oWdBQAgzh70T7rXe5pd79OvonbJg5E4hsII5AJ4AHQ+wwUB5IBkw4pwDwsAdOU4UiQGl8xc6r3cK3AtnMPBksK++Qp6I/o/r3H/MroL8C8JiYMXQa6AIwAAAABJRU5ErkJggg==","cid:81897676":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJOgAACToB8GSSSgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASrSURBVFiF7ZdtaFZlGMd/133O2dgcmunUZDgzzIYvJIH2wU2UtDKKXkCCLIqiDyIWZfhCEYIRCUIgUvYhApMKKoUMDd9ymagzNHTGZNlSp5tz0z17e55zzn1ffXjOo8/WZuqH+SEfuLgOPPc5/9/1v677PhxRVW7nz9xW9TsAtwowZ7X4Ve/4i24bAFcoKb173MZH3h2yY8FSKRx8AGDqhBnpt57/eJ43aszhqqVSOugATh1i1Cx+ZvW0svEVNbNWFE4eVABVR1d4mfOpehY9+kb5tAkz9lSu8J8cNACnjshGpOMOTrcdY/7Dz42a/eBTmyqXFy6/medIfydh1Ur/64pxM+cGnq8igogICCJylXtieUXJsGF3FbV2NeLUouoYM3QCF1uaurfu//zb6oLoFX1f3S0BVK4q2PPmwg/mXOo6h4jBE58siMHINdNS6VbSUReKw6nDOcvw4tH4tij6ZvdnB21rasHeDdp5PQB/oD+6wxSN7acScYMRL8kCJE4IqCqqDtUsRHNHA8XB0OCFx5bM2rL3iyOz35Z5+9bp2YF0BpwBq5bYhkQuQ+ySbDPZTAYrIY4MTrLXlpBYM8Q25HJPMw1Xjsqzc1+aVFY26UDlqoKZNw3gXEzswiyEzYrHZHAS4gixksFKhJMIJyFWQjKuk/boIq1djbR0nuXYhd3Mnvl42eTxD22rXO6/2J/OgC2wGhO5ECMeBoPxPXwEMMk8CKHtpjPTRmfUTjrsxFqLs4qLFRtnZ6vxSh3Tx88fOaxk2PqqlYUV1R9mVt0QQCbupivTjmd8giDAOEirRV1M5Hrose3EGmYXK4gPngi5jaKAi5XQprmQqqe0ZGKh58mUG3NAkY50G80dfyEGvMDg+YLnC8YXjCcYD7zcjlAQp7icuCbhlIpRs4hSfuqnmu+/PLDWLmFNb6l/zYCIeFwdczBGMIasaALh+YIXGPxA8APBC6Q3oC/4vseM8idoOdfe9uuhXe8dWGuXAd51HcgeOHiqWQAREC9X8bXwEhfEZDnVKbndqQoFUszU0fM4WHOo6dSxhsW/b3bViZaKiNW8w6dvCwzgoUhRUELZ8PsxgcH3kyoDk3UhAUnFTaRtJ+queVbij2BicZXu3PPT37W7Wl9u+MXWX30u2CTHAwEkPXSttX8cvySmGBHIgKiIGAMogiDjxo8tHDHSL2rqqcM5AXWMKCyn1E2Jf9ixpfbIVx2vtZ+mLUHLtVT6avU6ikXEAAVAkOT86yA/Xv10+rb7ZhWPaOqpw8WOewqn4pqH9+zYuX1/zcbMsrCLHiACwj45rXrtHdHLAVV1ImITy2xiVX4FCjjAiqDGCL5vuHdIJQ3H21LVP/+4ueaTaH1yX5REnIQFonzxflugqlEyjPmiOeE4uccgqMHngSHzObzvRMtv1bVrjm6KtueJ5SByOa2qcV+9AWZAQxFxuWqT8MkOkAGMgI71prN123fnTlY3vn5yqz3RZ30OIgYyqmr70+r3ddxrQfZcCK5WnsTTH5X9GUXp83W7Ly2s30tznks5iIh+LL8hB/q4YQGb1xYDyKXLFzec2R+uO7Ofnj7i+l+ivQq88234vwf4B6YlTDQudkyaAAAAAElFTkSuQmCC","cid:81897116":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABSlJREFUWIXdl1lsVUUYx/8zc7a7daUroXQhlkpoQ4sVA8b6gilbIEIDggEiEiSRFwzEJ/pCXXjgQR8sAW0I0QQSicZIiC9IsClFFqlC6HorXW/Xe+/p7b3nnpnxobbpJW1pS+uD3+N3vpn/b2b+c853gP9rrNp1WZtNHVlo4ZLDl/YzkC+lhAMUZ+9Uv3MCIHK6eraQ4sXvX9ri0tVvD2wtMt4oyaZPvP1rE1bf93ff/f72dGMWbAcKj1xMNYTSeGh7cbxUFNhcQpE2Lvxwz1Sj4czfvn4vONU4ulAAGicni/LTjYR4Jxo7g2jzjSAzJQ5Ll3iUCDUqphu3IACF7150MUqPvr4mS2/sCkICEEKic3AUhfkZBlXJjkUF0HW6JTXJTVwOHYOmNZHv80eQlRYHSFLyQgCrdlXOeKUkIRtezklVff5ITH7U4vC4dAjO00sOVzvnASDJ8vJPz5ghPZSz+ZNg9uaq/VNOQkmypjMaifKYvC0kKBn3eaI6Z4DsTZ9/mBTvOHZ0TxnbVV7q1hXlfO6mqi3P1nEhvIFg2NbU2Ol0hcIM2yAgPHcI5pwA8rd95iFEnN5UVqS19piQTMHO8lJFEHIpb+OZ1Mm1DLjT1jVsexyxizQ0hkF/CJSSlitXKmK353kAYc4rUpPilbQlcXjQ5MOv9zvgdjuwesVSw1b4yRgAxut7B4KGxgjIpDdLSpyOx20+Swh5dTqdaQEo2I6VKzKNJ0+HwIWEkBJ1j7rx6ppcnVIcTdt4xjVeawmHyYVE1BYTZ+5xqFCpxMOmHoVSXJgzAICSrPREtHX7JxKdfSaYoiIj2UMczJ7kBVuldExY/Gu83FQXrtc2WlLImtvVe5vmBJC5tdIppUh3OjUEQ1bMM29PAMsyl6gScgMAFB+6WECkuOlxaLBsCQkgM8lAR++wbO0cClpW9PgMi5wawBg1VACghMJ65mqFLRuMMUooSwYAytgxl6EWFOSlcv9oFJpCkehScb22kQsujzyoOTg8Z4DWxFxTEvDASBhOI9bZDk1BYCRsQwovADCCbbvfKsS6wizW548gJU5HQ4tPhsJRJcevTWu+GQFwpYJT0BbfoIl4V+xL0O3Q0NfvtyXFnZLD1SrnMlNRGf78O4BwlCMlXofKxhcisucHAEAKcbW1vdfKSHZP5AgBDI2if9g0OHi9orscACAkgS3Geo5AKIqoJSVltPbuud0t8wagjF3wdvUpTo0izjm2C4yOeYJzAS2smLe/2BdglA72Do0gwaki2aMhErFQ+9ArbFvMaL7nArT+dKKJc1FT/0eztTI7GZQQcCEmrpniUFQAICBnb/7eEtaZBOwofrzxyLI5P3Xv/L662QDM2BFlb69MQFRvXlf8UlIUKmnvCWBtfhpu1TXADEUeS0LfznmltCnU3V0jBN9DKIsQKU7Xn9tbNVMfOGsAAMgpr9qpG9p3b64vUhraBpCe5IQ5PMzbO3xsNBL9yvvzxx8AQNmBb4wbNQfDsxGdHM/tB9rcK66GI1Glpb1HZiS70DUwgrycpWx9aQEIJdvG6+YjPiuAZaY3GwA0hSHBrcOKcjxo9kGAQgqZWVJSPeV3fsEAnl470UIJqbVsLobNsY4nagtwPnbE/tRux6ICAIAQ5Hirt0sKbiPJY8Dj1DDoN0FABpuvVQYWHcB77WQdF/JUw1/Nlko44gyK5raOMICzLyIOzOHPaLjpl1vuvFuir3/otW7fAOO2vLw8FP7I670hXhRizpFdVmn856KLFf8AcP0p5DnhnVEAAAAASUVORK5CYII=","cid:81896640":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAADAFBMVEUBAAAIBgMMCQQLCwsSDgYXEgkaFQoUFBQcHBwlHQ4rIhEwJhM2KxU7Lxc9MBgjIyMoKCg0MzI7OztBNBpOPh5OSz9TQiFeSyVkUChqVCpuWCx1Rzl0XC5+ZDFOTk5ST0tWUk1VVVVcXFxqXUplZWVra2twcHB7e3sAWpwIX58JYJ8OY6ERZaIVaKQaa6Yebaghb6klcqopdawxea82fbE4frI+grRFhrZMi7pVkb1alL9dlsBkm8NoncRtocZ0pcl8qsyWBAOZAACcCASIIBmdNiegDge3PB6mPiqBZzODaDSKbjaOcTiUdjuXeDyaez26QiG/TCaAeWihclPATifBUCjIXy/QbzfWej3Yfj+KgWWjgkGui0WxjUa0gVi3kkm6lEq+mEyjkmuzn2e7pnLFnU7eikXOpFHRp1PVqlXarlfesVjjlUrmm03poFDtqVTitFrmuFzqu13ywWD7xWL+y2WDg4OXl5eYmJippZ61rZisrKy0tLS/v7+Crs6FsNCLtNKQt9SWu9aYvNebvtifwdqjw9uox92ryd6yzeG20OPCwsLMzMzU1NTA1ufG2ujN3+zT4+7d6fL/7Mbn5+fs7Ozl7vXp8fbu9Pj09PTy9/r1+Pv+/v7MzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADn4rtgAAAAnnRSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AD6H4/gAAAABYktHRP+lB/LFAAAACXBIWXMAAABIAAAASABGyWs+AAADSUlEQVRIx+2WaU8TURSGzyCLQEUxiFYtCEo8Da3sYglQbDUaluISV6pYFdsyop1Or8ElSgg2RSjgArSZ63/13JkOXRBZgn7yTXpmyzwz857lFhb3XW9/CsEi317f2c71/OnZ/+C9gSdDKmNySI2GorQNxiaDpFA4FgrS+WgoxFhwck/gMTjBwmCJ+WCYMQso5SBUoQCcZKwGgClg2QSOt7jp7pnWGQFJ2e0tpFYX5+k3TUn+QTOsqAV/hRRmJngiYAVrYILAkipT+C34GzqJ+AW7BDiBhga4VgdwIFmdNMBKMcAQI3Ctz1cOCmPD4hEKVBX5TpdYfg/m7bhC0YHrFHvQtbY2h840fw9Hzh8tO7CaSZ6V3k2AdWXBNdaKosGtwG78SLED4xSd+I1rbWK37ii5cO58pirCUglYBXhIjVlywWGQoluBl7CT83VE8nUZ28lu3ZUycUlLZ8CVUrgGnpgeR7JgZrUxHVzh9/tjAuzxbFRFM7nwGbGZ8wF083UHLlPqDuZWxSAZrBSXqmbyGBuBEQNM0sFCUQJf8QiyAXbRp7uwA5fI7iXei9ifotzlgiMy3R+NqKpMRiv6gUwVzfTAlAiLyUJkxVWPUAYcR5fWfCGB7jV00GOciJ0an95T5133GDLAKXTMY1/K3j6HPeJ42YEJvrAX8M0M1+y8LvJhnnejURmc92HvH2aFGtuWa4I/Ido1qgbElH48j235YNkiwbhxc6QKpJN56NiN18bOnQ2uCV5BvCRaEC8aqAS2rBp76bSRPFutCT4No8chkMu95vG+ynIve3KHUAvO6i04w2d7dCu6Fwxy00LGCpsJrixlQbAVfL/35Qb3VN5068M1vQW/UrG5U3EHxrXGH4IrJTfAxluqUMWicCjLva/zvC8Mf72388fmfIeIS61UIU60o2jFxbKGxsMwzQvfuKScyTREcxz2ZOV9XDCPtY/6ZoB+X/udzl6Rw2RDWfV7ngceonFxXIqMgj83eXey3Fe7HfRh0bAlondZQJKgXM2rsrsmd2rXK4j6ZHx8PMAmhM/y2CO1oH7vmdx9X0wfZLj7v0q/8Orcv7D8T039s/8VH7bVu2c718NbJrhuBzq2leo3nTlTX62DfwGZkKiGotSUXQAAAABJRU5ErkJggg==","cid:81896052":"data:image/gif;base64,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"};
1095
1396
 
1096
1397
  $('img[src]').each(function() {
1097
1398
  var image = $(this);
1098
- var data_uri = data_uri_by_embed_uri[image.attr('src')];
1399
+ var embed_uri = image.attr('src');
1099
1400
 
1100
- if (data_uri) {
1101
- image.attr('src', data_uri);
1401
+ if (data_uri_by_embed_uri.hasOwnProperty(embed_uri)) {
1402
+ image.attr('src', data_uri_by_embed_uri[embed_uri]);
1102
1403
  }
1103
1404
  });
1104
1405
 
@@ -1108,23 +1409,74 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1108
1409
 
1109
1410
  if (css) {
1110
1411
  for (var embed_uri in data_uri_by_embed_uri) {
1111
- var src = new RegExp('\\burl\\(' + embed_uri + '\\)', 'g');
1112
- var dst = 'url("' + data_uri_by_embed_uri[embed_uri] + '")';
1412
+ if (data_uri_by_embed_uri.hasOwnProperty(embed_uri)) {
1413
+ var src = new RegExp('\\burl\\(' + embed_uri + '\\)', 'g');
1414
+ var dst = 'url("' + data_uri_by_embed_uri[embed_uri] + '")';
1113
1415
 
1114
- css = css.replace(src, dst);
1416
+ css = css.replace(src, dst);
1417
+ }
1115
1418
  }
1116
1419
 
1117
1420
  style.text(css);
1118
1421
  }
1119
1422
  });
1120
1423
 
1121
- //
1122
- // ready for action!
1123
- //
1124
- $('#__loading__').append("Ready!").
1424
+ //--------------------------------------------------------------------------
1425
+ // create jQuery UI tabs
1426
+ //--------------------------------------------------------------------------
1427
+
1428
+ $('.tabs').tabs();
1429
+
1430
+ // make internal hyperlinks reveal their targets (which may be
1431
+ // nested within many levels of jQuery UI tabs) when clicked
1432
+ $('a[href^=#]').click(function() {
1433
+ var link = $(this);
1434
+ var hash = link.attr('href');
1435
+
1436
+ if (link.parent('li').parent('.ui-tabs-nav').length) {
1437
+ // tab clicks should not cause the screen to scroll
1438
+ set_hash(hash, true);
1439
+ }
1440
+ else {
1441
+ reveal(hash);
1442
+ }
1443
+
1444
+ return false;
1445
+ });
1446
+
1447
+ // make external hyperlinks open in a separate window
1448
+ $('a[href]').not('[href^=#]').attr('target', '_blank');
1449
+
1450
+ //--------------------------------------------------------------------------
1451
+ // style jQuery UI icons
1452
+ //--------------------------------------------------------------------------
1453
+
1454
+ $('.ui-icon').parent().hover(
1455
+ function() { $(this).addClass('ui-state-hover'); },
1456
+ function() { $(this).removeClass('ui-state-hover'); }
1457
+ );
1458
+
1459
+ //--------------------------------------------------------------------------
1460
+ // unveil the document
1461
+ //--------------------------------------------------------------------------
1462
+
1463
+ $('#_loading').append("Ready!").
1125
1464
  fadeOut('slow', function() {
1126
- $('#__body__').show();
1127
- on_hash_change();
1465
+ $(this).remove();
1466
+
1467
+ $('#_body').show();
1468
+
1469
+ // respond to changes in window location
1470
+ (function on_hash_change() {
1471
+ var current_hash = window.location.hash;
1472
+
1473
+ if (current_hash && current_hash !== $last_hash) {
1474
+ $last_hash = current_hash;
1475
+ reveal(current_hash);
1476
+ }
1477
+
1478
+ setTimeout(on_hash_change, 300);
1479
+ })();
1128
1480
  });
1129
1481
  });
1130
1482
 
@@ -1132,20 +1484,17 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1132
1484
  </script>
1133
1485
  </head>
1134
1486
  <body>
1487
+ <div id="_loading"></div>
1135
1488
 
1136
- <div id="__loading__">
1137
- Loading... <noscript><ins>Failed!</ins> <p>Please enable JavaScript in your Web browser.</p> <div style="display: none"><br/><hr/><br/></div></noscript>
1138
- </div>
1139
-
1140
- <div id="__body__">
1489
+ <div id="_body">
1141
1490
 
1142
1491
 
1143
- <div id="__header__">
1492
+ <div id="_header">
1144
1493
 
1145
1494
 
1146
1495
 
1147
1496
  <div class="title_and_subtitle">
1148
- <h1 class="title">Dfect 1.1.0</h1>
1497
+ <h1 class="title">Dfect</h1>
1149
1498
 
1150
1499
  <h2 class="subtitle">Assertion testing library for Ruby</h2>
1151
1500
  </div>
@@ -1153,7 +1502,7 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1153
1502
  <div class="authors_and_date">
1154
1503
  <h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3>
1155
1504
 
1156
- <h3 class="date">27 October 2009</h3>
1505
+ <h3 class="date">21 March 2010</h3>
1157
1506
  </div>
1158
1507
 
1159
1508
 
@@ -1164,27 +1513,27 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1164
1513
  <div class="tabs">
1165
1514
  <ul>
1166
1515
 
1167
- <li><a href="#__doc__">Document</a></li>
1516
+ <li><a href="#_document">Document</a></li>
1168
1517
 
1169
- <li><a href="#__toc__">Contents</a></li>
1518
+ <li><a href="#_contents">Contents</a></li>
1170
1519
 
1171
1520
 
1172
- <li><a href="#__nfo__">About</a></li>
1521
+ <li><a href="#_about">About</a></li>
1173
1522
  </ul>
1174
1523
 
1175
1524
 
1176
1525
 
1177
- <div id="__toc__">
1526
+ <div id="_contents">
1178
1527
  <h1 class="title">Contents</h1>
1179
- <ul><li>1&nbsp;&nbsp;<a id="a__toc__Introduction" href="#Introduction">Introduction</a><ul><li>1.1&nbsp;&nbsp;<a id="a__toc__Features" href="#Features">Features</a></li><li>1.2&nbsp;&nbsp;<a id="a__toc__Motivation" href="#Motivation">Motivation</a></li><li>1.3&nbsp;&nbsp;<a id="a__toc__Etymology" href="#Etymology">Etymology</a></li><li>1.4&nbsp;&nbsp;<a id="a__toc__License" href="#License">License</a></li><li>1.5&nbsp;&nbsp;<a id="a__toc__Credits" href="#Credits">Credits</a></li><li>1.6&nbsp;&nbsp;<a id="a__toc__Related-works" href="#Related-works">Related works</a></li></ul></li><li>2&nbsp;&nbsp;<a id="a__toc__Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="a__toc__Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="a__toc__Installation" href="#Installation">Installation</a></li><li>2.3&nbsp;&nbsp;<a id="a__toc__Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>3&nbsp;&nbsp;<a id="a__toc__Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<a id="a__toc__Assertions" href="#Assertions">Assertions</a><ul><li><a id="a__toc__Negation" href="#Negation">Negation</a></li><li><a id="a__toc__Sampling" href="#Sampling">Sampling</a></li><li>3.1.1&nbsp;&nbsp;<a id="a__toc__Failures" href="#Failures">Failures</a></li></ul></li><li>3.2&nbsp;&nbsp;<a id="a__toc__Tests" href="#Tests">Tests</a><ul><li>3.2.1&nbsp;&nbsp;<a id="a__toc__Hooks" href="#Hooks">Hooks</a></li><li>3.2.2&nbsp;&nbsp;<a id="a__toc__Insulation" href="#Insulation">Insulation</a></li></ul></li><li>3.3&nbsp;&nbsp;<a id="a__toc__Execution" href="#Execution">Execution</a><ul><li>3.3.1&nbsp;&nbsp;<a id="a__toc__Automatic-test-execution" href="#Automatic-test-execution">Automatic test execution</a></li></ul></li><li>3.4&nbsp;&nbsp;<a id="a__toc__Reporting" href="#Reporting">Reporting</a></li><li>3.5&nbsp;&nbsp;<a id="a__toc__Emulation" href="#Emulation">Emulation</a></li></ul></li><li>4&nbsp;&nbsp;<a id="a__toc__History" href="#History">History</a><ul><li>4.1&nbsp;&nbsp;<a id="a__toc__Version-1-1-0-2009-10-27" href="#Version-1-1-0-2009-10-27">Version 1.1.0 (2009-10-27)</a><ul><li><a id="a__toc__Thank-you" href="#Thank-you">Thank you</a></li><li><a id="a__toc__New-features" href="#New-features">New features</a></li><li><a id="a__toc__Housekeeping" href="#Housekeeping">Housekeeping</a></li></ul></li><li>4.2&nbsp;&nbsp;<a id="a__toc__Version-1-0-1-2009-10-07" href="#Version-1-0-1-2009-10-07">Version 1.0.1 (2009-10-07)</a><ul><li><a id="a__toc__Bug-fixes" href="#Bug-fixes">Bug fixes</a></li><li><a id="a__toc__Housekeeping-89349386" href="#Housekeeping-89349386">Housekeeping</a></li></ul></li><li>4.3&nbsp;&nbsp;<a id="a__toc__Version-1-0-0-2009-05-03" href="#Version-1-0-0-2009-05-03">Version 1.0.0 (2009-05-03)</a><ul><li><a id="a__toc__Incompatible-changes" href="#Incompatible-changes">Incompatible changes</a></li><li><a id="a__toc__New-features-89369182" href="#New-features-89369182">New features</a></li><li><a id="a__toc__Bug-fixes-89398092" href="#Bug-fixes-89398092">Bug fixes</a></li><li><a id="a__toc__Housekeeping-89393948" href="#Housekeeping-89393948">Housekeeping</a></li></ul></li><li>4.4&nbsp;&nbsp;<a id="a__toc__Version-0-1-0-2009-04-28" href="#Version-0-1-0-2009-04-28">Version 0.1.0 (2009-04-28)</a><ul><li><a id="a__toc__Thank-you-89444068" href="#Thank-you-89444068">Thank you</a></li><li><a id="a__toc__New-features-89472950" href="#New-features-89472950">New features</a></li><li><a id="a__toc__Bug-fixes-79582034" href="#Bug-fixes-79582034">Bug fixes</a></li><li><a id="a__toc__Housekeeping-81713450" href="#Housekeeping-81713450">Housekeeping</a></li></ul></li><li>4.5&nbsp;&nbsp;<a id="a__toc__Version-0-0-0-2009-04-13" href="#Version-0-0-0-2009-04-13">Version 0.0.0 (2009-04-13)</a></li></ul></li></ul>
1528
+ <ul><li>1&nbsp;&nbsp;<a id="_contents-Welcome" href="#Welcome">Welcome</a><ul><li>1.1&nbsp;&nbsp;<a id="_contents-Features" href="#Features">Features</a></li><li>1.2&nbsp;&nbsp;<a id="_contents-Etymology" href="#Etymology">Etymology</a></li><li>1.3&nbsp;&nbsp;<a id="_contents-License" href="#License">License</a></li><li>1.4&nbsp;&nbsp;<a id="_contents-Credits" href="#Credits">Credits</a></li><li>1.5&nbsp;&nbsp;<a id="_contents-Related-works" href="#Related-works">Related works</a></li></ul></li><li>2&nbsp;&nbsp;<a id="_contents-Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="_contents-Prerequisites" href="#Prerequisites">Prerequisites</a></li><li>2.2&nbsp;&nbsp;<a id="_contents-Installing" href="#Installing">Installing</a></li><li>2.3&nbsp;&nbsp;<a id="_contents-Upgrading" href="#Upgrading">Upgrading</a></li><li>2.4&nbsp;&nbsp;<a id="_contents-Uninstalling" href="#Uninstalling">Uninstalling</a></li></ul></li><li>3&nbsp;&nbsp;<a id="_contents-Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<a id="_contents-Assertions" href="#Assertions">Assertions</a><ul><li>3.1.1&nbsp;&nbsp;<a id="_contents-Negation" href="#Negation">Negation</a></li><li>3.1.2&nbsp;&nbsp;<a id="_contents-Sampling" href="#Sampling">Sampling</a></li><li>3.1.3&nbsp;&nbsp;<a id="_contents-Failures" href="#Failures">Failures</a></li><li>3.1.4&nbsp;&nbsp;<a id="_contents-Emulation" href="#Emulation">Emulation</a></li></ul></li><li>3.2&nbsp;&nbsp;<a id="_contents-Tests" href="#Tests">Tests</a><ul><li>3.2.1&nbsp;&nbsp;<a id="_contents-Execution" href="#Execution">Execution</a><ul><li>3.2.1.1&nbsp;&nbsp;<a id="_contents-Hooks" href="#Hooks">Hooks</a></li><li>3.2.1.2&nbsp;&nbsp;<a id="_contents-Logging" href="#Logging">Logging</a></li></ul></li><li>3.2.2&nbsp;&nbsp;<a id="_contents-Sharing" href="#Sharing">Sharing</a></li><li>3.2.3&nbsp;&nbsp;<a id="_contents-Insulation" href="#Insulation">Insulation</a></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="_contents-History" href="#History">History</a><ul><li>4.1&nbsp;&nbsp;<a id="_contents-Version-2-0-0-2010-03-21" href="#Version-2-0-0-2010-03-21">Version 2.0.0 (2010-03-21)</a></li><li>4.2&nbsp;&nbsp;<a id="_contents-Version-1-1-0-2009-10-27" href="#Version-1-1-0-2009-10-27">Version 1.1.0 (2009-10-27)</a></li><li>4.3&nbsp;&nbsp;<a id="_contents-Version-1-0-1-2009-10-07" href="#Version-1-0-1-2009-10-07">Version 1.0.1 (2009-10-07)</a></li><li>4.4&nbsp;&nbsp;<a id="_contents-Version-1-0-0-2009-05-03" href="#Version-1-0-0-2009-05-03">Version 1.0.0 (2009-05-03)</a></li><li>4.5&nbsp;&nbsp;<a id="_contents-Version-0-1-0-2009-04-28" href="#Version-0-1-0-2009-04-28">Version 0.1.0 (2009-04-28)</a></li><li>4.6&nbsp;&nbsp;<a id="_contents-Version-0-0-0-2009-04-13" href="#Version-0-0-0-2009-04-13">Version 0.0.0 (2009-04-13)</a></li></ul></li></ul>
1180
1529
 
1181
- <div id="__lof__"><div id="__example__"><h2 class="title">Examples</h2> <ol><li><a id="a__toc__A-sample-unit-test" href="#A-sample-unit-test">A sample unit test</a></li></ol></div></div>
1530
+ <div id="_floats"><div id="__command__"><h2 class="title">Commands</h2> <ol><li><a id="_contents-gem-install-dfect" href="#gem-install-dfect"><tt>gem install dfect</tt></a></li><li><a id="_contents-gem-update-dfect" href="#gem-update-dfect"><tt>gem update dfect</tt></a></li><li><a id="_contents-gem-uninstall-dfect" href="#gem-uninstall-dfect"><tt>gem uninstall dfect</tt></a></li></ol></div><div id="__example__"><h2 class="title">Examples</h2> <ol><li><a id="_contents-Logging-information-in-the-execution-report" href="#Logging-information-in-the-execution-report">Logging information in the execution report</a></li><li><a id="_contents-Sharing-code-between-tests" href="#Sharing-code-between-tests">Sharing code between tests</a></li><li><a id="_contents-Insulated-and-uninsulated-tests" href="#Insulated-and-uninsulated-tests">Insulated and uninsulated tests</a></li></ol></div></div>
1182
1531
  </div>
1183
1532
 
1184
- <div id="__doc__" class="tabs">
1533
+ <div id="_document" class="tabs">
1185
1534
  <h1 style="display: none">Document</h1>
1186
1535
  <ul>
1187
- <li><a href="#Introduction">Introduction</a></li>
1536
+ <li><a href="#Welcome">Welcome</a></li>
1188
1537
  <li><a href="#Setup">Setup</a></li>
1189
1538
  <li><a href="#Usage">Usage</a></li>
1190
1539
  <li><a href="#History">History</a></li>
@@ -1192,85 +1541,84 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1192
1541
 
1193
1542
 
1194
1543
 
1195
-
1196
-
1197
-
1198
-
1199
-
1200
- <div class="chapter" id="Introduction">
1201
- <a name="Introduction"/><div class="nav"><a title="Focus this segment" href="#Introduction"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus next segment" href="#Features"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Introduction"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1544
+ <div class="part" id="Welcome">
1545
+ <div style="display: none"><br/><hr/><br/></div><a name="Welcome"/><div class="nav"><a title="Here" href="#Welcome"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Next" href="#Features"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Welcome"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1202
1546
  <h1 class="title">
1203
- Chapter&nbsp;1
1547
+ Part&nbsp;1
1204
1548
  <br/>
1205
- <big>Introduction</big>
1549
+ <big>Welcome</big>
1206
1550
  </h1>
1207
1551
  <div class="content"><p>Dfect is an assertion testing library for Ruby that emphasizes a simple assertion vocabulary, instant debuggability of failures, and flexibility in composing tests.</p>
1208
1552
 
1209
- <ul>
1210
- <li><a class="xref" href="#History" title="Chapter 4. &quot;History&quot;">What&#8217;s new?</a> &#8212; history of project releases.</li>
1211
-
1212
- <li><a href='http://github.com/sunaku/dfect'>Source code</a> &#8212; obtain via <a href='http://git-scm.com'>Git</a> or browse online.</li>
1213
-
1214
- <li><a href='./api/index.html'>API reference</a> &#8212; documentation for source code.</li>
1215
-
1216
- <li><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> &#8212; the Dfect project home page.</li>
1217
- </ul>
1218
-
1219
- <p>To get help or provide feedback, simply <a class="xref" href="#License" title="Section 1.4. &quot;License&quot;">contact the author(s)</a>.</p>
1220
-
1221
- <div class="tabs"><ul><li><a href="#Features">Features</a></li><li><a href="#Motivation">Motivation</a></li><li><a href="#Etymology">Etymology</a></li><li><a href="#License">License</a></li><li><a href="#Credits">Credits</a></li><li><a href="#Related-works">Related works</a></li></ul>
1222
- <div class="section" id="Features">
1223
- <a name="Features"/><div class="nav"><a title="Focus this segment" href="#Features"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Introduction"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Motivation"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Features"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1224
- <h1 class="title">
1225
- 1.1&nbsp;&nbsp;Features
1226
- </h1>
1227
- <div class="content"><p>Dfect is exciting because:</p>
1228
1553
 
1229
- <ul>
1230
- <li>It has only 5 methods to remember: D F E C T.</li>
1554
+ <div class="paragraph" id="Resources">
1555
+ <div style="display: none"><br/><hr/><br/></div><a name="Resources"/><div class="nav"><a title="Here" href="#Resources"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
1556
+ <p class="title">Resources</p>
1557
+ <div class="content"><ul>
1558
+ <li>
1559
+ <p><a class="xref" href="#History" title="Part 4. &quot;History&quot;">What&#8217;s new?</a> &#8212; release notes and project history.</p>
1560
+ </li>
1231
1561
 
1232
- <li>It lets you debug assertion failures interactively.</li>
1562
+ <li>
1563
+ <p><a href='http://github.com/sunaku/dfect/issues'>Issue tracker</a> &#8212; report bugs, request features, or ask for help.</p>
1564
+ </li>
1233
1565
 
1234
- <li>It keeps a detailed report of assertion failures.</li>
1566
+ <li>
1567
+ <p><a href='http://github.com/sunaku/dfect'>Source code</a> &#8212; browse online or obtain using <a href='http://git-scm.com'>Git</a></p>
1568
+ </li>
1235
1569
 
1236
- <li>It lets you nest tests and execution hooks.</li>
1570
+ <li>
1571
+ <p><a href='api/index.html'>API reference</a> &#8212; documentation for source code.</p>
1572
+ </li>
1237
1573
 
1238
- <li>Its core consists of a mere 313 lines of code.</li>
1574
+ <li>
1575
+ <p><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> &#8212; the official project home page.</p>
1576
+ </li>
1239
1577
  </ul></div>
1240
1578
  </div>
1241
1579
 
1242
1580
 
1243
-
1244
- <div class="section" id="Motivation">
1245
- <a name="Motivation"/><div class="nav"><a title="Focus this segment" href="#Motivation"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Features"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Etymology"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Motivation"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1581
+ <div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Features"><span class="section_number">1.1&nbsp;&nbsp;</span>Features</a></li><li><a href="#Etymology"><span class="section_number">1.2&nbsp;&nbsp;</span>Etymology</a></li><li><a href="#License"><span class="section_number">1.3&nbsp;&nbsp;</span>License</a></li><li><a href="#Credits"><span class="section_number">1.4&nbsp;&nbsp;</span>Credits</a></li><li><a href="#Related-works"><span class="section_number">1.5&nbsp;&nbsp;</span>Related works</a></li></ul>
1582
+ <div class="section" id="Features">
1583
+ <div style="display: none"><br/><hr/><br/></div><a name="Features"/><div class="nav"><a title="Here" href="#Features"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Welcome"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Etymology"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Features"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1246
1584
  <h1 class="title">
1247
- 1.2&nbsp;&nbsp;Motivation
1585
+ <span class="section_number">1.1&nbsp;&nbsp;</span>Features
1248
1586
  </h1>
1249
- <div class="content"><p>The basic premise of Dfect is that, when a failure occurs, I want to be put inside an interactive debugger where I have the freedom to properly scrutinize the state of my program and determine the root cause of the failure.</p>
1250
-
1251
- <p>Other testing libraries do not fulfill this need. Instead, they simply report each failed assertion along with a stack trace (if I am lucky) and abruptly terminate my program.</p>
1587
+ <div class="content"><p>Dfect is exciting because:</p>
1252
1588
 
1253
- <p>This deliberate separation of <em>fault</em> (my program being in an erroneous state) and <em>cause</em> (the source code of my program which caused the fault) reduces me to a primitive and laborious investigative technique known as &#8221;<a href='http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html#PRINTF'>printf debugging</a>&#8221;.</p>
1589
+ <ul>
1590
+ <li>
1591
+ <p>There are only 5 methods to remember: D F E C T.</p>
1592
+ </li>
1254
1593
 
1255
- <p>If you are not the least bit <em>unsettled</em> by those two words, then recall your first encounter with <a href='http://tryruby.hobix.com/'>IRB, the interactive Ruby shell</a>: remember how you would enter code expressions and IRB would <em>instantly</em> evaluate them and show you the result?</p>
1594
+ <li>
1595
+ <p>It lets you debug assertion failures interactively.</p>
1596
+ </li>
1256
1597
 
1257
- <p>What an immense productivity boost! A <em>stark contrast</em> to the endless toil of wrapping every such experiment in standard boilerplate (<code class="line">public static void</code>&#8230;), saving the result to a correctly named file, invoking the C/C++/Java compiler, and finally executing the binary&#8212;only to be greeted by a <a href='http://en.wikipedia.org/wiki/Segmentation_fault'>segfault</a>. ;-)</p>
1598
+ <li>
1599
+ <p>It keeps a detailed report of assertion failures.</p>
1600
+ </li>
1258
1601
 
1259
- <p>I exaggerate, for the sake of entertainment, of course. But my point is that the Ruby testing libraries of today have (thus far) limited our productivity by orphaning us from the nurturing environment of IRB and shooing us off to a barren desert of antiquated techniques. How cruel!</p>
1602
+ <li>
1603
+ <p>It lets you nest tests and execution hooks.</p>
1604
+ </li>
1260
1605
 
1261
- <p>And that, I say, is why Dfect is essential to Ruby developers today. It reunites us with our playful, interactive, <em>real-time</em> IRB roots and, with unwavering tenacity, enables us to investigate failures <em>productively</em>!</p></div>
1606
+ <li>
1607
+ <p>Its core consists of a mere 378 lines of code.</p>
1608
+ </li>
1609
+ </ul></div>
1262
1610
  </div>
1263
1611
 
1264
1612
 
1265
1613
 
1266
1614
  <div class="section" id="Etymology">
1267
- <a name="Etymology"/><div class="nav"><a title="Focus this segment" href="#Etymology"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Motivation"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#License"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Etymology"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1615
+ <div style="display: none"><br/><hr/><br/></div><a name="Etymology"/><div class="nav"><a title="Here" href="#Etymology"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Features"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#License"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Etymology"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1268
1616
  <h1 class="title">
1269
- 1.3&nbsp;&nbsp;Etymology
1617
+ <span class="section_number">1.2&nbsp;&nbsp;</span>Etymology
1270
1618
  </h1>
1271
1619
  <div class="content"><p>Dfect is named after the D F E C T methods it provides.</p>
1272
1620
 
1273
- <p>The name is also play on the word &#8220;defect&#8221;, whereby the intentional misspelling of &#8220;defect&#8221; as &#8220;dfect&#8221; is a defect in itself! <tt>;-)</tt></p>
1621
+ <p>The name is also play on the word &#8220;defect&#8221;, whereby the intentional misspelling of &#8220;defect&#8221; as &#8220;dfect&#8221; is a defect in itself! ;-)</p>
1274
1622
 
1275
1623
  <p>This wordplay is similar to <a href='http://www.erlang.org/doc/apps/mnesia/index.html'>Mnesia</a>&#8217;s play on the word &#8220;amnesia&#8221;, whereby the intentional omission of the letter &#8220;A&#8221; indicates forgetfulness&#8212;the key characteristic of having amnesia. Clever!</p></div>
1276
1624
  </div>
@@ -1278,9 +1626,9 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1278
1626
 
1279
1627
 
1280
1628
  <div class="section" id="License">
1281
- <a name="License"/><div class="nav"><a title="Focus this segment" href="#License"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Etymology"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Credits"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__License"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1629
+ <div style="display: none"><br/><hr/><br/></div><a name="License"/><div class="nav"><a title="Here" href="#License"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Etymology"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Credits"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-License"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1282
1630
  <h1 class="title">
1283
- 1.4&nbsp;&nbsp;License
1631
+ <span class="section_number">1.3&nbsp;&nbsp;</span>License
1284
1632
  </h1>
1285
1633
  <div class="content"><p>(the ISC license)</p>
1286
1634
 
@@ -1294,25 +1642,25 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1294
1642
 
1295
1643
 
1296
1644
  <div class="section" id="Credits">
1297
- <a name="Credits"/><div class="nav"><a title="Focus this segment" href="#Credits"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#License"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Related-works"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Credits"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1645
+ <div style="display: none"><br/><hr/><br/></div><a name="Credits"/><div class="nav"><a title="Here" href="#Credits"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#License"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Related-works"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Credits"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1298
1646
  <h1 class="title">
1299
- 1.5&nbsp;&nbsp;Credits
1647
+ <span class="section_number">1.4&nbsp;&nbsp;</span>Credits
1300
1648
  </h1>
1301
- <div class="content"><p>Dfect is made possible by <a class="xref" href="#History" title="Chapter 4. &quot;History&quot;">contributions</a> from users like you:</p>
1649
+ <div class="content"><p>Dfect is made possible by <a class="xref" href="#History" title="Part 4. &quot;History&quot;">contributions</a> from users like you:</p>
1302
1650
 
1303
1651
  <ul>
1304
- <li><a href='http://github.com/francois'>François Beausoleil</a></li>
1652
+ <li>François Beausoleil <a href='http://github.com/francois'>http://github.com/francois</a></li>
1305
1653
 
1306
- <li><a href='http://github.com/ibc'>Iñaki Baz Castillo</a></li>
1654
+ <li>Iñaki Baz Castillo <a href='http://github.com/ibc'>http://github.com/ibc</a></li>
1307
1655
  </ul></div>
1308
1656
  </div>
1309
1657
 
1310
1658
 
1311
1659
 
1312
1660
  <div class="section" id="Related-works">
1313
- <a name="Related-works"/><div class="nav"><a title="Focus this segment" href="#Related-works"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Credits"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Setup"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Related-works"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1661
+ <div style="display: none"><br/><hr/><br/></div><a name="Related-works"/><div class="nav"><a title="Here" href="#Related-works"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Credits"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Setup"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Related-works"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1314
1662
  <h1 class="title">
1315
- 1.6&nbsp;&nbsp;Related works
1663
+ <span class="section_number">1.5&nbsp;&nbsp;</span>Related works
1316
1664
  </h1>
1317
1665
  <div class="content"><ul>
1318
1666
  <li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li>
@@ -1329,7 +1677,7 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1329
1677
 
1330
1678
  <li><a href='http://test-spec.rubyforge.org/test-spec'>test-spec</a></li>
1331
1679
 
1332
- <li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a></li>
1680
+ <li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/'>Test::Unit</a></li>
1333
1681
 
1334
1682
  <li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li>
1335
1683
 
@@ -1340,62 +1688,82 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1340
1688
  </div>
1341
1689
 
1342
1690
 
1343
-
1344
-
1345
- <div class="chapter" id="Setup">
1346
- <a name="Setup"/><div class="nav"><a title="Focus this segment" href="#Setup"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Related-works"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Requirements"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Setup"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1691
+ <div class="part" id="Setup">
1692
+ <div style="display: none"><br/><hr/><br/></div><a name="Setup"/><div class="nav"><a title="Here" href="#Setup"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Related-works"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Prerequisites"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Setup"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1347
1693
  <h1 class="title">
1348
- Chapter&nbsp;2
1694
+ Part&nbsp;2
1349
1695
  <br/>
1350
1696
  <big>Setup</big>
1351
1697
  </h1>
1352
- <div class="content"><div class="tabs"><ul><li><a href="#Requirements">Requirements</a></li><li><a href="#Installation">Installation</a></li><li><a href="#Version-numbers">Version numbers</a></li></ul>
1353
- <div class="section" id="Requirements">
1354
- <a name="Requirements"/><div class="nav"><a title="Focus this segment" href="#Requirements"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Setup"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Installation"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Requirements"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1698
+ <div class="content"><div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Prerequisites"><span class="section_number">2.1&nbsp;&nbsp;</span>Prerequisites</a></li><li><a href="#Installing"><span class="section_number">2.2&nbsp;&nbsp;</span>Installing</a></li><li><a href="#Upgrading"><span class="section_number">2.3&nbsp;&nbsp;</span>Upgrading</a></li><li><a href="#Uninstalling"><span class="section_number">2.4&nbsp;&nbsp;</span>Uninstalling</a></li></ul>
1699
+ <div class="section" id="Prerequisites">
1700
+ <div style="display: none"><br/><hr/><br/></div><a name="Prerequisites"/><div class="nav"><a title="Here" href="#Prerequisites"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Setup"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Installing"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Prerequisites"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1355
1701
  <h1 class="title">
1356
- 2.1&nbsp;&nbsp;Requirements
1702
+ <span class="section_number">2.1&nbsp;&nbsp;</span>Prerequisites
1357
1703
  </h1>
1358
- <div class="content"><p>Your system needs the following software to run Dfect.</p>
1704
+ <div class="content"><ul>
1705
+ <li>
1706
+ <p><a href='http://ruby-lang.org'>Ruby</a> 1.8.6 or newer.</p>
1707
+ </li>
1359
1708
 
1360
- <ins><table border="1"><thead><tr><th>Software</th><th>Description</th><th>Notes</th></tr></thead><tbody><tr><td><a href='http://ruby-lang.org'>Ruby</a></td><td>Ruby language interpreter</td><td>Version 1.8.6, 1.8.7, and 1.9.1 have been tested successfully.</td></tr><tr><td><a href='http://rubygems.org'>RubyGems</a></td><td>Ruby packaging system</td><td>Version 1.3.1 is or newer required.</td></tr><tr><td><a href='http://www.datanoise.com/ruby-debug'>ruby-debug</a></td><td>Interactive debugger</td><td><strong>This requirement is optional.</strong> If this library is not available, then IRB (the standard interactive Ruby shell) will be used instead.</td></tr></tbody></table></ins></div>
1709
+ <li>
1710
+ <p><a href='http://rubygems.org'>RubyGems</a> 1.3.6 or newer.</p>
1711
+ </li>
1712
+
1713
+ <li>
1714
+ <p><a href='http://www.datanoise.com/ruby-debug'>ruby-debug</a> will be used if it is available. Otherwise the standard interactive Ruby shell (IRB) will be used instead.</p>
1715
+ </li>
1716
+ </ul></div>
1361
1717
  </div>
1362
1718
 
1363
- <div class="section" id="Installation">
1364
- <a name="Installation"/><div class="nav"><a title="Focus this segment" href="#Installation"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Requirements"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-numbers"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Installation"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1365
- <h1 class="title">
1366
- 2.2&nbsp;&nbsp;Installation
1367
- </h1>
1368
- <div class="content"><p>You can install Dfect by running this command:</p>
1369
1719
 
1370
- <pre>gem install dfect</pre>
1371
1720
 
1372
- <p>If you want to develop Dfect, run this command:</p>
1373
-
1374
- <pre>gem install dfect --development</pre></div>
1721
+ <div class="section" id="Installing">
1722
+ <div style="display: none"><br/><hr/><br/></div><a name="Installing"/><div class="nav"><a title="Here" href="#Installing"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Prerequisites"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#gem-install-dfect"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Installing"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1723
+ <h1 class="title">
1724
+ <span class="section_number">2.2&nbsp;&nbsp;</span>Installing
1725
+ </h1>
1726
+ <div class="content">
1727
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-install-dfect">
1728
+ <div style="display: none"><br/><hr/><br/></div><a name="gem-install-dfect"/><div class="nav"><a title="Here" href="#gem-install-dfect"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Installing"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Upgrading"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-gem-install-dfect"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1729
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 1.&nbsp;&nbsp;</span><tt>gem install dfect</tt></p>
1730
+ </div>
1731
+ </div>
1375
1732
  </div>
1376
1733
 
1377
-
1378
-
1379
- <div class="section" id="Version-numbers">
1380
- <a name="Version-numbers"/><div class="nav"><a title="Focus this segment" href="#Version-numbers"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Installation"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Usage"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-numbers"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1734
+ <div class="section" id="Upgrading">
1735
+ <div style="display: none"><br/><hr/><br/></div><a name="Upgrading"/><div class="nav"><a title="Here" href="#Upgrading"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#gem-install-dfect"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#gem-update-dfect"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Upgrading"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1381
1736
  <h1 class="title">
1382
- 2.3&nbsp;&nbsp;Version numbers
1737
+ <span class="section_number">2.3&nbsp;&nbsp;</span>Upgrading
1383
1738
  </h1>
1384
- <div class="content"><p>Dfect releases are numbered in <em>major.minor.patch</em> form according to the <a href='http://www.rubygems.org/read/chapter/7'>RubyGems rational versioning policy</a>, which can be summarized as follows:</p>
1739
+ <div class="content">
1740
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-update-dfect">
1741
+ <div style="display: none"><br/><hr/><br/></div><a name="gem-update-dfect"/><div class="nav"><a title="Here" href="#gem-update-dfect"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Upgrading"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Uninstalling"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-gem-update-dfect"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1742
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 2.&nbsp;&nbsp;</span><tt>gem update dfect</tt></p>
1743
+ </div>
1744
+ </div>
1745
+ </div>
1385
1746
 
1386
- <ins><table border="1"><thead><tr><td rowspan="2">What increased in the version number?</td><td colspan="3">The increase indicates that the release:</td></tr><tr><th>Is backward compatible?</th><th>Has new features?</th><th>Has bug fixes?</th></tr></thead><tbody><tr><th>major</th><td style="background-color: #FFE4E1;">No</td><td>Yes</td><td>Yes</td></tr><tr><th>minor</th><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><th>patch</th><td>Yes</td><td style="background-color: #FFE4E1;">No</td><td>Yes</td></tr></tbody></table></ins></div>
1747
+ <div class="section" id="Uninstalling">
1748
+ <div style="display: none"><br/><hr/><br/></div><a name="Uninstalling"/><div class="nav"><a title="Here" href="#Uninstalling"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#gem-update-dfect"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#gem-uninstall-dfect"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Uninstalling"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1749
+ <h1 class="title">
1750
+ <span class="section_number">2.4&nbsp;&nbsp;</span>Uninstalling
1751
+ </h1>
1752
+ <div class="content">
1753
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-uninstall-dfect">
1754
+ <div style="display: none"><br/><hr/><br/></div><a name="gem-uninstall-dfect"/><div class="nav"><a title="Here" href="#gem-uninstall-dfect"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Uninstalling"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Usage"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-gem-uninstall-dfect"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1755
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 3.&nbsp;&nbsp;</span><tt>gem uninstall dfect</tt></p>
1756
+ </div>
1757
+ </div>
1387
1758
  </div>
1388
1759
  </div></div>
1389
1760
  </div>
1390
1761
 
1391
1762
 
1392
-
1393
-
1394
-
1395
- <div class="chapter" id="Usage">
1396
- <a name="Usage"/><div class="nav"><a title="Focus this segment" href="#Usage"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Version-numbers"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Assertions"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Usage"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1763
+ <div class="part" id="Usage">
1764
+ <div style="display: none"><br/><hr/><br/></div><a name="Usage"/><div class="nav"><a title="Here" href="#Usage"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#gem-uninstall-dfect"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Assertions"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Usage"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1397
1765
  <h1 class="title">
1398
- Chapter&nbsp;3
1766
+ Part&nbsp;3
1399
1767
  <br/>
1400
1768
  <big>Usage</big>
1401
1769
  </h1>
@@ -1403,7 +1771,7 @@ jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(v
1403
1771
 
1404
1772
  <ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span> <span style="color:#888"># only necessary if you are using Ruby 1.8</span>
1405
1773
  require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect</span><span style="color:#710">'</span></span>
1406
- </pre></ins><p> You now have access to the <a href='api/classes/Dfect.html'><code class="line"><span style="color:#036;font-weight:bold">Dfect</span></code> module</a>, which provides methods that can be mixed-in or called directly, according to your preference:</p>
1774
+ </pre></ins><p> You now have access to the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span></code> module, which provides methods that can be either mixed-in or called directly, according to your preference:</p>
1407
1775
 
1408
1776
  <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.<span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">hello</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="color:#888"># D() is a class method</span>
1409
1777
  puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">world</span><span style="color:#710">&quot;</span></span>
@@ -1416,39 +1784,43 @@ include <span style="color:#036;font-weight:bold">Dfect</span> <span style
1416
1784
  <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">hello</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="color:#888"># D() is an instance method</span>
1417
1785
  puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">world</span><span style="color:#710">&quot;</span></span>
1418
1786
  <span style="color:#080;font-weight:bold">end</span>
1419
- </pre></ins><p> The following sections explain these provided methods in detail. If you are impatient, you can skip to <a class="xref" href="#A-sample-unit-test" title="Example 1">A sample unit test</a> for an illustrative example.</p>
1787
+ </pre></ins>
1420
1788
 
1421
- <div class="tabs"><ul><li><a href="#Assertions">Assertions</a></li><li><a href="#Tests">Tests</a></li><li><a href="#Execution">Execution</a></li><li><a href="#Reporting">Reporting</a></li><li><a href="#Emulation">Emulation</a></li></ul>
1789
+ <div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Assertions"><span class="section_number">3.1&nbsp;&nbsp;</span>Assertions</a></li><li><a href="#Tests"><span class="section_number">3.2&nbsp;&nbsp;</span>Tests</a></li></ul>
1422
1790
  <div class="section" id="Assertions">
1423
- <a name="Assertions"/><div class="nav"><a title="Focus this segment" href="#Assertions"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Usage"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Negation"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Assertions"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1791
+ <div style="display: none"><br/><hr/><br/></div><a name="Assertions"/><div class="nav"><a title="Here" href="#Assertions"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Usage"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Negation"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Assertions"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1424
1792
  <h1 class="title">
1425
- 3.1&nbsp;&nbsp;Assertions
1793
+ <span class="section_number">3.1&nbsp;&nbsp;</span>Assertions
1426
1794
  </h1>
1427
- <div class="content"><p>The following methods accept a block parameter and assert something about the result of executing that block. They also accept an optional message, which is shown in <a class="xref" href="#Failures" title="Section 3.1.1. &quot;Failures&quot;">failure reports</a> if they fail.</p>
1795
+ <div class="content"><p>The following methods accept a block parameter and assert something about the result of executing that block. They also accept an optional message, which is shown in <a class="xref" href="#Failures" title="Section 3.1.3. &quot;Failures&quot;">failure reports</a> if they fail.</p>
1428
1796
 
1429
- <p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p>
1797
+ <p>See the <a href='api/index.html'>API reference</a> for more details and examples.</p>
1430
1798
 
1431
- <ins><table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td>T</td><td>assert true (not <code class="line"><span style="color:#038;font-weight:bold">nil</span></code> and not <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td></tr><tr><td>F</td><td>assert not true (<code class="line"><span style="color:#038;font-weight:bold">nil</span></code> or <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td></tr><tr><td>E</td><td>assert that an execption is raised</td></tr><tr><td>C</td><td>assert that a symbol is thrown</td></tr></tbody></table></ins><div class="tabs"><ul><li><a href="#Negation">Negation</a></li><li><a href="#Sampling">Sampling</a></li><li><a href="#Failures">Failures</a></li></ul>
1432
- <div class="paragraph" id="Negation">
1433
- <a name="Negation"/><div class="nav"><a title="Focus this segment" href="#Negation"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Assertions"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Sampling"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Negation"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1434
- <p class="title">Negation</p>
1799
+ <ins><table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td>T</td><td>assert true (not <code class="line"><span style="color:#038;font-weight:bold">nil</span></code> and not <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td></tr><tr><td>F</td><td>assert not true (<code class="line"><span style="color:#038;font-weight:bold">nil</span></code> or <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td></tr><tr><td>E</td><td>assert that an execption is raised</td></tr><tr><td>C</td><td>assert that a symbol is thrown</td></tr></tbody></table></ins><div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Negation"><span class="section_number">3.1.1&nbsp;&nbsp;</span>Negation</a></li><li><a href="#Sampling"><span class="section_number">3.1.2&nbsp;&nbsp;</span>Sampling</a></li><li><a href="#Failures"><span class="section_number">3.1.3&nbsp;&nbsp;</span>Failures</a></li><li><a href="#Emulation"><span class="section_number">3.1.4&nbsp;&nbsp;</span>Emulation</a></li></ul>
1800
+ <div class="section" id="Negation">
1801
+ <div style="display: none"><br/><hr/><br/></div><a name="Negation"/><div class="nav"><a title="Here" href="#Negation"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Assertions"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Sampling"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Negation"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1802
+ <h1 class="title">
1803
+ <span class="section_number">3.1.1&nbsp;&nbsp;</span>Negation
1804
+ </h1>
1435
1805
  <div class="content"><p>These methods are the <em>opposite</em> of <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">normal assertions</a>.</p>
1436
1806
 
1437
1807
  <ins><table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td>T!</td><td>same as F</td></tr><tr><td>F!</td><td>same as T</td></tr><tr><td>E!</td><td>assert that an exception is <em>not</em> raised</td></tr><tr><td>C!</td><td>assert that a symbol is <em>not</em> thrown</td></tr></tbody></table></ins></div>
1438
1808
  </div>
1439
1809
 
1440
- <div class="paragraph" id="Sampling">
1441
- <a name="Sampling"/><div class="nav"><a title="Focus this segment" href="#Sampling"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Negation"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Failures"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Sampling"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1442
- <p class="title">Sampling</p>
1443
- <div class="content"><p>These methods allow you to <em>check the outcome</em> of an <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">assertion</a> without including the assertion in the execution report.</p>
1810
+ <div class="section" id="Sampling">
1811
+ <div style="display: none"><br/><hr/><br/></div><a name="Sampling"/><div class="nav"><a title="Here" href="#Sampling"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Negation"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Failures"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Sampling"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1812
+ <h1 class="title">
1813
+ <span class="section_number">3.1.2&nbsp;&nbsp;</span>Sampling
1814
+ </h1>
1815
+ <div class="content"><p>These methods allow you to <em>check the outcome</em> of an assertion without recording a success or failure for that assertion in the execution report.</p>
1444
1816
 
1445
1817
  <ins><table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td>T?</td><td>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if T passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td></tr><tr><td>F?</td><td>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if F passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td></tr><tr><td>E?</td><td>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if E passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td></tr><tr><td>C?</td><td>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if C passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td></tr></tbody></table></ins></div>
1446
1818
  </div>
1447
1819
 
1448
1820
  <div class="section" id="Failures">
1449
- <a name="Failures"/><div class="nav"><a title="Focus this segment" href="#Failures"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Sampling"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Tests"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Failures"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1821
+ <div style="display: none"><br/><hr/><br/></div><a name="Failures"/><div class="nav"><a title="Here" href="#Failures"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Sampling"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Emulation"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Failures"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1450
1822
  <h1 class="title">
1451
- 3.1.1&nbsp;&nbsp;Failures
1823
+ <span class="section_number">3.1.3&nbsp;&nbsp;</span>Failures
1452
1824
  </h1>
1453
1825
  <div class="content"><p>When an assertion fails, details about the failure will be shown:</p>
1454
1826
 
@@ -1473,21 +1845,39 @@ include <span style="color:#036;font-weight:bold">Dfect</span> <span style
1473
1845
  - test/simple.rb:17
1474
1846
  - test/simple.rb:3</pre>
1475
1847
 
1476
- <p>You will then be placed into a debugger to investigate the failure if the <code class="line"><span style="color:#A60">:debug</span></code> option is enabled in <a href='api/classes/Dfect.html'><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.options</code></a>.</p>
1848
+ <p>You will then be placed into a debugger to investigate the failure if the <code class="line"><span style="color:#A60">:debug</span></code> option is enabled in the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.options</code> hash.</p>
1477
1849
 
1478
- <p>Details about all assertion failures and a trace of all tests executed are stored by Dfect and provided by the <a href='api/classes/Dfect.html'><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.report</code></a> method.</p></div>
1850
+ <p>Details about all assertion failures and a trace of all tests executed are stored by Dfect and provided by the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.report()</code> method.</p></div>
1851
+ </div>
1852
+
1853
+
1854
+
1855
+ <div class="section" id="Emulation">
1856
+ <div style="display: none"><br/><hr/><br/></div><a name="Emulation"/><div class="nav"><a title="Here" href="#Emulation"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Failures"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Tests"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Emulation"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1857
+ <h1 class="title">
1858
+ <span class="section_number">3.1.4&nbsp;&nbsp;</span>Emulation
1859
+ </h1>
1860
+ <div class="content"><p>Dfect provides emulation layers for several popular testing libraries:</p>
1861
+
1862
+ <ul>
1863
+ <li><tt>dfect/unit</tt> &#8212; Test::Unit</li>
1864
+
1865
+ <li><tt>dfect/mini</tt> &#8212; Minitest</li>
1866
+
1867
+ <li><tt>dfect/spec</tt> &#8212; RSpec</li>
1868
+ </ul>
1869
+
1870
+ <p>Simply <code class="line">require()</code> one of these emulation layers into your test suite and you can write your tests using the familiar syntax of that testing library. See <a href='http://github.com/sunaku/dfect/tree/master/lib/dfect/'>their source code</a> for more details.</p></div>
1479
1871
  </div>
1480
1872
  </div></div>
1481
1873
  </div>
1482
1874
 
1483
1875
  <div class="section" id="Tests">
1484
- <a name="Tests"/><div class="nav"><a title="Focus this segment" href="#Tests"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Failures"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Hooks"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Tests"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1876
+ <div style="display: none"><br/><hr/><br/></div><a name="Tests"/><div class="nav"><a title="Here" href="#Tests"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Emulation"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Execution"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Tests"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1485
1877
  <h1 class="title">
1486
- 3.2&nbsp;&nbsp;Tests
1878
+ <span class="section_number">3.2&nbsp;&nbsp;</span>Tests
1487
1879
  </h1>
1488
- <div class="content"><p>The <a href='api/classes/Dfect.html'><code class="line">D()</code> method</a> defines a new <strong>test</strong>, which is analagous to the <code class="line">describe()</code> environment provided by BDD frameworks like RSpec.</p>
1489
-
1490
- <p>A test may also contain nested tests.</p>
1880
+ <div class="content"><p>The <code class="line">D()</code> method defines a new Dfect <strong>test</strong>, which is analagous to the concept of <strong>test case</strong> in xUnit or <strong>describe</strong> in rSpec. A test may contain nested tests.</p>
1491
1881
 
1492
1882
  <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">outer test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
1493
1883
  <span style="color:#888"># assertions and logic here</span>
@@ -1498,13 +1888,44 @@ include <span style="color:#036;font-weight:bold">Dfect</span> <span style
1498
1888
  <span style="color:#080;font-weight:bold">end</span>
1499
1889
  </pre></ins>
1500
1890
 
1501
- <div class="tabs"><ul><li><a href="#Hooks">Hooks</a></li><li><a href="#Insulation">Insulation</a></li></ul>
1891
+ <div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Execution"><span class="section_number">3.2.1&nbsp;&nbsp;</span>Execution</a></li><li><a href="#Sharing"><span class="section_number">3.2.2&nbsp;&nbsp;</span>Sharing</a></li><li><a href="#Insulation"><span class="section_number">3.2.3&nbsp;&nbsp;</span>Insulation</a></li></ul>
1892
+ <div class="section" id="Execution">
1893
+ <div style="display: none"><br/><hr/><br/></div><a name="Execution"/><div class="nav"><a title="Here" href="#Execution"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Tests"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Hooks"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Execution"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1894
+ <h1 class="title">
1895
+ <span class="section_number">3.2.1&nbsp;&nbsp;</span>Execution
1896
+ </h1>
1897
+ <div class="content"><p>Tests are executed in depth-first order.</p>
1898
+
1899
+ <p>You can configure the test execution process using:</p>
1900
+
1901
+ <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.options = your_options_hash
1902
+ </pre></ins><p> You can execute all tests defined thus far using:</p>
1903
+
1904
+ <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.run
1905
+ </pre></ins><p> You can stop the execution at any time using:</p>
1906
+
1907
+ <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.stop
1908
+ </pre></ins><p> You can view the results of execution using:</p>
1909
+
1910
+ <ins><pre lang="ruby" class="para">puts <span style="color:#036;font-weight:bold">Dfect</span>.report.to_yaml
1911
+ </pre></ins><p> See the <a href='api/index.html'>API reference</a> for details and examples.</p>
1912
+
1913
+
1914
+ <div class="paragraph" id="Automatic-test-execution">
1915
+ <div style="display: none"><br/><hr/><br/></div><a name="Automatic-test-execution"/><div class="nav"><a title="Here" href="#Automatic-test-execution"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
1916
+ <p class="title">Automatic test execution</p>
1917
+ <div class="content"><p>To mix-in the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span></code> module into your program and execute all tests defined by your program before it terminates, simply add the following line at the top of your program:</p>
1918
+
1919
+ <ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
1920
+ </pre></ins></div>
1921
+ </div>
1922
+ <div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Hooks"><span class="section_number">3.2.1.1&nbsp;&nbsp;</span>Hooks</a></li><li><a href="#Logging"><span class="section_number">3.2.1.2&nbsp;&nbsp;</span>Logging</a></li></ul>
1502
1923
  <div class="section" id="Hooks">
1503
- <a name="Hooks"/><div class="nav"><a title="Focus this segment" href="#Hooks"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Tests"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Insulation"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Hooks"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1924
+ <div style="display: none"><br/><hr/><br/></div><a name="Hooks"/><div class="nav"><a title="Here" href="#Hooks"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Execution"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Logging"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Hooks"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1504
1925
  <h1 class="title">
1505
- 3.2.1&nbsp;&nbsp;Hooks
1926
+ <span class="section_number">3.2.1.1&nbsp;&nbsp;</span>Hooks
1506
1927
  </h1>
1507
- <div class="content"><p>The <a href='api/classes/Dfect.html'><code class="line">D()</code> method</a> provides several entry points (hooks) into the test execution process:</p>
1928
+ <div class="content"><p>The <code class="line">D()</code> method provides several entry points (hooks) into the test execution process:</p>
1508
1929
 
1509
1930
  <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">outer test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
1510
1931
  <span style="color:#036;font-weight:bold">D</span> .&lt; { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">before each nested test</span><span style="color:#710">&quot;</span></span> }
@@ -1523,441 +1944,353 @@ include <span style="color:#036;font-weight:bold">Dfect</span> <span style
1523
1944
  </pre></ins></div>
1524
1945
  </div>
1525
1946
 
1526
- <div class="section" id="Insulation">
1527
- <a name="Insulation"/><div class="nav"><a title="Focus this segment" href="#Insulation"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Hooks"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Execution"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Insulation"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1947
+ <div class="section" id="Logging">
1948
+ <div style="display: none"><br/><hr/><br/></div><a name="Logging"/><div class="nav"><a title="Here" href="#Logging"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Hooks"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Logging-information-in-the-execution-report"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Logging"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1528
1949
  <h1 class="title">
1529
- 3.2.2&nbsp;&nbsp;Insulation
1950
+ <span class="section_number">3.2.1.2&nbsp;&nbsp;</span>Logging
1530
1951
  </h1>
1531
- <div class="content"><p>Use the singleton class of a temporary object to shield your test logic from Ruby&#8217;s global environment, the code being tested, and from other tests:</p>
1952
+ <div class="content"><p>The <code class="line">L()</code> method lets you insert log messages, composed of arbitrary Ruby objects, into the test execution report.</p>
1532
1953
 
1533
- <ins><pre lang="ruby" class="para"><span style="color:#080;font-weight:bold">class</span> &lt;&lt; <span style="color:#B06;font-weight:bold">Object</span>.new
1534
- <span style="color:#888"># your test logic here</span>
1535
- <span style="color:#080;font-weight:bold">end</span>
1536
- </pre></ins><p> Inside this insulated environment, you are free to:</p>
1537
1954
 
1538
- <ul>
1539
- <li>mix-in any modules your test logic needs</li>
1955
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Logging-information-in-the-execution-report">
1956
+ <div style="display: none"><br/><hr/><br/></div><a name="Logging-information-in-the-execution-report"/><div class="nav"><a title="Here" href="#Logging-information-in-the-execution-report"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Logging"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Sharing"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Logging-information-in-the-execution-report"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1957
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 1.&nbsp;&nbsp;</span>Logging information in the execution report</p>
1958
+ <div class="content"><p>When the following test is run:</p>
1540
1959
 
1541
- <li>define your own constants, methods, and classes</li>
1542
- </ul>
1543
-
1544
- <p>For example:</p>
1545
-
1546
- <ins><pre lang="ruby" class="para"><span style="color:#080;font-weight:bold">class</span> &lt;&lt; <span style="color:#B06;font-weight:bold">Object</span>.new
1547
- include <span style="color:#036;font-weight:bold">SomeModule</span>
1548
- extend <span style="color:#036;font-weight:bold">AnotherModule</span>
1549
-
1550
- <span style="color:#036;font-weight:bold">YOUR_CONSTANT</span> = <span style="color:#00D;font-weight:bold">123</span>
1551
-
1552
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">your tests here</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
1553
- <span style="color:#888"># your test logic here</span>
1554
-
1555
- your_helper_method
1556
- <span style="color:#080;font-weight:bold">end</span>
1960
+ <ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
1557
1961
 
1558
- <span style="color:#080;font-weight:bold">def</span> <span style="color:#038;font-weight:bold">self</span>.your_helper_method
1559
- <span style="color:#888"># your helper logic here</span>
1560
-
1561
- helper = <span style="color:#036;font-weight:bold">YourHelperClass</span>.new
1562
- helper.do_something_helpful
1962
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Wizard</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1963
+ <span style="color:#036;font-weight:bold">L</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Preparing spell to defeat mortal foes...</span><span style="color:#710">'</span></span>
1964
+ <span style="color:#080;font-weight:bold">end</span>
1563
1965
 
1564
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#00D;font-weight:bold">2</span> + <span style="color:#00D;font-weight:bold">2</span> != <span style="color:#00D;font-weight:bold">5</span> }
1565
- <span style="color:#080;font-weight:bold">end</span>
1966
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Magician</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1967
+ <span style="color:#036;font-weight:bold">L</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Preparing rabbits to pull from hat...</span><span style="color:#710">'</span></span>, rand(<span style="color:#00D;font-weight:bold">15</span>)
1968
+ <span style="color:#080;font-weight:bold">end</span>
1566
1969
 
1567
- <span style="color:#080;font-weight:bold">class</span> <span style="color:#B06;font-weight:bold">YourHelperClass</span>
1568
- <span style="color:#888"># your helper logic here</span>
1569
- <span style="color:#080;font-weight:bold">end</span>
1970
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Calculator</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1971
+ <span style="color:#036;font-weight:bold">L</span> <span style="color:#036;font-weight:bold">Math</span>::<span style="color:#036;font-weight:bold">PI</span>, [<span style="color:#00D;font-weight:bold">1</span>, <span style="color:#00D;font-weight:bold">2</span>, <span style="color:#00D;font-weight:bold">3</span>, [<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">b</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">c</span><span style="color:#710">'</span></span>]], {<span style="color:#A60">:foo</span> =&gt; <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">bar!</span><span style="color:#710">'</span></span>}
1570
1972
  <span style="color:#080;font-weight:bold">end</span>
1571
- </pre></ins></div>
1973
+ </pre></ins><p> Dfect will output the following:</p>
1974
+
1975
+ <pre>---
1976
+ - Wizard:
1977
+ - Preparing spell to defeat mortal foes...
1978
+ - Magician:
1979
+ - Preparing rabbits to pull from hat...
1980
+ - 9
1981
+ - Calculator:
1982
+ - 3.14159265358979
1983
+ - - 1
1984
+ - 2
1985
+ - 3
1986
+ - - a
1987
+ - b
1988
+ - c
1989
+ - foo: bar!
1990
+ ---
1991
+ time: 0.000196246</pre></div>
1572
1992
  </div>
1573
- </div></div>
1574
1993
  </div>
1575
-
1576
- <div class="section" id="Execution">
1577
- <a name="Execution"/><div class="nav"><a title="Focus this segment" href="#Execution"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Insulation"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Automatic-test-execution"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Execution"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1578
- <h1 class="title">
1579
- 3.3&nbsp;&nbsp;Execution
1580
- </h1>
1581
- <div class="content"><p>You can configure test execution using:</p>
1582
-
1583
- <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.options = your_options_hash
1584
- </pre></ins><p> You can execute all tests defined thus far using:</p>
1585
-
1586
- <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.run
1587
- </pre></ins><p> You can stop this execution at any time using:</p>
1588
-
1589
- <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.stop
1590
- </pre></ins><p> You can view the results of execution using:</p>
1591
-
1592
- <ins><pre lang="ruby" class="para">puts <span style="color:#036;font-weight:bold">Dfect</span>.report.to_yaml
1593
- </pre></ins><p> See the <a href='./api/index.html'>API documentation</a> for details and examples.</p>
1594
-
1595
- <div class="tabs"><ul><li><a href="#Automatic-test-execution">Automatic test execution</a></li></ul>
1596
- <div class="section" id="Automatic-test-execution">
1597
- <a name="Automatic-test-execution"/><div class="nav"><a title="Focus this segment" href="#Automatic-test-execution"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Execution"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Reporting"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Automatic-test-execution"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1598
- <h1 class="title">
1599
- 3.3.1&nbsp;&nbsp;Automatic test execution
1600
- </h1>
1601
- <div class="content"><ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span> <span style="color:#888"># only necessary if you are using Ruby 1.8</span>
1602
- require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span> <span style="color:#888"># &lt;== notice the &quot;auto&quot;</span>
1603
- </pre></ins> The above code will mix-in the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span></code> module into your program and will execute all tests defined by your program before it terminates.</div>
1604
1994
  </div>
1605
1995
  </div></div>
1606
1996
  </div>
1607
1997
 
1608
- <div class="section" id="Reporting">
1609
- <a name="Reporting"/><div class="nav"><a title="Focus this segment" href="#Reporting"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Automatic-test-execution"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Emulation"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Reporting"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1998
+ <div class="section" id="Sharing">
1999
+ <div style="display: none"><br/><hr/><br/></div><a name="Sharing"/><div class="nav"><a title="Here" href="#Sharing"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Logging-information-in-the-execution-report"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Sharing-code-between-tests"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Sharing"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1610
2000
  <h1 class="title">
1611
- 3.4&nbsp;&nbsp;Reporting
2001
+ <span class="section_number">3.2.2&nbsp;&nbsp;</span>Sharing
1612
2002
  </h1>
1613
- <div class="content"><p>You can insert status messages, which can be arbitrary Ruby objects, into the execution report using the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::S()</code> method.</p>
2003
+ <div class="content"><p>The <code class="line">S()</code> method is a mechanism for sharing code. When called with a block, it shares the given block (under a given identifier) for injection into other tests. When called without a block, it injects a previously shared block (under a given identifier) into the environment where it is called.</p>
1614
2004
 
1615
- <p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p></div>
1616
- </div>
2005
+ <p>The <code class="line">S!()</code> method is a combination of the two uses of the <code class="line">S()</code> method: it lets you simultaneously share a block of code while injecting it into the environment where that method is called.</p>
1617
2006
 
2007
+ <p>The <code class="line">S?()</code> method simply checks whether any code has been shared under a given identifier.</p>
1618
2008
 
1619
2009
 
1620
- <div class="section" id="Emulation">
1621
- <a name="Emulation"/><div class="nav"><a title="Focus this segment" href="#Emulation"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Reporting"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#A-sample-unit-test"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Emulation"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1622
- <h1 class="title">
1623
- 3.5&nbsp;&nbsp;Emulation
1624
- </h1>
1625
- <div class="content"><p>Dfect provides emulation layers for several popular testing libraries:</p>
2010
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Sharing-code-between-tests">
2011
+ <div style="display: none"><br/><hr/><br/></div><a name="Sharing-code-between-tests"/><div class="nav"><a title="Here" href="#Sharing-code-between-tests"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Sharing"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Insulation"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Sharing-code-between-tests"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2012
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 2.&nbsp;&nbsp;</span>Sharing code between tests</p>
2013
+ <div class="content"><p>When the following test is run:</p>
1626
2014
 
1627
- <ul>
1628
- <li><tt>dfect/unit</tt> &#8212; Test::Unit</li>
2015
+ <ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
1629
2016
 
1630
- <li><tt>dfect/mini</tt> &#8212; Minitest</li>
2017
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span> <span style="color:#080;font-weight:bold">do</span>
2018
+ <span style="color:#036;font-weight:bold">L</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Knowledge is power!</span><span style="color:#710">'</span></span>
2019
+ <span style="color:#080;font-weight:bold">end</span>
1631
2020
 
1632
- <li><tt>dfect/spec</tt> &#8212; RSpec</li>
1633
- </ul>
2021
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Healer</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
2022
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span>
2023
+ <span style="color:#080;font-weight:bold">end</span>
1634
2024
 
1635
- <p>Simply <code class="line">require()</code> one of these emulation layers into your test suite and you can write your tests using the familiar syntax of that testing library.</p>
2025
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Warrior</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
2026
+ S! <span style="color:#A60">:strength</span> <span style="color:#080;font-weight:bold">do</span>
2027
+ <span style="color:#036;font-weight:bold">L</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Strength is power!</span><span style="color:#710">'</span></span>
2028
+ <span style="color:#080;font-weight:bold">end</span>
2029
+ <span style="color:#080;font-weight:bold">end</span>
2030
+
2031
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Wizard</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
2032
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span>
2033
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:strength</span>
2034
+ <span style="color:#080;font-weight:bold">end</span>
1636
2035
 
1637
- <p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p></div>
2036
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">King</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
2037
+ <span style="color:#036;font-weight:bold">T</span> { S? <span style="color:#A60">:knowledge</span> }
2038
+ <span style="color:#036;font-weight:bold">T</span> { S? <span style="color:#A60">:strength</span> }
2039
+ <span style="color:#036;font-weight:bold">F</span> { S? <span style="color:#A60">:power</span> }
2040
+ <span style="color:#036;font-weight:bold">L</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Power is power!</span><span style="color:#710">'</span></span>
2041
+ <span style="color:#080;font-weight:bold">end</span>
2042
+ </pre></ins><p> Dfect will output the following:</p>
2043
+
2044
+ <pre>---
2045
+ - Healer:
2046
+ - Knowledge is power!
2047
+ - Warrior:
2048
+ - Strength is power!
2049
+ - Wizard:
2050
+ - Knowledge is power!
2051
+ - Strength is power!
2052
+ - King:
2053
+ - Power is power!
2054
+ ---
2055
+ pass: 3
2056
+ time: 0.00045127</pre></div>
2057
+ </div>
1638
2058
  </div>
1639
2059
  </div>
1640
2060
 
2061
+ <div class="section" id="Insulation">
2062
+ <div style="display: none"><br/><hr/><br/></div><a name="Insulation"/><div class="nav"><a title="Here" href="#Insulation"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Sharing-code-between-tests"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Insulated-and-uninsulated-tests"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Insulation"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2063
+ <h1 class="title">
2064
+ <span class="section_number">3.2.3&nbsp;&nbsp;</span>Insulation
2065
+ </h1>
2066
+ <div class="content"><p>The <code class="line">D!()</code> method defines a new test that is explicitly insulated from the tests that contain it and also from the top-level Ruby environment. Root-level calls to the <code class="line">D()</code> method are insulated by default.</p>
1641
2067
 
1642
- <div class="example" id="A-sample-unit-test">
1643
- <a name="A-sample-unit-test"/><div class="nav"><a title="Focus this segment" href="#A-sample-unit-test"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Emulation"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#History"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__A-sample-unit-test"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1644
- <p class="title">Example 1.&nbsp;&nbsp;A sample unit test</p>
1645
- <div class="content"><p>The following code is from Dfect&#8217;s very own test suite.</p>
1646
-
1647
- <ins><pre lang="ruby" class="para"><span style="color:#888">#--</span>
1648
- <span style="color:#888"># Copyright protects this work.</span>
1649
- <span style="color:#888"># See LICENSE file for details.</span>
1650
- <span style="color:#888">#++</span>
1651
-
1652
- require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
2068
+ <p>Inside an insulated test, you are free to:</p>
1653
2069
 
1654
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">T()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1655
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#038;font-weight:bold">true</span> }
1656
- <span style="color:#036;font-weight:bold">T</span> { !<span style="color:#038;font-weight:bold">false</span> }
1657
- <span style="color:#036;font-weight:bold">T</span> { !<span style="color:#038;font-weight:bold">nil</span> }
2070
+ <ul>
2071
+ <li>mix-in any modules your test logic needs</li>
1658
2072
 
1659
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#00D;font-weight:bold">0</span> } <span style="color:#888"># zero is true in Ruby! :)</span>
1660
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#00D;font-weight:bold">1</span> }
2073
+ <li>define your own constants, methods, and classes</li>
2074
+ </ul>
1661
2075
 
1662
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">must return block value</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1663
- inner = rand()
1664
- outer = <span style="color:#036;font-weight:bold">T</span> { inner }
1665
2076
 
1666
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
1667
- <span style="color:#080;font-weight:bold">end</span>
1668
- <span style="color:#080;font-weight:bold">end</span>
2077
+ <div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Insulated-and-uninsulated-tests">
2078
+ <div style="display: none"><br/><hr/><br/></div><a name="Insulated-and-uninsulated-tests"/><div class="nav"><a title="Here" href="#Insulated-and-uninsulated-tests"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Insulation"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#History"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Insulated-and-uninsulated-tests"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2079
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 3.&nbsp;&nbsp;</span>Insulated and uninsulated tests</p>
2080
+ <div class="content"><p>When the following test is run:</p>
1669
2081
 
1670
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">T!()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1671
- T! { !<span style="color:#038;font-weight:bold">true</span> }
1672
- T! { <span style="color:#038;font-weight:bold">false</span> }
1673
- T! { <span style="color:#038;font-weight:bold">nil</span> }
2082
+ <ins><pre lang="ruby" class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
1674
2083
 
1675
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">must return block value</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1676
- inner = <span style="color:#038;font-weight:bold">nil</span>
1677
- outer = T! { inner }
2084
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">a root-level test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
2085
+ <span style="color:#33B">@outside</span> = <span style="color:#00D;font-weight:bold">1</span>
2086
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
2087
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
1678
2088
 
1679
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
2089
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">an inner, non-insulated test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
2090
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
2091
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
1680
2092
  <span style="color:#080;font-weight:bold">end</span>
1681
- <span style="color:#080;font-weight:bold">end</span>
1682
-
1683
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">T?()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1684
- <span style="color:#036;font-weight:bold">T</span> { T? { <span style="color:#038;font-weight:bold">true</span> } }
1685
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">false</span> } }
1686
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">nil</span> } }
1687
2093
 
1688
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">must not return block value</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1689
- inner = rand()
1690
- outer = T? { inner }
2094
+ D! <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">an inner, insulated test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
2095
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
2096
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
1691
2097
 
1692
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
1693
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">true</span> }
2098
+ <span style="color:#33B">@inside</span> = <span style="color:#00D;font-weight:bold">2</span>
2099
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@inside</span> }
2100
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@inside</span> == <span style="color:#00D;font-weight:bold">2</span> }
1694
2101
  <span style="color:#080;font-weight:bold">end</span>
1695
- <span style="color:#080;font-weight:bold">end</span>
1696
-
1697
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">F() must be same as T!()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1698
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#036;font-weight:bold">D</span>.method(<span style="color:#A60">:F</span>) == <span style="color:#036;font-weight:bold">D</span>.method(<span style="color:#A60">:T!</span>) }
1699
- <span style="color:#080;font-weight:bold">end</span>
1700
2102
 
1701
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">F!() must be same as T()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1702
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#036;font-weight:bold">D</span>.method(<span style="color:#A60">:F!</span>) == <span style="color:#036;font-weight:bold">D</span>.method(<span style="color:#A60">:T</span>) }
2103
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@inside</span> }
2104
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#33B">@inside</span> == <span style="color:#00D;font-weight:bold">2</span> }
1703
2105
  <span style="color:#080;font-weight:bold">end</span>
2106
+ </pre></ins><p> Dfect will output the following:</p>
1704
2107
 
1705
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">F?()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1706
- <span style="color:#036;font-weight:bold">T</span> { T? { <span style="color:#038;font-weight:bold">true</span> } }
1707
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">false</span> } }
1708
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">nil</span> } }
1709
-
1710
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">must not return block value</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1711
- inner = rand()
1712
- outer = F? { inner }
1713
-
1714
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
1715
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">false</span> }
1716
- <span style="color:#080;font-weight:bold">end</span>
1717
- <span style="color:#080;font-weight:bold">end</span>
2108
+ <pre>---
2109
+ - a root-level test:
2110
+ - an inner, non-insulated test: []
1718
2111
 
1719
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">E()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1720
- E(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise <span style="color:#036;font-weight:bold">SyntaxError</span> }
2112
+ - an inner, insulated test: []
1721
2113
 
1722
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">forbids block to not raise anything</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1723
- <span style="color:#036;font-weight:bold">F</span> { E? {} }
1724
- <span style="color:#080;font-weight:bold">end</span>
1725
-
1726
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">forbids block to raise something unexpected</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1727
- <span style="color:#036;font-weight:bold">F</span> { E?(<span style="color:#036;font-weight:bold">ArgumentError</span>) { raise <span style="color:#036;font-weight:bold">SyntaxError</span> } }
1728
- <span style="color:#080;font-weight:bold">end</span>
1729
-
1730
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">defaults to StandardError when no kinds specified</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1731
- <span style="color:#036;font-weight:bold">E</span> { raise <span style="color:#036;font-weight:bold">StandardError</span> }
1732
- <span style="color:#036;font-weight:bold">E</span> { raise }
1733
- <span style="color:#080;font-weight:bold">end</span>
1734
-
1735
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">does not default to StandardError when kinds are specified</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1736
- <span style="color:#036;font-weight:bold">F</span> { E?(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise } }
1737
- <span style="color:#080;font-weight:bold">end</span>
2114
+ ---
2115
+ pass: 10
2116
+ time: 0.000505745</pre></div>
2117
+ </div>
2118
+ </div>
2119
+ </div>
2120
+ </div></div>
2121
+ </div>
2122
+ </div></div>
2123
+ </div>
1738
2124
 
1739
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows nested rescue</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1740
- <span style="color:#036;font-weight:bold">E</span> <span style="color:#036;font-weight:bold">SyntaxError</span> <span style="color:#080;font-weight:bold">do</span>
1741
- <span style="color:#080;font-weight:bold">begin</span>
1742
- raise <span style="color:#036;font-weight:bold">LoadError</span>
1743
- <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#036;font-weight:bold">LoadError</span>
1744
- <span style="color:#080;font-weight:bold">end</span>
1745
2125
 
1746
- raise <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#038;font-weight:bold">nil</span>
2126
+ <div class="part" id="History">
2127
+ <div style="display: none"><br/><hr/><br/></div><a name="History"/><div class="nav"><a title="Here" href="#History"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Insulated-and-uninsulated-tests"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-2-0-0-2010-03-21"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-History"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2128
+ <h1 class="title">
2129
+ Part&nbsp;4
2130
+ <br/>
2131
+ <big>History</big>
2132
+ </h1>
2133
+ <div class="content"><div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Version-2-0-0-2010-03-21"><span class="section_number">4.1&nbsp;&nbsp;</span>Version 2.0.0 (2010-03-21)</a></li><li><a href="#Version-1-1-0-2009-10-27"><span class="section_number">4.2&nbsp;&nbsp;</span>Version 1.1.0 (2009-10-27)</a></li><li><a href="#Version-1-0-1-2009-10-07"><span class="section_number">4.3&nbsp;&nbsp;</span>Version 1.0.1 (2009-10-07)</a></li><li><a href="#Version-1-0-0-2009-05-03"><span class="section_number">4.4&nbsp;&nbsp;</span>Version 1.0.0 (2009-05-03)</a></li><li><a href="#Version-0-1-0-2009-04-28"><span class="section_number">4.5&nbsp;&nbsp;</span>Version 0.1.0 (2009-04-28)</a></li><li><a href="#Version-0-0-0-2009-04-13"><span class="section_number">4.6&nbsp;&nbsp;</span>Version 0.0.0 (2009-04-13)</a></li></ul>
2134
+ <div class="section" id="Version-2-0-0-2010-03-21">
2135
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-2-0-0-2010-03-21"/><div class="nav"><a title="Here" href="#Version-2-0-0-2010-03-21"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#History"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-1-1-0-2009-10-27"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Version-2-0-0-2010-03-21"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2136
+ <h1 class="title">
2137
+ <span class="section_number">4.1&nbsp;&nbsp;</span>Version 2.0.0 (2010-03-21)
2138
+ </h1>
2139
+ <div class="content"><p>This release adds the ability to insulate tests from each other, share code between them, makes the order of parameters consistent in the API, improves user interactivity, fixes some bugs, and revises the user manual.</p>
1747
2140
 
1748
- raise <span style="color:#036;font-weight:bold">SyntaxError</span>
1749
- <span style="color:#080;font-weight:bold">end</span>
1750
- <span style="color:#080;font-weight:bold">end</span>
1751
- <span style="color:#080;font-weight:bold">end</span>
1752
2141
 
1753
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">E!()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1754
- E!(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise <span style="color:#036;font-weight:bold">ArgumentError</span> }
2142
+ <div class="paragraph" id="Incompatible-changes">
2143
+ <div style="display: none"><br/><hr/><br/></div><a name="Incompatible-changes"/><div class="nav"><a title="Here" href="#Incompatible-changes"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2144
+ <p class="title">Incompatible changes</p>
2145
+ <div class="content"><ul>
2146
+ <li>
2147
+ <p>Root-level calls to the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::D()</code> method are <a class="xref" href="#Insulation" title="Section 3.2.3. &quot;Insulation&quot;">automatically insulated</a> now.</p>
2148
+ </li>
1755
2149
 
1756
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows block to not raise anything</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1757
- E!(<span style="color:#036;font-weight:bold">SyntaxError</span>) {}
1758
- <span style="color:#080;font-weight:bold">end</span>
2150
+ <li>
2151
+ <p>The <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::E()</code> methods now expects its optional message parameter to be the <em>last parameter</em> in the parameter list.</p>
2152
+ </li>
1759
2153
 
1760
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows block to raise something unexpected</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1761
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">not</span> E?(<span style="color:#036;font-weight:bold">ArgumentError</span>) { raise <span style="color:#036;font-weight:bold">SyntaxError</span> } }
1762
- <span style="color:#080;font-weight:bold">end</span>
2154
+ <li>
2155
+ <p>The <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::C()</code> methods now expect their first parameter to be a symbol instead of the optional message to be shown in case of assertion failure.</p>
2156
+ </li>
1763
2157
 
1764
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">defaults to StandardError when no kinds specified</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1765
- E! { raise <span style="color:#036;font-weight:bold">LoadError</span> }
1766
- <span style="color:#080;font-weight:bold">end</span>
2158
+ <li>
2159
+ <p>The <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::R()</code> has been renamed to <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::L()</code>, which is a mnemonic for <a class="xref" href="#Logging" title="Section 3.2.1.2">Logging</a>.</p>
2160
+ </li>
1767
2161
 
1768
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">does not default to StandardError when kinds are specified</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1769
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">not</span> E?(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise } }
1770
- <span style="color:#080;font-weight:bold">end</span>
2162
+ <li>
2163
+ <p>Shorten names of hash keys in the execution trace for brevity and rename <code class="line"><span style="color:#A60">:raise</span></code> key in report statistics to <code class="line"><span style="color:#A60">:error</span></code>.</p>
2164
+ </li>
1771
2165
 
1772
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows nested rescue</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1773
- E! <span style="color:#036;font-weight:bold">SyntaxError</span> <span style="color:#080;font-weight:bold">do</span>
1774
- <span style="color:#080;font-weight:bold">begin</span>
1775
- raise <span style="color:#036;font-weight:bold">LoadError</span>
1776
- <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#036;font-weight:bold">LoadError</span>
1777
- <span style="color:#080;font-weight:bold">end</span>
2166
+ <li>
2167
+ <p>Only the most helpful subset of the failure details is shown before placing the user into a debugger because they can query the omitted information (on demand) inside the debugger.</p>
2168
+ </li>
1778
2169
 
1779
- raise <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#038;font-weight:bold">nil</span>
2170
+ <li>
2171
+ <p>The execution trace is only shown if all tests passed in <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::run()</code>.</p>
2172
+ </li>
1780
2173
 
1781
- raise <span style="color:#036;font-weight:bold">ArgumentError</span>
1782
- <span style="color:#080;font-weight:bold">end</span>
1783
- <span style="color:#080;font-weight:bold">end</span>
1784
- <span style="color:#080;font-weight:bold">end</span>
2174
+ <li>
2175
+ <p>The <code class="line"><span style="color:#A60">:debug</span></code> option is now set to Ruby&#8217;s <code class="line"><span style="color:#d70;font-weight:bold">$DEBUG</span></code> global by default.</p>
2176
+ </li>
2177
+ </ul></div>
2178
+ </div>
1785
2179
 
1786
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">C()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1787
- C(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:foo</span> }
1788
2180
 
1789
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">forbids block to not throw anything</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1790
- <span style="color:#036;font-weight:bold">F</span> { C?(<span style="color:#A60">:bar</span>) {} }
1791
- <span style="color:#080;font-weight:bold">end</span>
1792
2181
 
1793
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">forbids block to throw something unexpected</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1794
- <span style="color:#036;font-weight:bold">F</span> { C?(<span style="color:#A60">:bar</span>) { throw <span style="color:#A60">:foo</span> } }
1795
- <span style="color:#080;font-weight:bold">end</span>
2182
+ <div class="paragraph" id="New-features">
2183
+ <div style="display: none"><br/><hr/><br/></div><a name="New-features"/><div class="nav"><a title="Here" href="#New-features"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2184
+ <p class="title">New features</p>
2185
+ <div class="content"><ul>
2186
+ <li>
2187
+ <p>Print failures as they occur instead of waiting until the end.</p>
2188
+ </li>
1796
2189
 
1797
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows nested catch</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1798
- <span style="color:#036;font-weight:bold">C</span> <span style="color:#A60">:foo</span> <span style="color:#080;font-weight:bold">do</span>
1799
- catch <span style="color:#A60">:bar</span> <span style="color:#080;font-weight:bold">do</span>
1800
- throw <span style="color:#A60">:bar</span>
1801
- <span style="color:#080;font-weight:bold">end</span>
2190
+ <li>
2191
+ <p>Allow passing condition as argument to true/false assertions instead of requiring the condition to be passed as a code block, and also fall back to the binding of inner-most enclosing test or hook when debugging or constructing a failure report for an assertion that was not given a block.</p>
1802
2192
 
1803
- throw <span style="color:#A60">:foo</span>
1804
- <span style="color:#080;font-weight:bold">end</span>
1805
- <span style="color:#080;font-weight:bold">end</span>
2193
+ <p>This allows you to reduce &#8220;line noise&#8221; in your tests:</p>
2194
+ </li>
2195
+ </ul>
1806
2196
 
1807
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">returns the value thrown along with symbol</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1808
- inner = rand()
1809
- outer = C(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:foo</span>, inner }
2197
+ <ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Lottery</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
2198
+ winning_ticket = rand()
1810
2199
 
1811
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
2200
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">My chances of winning</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span>
2201
+ my_ticket = rand()
2202
+ <span style="color:#036;font-weight:bold">F</span> my_ticket == winning_ticket, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">I won?! Dream on.</span><span style="color:#710">&quot;</span></span>
1812
2203
  <span style="color:#080;font-weight:bold">end</span>
1813
2204
  <span style="color:#080;font-weight:bold">end</span>
2205
+ </pre></ins>
1814
2206
 
1815
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">C!()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1816
- C!(<span style="color:#A60">:bar</span>) { throw <span style="color:#A60">:foo</span> }
2207
+ <ul>
2208
+ <li>
2209
+ <p>Add <a class="xref" href="#Sharing" title="Section 3.2.2. &quot;Sharing&quot;"><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::S()</code> methods</a> for sharing code between tests.</p>
2210
+ </li>
1817
2211
 
1818
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows block to not throw anything</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1819
- C!(<span style="color:#A60">:bar</span>) {}
1820
- <span style="color:#080;font-weight:bold">end</span>
2212
+ <li>
2213
+ <p>Add <a class="xref" href="#Insulation" title="Section 3.2.3. &quot;Insulation&quot;"><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::D!()</code> method</a> to explicitly insulate a test from other tests, the top-level Ruby environment, and the code being tested.</p>
2214
+ </li>
1821
2215
 
1822
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows block to throw something unexpected</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1823
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">not</span> C?(<span style="color:#A60">:bar</span>) { throw <span style="color:#A60">:foo</span> } }
1824
- <span style="color:#080;font-weight:bold">end</span>
2216
+ <li>
2217
+ <p>Add <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::info()</code> method which returns the details of the failure that is currently being debugged by the user.</p>
2218
+ </li>
1825
2219
 
1826
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">allows nested catch</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1827
- C! <span style="color:#A60">:bar</span> <span style="color:#080;font-weight:bold">do</span>
1828
- catch <span style="color:#A60">:moz</span> <span style="color:#080;font-weight:bold">do</span>
1829
- throw <span style="color:#A60">:moz</span>
1830
- <span style="color:#080;font-weight:bold">end</span>
2220
+ <li>
2221
+ <p>Add instance variables to the <code class="line"><span style="color:#A60">:vars</span></code> section of a failure report.</p>
2222
+ </li>
1831
2223
 
1832
- throw <span style="color:#A60">:foo</span>
1833
- <span style="color:#080;font-weight:bold">end</span>
1834
- <span style="color:#080;font-weight:bold">end</span>
2224
+ <li>
2225
+ <p>Add <code class="line">setup!()</code> and <code class="line">teardown!()</code> methods for before-all and after-all hooks in the <tt>dfect/unit</tt> emulation library.</p>
2226
+ </li>
1835
2227
 
1836
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">does not return the value thrown along with symbol</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1837
- inner = rand()
1838
- outer = C!(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:bar</span>, inner }
2228
+ <li>
2229
+ <p>Add test execution time to statistics hash (under the <code class="line"><span style="color:#A60">:time</span></code> key).</p>
2230
+ </li>
2231
+ </ul></div>
2232
+ </div>
1839
2233
 
1840
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
1841
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">nil</span> }
1842
- <span style="color:#080;font-weight:bold">end</span>
1843
- <span style="color:#080;font-weight:bold">end</span>
1844
2234
 
1845
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">D()</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1846
- history = []
1847
2235
 
1848
- <span style="color:#036;font-weight:bold">D</span> .&lt;&lt; { history &lt;&lt; <span style="color:#A60">:before_all</span> }
1849
- <span style="color:#036;font-weight:bold">D</span> .&lt; { history &lt;&lt; <span style="color:#A60">:before_each</span> }
1850
- <span style="color:#036;font-weight:bold">D</span> .&gt; { history &lt;&lt; <span style="color:#A60">:after_each</span> }
1851
- <span style="color:#036;font-weight:bold">D</span> .&gt;&gt; { history &lt;&lt; <span style="color:#A60">:after_all</span> }
2236
+ <div class="paragraph" id="Bug-fixes">
2237
+ <div style="display: none"><br/><hr/><br/></div><a name="Bug-fixes"/><div class="nav"><a title="Here" href="#Bug-fixes"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2238
+ <p class="title">Bug fixes</p>
2239
+ <div class="content"><ul>
2240
+ <li>
2241
+ <p>Do not print any output when <code class="line"><span style="color:#A60">:quiet</span></code> option is active.</p>
2242
+ </li>
1852
2243
 
1853
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">first nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1854
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1855
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1856
- <span style="color:#036;font-weight:bold">F</span> { history.select {|x| x == <span style="color:#A60">:after_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1857
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1858
- <span style="color:#080;font-weight:bold">end</span>
2244
+ <li>
2245
+ <p>Allow passing multiple strings/objects to <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::D()</code> like in RSpec.</p>
2246
+ </li>
1859
2247
 
1860
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">second nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1861
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1862
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_each</span> }.length == <span style="color:#00D;font-weight:bold">2</span> }
1863
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1864
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1865
- <span style="color:#080;font-weight:bold">end</span>
2248
+ <li>
2249
+ <p>Make before and after hook methods mixin-able like assertions.</p>
2250
+ </li>
1866
2251
 
1867
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">third nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1868
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1869
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_each</span> }.length == <span style="color:#00D;font-weight:bold">3</span> }
1870
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_each</span> }.length == <span style="color:#00D;font-weight:bold">2</span> }
1871
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1872
- <span style="color:#080;font-weight:bold">end</span>
2252
+ <li>
2253
+ <p>Do not assume that <code class="line"><span style="color:#036;font-weight:bold">Module</span><span style="color:#888">#to_s</span></code> is the same as <code class="line"><span style="color:#036;font-weight:bold">Module</span><span style="color:#888">#name</span></code>.</p>
2254
+ </li>
2255
+ </ul></div>
2256
+ </div>
1873
2257
 
1874
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">fourth nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1875
- <span style="color:#036;font-weight:bold">D</span> .&lt;&lt; { history &lt;&lt; <span style="color:#A60">:nested_before_all</span> }
1876
- <span style="color:#036;font-weight:bold">D</span> .&lt; { history &lt;&lt; <span style="color:#A60">:nested_before_each</span> }
1877
- <span style="color:#036;font-weight:bold">D</span> .&gt; { history &lt;&lt; <span style="color:#A60">:nested_after_each</span> }
1878
- <span style="color:#036;font-weight:bold">D</span> .&gt;&gt; { history &lt;&lt; <span style="color:#A60">:nested_after_all</span> }
1879
-
1880
- nested_before_each = <span style="color:#00D;font-weight:bold">0</span>
1881
-
1882
- <span style="color:#036;font-weight:bold">D</span> .&lt; <span style="color:#080;font-weight:bold">do</span>
1883
- <span style="color:#888"># outer values remain the same for this nesting</span>
1884
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1885
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:before_each</span> }.length == <span style="color:#00D;font-weight:bold">4</span> }
1886
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_each</span> }.length == <span style="color:#00D;font-weight:bold">3</span> }
1887
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1888
-
1889
- nested_before_each += <span style="color:#00D;font-weight:bold">1</span>
1890
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_each</span> }.length == nested_before_each }
1891
- <span style="color:#080;font-weight:bold">end</span>
1892
-
1893
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">first double-nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1894
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1895
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1896
- <span style="color:#036;font-weight:bold">F</span> { history.select {|x| x == <span style="color:#A60">:nested_after_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1897
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1898
- <span style="color:#080;font-weight:bold">end</span>
1899
-
1900
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">second double-nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1901
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1902
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_each</span> }.length == <span style="color:#00D;font-weight:bold">2</span> }
1903
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_after_each</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1904
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1905
- <span style="color:#080;font-weight:bold">end</span>
1906
-
1907
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">third double-nesting</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1908
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_all</span> }.length == <span style="color:#00D;font-weight:bold">1</span> }
1909
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_before_each</span> }.length == <span style="color:#00D;font-weight:bold">3</span> }
1910
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_after_each</span> }.length == <span style="color:#00D;font-weight:bold">2</span> }
1911
- <span style="color:#036;font-weight:bold">T</span> { history.select {|x| x == <span style="color:#A60">:nested_after_all</span> }.length == <span style="color:#00D;font-weight:bold">0</span> }
1912
- <span style="color:#080;font-weight:bold">end</span>
1913
- <span style="color:#080;font-weight:bold">end</span>
1914
- <span style="color:#080;font-weight:bold">end</span>
1915
2258
 
1916
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">D.&lt;() must allow inheritance checking when called without a block</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1917
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> &lt; <span style="color:#036;font-weight:bold">Kernel</span> }
1918
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> &lt; <span style="color:#036;font-weight:bold">Object</span> }
1919
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> &lt; <span style="color:#036;font-weight:bold">Module</span> }
1920
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#036;font-weight:bold">D</span>.class == <span style="color:#036;font-weight:bold">Module</span> }
1921
2259
 
1922
- c = <span style="color:#036;font-weight:bold">Class</span>.new { include <span style="color:#036;font-weight:bold">D</span> }
1923
- <span style="color:#036;font-weight:bold">T</span> { c &lt; <span style="color:#036;font-weight:bold">D</span> }
1924
- <span style="color:#080;font-weight:bold">end</span>
2260
+ <div class="paragraph" id="Housekeeping">
2261
+ <div style="display: none"><br/><hr/><br/></div><a name="Housekeeping"/><div class="nav"><a title="Here" href="#Housekeeping"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2262
+ <p class="title">Housekeeping</p>
2263
+ <div class="content"><ul>
2264
+ <li>
2265
+ <p>Upgrade to Inochi 2.0.0 for managing this project.</p>
2266
+ </li>
1925
2267
 
1926
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">YAML must be able to serialize a class</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1927
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#036;font-weight:bold">SyntaxError</span>.to_yaml == <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">--- SyntaxError</span><span style="color:#b0b">\n</span><span style="color:#710">&quot;</span></span> }
1928
- <span style="color:#080;font-weight:bold">end</span>
2268
+ <li>
2269
+ <p>Make emulation libraries modify Dfect module instead of Kernel.</p>
2270
+ </li>
1929
2271
 
1930
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">stoping #run</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
1931
- <span style="color:#036;font-weight:bold">Dfect</span>.stop
1932
- raise <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">this must not be reached!</span><span style="color:#710">'</span></span>
1933
- <span style="color:#080;font-weight:bold">end</span>
2272
+ <li>
2273
+ <p>Do not pollute the user&#8217;s output with our <code class="line"><span style="color:#036;font-weight:bold">Class</span><span style="color:#888">#to_yaml</span></code> workaround.</p>
2274
+ </li>
1934
2275
 
1935
- </pre></ins></div>
2276
+ <li>
2277
+ <p>Remove &#8220;Motivation&#8221; section from user manual. It was too fanatic!</p>
2278
+ </li>
2279
+ </ul></div>
1936
2280
  </div>
1937
2281
  </div>
1938
2282
  </div>
1939
-
1940
-
1941
-
1942
-
1943
- <div class="chapter" id="History">
1944
- <a name="History"/><div class="nav"><a title="Focus this segment" href="#History"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#A-sample-unit-test"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-1-1-0-2009-10-27"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__History"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
1945
- <h1 class="title">
1946
- Chapter&nbsp;4
1947
- <br/>
1948
- <big>History</big>
1949
- </h1>
1950
- <div class="content"><div class="tabs"><ul><li><a href="#Version-1-1-0-2009-10-27">Version 1.1.0 (2009-10-27)</a></li><li><a href="#Version-1-0-1-2009-10-07">Version 1.0.1 (2009-10-07)</a></li><li><a href="#Version-1-0-0-2009-05-03">Version 1.0.0 (2009-05-03)</a></li><li><a href="#Version-0-1-0-2009-04-28">Version 0.1.0 (2009-04-28)</a></li><li><a href="#Version-0-0-0-2009-04-13">Version 0.0.0 (2009-04-13)</a></li></ul>
2283
+
1951
2284
  <div class="section" id="Version-1-1-0-2009-10-27">
1952
- <a name="Version-1-1-0-2009-10-27"/><div class="nav"><a title="Focus this segment" href="#Version-1-1-0-2009-10-27"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#History"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Thank-you"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-1-1-0-2009-10-27"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2285
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-1-1-0-2009-10-27"/><div class="nav"><a title="Here" href="#Version-1-1-0-2009-10-27"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Version-2-0-0-2010-03-21"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-1-0-1-2009-10-07"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Version-1-1-0-2009-10-27"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
1953
2286
  <h1 class="title">
1954
- 4.1&nbsp;&nbsp;Version 1.1.0 (2009-10-27)
2287
+ <span class="section_number">4.2&nbsp;&nbsp;</span>Version 1.1.0 (2009-10-27)
1955
2288
  </h1>
1956
2289
  <div class="content"><p>This release adds a new method for emitting status messages and does some internal housekeeping.</p>
1957
2290
 
1958
- <div class="tabs"><ul><li><a href="#Thank-you">Thank you</a></li><li><a href="#New-features">New features</a></li><li><a href="#Housekeeping">Housekeeping</a></li></ul>
2291
+
1959
2292
  <div class="paragraph" id="Thank-you">
1960
- <a name="Thank-you"/><div class="nav"><a title="Focus this segment" href="#Thank-you"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Version-1-1-0-2009-10-27"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#New-features"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Thank-you"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2293
+ <div style="display: none"><br/><hr/><br/></div><a name="Thank-you"/><div class="nav"><a title="Here" href="#Thank-you"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
1961
2294
  <p class="title">Thank you</p>
1962
2295
  <div class="content"><ul>
1963
2296
  <li>Iñaki Baz Castillo used Dfect and suggested new features.</li>
@@ -1966,18 +2299,18 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1966
2299
 
1967
2300
 
1968
2301
 
1969
- <div class="paragraph" id="New-features">
1970
- <a name="New-features"/><div class="nav"><a title="Focus this segment" href="#New-features"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Thank-you"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Housekeeping"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__New-features"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2302
+ <div class="paragraph" id="New-features-85749454">
2303
+ <div style="display: none"><br/><hr/><br/></div><a name="New-features-85749454"/><div class="nav"><a title="Here" href="#New-features-85749454"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
1971
2304
  <p class="title">New features</p>
1972
2305
  <div class="content"><ul>
1973
- <li>Add <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::S()</code> method for <a class="xref" href="#Reporting" title="Section 3.4. &quot;Reporting&quot;">adding status messages</a> to the execution report. This feature was <a href='http://github.com/sunaku/dfect/issues/closed#issue/1'>requested by</a> Iñaki Baz Castillo.</li>
2306
+ <li>Add <code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::S()</code> method for <a class="xref" href="#Logging" title="Section 3.2.1.2. &quot;Logging&quot;">adding status messages</a> to the execution report. This feature was <a href='http://github.com/sunaku/dfect/issues/closed#issue/1'>requested by</a> Iñaki Baz Castillo.</li>
1974
2307
  </ul></div>
1975
2308
  </div>
1976
2309
 
1977
2310
 
1978
2311
 
1979
- <div class="paragraph" id="Housekeeping">
1980
- <a name="Housekeeping"/><div class="nav"><a title="Focus this segment" href="#Housekeeping"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#New-features"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-1-0-1-2009-10-07"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Housekeeping"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2312
+ <div class="paragraph" id="Housekeeping-85773044">
2313
+ <div style="display: none"><br/><hr/><br/></div><a name="Housekeeping-85773044"/><div class="nav"><a title="Here" href="#Housekeeping-85773044"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
1981
2314
  <p class="title">Housekeeping</p>
1982
2315
  <div class="content"><ul>
1983
2316
  <li>
@@ -1985,7 +2318,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
1985
2318
  </li>
1986
2319
 
1987
2320
  <li>
1988
- <p>Mention <a class="xref" href="#Emulation" title="Section 3.5">Emulation</a> layers for popular testing libraries.</p>
2321
+ <p>Mention <a class="xref" href="#Emulation" title="Section 3.1.4">Emulation</a> layers for popular testing libraries.</p>
1989
2322
  </li>
1990
2323
 
1991
2324
  <li>
@@ -2001,19 +2334,19 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2001
2334
  </li>
2002
2335
  </ul></div>
2003
2336
  </div>
2004
- </div></div>
2337
+ </div>
2005
2338
  </div>
2006
2339
 
2007
2340
  <div class="section" id="Version-1-0-1-2009-10-07">
2008
- <a name="Version-1-0-1-2009-10-07"/><div class="nav"><a title="Focus this segment" href="#Version-1-0-1-2009-10-07"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Housekeeping"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Bug-fixes"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-1-0-1-2009-10-07"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2341
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-1-0-1-2009-10-07"/><div class="nav"><a title="Here" href="#Version-1-0-1-2009-10-07"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Version-1-1-0-2009-10-27"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-1-0-0-2009-05-03"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Version-1-0-1-2009-10-07"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2009
2342
  <h1 class="title">
2010
- 4.2&nbsp;&nbsp;Version 1.0.1 (2009-10-07)
2343
+ <span class="section_number">4.3&nbsp;&nbsp;</span>Version 1.0.1 (2009-10-07)
2011
2344
  </h1>
2012
2345
  <div class="content"><p>This release fixes a bug in the Test::Unit emulation library and revises the user manual.</p>
2013
2346
 
2014
- <div class="tabs"><ul><li><a href="#Bug-fixes">Bug fixes</a></li><li><a href="#Housekeeping-89349386">Housekeeping</a></li></ul>
2015
- <div class="paragraph" id="Bug-fixes">
2016
- <a name="Bug-fixes"/><div class="nav"><a title="Focus this segment" href="#Bug-fixes"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Version-1-0-1-2009-10-07"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Housekeeping-89349386"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Bug-fixes"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2347
+
2348
+ <div class="paragraph" id="Bug-fixes-85824340">
2349
+ <div style="display: none"><br/><hr/><br/></div><a name="Bug-fixes-85824340"/><div class="nav"><a title="Here" href="#Bug-fixes-85824340"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2017
2350
  <p class="title">Bug fixes</p>
2018
2351
  <div class="content"><ul>
2019
2352
  <li>The parameters for the <code class="line">assert_equal()</code> method in the <tt>dfect/unit</tt> library were in the wrong order.</li>
@@ -2022,8 +2355,8 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2022
2355
 
2023
2356
 
2024
2357
 
2025
- <div class="paragraph" id="Housekeeping-89349386">
2026
- <a name="Housekeeping-89349386"/><div class="nav"><a title="Focus this segment" href="#Housekeeping-89349386"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-1-0-0-2009-05-03"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Housekeeping-89349386"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2358
+ <div class="paragraph" id="Housekeeping-85820322">
2359
+ <div style="display: none"><br/><hr/><br/></div><a name="Housekeeping-85820322"/><div class="nav"><a title="Here" href="#Housekeeping-85820322"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2027
2360
  <p class="title">Housekeeping</p>
2028
2361
  <div class="content"><ul>
2029
2362
  <li>
@@ -2047,23 +2380,23 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2047
2380
  </li>
2048
2381
 
2049
2382
  <li>
2050
- <p>Open source is for fun, so <a href='http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html'>be nice</a>: speak of &#8220;related works&#8221; instead of &#8220;competitors&#8221;.</p>
2383
+ <p>Open source is for fun, so <a href='http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html'>be nice</a> and speak of &#8220;related works&#8221; instead of &#8220;competitors&#8221;.</p>
2051
2384
  </li>
2052
2385
  </ul></div>
2053
2386
  </div>
2054
- </div></div>
2387
+ </div>
2055
2388
  </div>
2056
2389
 
2057
2390
  <div class="section" id="Version-1-0-0-2009-05-03">
2058
- <a name="Version-1-0-0-2009-05-03"/><div class="nav"><a title="Focus this segment" href="#Version-1-0-0-2009-05-03"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Housekeeping-89349386"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Incompatible-changes"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-1-0-0-2009-05-03"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2391
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-1-0-0-2009-05-03"/><div class="nav"><a title="Here" href="#Version-1-0-0-2009-05-03"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Version-1-0-1-2009-10-07"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-0-1-0-2009-04-28"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Version-1-0-0-2009-05-03"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2059
2392
  <h1 class="title">
2060
- 4.3&nbsp;&nbsp;Version 1.0.0 (2009-05-03)
2393
+ <span class="section_number">4.4&nbsp;&nbsp;</span>Version 1.0.0 (2009-05-03)
2061
2394
  </h1>
2062
2395
  <div class="content"><p>This release improves default choices, adds emulation layers to mimic other testing libraries, and fixes some bugs.</p>
2063
2396
 
2064
- <div class="tabs"><ul><li><a href="#Incompatible-changes">Incompatible changes</a></li><li><a href="#New-features-89369182">New features</a></li><li><a href="#Bug-fixes-89398092">Bug fixes</a></li><li><a href="#Housekeeping-89393948">Housekeeping</a></li></ul>
2065
- <div class="paragraph" id="Incompatible-changes">
2066
- <a name="Incompatible-changes"/><div class="nav"><a title="Focus this segment" href="#Incompatible-changes"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Version-1-0-0-2009-05-03"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#New-features-89369182"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Incompatible-changes"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2397
+
2398
+ <div class="paragraph" id="Incompatible-changes-85843282">
2399
+ <div style="display: none"><br/><hr/><br/></div><a name="Incompatible-changes-85843282"/><div class="nav"><a title="Here" href="#Incompatible-changes-85843282"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2067
2400
  <p class="title">Incompatible changes</p>
2068
2401
  <div class="content"><ul>
2069
2402
  <li>
@@ -2080,8 +2413,8 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2080
2413
 
2081
2414
 
2082
2415
 
2083
- <div class="paragraph" id="New-features-89369182">
2084
- <a name="New-features-89369182"/><div class="nav"><a title="Focus this segment" href="#New-features-89369182"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Incompatible-changes"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Bug-fixes-89398092"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__New-features-89369182"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2416
+ <div class="paragraph" id="New-features-85870708">
2417
+ <div style="display: none"><br/><hr/><br/></div><a name="New-features-85870708"/><div class="nav"><a title="Here" href="#New-features-85870708"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2085
2418
  <p class="title">New features</p>
2086
2419
  <div class="content"><ul>
2087
2420
  <li>
@@ -2100,8 +2433,8 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2100
2433
 
2101
2434
 
2102
2435
 
2103
- <div class="paragraph" id="Bug-fixes-89398092">
2104
- <a name="Bug-fixes-89398092"/><div class="nav"><a title="Focus this segment" href="#Bug-fixes-89398092"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#New-features-89369182"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Housekeeping-89393948"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Bug-fixes-89398092"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2436
+ <div class="paragraph" id="Bug-fixes-85866662">
2437
+ <div style="display: none"><br/><hr/><br/></div><a name="Bug-fixes-85866662"/><div class="nav"><a title="Here" href="#Bug-fixes-85866662"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2105
2438
  <p class="title">Bug fixes</p>
2106
2439
  <div class="content"><ul>
2107
2440
  <li>Do not blindly replace <code class="line"><span style="color:#036;font-weight:bold">Class</span><span style="color:#888">#to_yaml</span></code>; it might be fixed someday.</li>
@@ -2110,16 +2443,16 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2110
2443
 
2111
2444
 
2112
2445
 
2113
- <div class="paragraph" id="Housekeeping-89393948">
2114
- <a name="Housekeeping-89393948"/><div class="nav"><a title="Focus this segment" href="#Housekeeping-89393948"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Bug-fixes-89398092"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-0-1-0-2009-04-28"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Housekeeping-89393948"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2446
+ <div class="paragraph" id="Housekeeping-85894242">
2447
+ <div style="display: none"><br/><hr/><br/></div><a name="Housekeeping-85894242"/><div class="nav"><a title="Here" href="#Housekeeping-85894242"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2115
2448
  <p class="title">Housekeeping</p>
2116
2449
  <div class="content"><ul>
2117
2450
  <li>
2118
- <p>Add <a class="xref" href="#Motivation" title="Section 1.2">Motivation</a> section in user manual to promote interactive debugging.</p>
2451
+ <p>Add &#8220;Motivation&#8221; section in user manual to promote interactive debugging.</p>
2119
2452
  </li>
2120
2453
 
2121
2454
  <li>
2122
- <p>Add brief <a class="xref" href="#History" title="Chapter 4">History</a> of this project&#8217;s inception.</p>
2455
+ <p>Add brief <a class="xref" href="#History" title="Part 4">History</a> of this project&#8217;s inception.</p>
2123
2456
  </li>
2124
2457
 
2125
2458
  <li>
@@ -2131,19 +2464,19 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2131
2464
  </li>
2132
2465
  </ul></div>
2133
2466
  </div>
2134
- </div></div>
2467
+ </div>
2135
2468
  </div>
2136
2469
 
2137
2470
  <div class="section" id="Version-0-1-0-2009-04-28">
2138
- <a name="Version-0-1-0-2009-04-28"/><div class="nav"><a title="Focus this segment" href="#Version-0-1-0-2009-04-28"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Housekeeping-89393948"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Thank-you-89444068"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-0-1-0-2009-04-28"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2471
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-0-1-0-2009-04-28"/><div class="nav"><a title="Here" href="#Version-0-1-0-2009-04-28"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Version-1-0-0-2009-05-03"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Next" href="#Version-0-0-0-2009-04-13"><img alt="[Next]" src="cid:81897676" class="icon"/></a> <a title="Contents" href="#_contents-Version-0-1-0-2009-04-28"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2139
2472
  <h1 class="title">
2140
- 4.4&nbsp;&nbsp;Version 0.1.0 (2009-04-28)
2473
+ <span class="section_number">4.5&nbsp;&nbsp;</span>Version 0.1.0 (2009-04-28)
2141
2474
  </h1>
2142
2475
  <div class="content"><p>This release adds new variations to assertion methods, fixes several bugs, and improves test coverage.</p>
2143
2476
 
2144
- <div class="tabs"><ul><li><a href="#Thank-you-89444068">Thank you</a></li><li><a href="#New-features-89472950">New features</a></li><li><a href="#Bug-fixes-79582034">Bug fixes</a></li><li><a href="#Housekeeping-81713450">Housekeeping</a></li></ul>
2145
- <div class="paragraph" id="Thank-you-89444068">
2146
- <a name="Thank-you-89444068"/><div class="nav"><a title="Focus this segment" href="#Thank-you-89444068"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Version-0-1-0-2009-04-28"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#New-features-89472950"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Thank-you-89444068"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2477
+
2478
+ <div class="paragraph" id="Thank-you-80236618">
2479
+ <div style="display: none"><br/><hr/><br/></div><a name="Thank-you-80236618"/><div class="nav"><a title="Here" href="#Thank-you-80236618"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2147
2480
  <p class="title">Thank you</p>
2148
2481
  <div class="content"><ul>
2149
2482
  <li>François Beausoleil contributed patches for both code <em>and</em> tests! :-)</li>
@@ -2152,26 +2485,24 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2152
2485
 
2153
2486
 
2154
2487
 
2155
- <div class="paragraph" id="New-features-89472950">
2156
- <a name="New-features-89472950"/><div class="nav"><a title="Focus this segment" href="#New-features-89472950"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Thank-you-89444068"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Bug-fixes-79582034"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__New-features-89472950"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2488
+ <div class="paragraph" id="New-features-80867682">
2489
+ <div style="display: none"><br/><hr/><br/></div><a name="New-features-80867682"/><div class="nav"><a title="Here" href="#New-features-80867682"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2157
2490
  <p class="title">New features</p>
2158
2491
  <div class="content"><ul>
2159
- <li>
2160
- <p>Added <a class="xref" href="#Negation" title="Paragraph. &quot;Negation&quot;">negation (m!)</a> and <a class="xref" href="#Sampling" title="Paragraph. &quot;Sampling&quot;">sampling (m?)</a> variations to <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">assertion methods</a>.</p>
2492
+ <li>Added <a class="xref" href="#Negation" title="Section 3.1.1. &quot;Negation&quot;">negation (m!)</a> and <a class="xref" href="#Sampling" title="Section 3.1.2. &quot;Sampling&quot;">sampling (m?)</a> variations to <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">assertion methods</a>.</li>
2493
+ </ul>
2161
2494
 
2162
2495
  <p>These new methods implement assertion functionality missing so far (previously we could not assert that a given exception was NOT thrown) and thereby allow us to fully test Dfect using itself.</p>
2163
- </li>
2164
2496
 
2165
- <li>
2166
- <p>Added documentation on <a class="xref" href="#Insulation" title="Section 3.2.2. &quot;Insulation&quot;">how to insulate tests</a> from the global Ruby namespace.</p>
2167
- </li>
2168
- </ul></div>
2497
+ <pre>* Added documentation on <a class="xref" href="#Insulation" title="Section 3.2.3. &quot;Insulation&quot;">how to insulate tests</a></pre>
2498
+
2499
+ <p>from the global Ruby namespace.</p></div>
2169
2500
  </div>
2170
2501
 
2171
2502
 
2172
2503
 
2173
- <div class="paragraph" id="Bug-fixes-79582034">
2174
- <a name="Bug-fixes-79582034"/><div class="nav"><a title="Focus this segment" href="#Bug-fixes-79582034"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#New-features-89472950"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Housekeeping-81713450"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Bug-fixes-79582034"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2504
+ <div class="paragraph" id="Bug-fixes-84138754">
2505
+ <div style="display: none"><br/><hr/><br/></div><a name="Bug-fixes-84138754"/><div class="nav"><a title="Here" href="#Bug-fixes-84138754"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2175
2506
  <p class="title">Bug fixes</p>
2176
2507
  <div class="content"><ul>
2177
2508
  <li>
@@ -2198,22 +2529,22 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2198
2529
 
2199
2530
 
2200
2531
 
2201
- <div class="paragraph" id="Housekeeping-81713450">
2202
- <a name="Housekeeping-81713450"/><div class="nav"><a title="Focus this segment" href="#Housekeeping-81713450"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Bug-fixes-79582034"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Focus next segment" href="#Version-0-0-0-2009-04-13"><img alt="Focus next segment" src="84727398" class="icon"/></a> <a title="Return to listing" href="#a__toc__Housekeeping-81713450"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2532
+ <div class="paragraph" id="Housekeeping-84457184">
2533
+ <div style="display: none"><br/><hr/><br/></div><a name="Housekeeping-84457184"/><div class="nav"><a title="Here" href="#Housekeeping-84457184"><img alt="[Here]" src="cid:81898502" class="icon"/></a> </div>
2203
2534
  <p class="title">Housekeeping</p>
2204
2535
  <div class="content"><ul>
2205
2536
  <li>Filled the big holes in test coverage. Everything except the runtime debugging logic is now covered by the unit tests.</li>
2206
2537
  </ul></div>
2207
2538
  </div>
2208
- </div></div>
2539
+ </div>
2209
2540
  </div>
2210
2541
 
2211
2542
  <div class="section" id="Version-0-0-0-2009-04-13">
2212
- <a name="Version-0-0-0-2009-04-13"/><div class="nav"><a title="Focus this segment" href="#Version-0-0-0-2009-04-13"><img alt="Focus this segment" src="84728322" class="icon"/></a> <a title="Focus previous segment" href="#Housekeeping-81713450"><img alt="Focus previous segment" src="84727874" class="icon"/></a> <a title="Return to listing" href="#a__toc__Version-0-0-0-2009-04-13"><img alt="Return to listing" src="84726992" class="icon"/></a></div>
2543
+ <div style="display: none"><br/><hr/><br/></div><a name="Version-0-0-0-2009-04-13"/><div class="nav"><a title="Here" href="#Version-0-0-0-2009-04-13"><img alt="[Here]" src="cid:81898502" class="icon"/></a> <a title="Previous" href="#Version-0-1-0-2009-04-28"><img alt="[Previous]" src="cid:81898012" class="icon"/></a> <a title="Contents" href="#_contents-Version-0-0-0-2009-04-13"><img alt="[Contents]" src="cid:81897116" class="icon"/></a></div>
2213
2544
  <h1 class="title">
2214
- 4.5&nbsp;&nbsp;Version 0.0.0 (2009-04-13)
2545
+ <span class="section_number">4.6&nbsp;&nbsp;</span>Version 0.0.0 (2009-04-13)
2215
2546
  </h1>
2216
- <div class="content"><p>For the longest time, I took <a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a> and <a href='http://rspec.info'>RSpec</a> for granted. They were the epitomy of modern Ruby practice; the insurmountable status quo; immortalized in books, conferences, and blogs alike.</p>
2547
+ <div class="content"><p>For the longest time, I took Test::Unit and <a href='http://rspec.info'>RSpec</a> for granted. They were the epitomy of modern Ruby practice; the insurmountable status quo; immortalized in books, conferences, and blogs alike.</p>
2217
2548
 
2218
2549
  <p>Why would <em>anyone</em> think of using anything remotely different, let alone be foolish enough to write an alternative testing library when these are clearly <em>good enough</em>?</p>
2219
2550
 
@@ -2231,19 +2562,18 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2231
2562
 
2232
2563
  <p>Empowered by this revelation and inspired by <a href='http://www.ruby-forum.com/topic/183354#801895'>Sean O&#8217;Halpin&#8217;s musing</a> on alternative names for assertion methods, I rose to challenge the status quo.</p>
2233
2564
 
2234
- <p>And so I present to you the first public release of Dfect.</p></div>
2565
+ <p>And so I present to you the first public release of &#8220;Dfect&#8221;.</p></div>
2235
2566
  </div>
2236
2567
  </div></div>
2237
2568
  </div>
2238
2569
 
2239
-
2240
2570
  </div>
2241
2571
 
2242
2572
 
2243
2573
  <div style="display: none"><br/><hr/><br/></div>
2244
2574
 
2245
- <div id="__nfo__">
2246
- <p>This document was generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 9.0.0</a> on <b>2009-10-27 00:34:17 -0700</b> using the following resources.</p>
2575
+ <div id="_about">
2576
+ <p>This document was generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 9.2.1 (2009-11-18)</a> on <b>Sun Mar 21 16:21:47 2010</b> using the following resources.</p>
2247
2577
 
2248
2578
  <table border="1">
2249
2579
  <thead>
@@ -2256,17 +2586,18 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2256
2586
  <tbody>
2257
2587
  <tr>
2258
2588
  <td>
2259
- <img alt="here_frag" src="84731598" class="icon"/>
2260
- <img alt="important" src="84731220" class="icon"/>
2261
- <img alt="warning" src="84730758" class="icon"/>
2262
- <img alt="caution" src="84730296" class="icon"/>
2263
- <img alt="note" src="84729764" class="icon"/>
2264
- <img alt="tip" src="84729302" class="icon"/>
2265
- <img alt="quote" src="84728784" class="icon"/>
2266
- <img alt="nav_here" src="84728322" class="icon"/>
2267
- <img alt="nav_prev" src="84727874" class="icon"/>
2268
- <img alt="nav_next" src="84727398" class="icon"/>
2269
- <img alt="nav_list" src="84726992" class="icon"/>
2589
+ <img alt="here_frag" src="cid:82357212" class="icon"/>
2590
+ <img alt="command" src="cid:82356834" class="icon"/>
2591
+ <img alt="important" src="cid:82356428" class="icon"/>
2592
+ <img alt="warning" src="cid:82356008" class="icon"/>
2593
+ <img alt="caution" src="cid:82355644" class="icon"/>
2594
+ <img alt="note" src="cid:81900308" class="icon"/>
2595
+ <img alt="tip" src="cid:81899636" class="icon"/>
2596
+ <img alt="quote" src="cid:81899006" class="icon"/>
2597
+ <img alt="nav_here" src="cid:81898502" class="icon"/>
2598
+ <img alt="nav_prev" src="cid:81898012" class="icon"/>
2599
+ <img alt="nav_next" src="cid:81897676" class="icon"/>
2600
+ <img alt="nav_list" src="cid:81897116" class="icon"/>
2270
2601
  </td>
2271
2602
  <td>
2272
2603
  <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a>
@@ -2280,7 +2611,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2280
2611
 
2281
2612
  <tr>
2282
2613
  <td>
2283
- <img alt="hyperlink" src="84731990" class="icon"/>
2614
+ <img alt="hyperlink" src="cid:82357576" class="icon"/>
2284
2615
  </td>
2285
2616
  <td>
2286
2617
  <a href="http://www.mediawiki.org/skins-1.5/monobook/external.png">MediaWiki Monobook Skin</a>
@@ -2296,12 +2627,12 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2296
2627
 
2297
2628
  <p class="validations">
2298
2629
  <a href="http://validator.w3.org/check?uri=referer"><img
2299
- src="http://www.w3.org/Icons/valid-xhtml10-blue"
2630
+ src="cid:81896640"
2300
2631
  alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
2301
2632
 
2302
2633
  <a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"><img
2303
- src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
2304
- alt="Valid CSS!" height="31" width="88" /></a>
2634
+ src="cid:81896052"
2635
+ alt="Valid CSS 3!" height="31" width="88" /></a>
2305
2636
  </p>
2306
2637
  </div>
2307
2638
  </div>
@@ -2309,7 +2640,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
2309
2640
 
2310
2641
 
2311
2642
 
2312
- <div id="__footer__">
2643
+ <div id="_footer">
2313
2644
 
2314
2645
 
2315
2646