doc/index.html in dfect-1.1.0 vs doc/index.html in dfect-2.0.0
- old
+ new
@@ -3,17 +3,17 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
- <meta name="generator" content="ERBook 9.0.0 — http://snk.tuxfamily.org/lib/erbook/"/>
+ <meta name="generator" content="ERBook 9.2.1 (2009-11-18) — http://snk.tuxfamily.org/lib/erbook/"/>
- <title>Dfect 1.1.0 — Assertion testing library for Ruby</title>
+ <title>Dfect — Assertion testing library for Ruby</title>
<meta name="author" content="Suraj N. Kurapati"/>
- <meta name="date" content="27 October 2009"/>
+ <meta name="date" content="21 March 2010"/>
<link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/dfect/ann.xml"/>
<style type="text/css" media="screen">
/*<![CDATA[*/
@@ -412,18 +412,18 @@
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
-.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") */
-.ui-tabs .ui-tabs-nav { list-style: none; margin: 0; padding: .2em .2em 0; }
-.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; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
.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; }
.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... */
-.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/*]]>*/
</style>
@@ -438,11 +438,11 @@
font-family: Constantia, "Book Antiqua", "URW Bookman L", serif; }
blockquote {
color: #333;
font-style: italic;
- background-image: url(84728784);
+ background-image: url(cid:81899006);
background-repeat: no-repeat;
margin-left: 0;
padding-left: 65px;
min-height: 50px; }
@@ -471,27 +471,27 @@
h1, h2, h3, h4, h5, h6, .title {
font-weight: lighter;
font-family: Constantia, "Book Antiqua", "URW Bookman L", serif; }
-#__lof__ h1, #__lof__ h2, #__lof__ h3, #__lof__ h4, #__lof__ h5, #__lof__ h6 {
+#_floats h1, #_floats h2, #_floats h3, #_floats h4, #_floats h5, #_floats h6 {
margin-top: 1.25em; }
-#__doc__ h1, #__doc__ h2, #__doc__ h3, #__doc__ h4, #__doc__ h5, #__doc__ h6 {
+#_document h1, #_document h2, #_document h3, #_document h4, #_document h5, #_document h6 {
margin-top: 2.5em;
line-height: 1.25em; }
-#__doc__ h1 {
+#_document h1 {
font-size: 2.0em; }
-#__doc__ h2 {
+#_document h2 {
font-size: 1.8em; }
-#__doc__ h3 {
+#_document h3 {
font-size: 1.6em; }
-#__doc__ h4 {
+#_document h4 {
font-size: 1.4em; }
-#__doc__ h5 {
+#_document h5 {
font-size: 1.2em; }
-#__doc__ h6 {
+#_document h6 {
font-size: 1.0em; }
table {
border: none;
border-collapse: collapse;
@@ -506,32 +506,37 @@
background-color: #FFFFFF; }
th {
background-color: #F5F5F5; }
-#__header__ > .title {
+#_header > .title {
font-size: 2.25em; }
@media print {
- #__header__ .printer_friendly_toggle {
+ #_header .printer_friendly_toggle {
display: none; } }
@media screen {
- #__header__ .printer_friendly_toggle {
- display: inline; } }
+ #_header .printer_friendly_toggle {
+ display: inline; }
+ #_header .printer_friendly_toggle label:hover {
+ cursor: pointer; } }
-#__abstract__ {
+#_abstract {
margin-bottom: 5em; }
-#__toc__ ul > li {
+#_contents ul > li {
list-style-type: none; }
-#__toc__ li ul {
+#_contents li ul {
padding-bottom: 1em; }
-#__toc__ > ul {
+#_contents > ul {
padding-left: 1em; }
-#__footer__ {
+#_references > ol > li {
+ margin-bottom: 1em; }
+
+#_footer {
padding-top: 1em;
text-align: center;
margin: auto; }
.part > .title, .chapter > .title {
@@ -539,30 +544,24 @@
.part > .title > big, .chapter > .title > big {
display: block;
margin-top: 0.25em; }
-.paragraph > .title, .tip > .title, .note > .title, .caution > .title, .warning > .title, .important > .title, .figure > .title, .table > .title, .example > .title, .equation > .title, .procedure > .title {
- font-size: large;
- margin-top: 2em; }
+.paragraph > .title {
+ font-size: large; }
-.tip, .note, .caution, .warning, .important, .figure, .table, .example, .equation, .procedure {
- margin: 3em; }
-
-.tip .nav, .note .nav, .caution .nav, .warning .nav, .important .nav, .figure .nav, .table .nav, .example .nav, .equation .nav, .procedure .nav {
- margin-right: -3em; }
-
-.tip > .content, .note > .content, .caution > .content, .warning > .content, .important > .content, .figure > .content, .table > .content, .example > .content, .equation > .content, .procedure > .content {
+._float > .title {
+ font-size: large; }
+._float > .content {
min-height: 48px; }
+ ._float > .content > .icon {
+ float: left;
+ margin-top: 0;
+ margin-right: 1em;
+ margin-bottom: 1em;
+ margin-left: 0; }
-.tip > .content > .icon, .note > .content > .icon, .caution > .content > .icon, .warning > .content > .icon, .important > .content > .icon {
- float: left;
- margin-top: 0;
- margin-right: 1em;
- margin-bottom: 1em;
- margin-left: 0; }
-
.figure > .title {
text-align: center; }
.figure > .content img {
display: block;
margin: auto; }
@@ -573,11 +572,14 @@
/*<![CDATA[*/body {
margin: 0;
padding: 0.5em;
background-color: #FFFFFF; }
-#__body__, #__abstract__ > .title, #__toc__ > .title, .part > .title, .chapter > .title, .section > .title, .paragraph > .title, #__bib__ > .title {
+#_loading:before {
+ content: "Loading..."; }
+
+#_body, #_abstract > .title, #_contents > .title, .part > .title, .chapter > .title, .section > .title, #_references > .title {
display: none; }
.tabs {
clear: both; }
@@ -585,23 +587,29 @@
font-size: 1em; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
cursor: pointer; }
+li > p:first-child {
+ display: inline; }
+
tt {
background-color: #F0F8FF; }
pre {
cursor: text;
line-height: normal;
border: 1px solid #b1d827;
background-color: #F5FFDF;
padding: 1em;
display: inline-block;
- margin: 0;
- min-width: 92.5%; }
+ min-width: 95%;
+ margin: 0; }
+ins ~ div {
+ margin-top: 1.5em; }
+
code.para {
cursor: text;
line-height: normal;
border: 1px solid #b1d827;
background-color: #F5FFDF;
@@ -623,57 +631,106 @@
a:link {
color: #0038E1; }
a:visited {
color: #800080; }
a[href]:not([href^="#"]) {
- background: url(84731990);
+ background: url(cid:82357576);
background-position: center right;
background-repeat: no-repeat;
padding-right: 13px; }
-#__header__ > .logo {
+#_header > .logo {
text-align: center; }
-#__header__ > .title_and_subtitle {
+#_header > .title_and_subtitle {
float: left;
margin-right: 1.5em; }
- #__header__ > .title_and_subtitle .title {
+ #_header > .title_and_subtitle .title {
margin-top: 0.25em; }
-#__header__ > .authors_and_date {
+#_header > .authors_and_date {
text-align: right; }
- #__header__ > .authors_and_date .authors, #__header__ > .authors_and_date .date {
+ #_header > .authors_and_date .authors, #_header > .authors_and_date .date {
margin-top: 0;
margin-bottom: 0.25em; }
- #__header__ > .authors_and_date .date {
+ #_header > .authors_and_date .date {
font-weight: lighter; }
-#__toc__ li ul {
+#_contents li ul {
border-left: thick solid #F5F5F5; }
- #__toc__ li ul:hover {
+ #_contents li ul:hover {
border-color: #DCDCDC; }
-#__toc__ a:target, #__lof__ a:target {
- background: url(84731598);
+#_contents a:target, #_floats a:target {
+ background: url(cid:82357212);
background-position: center right;
background-repeat: no-repeat;
padding-right: 20px; }
+.paragraph {
+ margin-top: 1.5em;
+ margin-bottom: 1.5em; }
+ .paragraph > .nav {
+ float: left; }
+ .paragraph > .title {
+ padding-left: 2.5em;
+ padding-top: 0.25em; }
+
+._float {
+ margin: 1.5em; }
+ ._float > .title {
+ padding-top: 0.5em;
+ padding-left: 1em;
+ padding-right: 1em; }
+ ._float > .nav {
+ position: relative;
+ z-index: 1;
+ top: 0.25em;
+ right: 0.25em; }
+ ._float > .content {
+ margin: 1em; }
+
.nav {
float: right;
clear: right; }
.nav > a > img:hover {
background-color: yellow; }
.ui-tabs > .ui-tabs-panel > .nav {
position: relative;
- margin-top: -3.375em;
- margin-right: -1em; }
+ margin-top: -3.4em;
+ margin-right: -1.25em; }
.ui-tabs > .ui-tabs-nav > li:last-child {
margin-right: 9em; }
-#__nfo__ > table td:first-child, #__nfo__ > .validations {
+.ui-tabs > .ui-tabs-nav > li > a > .section_number {
+ display: none; }
+
+#_about > table td:first-child, #_about > .validations {
text-align: center; }
+
+#_search_form {
+ text-align: right;
+ font-weight: normal; }
+ #_search_form input {
+ margin-top: 0.25em; }
+ #_search_form input.initial {
+ color: gray;
+ font-style: italic; }
+ #_search_form #_search_start, #_search_form #_search_stop {
+ float: right;
+ margin: 0.1625em;
+ padding: 0.325em; }
+ #_search_form #_search_start:hover, #_search_form #_search_stop:hover {
+ cursor: pointer; }
+
+#_search > .status {
+ text-align: center; }
+#_search > .results > .result > .excerpt:hover {
+ background-color: #FFFFE0;
+ cursor: pointer; }
+ #_search > .results > .result > .excerpt:hover * {
+ cursor: pointer; }
/*]]>*/
</style>
<style type="text/css" media="print">
/*<![CDATA[*/body {
@@ -711,37 +768,43 @@
content: " " attr(title); }
a:after {
font-weight: normal;
font-size: smaller; }
-.tabs > ul, .nav, #__lof__, #__nfo__ {
+.tabs > ul, .nav, #_floats, #_about, #_search {
display: none; }
-#__toc__, .part, .chapter, #__bib__ {
+#_contents, .part, .chapter, #_references {
page-break-before: always; }
-#__header__, #__footer__ {
+#_header, #_footer {
text-align: center; }
-#__header__ > .authors_and_date > .authors {
+#_header > .authors_and_date > .authors {
margin-top: 1.625em;
margin-bottom: -0.25em; }
-.header_outside_above, #__header__, .header_outside_below, .logo {
+.header_outside_above, #_header, .header_outside_below, .logo {
margin-bottom: 5em; }
-.footer_outside_above, #__footer__, .footer_outside_below, #__bib__, #__nfo__ {
+.footer_outside_above, #_footer, .footer_outside_below, #_references, #_about {
margin-top: 5em; }
-#__header__ .header_inside_above, #__footer__ .footer_inside_above {
+#_header .header_inside_above, #_footer .footer_inside_above {
margin-bottom: 4em; }
-#__header__ .header_inside_below, #__footer__ .footer_inside_below {
+#_header .header_inside_below, #_footer .footer_inside_below {
margin-top: 4em; }
.part > .title > big, .chapter > .title > big {
padding-bottom: 0.5em; }
+
+.paragraph > .title {
+ margin-top: 2em; }
+
+._float {
+ margin: 3em; }
/*]]>*/
</style>
<script type="text/javascript">
//<![CDATA[
@@ -784,10 +847,22 @@
*
* Depends:
* ui.core.js
*/
(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…</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);;/*
+ * jQuery UI Progressbar 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * ui.core.js
+ */
+(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);;/*
* jQuery UI Effects 1.7.2
*
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
@@ -806,46 +881,75 @@
* Depends:
* effects.core.js
*/
(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);;
$(function() {
- /*
- %< File.join(ERBook::INSTALL, 'LICENSE')
- */
+ /*(the ISC license)
- //
- // respond to changes in window location
- //
- var $last_hash = null;
+Copyright 2006 Suraj N. Kurapati <sunaku@gmail.com>
- function on_hash_change() {
- var curr_hash = window.location.hash;
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
- if (curr_hash && curr_hash != $last_hash) {
- $last_hash = curr_hash;
- reveal_hash(curr_hash);
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+ "use strict";
+
+ //--------------------------------------------------------------------------
+ // utility logic
+ //--------------------------------------------------------------------------
+
+ //
+ // Returns the tab corresponding to the
+ // given panel in the given tabs widget.
+ //
+ function tab_by_panel(panel, tabs_widget) {
+ if (!tabs_widget) {
+ tabs_widget = panel.parent('.ui-tabs');
}
- setTimeout(on_hash_change, 300);
+ return tabs_widget.find(
+ '.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
+ ).parent('li');
}
//
+ // Returns a jQuery element containing a jQuery UI icon of the given name.
+ //
+ function ui_icon(name) {
+ return $('<div/>').addClass('ui-state-default ui-corner-all').append(
+ $('<span/>').addClass('ui-icon ui-icon-' + name)
+ );
+ }
+
+ //--------------------------------------------------------------------------
+ // document location
+ //--------------------------------------------------------------------------
+
+ var $last_hash;
+
+ //
// Sets the location bar hash to the given value.
//
// [prevent_jump]
// If true, prevents the browser from jumping to
// the element corresponding to the given hash.
//
function set_hash(hash, prevent_jump) {
- if ($last_hash == hash) {
+ if (hash === $last_hash) {
return;
}
- var set_the_hash = function() {
- //
+ function set_the_hash() {
// XXX: bypass on_hash_change() by setting $last_hash
- //
window.location.hash = $last_hash = hash;
}
if (prevent_jump) {
var target = $(hash);
@@ -874,197 +978,390 @@
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
- // This plugin is documented at:
+ // The jQuery.LocalScroll plugin is documented at:
//
// http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
//
// And its source is available at:
//
// http://flesler-plugins.googlecode.com/svn/trunk/jquery.localScroll/jquery.localScroll.js
//
+
var target_id = target.attr('id');
- //
// temporarily place a dummy element at the current
// screen position and give it the ID of the target
- //
var original_screen_position = $(window).scrollTop();
var dummy = $('<span/>').attr('id', target_id).css({
position: 'absolute',
top: original_screen_position
});
target.removeAttr('id').before(dummy);
- //
// when we set the hash, the browser will jump to the
// dummy, which is where the browser screen currently
// is, and therefore the jump will not be visualized!
- //
- console.log($(window).scrollTop())
- console.log(target)
set_the_hash();
- console.log($(window).scrollTop())
- //
// undo the temporary changes
- //
dummy.remove();
target.attr('id', target_id);
- //
// the above approach does not work for Opera and IE.
// they ignore the dummy and jump to the actual target
- //
$(window).scrollTop(original_screen_position);
return;
}
}
set_the_hash();
}
//
- // Returns the tab corresponding to the
- // given panel in the given tabs widget.
- //
- function tab_by_panel(panel, tabs_widget) {
- if (!tabs_widget) {
- tabs_widget = panel.parent('.ui-tabs');
- }
-
- return tabs_widget.find(
- '.ui-tabs-nav > li > a[href=#'+ panel.attr('id') +']'
- ).parent('li');
- }
-
- //
// Reveals the element at the given hash by (1) activating all
// tabs that contain it, (2) smoothly scrolling to it, and (3)
// updating the hash in the browser's location bar accordingly.
//
- function reveal_hash(hash) {
- var target = $(hash);
+ function reveal(hash_or_elem, callback) {
+ var target = $(hash_or_elem);
if (target.length) {
var target_is_panel = target.is('div') &&
target.parent('.ui-tabs').length;
- //
// reveal all tabs which contain the target
- //
if (target.is(':hidden')) {
var panels = target.parents('.ui-tabs > div:hidden').get().reverse();
if (target_is_panel) {
panels.push(target);
}
- for (var i in panels) {
- var panel = $(panels[i]);
+ $(panels).each(function() {
+ var panel = $(this);
var tabs_widget = panel.parent('.ui-tabs');
var selected_index = tabs_widget.tabs('option', 'selected');
- //
// map the panel to its tab because tabs do not
// have to be in the same order as their panels
- //
var tab = tab_by_panel(panel, tabs_widget);
var wanted_index = tab.prevAll('li').length;
- if (wanted_index != selected_index) {
+ if (wanted_index !== selected_index) {
tabs_widget.tabs('select', wanted_index);
}
- }
+ });
}
- //
+ // scroll to nearest visible element if the target
+ // is naturally hidden (e.g. because of a CSS rule)
+ if (target.is(':hidden')) {
+ target = target.closest(':not(:hidden)');
+ }
+
// scroll to the tab bar instead of the target
// because it contains the title for the target
- //
var scroll_target = target;
if (target_is_panel) {
var tabs_nav = target.parent('.ui-tabs').find('> .ui-tabs-nav');
if (!tabs_nav.is(':hidden')) {
scroll_target = tabs_nav;
}
}
- var scroll_offset = scroll_target.offset().top;
+ var scroll_offset = Math.floor(scroll_target.offset().top);
- //
// set body height so that any element can be
// brought to the top of the screen via scrolling
- //
var document_height = $(document).height();
var window_height = $(window).height();
if (document_height - scroll_offset <= window_height) {
$('body').css('min-height', document_height + window_height);
}
+ var pending = true;
$('html, body').animate(
{ scrollTop: scroll_offset }, 'slow', 'swing', function() {
- set_hash(hash, target_is_panel);
+ // prevent the body of this function from being
+ // executed twice -- because there are 2 target
+ // elements in the animation list and only one
+ // of them actually works in different browsers!
+ if (pending && scroll_offset === $(window).scrollTop()) {
+ pending = false;
+
+ var target_id = target.attr('id');
+ set_hash('#' + (target_id || '_reveal' + Math.random()),
+ target_is_panel || !target_id);
+
+ if (callback && typeof(callback) === 'function') {
+ callback();
+ }
+ }
}
);
}
}
- //
- // create jQuery UI tabs
- //
- $('.tabs').tabs();
+ //--------------------------------------------------------------------------
+ // search engine
+ //--------------------------------------------------------------------------
- //
- // make internal hyperlinks reveal their targets when clicked
- //
- $('a[href^=#]').click(function() {
- var link = $(this);
- var hash = link.attr('href');
-
- if (link.parent('li').parent('.ui-tabs-nav').length) {
- // tab clicks should not cause the screen to scroll
- set_hash(hash, true);
+ // Adapted from the source code of the ":contains" selector from
+ // the "Search on this Page" plugin by Waldek Mastykarz
+ // <http://blog.mastykarz.nl>, which was (1) published online on
+ // 17 November 2008 at <http://www.endusersharepoint.com/?p=951>
+ // and <http://blog.mastykarz.nl/search-page-jquery/>, and was
+ // (2) updated to work with jQuery 1.3 by "anonymous" here:
+ // <http://stackoverflow.com/questions/187537>.
+ jQuery.expr[':'].matches = function(a, i, m) {
+ // compile the regexp during the first call to this
+ // function only, so that subsequent calls are fast
+ if (typeof(m[3]) === 'string') {
+ m[3] = new RegExp(m[3], 'i');
}
- else {
- reveal_hash(hash);
- }
+ return jQuery(a).text().match(m[3]);
+ };
- return false;
- });
+ $('.tabs:first > ul').append(
+ $('<li/>').append(
+ $('<a/>').attr('id', '_search_link').attr('href', '#_search').
+ text("Search")
+ ).hide()
+ ).append(
+ $('<form/>').attr('id', '_search_form').append(
+ $('<input/>').attr('type', 'text').attr('name', 'q').
+ addClass('initial').attr('title', "Search with regular expression").focus(function() {
+ var box = $(this);
- //
- // checkbox for printer friendly stylesheet
- //
- $('#__header__ > .authors_and_date').append(
+ if (box.is('.initial')) {
+ box.val('').removeClass('initial');
+ }
+ }).blur(function() {
+ var box = $(this);
+
+ if (! box.val().match(/\S/)) {
+ box.val(box.attr('title')).addClass('initial');
+ }
+ }).blur()
+ ).append(
+ ui_icon('search').attr('id', '_search_start').click(function() {
+ $('#_search_form').submit();
+ })
+ ).append(
+ ui_icon('cancel').attr('id', '_search_stop').hide().click(function() {
+ $(this).attr('clicked', 'clicked');
+ })
+ ).submit(function(event) {
+ event.preventDefault();
+
+ var search_box = $(this).find(':text');
+ var query = search_box.val().replace(/^\s+|\s+$/g, '');
+
+ // ignore empty queries
+ if (search_box.is('.initial') || !query.match(/\S/)) {
+ return;
+ }
+
+ // detect invalid regexps
+ try {
+ new RegExp(query);
+ }
+ catch(e) {
+ alert(e);
+ return;
+ }
+
+ // one search at a time
+ if (search_box.attr('disabled')) {
+ return;
+ }
+
+ search_box.attr('disabled', 'disabled');
+
+ // begin the search
+ var status = $('#_search > .status');
+ var results = $('#_search > .results');
+
+ // display the search results tab
+ $('#_search_link').click().parent().show();
+
+ // clear previous search results
+ results.text('');
+ status.text("Searching...");
+
+ // timeout allows status updates to appear
+ setTimeout(function() {
+ var num_results = 0;
+
+ function emit_result(match) {
+ // exclude matches from previous search results,
+ // the table of contents, and jQuery UI tab bars
+ if (match.closest('#_search, #_contents, .ui-tabs-nav').length) {
+ return;
+ }
+
+ var excerpt;
+
+ // resolve tab panels into their section title
+ // because additional matches, which lie within
+ // the content of these tab panels, will come
+ if (match.is('.ui-tabs-panel')) {
+ excerpt = match.find('.title:first').clone().show();
+ }
+ else {
+ excerpt = match.clone();
+ }
+
+ // highlight the query inside the match excerpt
+ excerpt.html(excerpt.html().replace(
+ new RegExp('(<[^>]*)?(' + query + ')', 'ig'),
+ function($0, $1, $2) {
+ // only highlight if not inside an XML tag literal
+ return $1 ? $0 :
+ '<span class="ui-state-error">' + $2 + '</span>';
+ }
+ ));
+
+ num_results += 1;
+ var result = $('<li/>').addClass('result').append(
+ $('<blockquote/>').addClass('excerpt').append(excerpt)
+ ).attr('id', '_search' + num_results).click(
+ function(event) {
+ event.stopPropagation();
+
+ // save this search result's hash in browser history
+ // before revealing the matching element so that
+ // the user can press the back button to return to
+ // this exact spot in the search results listing
+ reveal(this, function() {
+ if (!$(event.target).is('a')) {
+ reveal(match);
+ }
+ });
+ }
+ );
+
+ // show bread-crumb trail for the match
+ var first = true;
+ match.parents('.ui-tabs-panel').each(function() {
+ var panel = $(this);
+ var tab = tab_by_panel(panel);
+
+ if (tab.length) {
+ if (!first) {
+ result.prepend(' ⟩ ');
+ }
+ first = false;
+
+ result.prepend(tab.find('a').clone());
+ }
+ });
+
+ results.append(result);
+
+ // unhide any hidden elements in the search result
+ result.find(':hidden').removeClass('ui-tabs-hide').show();
+
+ // remove tab bars (used for titles) and mini navigation menus
+ result.find('.ui-tabs-nav, .ui-tabs-panel > .nav').remove();
+ };
+
+ var matching_elems = $('#_body').
+ find(':matches("'+ query.replace(/"/, '\\"') +'")');
+
+ status.text('').progressbar();
+ var start_button = $('#_search_start').hide();
+ var stop_button = $('#_search_stop').show();
+
+ var prev_match;
+ var prev_elem;
+
+ function process_match(i, n) {
+ status.progressbar('value', Math.round(i / n * 100));
+
+ var elem = matching_elems.eq(i);
+
+ // ascend to a larger container for more context
+ var match = elem.closest('pre,ul,ol,dl,table,p,div');
+ if (!match.length) {
+ match = elem;
+ }
+
+ if (
+ prev_match && prev_match.length &&
+ match.get(0) !== prev_match.get(0) && // unique matches only
+ elem.parent().get(0) !== prev_elem.get(0) // leaf nodes only
+ ) {
+ emit_result(prev_match);
+ }
+
+ prev_elem = elem;
+ prev_match = match;
+
+ if (i < n && !stop_button.attr('clicked')) {
+ // timeout allows status updates to appear
+ setTimeout(function() { process_match(i + 1, n); }, 0);
+ }
+ else {
+ // handle the last item in this two-stage prev/curr loop
+ if (prev_match && prev_match.length) {
+ emit_result(prev_match);
+ }
+
+ status.progressbar('destroy').text("0 results".replace('0', num_results));
+
+ search_box.removeAttr('disabled');
+ stop_button.hide().removeAttr('clicked');
+ start_button.show();
+ }
+ }
+
+ process_match(0, matching_elems.length);
+
+ }, 0);
+
+ return false;
+ })
+ ).after(
+ $('<div/>').attr('id', '_search').append(
+ $('<p/>').addClass('status')
+ ).append(
+ $('<ol/>').addClass('results')
+ )
+ );
+
+ //--------------------------------------------------------------------------
+ // create print preview toggle
+ //--------------------------------------------------------------------------
+
+ $('#_header > .authors_and_date').append(
$('<span/>').addClass('printer_friendly_toggle').append(
- $('<input/>').attr('type', 'checkbox').click(function() {
+ $('<input/>').attr('type', 'checkbox').
+ attr('id', 'printer_friendly_toggle').click(function() {
var checkbox = $(this);
function change_media(src, dst) {
var styles = $('style[media="'+ src +'"]');
if (styles.length) {
- //
// try changing the media in-place
- //
var before = checkbox.offset();
styles.attr('media', dst);
var after = checkbox.offset();
- if (after.top == before.top && after.left == before.left) {
- //
+ // but if that did not work
+ if (after.top === before.top && after.left === before.left) {
// try reinserting the <style> into document.
// this works in Webkit browsers, which ignore
// the in-place changing approach tried above.
- //
styles.each(function() {
var style = $(this);
var parent = style.parent();
style.remove();
@@ -1082,207 +1379,258 @@
change_media('screen,print', 'print');
change_media('none', 'screen');
}
return true;
- })
- ).append(" Printer friendly")
+ }).css('margin-right', '0.3em')
+ ).append(
+ $('<label/>').attr('for', 'printer_friendly_toggle').
+ text("Printer friendly")
+ )
);
- //
- // activate embedded data URIs
- //
- 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,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAk1SURBVGiBvVlpbBxnGX6+uda76/uO10fsxs5BjNOLtE3S5iAp2bSoiIqCFBSQoEgV3R8IQUUjfiAFCfhRugKqCohaobZAUyCIrtIoCW3Cmauxc9Zx4vhIfK9313vNzsz38mO9zux6du1dOzzSaGbe73qe732/Y75hRITlgNfNJACPM4bHFAFtDrvS5ix1NimKXByPRicikfhANKZf1zh6ARzx+OjmcrTLliLA62Y2AHuK7eLXXC1NO9esaxVr62tlUbEBxECaBnADJEoQRAEAhxabocH+Ie1m30BgeHj6DVWntzw+6vm/CvC6mcAY9tbXVbyy+fGHSqsaGiTEY8BMEBSeARl69gZlGay4FNxRAogGBnp7E+fP9Z2emI590+Oja/dcgNfNtldVOA9u2fpww4rmFpkmR8FDAaAQTwoChPJKkMOGa5evJLov9B8OzCRe8PhocrFV5CXgtafY/g0PrN7/4KZHbAhMgvsnCyOeCVGAUFkLLiboxPEzwb7+qa0eH3UvpuiiBHjdzGaT2Ds7dj36VEtbq8yH+nOGSaFgigKqKsf5sz3quY8H977oo0MLlllIgNfN7E67dPqZZ3etLS2yi8bo8PL0ejaIAlBdjYFbN7QPT37y8rcOGz/LlV3Ileh1M2aT8O4zX9i2tkSSRGNk6N6SBwCDA2PjaHG55E2PtB3wupk7V/acAmQBB7Ztf3hnaXG5yCdGl5foQpiewX1tLXLX+ob3vG62Nlu2rAK8bubu7Gz9TmtHh2KMDN4bkrlABBaIYuNDHUWtTRUnZ9eceZCsjF43k0qd8q83Pv4ZGx+6lXfYiF1fhlDVMUvEALgBADCu/Bl84pPFV2QYYIEYtm5prxw5dO67AA4sSoDA8PyWzeurKRwD6Vpe5AFAbH4MQtPG+XzunAfyEQCAdILERWHt6vr9Xjf7lcdH02lcMwt43ay4rMT24+aOtQr3j+fLPQk1ZG2PZ7EvACFq4MH7m20lDukn89IyDQz46hOb1jgoGEjOCAWA4kHrhGz2herjgBCJs472+n1eN3OY0+YJUCTsq29plikYKKgxILsAUgsTAACIa1i9qloE8KTZnCbA62Zl1VUlXQKzLWmlXW4PJCu1wemwidXlRd8wmzM9sOfT6xoYj8YKbwiwJmrooESk8DoFEYjE0eCq2DH77ZE0m/MoIrbW11faKBIuvCFYe4CyDew8IMRiaFxRxgC0z9nMGUSGVsXhBGmJpbVkJWAp4ZOqgxOKHQoD0JCypQkgoFGQiwDDWFpDVtOl2QOF7qc4weGQRQCulCltIRNEsY4VVnU6rDwQHgP5b4ASYUBXASYCogwmKoDsAHNWA7LDojJTHRxQbLLAGJosBYiS6ICuLpk/aWGAc0C462AKDYOiU6ZMBqAbID0OqCFQeBSQ7WDOWjBnLcAsupLrYAAkAXUpU1oIaQktSDn3pwtSB8X8oIlroNhUekp0KksZM4EYKDAAPtYDivnnp3MdBidoBuZ2l+l7IaIx4notGMsvTg0VFJ4ARScAQ5sjzJw1d/MsRkAKugqa6gMpxRDKmwGlGADAKIF4PGEAGLYUwIBhPRLsFIlAkHM3wnVQbBqI+a1nmGgBHshEIgw+fgVQnGCCBCYRItEEB3DHUoDOcT0eVXc71BBgq09KSmNhJElH/cltQQ4v6Wd+A2Hs0tw77z+Vv4A5IREQAKGmHsEZlcPkgbRvYq+b7d70QMOhzka7Q789lAwBQUwO/0QEFC/w+GSZwO5bhxNnR0N7XpsqS9kyh+yJS72TYOWVgJEAhW6DAoOg4HCy5wshL9uXSHsWggBWXIqR0cC7aWbzi8dHajyW+EhVNTCHc2nt1Xei6PlTcPwwANtzby9ZiFBagbGxYCKq8rfS7JkZVQNvXu8bj4l1rsykvCBvfRnCys2AqEDs+gqkzueWVB9qXbh0dUwDkDaYrGb9Q2d6Rqa4swzMnntlzAVWtSrnez4QyioR1pkxMOT/kcdHafv8eQI8PjLiGr1w9vxATGpqK7hR/d+/uDtmtCj0cwcLrguuVvzjP7dCOsfPM5Oynsy9/jT7eO+z928QxwbBAwXM4Uj2utj6BIxL7yVnsAIg1rkwLpTrfzlyed+L79PbmelZNw6qgX2HP7gaFZrbCg4lmuqDfva3BZMXSsuhVa2g4yd7u4nwjmWebIU9PurxB+NfP/Zhb0xatQ6QLE9g7hmYrQho6cDfPrgyGYpouzw+61DJuXX79vv0x4Hh4Ks9F2+rcsd6MFm5N2wzwIrsENrX49jJvuj4VHSbx0cWO7skFtx7ahw/OHtx5E9nuu/EpLVdYI7i5WWbSaisAqx9PY5+1Be9OeD/osdHl3PlX/B4nTEmApBe+RxeanWVfG/3jjUOGh2CsdyHvYxBrG+EVl5Lfz1yxd89EHv6p//EBQA6AJ2yEM0qgDEmAJCR3PBJAKTvb8aT6xpsr7u3r3KWFduYMdwPHpy2LJ8PhMoaCK6VuD0a0o+dutH7h279S8dvYjxFfvbSZoUsLGC211PkZfPz7na0fLYN+9say7bs2LSyqEjkMCbGwAN+II+zJCbLEMqrwGpWwD+j8b//qz92cSDy6i9P43chFaqZdMZdM3tjngBTz6cRz3z+/Gp8alsrXmpfWbGma3WNXLuiQmDxKHhwGpSIA4kESEuAdA1MUsAUBZAVsCI7WFklDEnB8JBf7746bnTfDP3+jQs4OBxCKEXSTNhCwNyJs5UAyURWySJk7nq0CS0bXdjWWsF2NjaUutqby6msWJEcDkUosisQZQmaqiEeS1A4muDTIZX3DUxT/53w+cvjOHr0Bv47HsFMBlkr4gnTu5rivZCAeYQtrrl8bRWo2lCPNSU21JQoqK6wo04R4ZhR4ffHMB5OYGoyirFTg7iq6ojn6uVcgoho7uTBSgDLEUJWIWUWLJruIpKfdKnPOgJgAOCzRA1kDNAs90xxKhHNHZvPW16JiBhjWkbDqTvNEuCzBFICdBNpEcn1RUD6N6m5vGG6p0SknjVYzD5W5IEF1oHZ2UgxETVfKbKpZ8GCfObhDrfohGxeMUzk40RkeVy4qB/dqcUMyVDJDJNM4mbymQIyvWgWYhZhYHbQZiOelwCTEJhIpuI+JYCZyKe2KNkEWIlIxTrPDJNc+B/DI2njy1uQ2wAAAABJRU5ErkJggg==","84730758":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAlSSURBVGiB1ZpJjFzFGcd/31t6ncWzeHrGG15JwBAcjAGDkwtJDPIgnAgh+UAkDlzgFHHIzQeOUXKJAheUE1IQEoqMMiZBkSMQToxkx2DMImMbg5cZz7jbs3W/3t6rL4funnm9zoxnEiklleq9qn9X/f9ffVWvlhZV5f85OGtSi4iMwT4LDtsi9wObDaQC1X4AW+S2BZPAtUD1vIFjo3CaNbCerKaOMZEnbMt6XlWf6Uml7M337U50pYbsSFcXkZ4u3HgCTEDZ8yhls5Tm5pmfmAiufXXBm7+VDkTk3cCYN0dVT/xPBYyJ7LdFXutav37Xzr0PJgfuuVvcaAymZyCbhVIZiiUolys/cF2IuhCJQFcSeropFwukL3ytl8+ey2VvpS8Gqi+Pqp76rwo4JrIjKvK629tzYM+PHo8P3LtbyNyGTAbyhWXVsdBaPAYDfWhvN5kLF/Szkx/ny7NzJ4uqLx1WvbzmAo6LHLQc553d+x9ObHporyXzOZi4CYFZHuEWeaoKtgXDKehNcP30WfPVx2c84/vPHlJ9f80EHBd5xU0kXn300MFEd/8g3JgA31826fB7rb0mjOMgG4bI3r7F6b+e8Mpe/ugh1d+tWsB7Im90p4aO7Hvyp8moWjB1a0nC4bxw/e2EhfMlNUjJ8jn73onc3FT6rVHVFzvxszoVHhd5pTs1dOSxp59KRr1SHXkNxcY8o4qqVtIG3AKmRWqAYDKN7QU8dOgnye6hwSPHRV7pxLFtDxwXOegmEn/+8c9HE9GCDzmvvQVXaOVWedWKFsuSCfy48PGxv3m+l/9FuzHRUsAxkR1Rx/n08aef6uqyXMh5bUl3dJ8O5Bc5N4tfyFnXhVfMcvr4iWzZD/a0mp1aulBU5PV7H9mb6HIctGr5dq5Ra7CTazS5UUM9phFfLdfpeeJujLv3PZCIirzeimuTgDGR/W5vz4GNO7ZZZi7X1Fg7X25HOky4kXQdtlpOqB0DmBmP1PYtltOdPDAmsn9JAbbIa/c9tCeumRkUWdEA7GTldqSpietgBDOdY9fe++OWyGsdBYyJPJFcP7hrIDUkWvLrLbGElVnCymHXCJNeFqZkWDfUL4nBvl1jIk+0FWBb1vNbv7cjqdNzqGW3dZGWrrGElRtdY8meEEFFqqmFPznNxp13JW14Psx5cTktIiryTP+mDWImp8GNdJ7mGtKFZ1UQWXwXaY0Jl4XxjRioCCkpvZtSYkSeQURq09dCD4zBvq71A7bjB6jjoiILDbS0imWhlgWWhVbzqeUvWE7aYyyrqT5aYaq/JZ7AKvskBvvsMdhX422FHg4P37U5ofO5yo9rhMMVhUmH3aCKa8JUDbCAEWmJQaQyBjoYCNfFvzXD4OaRBHC4yYVE5P5kb7etBtSxmt3n7bfrXqUhXevgPfccsOiGiBDki8R7k7ZV2fUBYQGw2Y3HMEXT5JNrRVSN1lUkSPuKLat5vBnFiUYANtdgCwIMpNx4FC0U6gdeVcxqBKhRjJqWW2ARwbIsROpbMA3vlZWA4CSiKKSaBaj2O7EoahVbzgodl60dQhAEHffuqkoQBItCar0SMmItNV4eNxrBVA8L6gTUKlPXreu+Ow1qlMAEy8fXhCBYdmVCaCrPZuumVwjPQiK3S4UCanRxKgvFlQQTmBWRryNKRUjx3DmCbHaRg+9jTEC5WMQSuV3Dh3tgspwvDNuBDRK9ox5YqdU7hXImQzmTQZJJrL4+/JuTWF0xSl4BKmdMQP0sdK2Yzz8QlejCtLUcESJSGaTGYLTzBn8lYWHJks3iZ7MAWNFuyoUiAteaBASq57Mzc08lYzFbInEkHl+oCKDwwgtNgky+gP/dt5THxyEIlr3UuBMMgNWbJD+XDYzq+YW8UPmx9NVxz1rfT/Gzz1Bj6r6aC+PCGPx0msLnn5M/+RGlq1dR3++4oDO1FWo7TLW8E8YAdqqP6WuTHnCsqQdG4fTx9HTgOxZqfLwPPsAeHEQGBiAwaKmI8TyCdBoNgtaWW8KCq8FIMoaJ2OTTs8EonG4SgKoi8u7Mjclfdo8MSnDpGuWpKZia6rhvrdsPrALTSZgC0eF+5m+kVeDdMKG6yVbhzfFL3+WcrRswlnTeUYW7fAnXWA6mk/sgQmTrMLeu3MgpvBnmXCdgVPVEPj19cTY9rc7Wjc2bmQ4NrRbTSby7bZhsZlYL6dmLjSfZTSsEo/ryN598mXd2bgLXWZMBqHQWZmg48QgLcx0iOzcwfv5SHni5kW+TgFHVU8G8dzLz3bhxd29f2n2WYcFluVgL0QaI37uFmauTxp/zTrY6fm+5RiupvvTtv7/wyskYzo5NS7pGeEO+li4W3T6C6Y5x89OLng8vteLaUsBh1csSmGcvfnjGs7aOYA31LWnBVblYC4yb6sPdluLqR+c9Ccyz7e4M2q6SD6m+H3iFo5f/+UkuumcXdqr/ztznDjBuqo/4nu1cP/VFzuSLRzvdFSx5vP4XkTcSg+uObDuwJ+l/M07h8g2g+YPTlLdCDFVR8R0jRLYPc+PUl7l8evatp5c4Xl/2BYediL267cc/TFjzebwvrqCl8pp+bcV1SO6+C7pjXD953jP50tpccIREHFTbemfDnrsT67akrMKlcYpXJjBmcQV6J0sELIvYthTxnSPMXZsyU+e+8SQwa3vFBCAizm/g+7vg97HuxKMbfrAzlhjolcKVCUoTGYJcoZko7d3HTsZwh/uIb0+Rz8zrzfNXCt68d+ZD+PUf4GugBBRVtbQqASLiAjEgWkt/BY88Bkd7Bnu3DGwbiXWNDApln9LEbfzZHEGxhMkXCYqVa1aJuljRCFbMxe5NEh3pQ10HbzyjmW8nCrOZ+Rt/h9/+Ec4CBaDYkBZUtbhiASLiAPEq8VjDc+xF2P8g/GwYHokN9NjrNg5Goj1Jy4lFsGMRnJiLAkGhjF8o4ueLFOZyZmY8Uy5m5s11OPsxfPgnOFMjCuSrxPOh97YiViWglmdD/Em451F4eD1sTkB/DLojFTxFKOQhl4WZKRj/F3z6D7hoQuSWISCrqk371eW4kFUlXiMfbUgj1edIKLqAXY1SjQoE1ViuxlIoFkLpgusAWSrWb7lfXckglhDZeDV1Q4RdKvsLJ0S+9qGsCaitOgLAbyGmDHhUra6q5SV53emfPaqCrBDpMPlaalVjI/la9EMCgnZW7hT+A5SLlrQmK/qkAAAAAElFTkSuQmCC","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="};
+ //--------------------------------------------------------------------------
+ // activate base64 data URIs
+ //--------------------------------------------------------------------------
+ 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,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAk1SURBVGiBvVlpbBxnGX6+uda76/uO10fsxs5BjNOLtE3S5iAp2bSoiIqCFBSQoEgV3R8IQUUjfiAFCfhRugKqCohaobZAUyCIrtIoCW3Cmauxc9Zx4vhIfK9313vNzsz38mO9zux6du1dOzzSaGbe73qe732/Y75hRITlgNfNJACPM4bHFAFtDrvS5ix1NimKXByPRicikfhANKZf1zh6ARzx+OjmcrTLliLA62Y2AHuK7eLXXC1NO9esaxVr62tlUbEBxECaBnADJEoQRAEAhxabocH+Ie1m30BgeHj6DVWntzw+6vm/CvC6mcAY9tbXVbyy+fGHSqsaGiTEY8BMEBSeARl69gZlGay4FNxRAogGBnp7E+fP9Z2emI590+Oja/dcgNfNtldVOA9u2fpww4rmFpkmR8FDAaAQTwoChPJKkMOGa5evJLov9B8OzCRe8PhocrFV5CXgtafY/g0PrN7/4KZHbAhMgvsnCyOeCVGAUFkLLiboxPEzwb7+qa0eH3UvpuiiBHjdzGaT2Ds7dj36VEtbq8yH+nOGSaFgigKqKsf5sz3quY8H977oo0MLlllIgNfN7E67dPqZZ3etLS2yi8bo8PL0ejaIAlBdjYFbN7QPT37y8rcOGz/LlV3Ileh1M2aT8O4zX9i2tkSSRGNk6N6SBwCDA2PjaHG55E2PtB3wupk7V/acAmQBB7Ztf3hnaXG5yCdGl5foQpiewX1tLXLX+ob3vG62Nlu2rAK8bubu7Gz9TmtHh2KMDN4bkrlABBaIYuNDHUWtTRUnZ9eceZCsjF43k0qd8q83Pv4ZGx+6lXfYiF1fhlDVMUvEALgBADCu/Bl84pPFV2QYYIEYtm5prxw5dO67AA4sSoDA8PyWzeurKRwD6Vpe5AFAbH4MQtPG+XzunAfyEQCAdILERWHt6vr9Xjf7lcdH02lcMwt43ay4rMT24+aOtQr3j+fLPQk1ZG2PZ7EvACFq4MH7m20lDukn89IyDQz46hOb1jgoGEjOCAWA4kHrhGz2herjgBCJs472+n1eN3OY0+YJUCTsq29plikYKKgxILsAUgsTAACIa1i9qloE8KTZnCbA62Zl1VUlXQKzLWmlXW4PJCu1wemwidXlRd8wmzM9sOfT6xoYj8YKbwiwJmrooESk8DoFEYjE0eCq2DH77ZE0m/MoIrbW11faKBIuvCFYe4CyDew8IMRiaFxRxgC0z9nMGUSGVsXhBGmJpbVkJWAp4ZOqgxOKHQoD0JCypQkgoFGQiwDDWFpDVtOl2QOF7qc4weGQRQCulCltIRNEsY4VVnU6rDwQHgP5b4ASYUBXASYCogwmKoDsAHNWA7LDojJTHRxQbLLAGJosBYiS6ICuLpk/aWGAc0C462AKDYOiU6ZMBqAbID0OqCFQeBSQ7WDOWjBnLcAsupLrYAAkAXUpU1oIaQktSDn3pwtSB8X8oIlroNhUekp0KksZM4EYKDAAPtYDivnnp3MdBidoBuZ2l+l7IaIx4notGMsvTg0VFJ4ARScAQ5sjzJw1d/MsRkAKugqa6gMpxRDKmwGlGADAKIF4PGEAGLYUwIBhPRLsFIlAkHM3wnVQbBqI+a1nmGgBHshEIgw+fgVQnGCCBCYRItEEB3DHUoDOcT0eVXc71BBgq09KSmNhJElH/cltQQ4v6Wd+A2Hs0tw77z+Vv4A5IREQAKGmHsEZlcPkgbRvYq+b7d70QMOhzka7Q789lAwBQUwO/0QEFC/w+GSZwO5bhxNnR0N7XpsqS9kyh+yJS72TYOWVgJEAhW6DAoOg4HCy5wshL9uXSHsWggBWXIqR0cC7aWbzi8dHajyW+EhVNTCHc2nt1Xei6PlTcPwwANtzby9ZiFBagbGxYCKq8rfS7JkZVQNvXu8bj4l1rsykvCBvfRnCys2AqEDs+gqkzueWVB9qXbh0dUwDkDaYrGb9Q2d6Rqa4swzMnntlzAVWtSrnez4QyioR1pkxMOT/kcdHafv8eQI8PjLiGr1w9vxATGpqK7hR/d+/uDtmtCj0cwcLrguuVvzjP7dCOsfPM5Oynsy9/jT7eO+z928QxwbBAwXM4Uj2utj6BIxL7yVnsAIg1rkwLpTrfzlyed+L79PbmelZNw6qgX2HP7gaFZrbCg4lmuqDfva3BZMXSsuhVa2g4yd7u4nwjmWebIU9PurxB+NfP/Zhb0xatQ6QLE9g7hmYrQho6cDfPrgyGYpouzw+61DJuXX79vv0x4Hh4Ks9F2+rcsd6MFm5N2wzwIrsENrX49jJvuj4VHSbx0cWO7skFtx7ahw/OHtx5E9nuu/EpLVdYI7i5WWbSaisAqx9PY5+1Be9OeD/osdHl3PlX/B4nTEmApBe+RxeanWVfG/3jjUOGh2CsdyHvYxBrG+EVl5Lfz1yxd89EHv6p//EBQA6AJ2yEM0qgDEmAJCR3PBJAKTvb8aT6xpsr7u3r3KWFduYMdwPHpy2LJ8PhMoaCK6VuD0a0o+dutH7h279S8dvYjxFfvbSZoUsLGC211PkZfPz7na0fLYN+9say7bs2LSyqEjkMCbGwAN+II+zJCbLEMqrwGpWwD+j8b//qz92cSDy6i9P43chFaqZdMZdM3tjngBTz6cRz3z+/Gp8alsrXmpfWbGma3WNXLuiQmDxKHhwGpSIA4kESEuAdA1MUsAUBZAVsCI7WFklDEnB8JBf7746bnTfDP3+jQs4OBxCKEXSTNhCwNyJs5UAyURWySJk7nq0CS0bXdjWWsF2NjaUutqby6msWJEcDkUosisQZQmaqiEeS1A4muDTIZX3DUxT/53w+cvjOHr0Bv47HsFMBlkr4gnTu5rivZCAeYQtrrl8bRWo2lCPNSU21JQoqK6wo04R4ZhR4ffHMB5OYGoyirFTg7iq6ojn6uVcgoho7uTBSgDLEUJWIWUWLJruIpKfdKnPOgJgAOCzRA1kDNAs90xxKhHNHZvPW16JiBhjWkbDqTvNEuCzBFICdBNpEcn1RUD6N6m5vGG6p0SknjVYzD5W5IEF1oHZ2UgxETVfKbKpZ8GCfObhDrfohGxeMUzk40RkeVy4qB/dqcUMyVDJDJNM4mbymQIyvWgWYhZhYHbQZiOelwCTEJhIpuI+JYCZyKe2KNkEWIlIxTrPDJNc+B/DI2njy1uQ2wAAAABJRU5ErkJggg==","cid:82356008":"data:image/png;base64,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","cid:82355644":"data:image/png;base64,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","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,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAYTSURBVFiFxZZbbBzVGcd/58zM7sysN2uvL5vE0BLHodgKuTaU0EtKQUWlgoeqKkJK3FK1alGfKlBRkYoKRXloX+hFtJVaVGIeUJBaVCQokVL1BkmEZYekjgMhDjR2bCe+rNfe3ZmdmXP64HF82zUxlZojfZo5c77z/f/nf77zzRFaa65nk9cV/X8l0NslOnq7RMf1ISCEMKXRbUqjGyHE/51A3wG+Y2YaOs1MQ+fJLh7+qHHER0nCvgfFRpGQ59q/+pCLgPMvPeeBbt/+vB5eayyz1kBvl/geCktLjjkefZ2HdWV+zEgav8tu3W052SwAjdtuMyZO9zwH3DPv87eHhF0fsFvD7QhKO7v1r9dEQGoy0k4+JRNuxdd569Q3rQGlwqNE5A039YXcns9aeqIfgNwnP2Plz/Xv69svDgpD1kvJnZmQLWamoRL5xYTyKz9YswJa8IaUBB0PftsJPQ9vYvTW0tilztmRi0HLjtuSwhtHz4wCIJLNfOzOe5Ojvce+n95wo+XmWg27aT2m7ThnDv28rCTH1kxAObwVlv1EODOOEUySSoakbr7JaL51u0Hoo6+chCicIzvej9u8g7Z77rfxp8HLQ+kiYZAl9P1Eup7eNRPY/VtdOvUN453S2FBHXYODzg/WcoUoRA+/ueSTqG+nNDaEIeVA+y8iv9bUVY9hpNXR0shwhHQgDNdmhkNxZDhUWh1dDaM2gSeFRGHMjF4KMGy00ugoukZTIG1mRy4FRJg8KWriVK0Db39d7ESIbst2N7fu2Wu79WnU6NJtNG+5F7Gu9WpfTQ0SnVtYrFy/i1K+wNBbx72gXDov0Ae2P6/7ViVwqkuktOSg1vLh3CduNrLtnVL4k+j8BVDhkomJzz+yNFJYofKvXy70pYmo34ROZpl4b0BdfuesElo/K+DxbYd0cQWBvv3iS0KKP6TqM+s27thpW3YSPTWI9qerSpe867FlBHz8vz+zwk8kM4iGNiqez6WTvV45X5hG6a7tL+gjsCgHDDgN9JRnS6KcnwStQVoQRXPHbd7QsVVpSi/zj+ZiaI2Xz+MXy0ILejDoX6HAfOvtEvdJ+H2qIZve0NlhW0aEyr8PQRkAs20v5i13UzV/dUTY/xfC//SA5SDrbyKIDEbOnvVKExOFCL6165B+ZYlC1ZLwzNdEXWBzUAv53VzbJiO7oVmqy/1XVy6bN2PtfgBh2QvYlRJBz4uoiffnfFq2MjlyJRobvKCEVr+xPB7vPKxnV2zRan/DvgPiMTedeuLj2zpdNfZvFksvUlkStx9ApnOowiiV493o0tTVcdmylQ9On5mdmSk9vecFfqprANWshABCsM2tc1xdmoIwWDKmpy/jH/0VVvunCd57A8KlxU6XpnDTrlucKW0FpBBCVSNRu0DM3XL2OW4CytMLiaUUqDjR/CJB/xHwi3PflFrw8wo4TkJKwecAIyax4uZUVQEhhHjlflqUptVJORCBWLcRTBstE6AjKAxBFF8RjASsuwGEgVAVCD0AnISDVtz4xB00PfUm43HsJUrU3IImlzuSSbMUCcMt+iblWS+cnRmrBJ5nN25soqkxJ/XMyBzhdI7x8YKeGBnXlm37dWk34dQ5hp0yMJNmeU9LuBd4FVDXpAAgTMneSiVyz799LlTodyc9TgzmOV3w4W51+WeZhk1YTgaAQEnGh6+oP72rfpxKFEVHY7Fzvcsu0xCbBbjpJJ8CXgNEbB+ugB/xz3xJv/r0MQaOj2EAzry9nNUvJwfH7mvraE0ADA0MV85Pqdd/coITgA+8DpS3NOrw0V1sybkk4rArqljVYxgniwQsIAEkY3AbsDc1kDn8ZfHHG9pyjQAXB8cmv/JnvX+owCxQAbxFVo6fFSAEri0HYqYREMSywdwehhemqPz1A/3DLxpXngU4ckH/aKjAWOxfWWR+bGE8ppcfxZqFaJEKkrljZMWE55/mPx4Qz2gN+w7rR2NyKgYLY+LBor6qRqD2pVRrLYRQsRLzwYN4ZRIwXjqrH4kUAsizsL9R7BstetfVwFdVoIoay61WEbsKuBrwmggsIwILOTH/vjyIJkb+sJj/BfjcF0JEgpNFAAAAAElFTkSuQmCC","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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"};
+
$('img[src]').each(function() {
var image = $(this);
- var data_uri = data_uri_by_embed_uri[image.attr('src')];
+ var embed_uri = image.attr('src');
- if (data_uri) {
- image.attr('src', data_uri);
+ if (data_uri_by_embed_uri.hasOwnProperty(embed_uri)) {
+ image.attr('src', data_uri_by_embed_uri[embed_uri]);
}
});
$('style').each(function() {
var style = $(this);
var css = style.text();
if (css) {
for (var embed_uri in data_uri_by_embed_uri) {
- var src = new RegExp('\\burl\\(' + embed_uri + '\\)', 'g');
- var dst = 'url("' + data_uri_by_embed_uri[embed_uri] + '")';
+ if (data_uri_by_embed_uri.hasOwnProperty(embed_uri)) {
+ var src = new RegExp('\\burl\\(' + embed_uri + '\\)', 'g');
+ var dst = 'url("' + data_uri_by_embed_uri[embed_uri] + '")';
- css = css.replace(src, dst);
+ css = css.replace(src, dst);
+ }
}
style.text(css);
}
});
- //
- // ready for action!
- //
- $('#__loading__').append("Ready!").
+ //--------------------------------------------------------------------------
+ // create jQuery UI tabs
+ //--------------------------------------------------------------------------
+
+ $('.tabs').tabs();
+
+ // make internal hyperlinks reveal their targets (which may be
+ // nested within many levels of jQuery UI tabs) when clicked
+ $('a[href^=#]').click(function() {
+ var link = $(this);
+ var hash = link.attr('href');
+
+ if (link.parent('li').parent('.ui-tabs-nav').length) {
+ // tab clicks should not cause the screen to scroll
+ set_hash(hash, true);
+ }
+ else {
+ reveal(hash);
+ }
+
+ return false;
+ });
+
+ // make external hyperlinks open in a separate window
+ $('a[href]').not('[href^=#]').attr('target', '_blank');
+
+ //--------------------------------------------------------------------------
+ // style jQuery UI icons
+ //--------------------------------------------------------------------------
+
+ $('.ui-icon').parent().hover(
+ function() { $(this).addClass('ui-state-hover'); },
+ function() { $(this).removeClass('ui-state-hover'); }
+ );
+
+ //--------------------------------------------------------------------------
+ // unveil the document
+ //--------------------------------------------------------------------------
+
+ $('#_loading').append("Ready!").
fadeOut('slow', function() {
- $('#__body__').show();
- on_hash_change();
+ $(this).remove();
+
+ $('#_body').show();
+
+ // respond to changes in window location
+ (function on_hash_change() {
+ var current_hash = window.location.hash;
+
+ if (current_hash && current_hash !== $last_hash) {
+ $last_hash = current_hash;
+ reveal(current_hash);
+ }
+
+ setTimeout(on_hash_change, 300);
+ })();
});
});
//]]>
</script>
</head>
<body>
+ <div id="_loading"></div>
- <div id="__loading__">
- Loading... <noscript><ins>Failed!</ins> <p>Please enable JavaScript in your Web browser.</p> <div style="display: none"><br/><hr/><br/></div></noscript>
- </div>
-
- <div id="__body__">
+ <div id="_body">
- <div id="__header__">
+ <div id="_header">
<div class="title_and_subtitle">
- <h1 class="title">Dfect 1.1.0</h1>
+ <h1 class="title">Dfect</h1>
<h2 class="subtitle">Assertion testing library for Ruby</h2>
</div>
<div class="authors_and_date">
<h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3>
- <h3 class="date">27 October 2009</h3>
+ <h3 class="date">21 March 2010</h3>
</div>
</div>
<div class="tabs">
<ul>
- <li><a href="#__doc__">Document</a></li>
+ <li><a href="#_document">Document</a></li>
- <li><a href="#__toc__">Contents</a></li>
+ <li><a href="#_contents">Contents</a></li>
- <li><a href="#__nfo__">About</a></li>
+ <li><a href="#_about">About</a></li>
</ul>
- <div id="__toc__">
+ <div id="_contents">
<h1 class="title">Contents</h1>
- <ul><li>1 <a id="a__toc__Introduction" href="#Introduction">Introduction</a><ul><li>1.1 <a id="a__toc__Features" href="#Features">Features</a></li><li>1.2 <a id="a__toc__Motivation" href="#Motivation">Motivation</a></li><li>1.3 <a id="a__toc__Etymology" href="#Etymology">Etymology</a></li><li>1.4 <a id="a__toc__License" href="#License">License</a></li><li>1.5 <a id="a__toc__Credits" href="#Credits">Credits</a></li><li>1.6 <a id="a__toc__Related-works" href="#Related-works">Related works</a></li></ul></li><li>2 <a id="a__toc__Setup" href="#Setup">Setup</a><ul><li>2.1 <a id="a__toc__Requirements" href="#Requirements">Requirements</a></li><li>2.2 <a id="a__toc__Installation" href="#Installation">Installation</a></li><li>2.3 <a id="a__toc__Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>3 <a id="a__toc__Usage" href="#Usage">Usage</a><ul><li>3.1 <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 <a id="a__toc__Failures" href="#Failures">Failures</a></li></ul></li><li>3.2 <a id="a__toc__Tests" href="#Tests">Tests</a><ul><li>3.2.1 <a id="a__toc__Hooks" href="#Hooks">Hooks</a></li><li>3.2.2 <a id="a__toc__Insulation" href="#Insulation">Insulation</a></li></ul></li><li>3.3 <a id="a__toc__Execution" href="#Execution">Execution</a><ul><li>3.3.1 <a id="a__toc__Automatic-test-execution" href="#Automatic-test-execution">Automatic test execution</a></li></ul></li><li>3.4 <a id="a__toc__Reporting" href="#Reporting">Reporting</a></li><li>3.5 <a id="a__toc__Emulation" href="#Emulation">Emulation</a></li></ul></li><li>4 <a id="a__toc__History" href="#History">History</a><ul><li>4.1 <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 <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 <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 <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 <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>
+ <ul><li>1 <a id="_contents-Welcome" href="#Welcome">Welcome</a><ul><li>1.1 <a id="_contents-Features" href="#Features">Features</a></li><li>1.2 <a id="_contents-Etymology" href="#Etymology">Etymology</a></li><li>1.3 <a id="_contents-License" href="#License">License</a></li><li>1.4 <a id="_contents-Credits" href="#Credits">Credits</a></li><li>1.5 <a id="_contents-Related-works" href="#Related-works">Related works</a></li></ul></li><li>2 <a id="_contents-Setup" href="#Setup">Setup</a><ul><li>2.1 <a id="_contents-Prerequisites" href="#Prerequisites">Prerequisites</a></li><li>2.2 <a id="_contents-Installing" href="#Installing">Installing</a></li><li>2.3 <a id="_contents-Upgrading" href="#Upgrading">Upgrading</a></li><li>2.4 <a id="_contents-Uninstalling" href="#Uninstalling">Uninstalling</a></li></ul></li><li>3 <a id="_contents-Usage" href="#Usage">Usage</a><ul><li>3.1 <a id="_contents-Assertions" href="#Assertions">Assertions</a><ul><li>3.1.1 <a id="_contents-Negation" href="#Negation">Negation</a></li><li>3.1.2 <a id="_contents-Sampling" href="#Sampling">Sampling</a></li><li>3.1.3 <a id="_contents-Failures" href="#Failures">Failures</a></li><li>3.1.4 <a id="_contents-Emulation" href="#Emulation">Emulation</a></li></ul></li><li>3.2 <a id="_contents-Tests" href="#Tests">Tests</a><ul><li>3.2.1 <a id="_contents-Execution" href="#Execution">Execution</a><ul><li>3.2.1.1 <a id="_contents-Hooks" href="#Hooks">Hooks</a></li><li>3.2.1.2 <a id="_contents-Logging" href="#Logging">Logging</a></li></ul></li><li>3.2.2 <a id="_contents-Sharing" href="#Sharing">Sharing</a></li><li>3.2.3 <a id="_contents-Insulation" href="#Insulation">Insulation</a></li></ul></li></ul></li><li>4 <a id="_contents-History" href="#History">History</a><ul><li>4.1 <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 <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 <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 <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 <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 <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>
- <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>
+ <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>
</div>
- <div id="__doc__" class="tabs">
+ <div id="_document" class="tabs">
<h1 style="display: none">Document</h1>
<ul>
- <li><a href="#Introduction">Introduction</a></li>
+ <li><a href="#Welcome">Welcome</a></li>
<li><a href="#Setup">Setup</a></li>
<li><a href="#Usage">Usage</a></li>
<li><a href="#History">History</a></li>
</ul>
-
-
-
-
-
-<div class="chapter" id="Introduction">
- <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>
+<div class="part" id="Welcome">
+ <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>
<h1 class="title">
- Chapter 1
+ Part 1
<br/>
- <big>Introduction</big>
+ <big>Welcome</big>
</h1>
<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>
-<ul>
-<li><a class="xref" href="#History" title="Chapter 4. "History"">What’s new?</a> — history of project releases.</li>
-<li><a href='http://github.com/sunaku/dfect'>Source code</a> — obtain via <a href='http://git-scm.com'>Git</a> or browse online.</li>
+<div class="paragraph" id="Resources">
+ <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>
+ <p class="title">Resources</p>
+ <div class="content"><ul>
+<li>
+<p><a class="xref" href="#History" title="Part 4. "History"">What’s new?</a> — release notes and project history.</p>
+</li>
-<li><a href='./api/index.html'>API reference</a> — documentation for source code.</li>
+<li>
+<p><a href='http://github.com/sunaku/dfect/issues'>Issue tracker</a> — report bugs, request features, or ask for help.</p>
+</li>
-<li><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> — the Dfect project home page.</li>
-</ul>
+<li>
+<p><a href='http://github.com/sunaku/dfect'>Source code</a> — browse online or obtain using <a href='http://git-scm.com'>Git</a></p>
+</li>
-<p>To get help or provide feedback, simply <a class="xref" href="#License" title="Section 1.4. "License"">contact the author(s)</a>.</p>
+<li>
+<p><a href='api/index.html'>API reference</a> — documentation for source code.</p>
+</li>
-<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>
+<li>
+<p><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> — the official project home page.</p>
+</li>
+</ul></div>
+</div>
+
+
+<div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Features"><span class="section_number">1.1 </span>Features</a></li><li><a href="#Etymology"><span class="section_number">1.2 </span>Etymology</a></li><li><a href="#License"><span class="section_number">1.3 </span>License</a></li><li><a href="#Credits"><span class="section_number">1.4 </span>Credits</a></li><li><a href="#Related-works"><span class="section_number">1.5 </span>Related works</a></li></ul>
<div class="section" id="Features">
- <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>
+ <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>
<h1 class="title">
- 1.1 Features
+ <span class="section_number">1.1 </span>Features
</h1>
<div class="content"><p>Dfect is exciting because:</p>
<ul>
-<li>It has only 5 methods to remember: D F E C T.</li>
+<li>
+<p>There are only 5 methods to remember: D F E C T.</p>
+</li>
-<li>It lets you debug assertion failures interactively.</li>
+<li>
+<p>It lets you debug assertion failures interactively.</p>
+</li>
-<li>It keeps a detailed report of assertion failures.</li>
+<li>
+<p>It keeps a detailed report of assertion failures.</p>
+</li>
-<li>It lets you nest tests and execution hooks.</li>
+<li>
+<p>It lets you nest tests and execution hooks.</p>
+</li>
-<li>Its core consists of a mere 313 lines of code.</li>
+<li>
+<p>Its core consists of a mere 378 lines of code.</p>
+</li>
</ul></div>
</div>
-<div class="section" id="Motivation">
- <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>
- <h1 class="title">
- 1.2 Motivation
- </h1>
- <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>
-
-<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>
-
-<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 ”<a href='http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html#PRINTF'>printf debugging</a>”.</p>
-
-<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>
-
-<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>…), saving the result to a correctly named file, invoking the C/C++/Java compiler, and finally executing the binary—only to be greeted by a <a href='http://en.wikipedia.org/wiki/Segmentation_fault'>segfault</a>. ;-)</p>
-
-<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>
-
-<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>
-</div>
-
-
-
<div class="section" id="Etymology">
- <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>
+ <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>
<h1 class="title">
- 1.3 Etymology
+ <span class="section_number">1.2 </span>Etymology
</h1>
<div class="content"><p>Dfect is named after the D F E C T methods it provides.</p>
-<p>The name is also play on the word “defect”, whereby the intentional misspelling of “defect” as “dfect” is a defect in itself! <tt>;-)</tt></p>
+<p>The name is also play on the word “defect”, whereby the intentional misspelling of “defect” as “dfect” is a defect in itself! ;-)</p>
<p>This wordplay is similar to <a href='http://www.erlang.org/doc/apps/mnesia/index.html'>Mnesia</a>’s play on the word “amnesia”, whereby the intentional omission of the letter “A” indicates forgetfulness—the key characteristic of having amnesia. Clever!</p></div>
</div>
<div class="section" id="License">
- <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>
+ <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>
<h1 class="title">
- 1.4 License
+ <span class="section_number">1.3 </span>License
</h1>
<div class="content"><p>(the ISC license)</p>
<p>Copyright 2009 Suraj N. Kurapati <a href='mailto:sunaku@gmail.com'>sunaku@gmail.com</a></p>
@@ -1292,29 +1640,29 @@
</div>
<div class="section" id="Credits">
- <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>
+ <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>
<h1 class="title">
- 1.5 Credits
+ <span class="section_number">1.4 </span>Credits
</h1>
- <div class="content"><p>Dfect is made possible by <a class="xref" href="#History" title="Chapter 4. "History"">contributions</a> from users like you:</p>
+ <div class="content"><p>Dfect is made possible by <a class="xref" href="#History" title="Part 4. "History"">contributions</a> from users like you:</p>
<ul>
-<li><a href='http://github.com/francois'>François Beausoleil</a></li>
+<li>François Beausoleil <a href='http://github.com/francois'>http://github.com/francois</a></li>
-<li><a href='http://github.com/ibc'>Iñaki Baz Castillo</a></li>
+<li>Iñaki Baz Castillo <a href='http://github.com/ibc'>http://github.com/ibc</a></li>
</ul></div>
</div>
<div class="section" id="Related-works">
- <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>
+ <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>
<h1 class="title">
- 1.6 Related works
+ <span class="section_number">1.5 </span>Related works
</h1>
<div class="content"><ul>
<li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li>
<li><a href='http://chneukirchen.org/repos/bacon/README'>Bacon</a></li>
@@ -1327,85 +1675,105 @@
<li><a href='http://thoughtbot.com/projects/shoulda'>Shoulda</a></li>
<li><a href='http://test-spec.rubyforge.org/test-spec'>test-spec</a></li>
-<li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a></li>
+<li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/'>Test::Unit</a></li>
<li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li>
<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li>
</ul></div>
</div>
</div></div>
</div>
-
-
-<div class="chapter" id="Setup">
- <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>
+<div class="part" id="Setup">
+ <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>
<h1 class="title">
- Chapter 2
+ Part 2
<br/>
<big>Setup</big>
</h1>
- <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>
-<div class="section" id="Requirements">
- <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>
+ <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 </span>Prerequisites</a></li><li><a href="#Installing"><span class="section_number">2.2 </span>Installing</a></li><li><a href="#Upgrading"><span class="section_number">2.3 </span>Upgrading</a></li><li><a href="#Uninstalling"><span class="section_number">2.4 </span>Uninstalling</a></li></ul>
+<div class="section" id="Prerequisites">
+ <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>
<h1 class="title">
- 2.1 Requirements
+ <span class="section_number">2.1 </span>Prerequisites
</h1>
- <div class="content"><p>Your system needs the following software to run Dfect.</p>
+ <div class="content"><ul>
+<li>
+<p><a href='http://ruby-lang.org'>Ruby</a> 1.8.6 or newer.</p>
+</li>
-<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>
+<li>
+<p><a href='http://rubygems.org'>RubyGems</a> 1.3.6 or newer.</p>
+</li>
+
+<li>
+<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>
+</li>
+</ul></div>
</div>
-<div class="section" id="Installation">
- <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>
- <h1 class="title">
- 2.2 Installation
- </h1>
- <div class="content"><p>You can install Dfect by running this command:</p>
-<pre>gem install dfect</pre>
-<p>If you want to develop Dfect, run this command:</p>
-
-<pre>gem install dfect --development</pre></div>
+<div class="section" id="Installing">
+ <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>
+ <h1 class="title">
+ <span class="section_number">2.2 </span>Installing
+ </h1>
+ <div class="content">
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-install-dfect">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 1. </span><tt>gem install dfect</tt></p>
</div>
+</div>
+</div>
-
-
-<div class="section" id="Version-numbers">
- <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>
+<div class="section" id="Upgrading">
+ <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>
<h1 class="title">
- 2.3 Version numbers
+ <span class="section_number">2.3 </span>Upgrading
</h1>
- <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>
+ <div class="content">
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-update-dfect">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 2. </span><tt>gem update dfect</tt></p>
+</div>
+</div>
+</div>
-<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>
+<div class="section" id="Uninstalling">
+ <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>
+ <h1 class="title">
+ <span class="section_number">2.4 </span>Uninstalling
+ </h1>
+ <div class="content">
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all command" id="gem-uninstall-dfect">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Command 3. </span><tt>gem uninstall dfect</tt></p>
</div>
+</div>
+</div>
</div></div>
</div>
-
-
-
-<div class="chapter" id="Usage">
- <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>
+<div class="part" id="Usage">
+ <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>
<h1 class="title">
- Chapter 3
+ Part 3
<br/>
<big>Usage</big>
</h1>
<div class="content"><p>Begin by loading Dfect into your program:</p>
<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>
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect</span><span style="color:#710">'</span></span>
-</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>
+</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>
<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">"</span><span style="">hello</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="color:#888"># D() is a class method</span>
puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">world</span><span style="color:#710">"</span></span>
<span style="color:#080;font-weight:bold">end</span>
@@ -1414,43 +1782,47 @@
include <span style="color:#036;font-weight:bold">Dfect</span> <span style="color:#888"># mix-in the Dfect API</span>
<span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">hello</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span> <span style="color:#888"># D() is an instance method</span>
puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">world</span><span style="color:#710">"</span></span>
<span style="color:#080;font-weight:bold">end</span>
-</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>
+</pre></ins>
-<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>
+<div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Assertions"><span class="section_number">3.1 </span>Assertions</a></li><li><a href="#Tests"><span class="section_number">3.2 </span>Tests</a></li></ul>
<div class="section" id="Assertions">
- <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>
+ <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>
<h1 class="title">
- 3.1 Assertions
+ <span class="section_number">3.1 </span>Assertions
</h1>
- <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. "Failures"">failure reports</a> if they fail.</p>
+ <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. "Failures"">failure reports</a> if they fail.</p>
-<p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p>
+<p>See the <a href='api/index.html'>API reference</a> for more details and examples.</p>
-<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>
-<div class="paragraph" id="Negation">
- <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>
- <p class="title">Negation</p>
+<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 </span>Negation</a></li><li><a href="#Sampling"><span class="section_number">3.1.2 </span>Sampling</a></li><li><a href="#Failures"><span class="section_number">3.1.3 </span>Failures</a></li><li><a href="#Emulation"><span class="section_number">3.1.4 </span>Emulation</a></li></ul>
+<div class="section" id="Negation">
+ <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>
+ <h1 class="title">
+ <span class="section_number">3.1.1 </span>Negation
+ </h1>
<div class="content"><p>These methods are the <em>opposite</em> of <a class="xref" href="#Assertions" title="Section 3.1. "Assertions"">normal assertions</a>.</p>
<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>
</div>
-<div class="paragraph" id="Sampling">
- <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>
- <p class="title">Sampling</p>
- <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. "Assertions"">assertion</a> without including the assertion in the execution report.</p>
+<div class="section" id="Sampling">
+ <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>
+ <h1 class="title">
+ <span class="section_number">3.1.2 </span>Sampling
+ </h1>
+ <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>
<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>
</div>
<div class="section" id="Failures">
- <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>
+ <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>
<h1 class="title">
- 3.1.1 Failures
+ <span class="section_number">3.1.3 </span>Failures
</h1>
<div class="content"><p>When an assertion fails, details about the failure will be shown:</p>
<pre>- fail: block must yield true (!nil && !false)
code: |-
@@ -1471,42 +1843,91 @@
y: 83
call:
- test/simple.rb:17
- test/simple.rb:3</pre>
-<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>
+<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>
-<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>
+<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>
</div>
+
+
+
+<div class="section" id="Emulation">
+ <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>
+ <h1 class="title">
+ <span class="section_number">3.1.4 </span>Emulation
+ </h1>
+ <div class="content"><p>Dfect provides emulation layers for several popular testing libraries:</p>
+
+<ul>
+<li><tt>dfect/unit</tt> — Test::Unit</li>
+
+<li><tt>dfect/mini</tt> — Minitest</li>
+
+<li><tt>dfect/spec</tt> — RSpec</li>
+</ul>
+
+<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>
+</div>
</div></div>
</div>
<div class="section" id="Tests">
- <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>
+ <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>
<h1 class="title">
- 3.2 Tests
+ <span class="section_number">3.2 </span>Tests
</h1>
- <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>
+ <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>
-<p>A test may also contain nested tests.</p>
-
<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">"</span><span style="">outer test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
<span style="color:#888"># assertions and logic here</span>
<span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">inner test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
<span style="color:#888"># more assertions and logic here</span>
<span style="color:#080;font-weight:bold">end</span>
<span style="color:#080;font-weight:bold">end</span>
</pre></ins>
-<div class="tabs"><ul><li><a href="#Hooks">Hooks</a></li><li><a href="#Insulation">Insulation</a></li></ul>
+<div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Execution"><span class="section_number">3.2.1 </span>Execution</a></li><li><a href="#Sharing"><span class="section_number">3.2.2 </span>Sharing</a></li><li><a href="#Insulation"><span class="section_number">3.2.3 </span>Insulation</a></li></ul>
+<div class="section" id="Execution">
+ <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>
+ <h1 class="title">
+ <span class="section_number">3.2.1 </span>Execution
+ </h1>
+ <div class="content"><p>Tests are executed in depth-first order.</p>
+
+<p>You can configure the test execution process using:</p>
+
+<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.options = your_options_hash
+</pre></ins><p> You can execute all tests defined thus far using:</p>
+
+<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.run
+</pre></ins><p> You can stop the execution at any time using:</p>
+
+<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.stop
+</pre></ins><p> You can view the results of execution using:</p>
+
+<ins><pre lang="ruby" class="para">puts <span style="color:#036;font-weight:bold">Dfect</span>.report.to_yaml
+</pre></ins><p> See the <a href='api/index.html'>API reference</a> for details and examples.</p>
+
+
+<div class="paragraph" id="Automatic-test-execution">
+ <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>
+ <p class="title">Automatic test execution</p>
+ <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>
+
+<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>
+</pre></ins></div>
+</div>
+<div style="display: none"><br/><hr/><br/></div><div class="tabs"><ul><li><a href="#Hooks"><span class="section_number">3.2.1.1 </span>Hooks</a></li><li><a href="#Logging"><span class="section_number">3.2.1.2 </span>Logging</a></li></ul>
<div class="section" id="Hooks">
- <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>
+ <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>
<h1 class="title">
- 3.2.1 Hooks
+ <span class="section_number">3.2.1.1 </span>Hooks
</h1>
- <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>
+ <div class="content"><p>The <code class="line">D()</code> method provides several entry points (hooks) into the test execution process:</p>
<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">"</span><span style="">outer test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
<span style="color:#036;font-weight:bold">D</span> .< { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">before each nested test</span><span style="color:#710">"</span></span> }
<span style="color:#036;font-weight:bold">D</span> .> { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">after each nested test</span><span style="color:#710">"</span></span> }
<span style="color:#036;font-weight:bold">D</span> .<< { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">before all nested tests</span><span style="color:#710">"</span></span> }
@@ -1521,473 +1942,385 @@
<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">D</span> .< { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">do something</span><span style="color:#710">"</span></span> }
<span style="color:#036;font-weight:bold">D</span> .< { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">do something more!</span><span style="color:#710">"</span></span> }
</pre></ins></div>
</div>
-<div class="section" id="Insulation">
- <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>
+<div class="section" id="Logging">
+ <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>
<h1 class="title">
- 3.2.2 Insulation
+ <span class="section_number">3.2.1.2 </span>Logging
</h1>
- <div class="content"><p>Use the singleton class of a temporary object to shield your test logic from Ruby’s global environment, the code being tested, and from other tests:</p>
+ <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>
-<ins><pre lang="ruby" class="para"><span style="color:#080;font-weight:bold">class</span> << <span style="color:#B06;font-weight:bold">Object</span>.new
- <span style="color:#888"># your test logic here</span>
-<span style="color:#080;font-weight:bold">end</span>
-</pre></ins><p> Inside this insulated environment, you are free to:</p>
-<ul>
-<li>mix-in any modules your test logic needs</li>
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Logging-information-in-the-execution-report">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 1. </span>Logging information in the execution report</p>
+ <div class="content"><p>When the following test is run:</p>
-<li>define your own constants, methods, and classes</li>
-</ul>
+<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>
-<p>For example:</p>
+<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>
+ <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>
+<span style="color:#080;font-weight:bold">end</span>
-<ins><pre lang="ruby" class="para"><span style="color:#080;font-weight:bold">class</span> << <span style="color:#B06;font-weight:bold">Object</span>.new
- include <span style="color:#036;font-weight:bold">SomeModule</span>
- extend <span style="color:#036;font-weight:bold">AnotherModule</span>
+<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>
+ <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>)
+<span style="color:#080;font-weight:bold">end</span>
- <span style="color:#036;font-weight:bold">YOUR_CONSTANT</span> = <span style="color:#00D;font-weight:bold">123</span>
-
- <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">your tests here</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
- <span style="color:#888"># your test logic here</span>
-
- your_helper_method
- <span style="color:#080;font-weight:bold">end</span>
-
- <span style="color:#080;font-weight:bold">def</span> <span style="color:#038;font-weight:bold">self</span>.your_helper_method
- <span style="color:#888"># your helper logic here</span>
-
- helper = <span style="color:#036;font-weight:bold">YourHelperClass</span>.new
- helper.do_something_helpful
-
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
-
- <span style="color:#080;font-weight:bold">class</span> <span style="color:#B06;font-weight:bold">YourHelperClass</span>
- <span style="color:#888"># your helper logic here</span>
- <span style="color:#080;font-weight:bold">end</span>
+<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>
+ <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> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">bar!</span><span style="color:#710">'</span></span>}
<span style="color:#080;font-weight:bold">end</span>
-</pre></ins></div>
+</pre></ins><p> Dfect will output the following:</p>
+
+<pre>---
+- Wizard:
+ - Preparing spell to defeat mortal foes...
+- Magician:
+ - Preparing rabbits to pull from hat...
+ - 9
+- Calculator:
+ - 3.14159265358979
+ - - 1
+ - 2
+ - 3
+ - - a
+ - b
+ - c
+ - foo: bar!
+---
+time: 0.000196246</pre></div>
</div>
-</div></div>
</div>
-
-<div class="section" id="Execution">
- <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>
- <h1 class="title">
- 3.3 Execution
- </h1>
- <div class="content"><p>You can configure test execution using:</p>
-
-<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.options = your_options_hash
-</pre></ins><p> You can execute all tests defined thus far using:</p>
-
-<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.run
-</pre></ins><p> You can stop this execution at any time using:</p>
-
-<ins><pre lang="ruby" class="para"><span style="color:#036;font-weight:bold">Dfect</span>.stop
-</pre></ins><p> You can view the results of execution using:</p>
-
-<ins><pre lang="ruby" class="para">puts <span style="color:#036;font-weight:bold">Dfect</span>.report.to_yaml
-</pre></ins><p> See the <a href='./api/index.html'>API documentation</a> for details and examples.</p>
-
-<div class="tabs"><ul><li><a href="#Automatic-test-execution">Automatic test execution</a></li></ul>
-<div class="section" id="Automatic-test-execution">
- <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>
- <h1 class="title">
- 3.3.1 Automatic test execution
- </h1>
- <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>
-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"># <== notice the "auto"</span>
-</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>
</div>
</div></div>
</div>
-<div class="section" id="Reporting">
- <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>
+<div class="section" id="Sharing">
+ <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>
<h1 class="title">
- 3.4 Reporting
+ <span class="section_number">3.2.2 </span>Sharing
</h1>
- <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>
+ <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>
-<p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p></div>
-</div>
+<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>
+<p>The <code class="line">S?()</code> method simply checks whether any code has been shared under a given identifier.</p>
-<div class="section" id="Emulation">
- <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>
- <h1 class="title">
- 3.5 Emulation
- </h1>
- <div class="content"><p>Dfect provides emulation layers for several popular testing libraries:</p>
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Sharing-code-between-tests">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 2. </span>Sharing code between tests</p>
+ <div class="content"><p>When the following test is run:</p>
-<ul>
-<li><tt>dfect/unit</tt> — Test::Unit</li>
+<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>
-<li><tt>dfect/mini</tt> — Minitest</li>
-
-<li><tt>dfect/spec</tt> — RSpec</li>
-</ul>
-
-<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>
-
-<p>See the <a href='./api/index.html'>API documentation</a> for details and examples.</p></div>
-</div>
-</div>
-
-
-<div class="example" id="A-sample-unit-test">
- <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>
- <p class="title">Example 1. A sample unit test</p>
- <div class="content"><p>The following code is from Dfect’s very own test suite.</p>
-
-<ins><pre lang="ruby" class="para"><span style="color:#888">#--</span>
-<span style="color:#888"># Copyright protects this work.</span>
-<span style="color:#888"># See LICENSE file for details.</span>
-<span style="color:#888">#++</span>
-
-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:#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>
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#038;font-weight:bold">true</span> }
- <span style="color:#036;font-weight:bold">T</span> { !<span style="color:#038;font-weight:bold">false</span> }
- <span style="color:#036;font-weight:bold">T</span> { !<span style="color:#038;font-weight:bold">nil</span> }
-
- <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>
- <span style="color:#036;font-weight:bold">T</span> { <span style="color:#00D;font-weight:bold">1</span> }
-
- <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>
- inner = rand()
- outer = <span style="color:#036;font-weight:bold">T</span> { inner }
-
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
- <span style="color:#080;font-weight:bold">end</span>
+<span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span> <span style="color:#080;font-weight:bold">do</span>
+ <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>
<span style="color:#080;font-weight:bold">end</span>
-<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>
- T! { !<span style="color:#038;font-weight:bold">true</span> }
- T! { <span style="color:#038;font-weight:bold">false</span> }
- T! { <span style="color:#038;font-weight:bold">nil</span> }
-
- <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>
- inner = <span style="color:#038;font-weight:bold">nil</span>
- outer = T! { inner }
-
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
- <span style="color:#080;font-weight:bold">end</span>
+<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>
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span>
<span style="color:#080;font-weight:bold">end</span>
-<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>
- <span style="color:#036;font-weight:bold">T</span> { T? { <span style="color:#038;font-weight:bold">true</span> } }
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">false</span> } }
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">nil</span> } }
-
- <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>
- inner = rand()
- outer = T? { inner }
-
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">true</span> }
+<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>
+ S! <span style="color:#A60">:strength</span> <span style="color:#080;font-weight:bold">do</span>
+ <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>
<span style="color:#080;font-weight:bold">end</span>
<span style="color:#080;font-weight:bold">end</span>
-<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>
- <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>) }
+<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>
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:knowledge</span>
+ <span style="color:#036;font-weight:bold">S</span> <span style="color:#A60">:strength</span>
<span style="color:#080;font-weight:bold">end</span>
-<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>
- <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>) }
+<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>
+ <span style="color:#036;font-weight:bold">T</span> { S? <span style="color:#A60">:knowledge</span> }
+ <span style="color:#036;font-weight:bold">T</span> { S? <span style="color:#A60">:strength</span> }
+ <span style="color:#036;font-weight:bold">F</span> { S? <span style="color:#A60">:power</span> }
+ <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>
<span style="color:#080;font-weight:bold">end</span>
+</pre></ins><p> Dfect will output the following:</p>
-<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>
- <span style="color:#036;font-weight:bold">T</span> { T? { <span style="color:#038;font-weight:bold">true</span> } }
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">false</span> } }
- <span style="color:#036;font-weight:bold">F</span> { T? { <span style="color:#038;font-weight:bold">nil</span> } }
+<pre>---
+- Healer:
+ - Knowledge is power!
+- Warrior:
+ - Strength is power!
+- Wizard:
+ - Knowledge is power!
+ - Strength is power!
+- King:
+ - Power is power!
+---
+pass: 3
+time: 0.00045127</pre></div>
+</div>
+</div>
+</div>
- <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>
- inner = rand()
- outer = F? { inner }
+<div class="section" id="Insulation">
+ <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>
+ <h1 class="title">
+ <span class="section_number">3.2.3 </span>Insulation
+ </h1>
+ <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>
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">false</span> }
- <span style="color:#080;font-weight:bold">end</span>
-<span style="color:#080;font-weight:bold">end</span>
+<p>Inside an insulated test, you are free to:</p>
-<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>
- E(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise <span style="color:#036;font-weight:bold">SyntaxError</span> }
+<ul>
+<li>mix-in any modules your test logic needs</li>
- <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>
- <span style="color:#036;font-weight:bold">F</span> { E? {} }
- <span style="color:#080;font-weight:bold">end</span>
+<li>define your own constants, methods, and classes</li>
+</ul>
- <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>
- <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> } }
- <span style="color:#080;font-weight:bold">end</span>
- <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>
- <span style="color:#036;font-weight:bold">E</span> { raise <span style="color:#036;font-weight:bold">StandardError</span> }
- <span style="color:#036;font-weight:bold">E</span> { raise }
- <span style="color:#080;font-weight:bold">end</span>
+<div class="_float ui-tabs ui-widget ui-widget-content ui-corner-all example" id="Insulated-and-uninsulated-tests">
+ <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>
+ <p class="title ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"><span class="section_number">Example 3. </span>Insulated and uninsulated tests</p>
+ <div class="content"><p>When the following test is run:</p>
- <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>
- <span style="color:#036;font-weight:bold">F</span> { E?(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise } }
- <span style="color:#080;font-weight:bold">end</span>
+<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>
- <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>
- <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>
- <span style="color:#080;font-weight:bold">begin</span>
- raise <span style="color:#036;font-weight:bold">LoadError</span>
- <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#036;font-weight:bold">LoadError</span>
- <span style="color:#080;font-weight:bold">end</span>
+<span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">a root-level test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
+ <span style="color:#33B">@outside</span> = <span style="color:#00D;font-weight:bold">1</span>
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
- raise <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#038;font-weight:bold">nil</span>
-
- raise <span style="color:#036;font-weight:bold">SyntaxError</span>
- <span style="color:#080;font-weight:bold">end</span>
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">an inner, non-insulated test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
<span style="color:#080;font-weight:bold">end</span>
-<span style="color:#080;font-weight:bold">end</span>
-<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>
- E!(<span style="color:#036;font-weight:bold">SyntaxError</span>) { raise <span style="color:#036;font-weight:bold">ArgumentError</span> }
+ D! <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">an inner, insulated test</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@outside</span> }
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#33B">@outside</span> == <span style="color:#00D;font-weight:bold">1</span> }
- <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>
- E!(<span style="color:#036;font-weight:bold">SyntaxError</span>) {}
+ <span style="color:#33B">@inside</span> = <span style="color:#00D;font-weight:bold">2</span>
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@inside</span> }
+ <span style="color:#036;font-weight:bold">T</span> { <span style="color:#33B">@inside</span> == <span style="color:#00D;font-weight:bold">2</span> }
<span style="color:#080;font-weight:bold">end</span>
- <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>
- <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> } }
- <span style="color:#080;font-weight:bold">end</span>
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#080;font-weight:bold">defined?</span> <span style="color:#33B">@inside</span> }
+ <span style="color:#036;font-weight:bold">F</span> { <span style="color:#33B">@inside</span> == <span style="color:#00D;font-weight:bold">2</span> }
+<span style="color:#080;font-weight:bold">end</span>
+</pre></ins><p> Dfect will output the following:</p>
- <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>
- E! { raise <span style="color:#036;font-weight:bold">LoadError</span> }
- <span style="color:#080;font-weight:bold">end</span>
+<pre>---
+- a root-level test:
+ - an inner, non-insulated test: []
- <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>
- <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 } }
- <span style="color:#080;font-weight:bold">end</span>
+ - an inner, insulated test: []
- <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>
- E! <span style="color:#036;font-weight:bold">SyntaxError</span> <span style="color:#080;font-weight:bold">do</span>
- <span style="color:#080;font-weight:bold">begin</span>
- raise <span style="color:#036;font-weight:bold">LoadError</span>
- <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#036;font-weight:bold">LoadError</span>
- <span style="color:#080;font-weight:bold">end</span>
+---
+pass: 10
+time: 0.000505745</pre></div>
+</div>
+</div>
+</div>
+</div></div>
+</div>
+</div></div>
+</div>
- raise <span style="color:#080;font-weight:bold">rescue</span> <span style="color:#038;font-weight:bold">nil</span>
- raise <span style="color:#036;font-weight:bold">ArgumentError</span>
- <span style="color:#080;font-weight:bold">end</span>
- <span style="color:#080;font-weight:bold">end</span>
-<span style="color:#080;font-weight:bold">end</span>
+<div class="part" id="History">
+ <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>
+ <h1 class="title">
+ Part 4
+ <br/>
+ <big>History</big>
+ </h1>
+ <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 </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 </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 </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 </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 </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 </span>Version 0.0.0 (2009-04-13)</a></li></ul>
+<div class="section" id="Version-2-0-0-2010-03-21">
+ <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>
+ <h1 class="title">
+ <span class="section_number">4.1 </span>Version 2.0.0 (2010-03-21)
+ </h1>
+ <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>
-<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>
- C(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:foo</span> }
- <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>
- <span style="color:#036;font-weight:bold">F</span> { C?(<span style="color:#A60">:bar</span>) {} }
- <span style="color:#080;font-weight:bold">end</span>
+<div class="paragraph" id="Incompatible-changes">
+ <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>
+ <p class="title">Incompatible changes</p>
+ <div class="content"><ul>
+<li>
+<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. "Insulation"">automatically insulated</a> now.</p>
+</li>
- <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>
- <span style="color:#036;font-weight:bold">F</span> { C?(<span style="color:#A60">:bar</span>) { throw <span style="color:#A60">:foo</span> } }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- <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>
- <span style="color:#036;font-weight:bold">C</span> <span style="color:#A60">:foo</span> <span style="color:#080;font-weight:bold">do</span>
- catch <span style="color:#A60">:bar</span> <span style="color:#080;font-weight:bold">do</span>
- throw <span style="color:#A60">:bar</span>
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- throw <span style="color:#A60">:foo</span>
- <span style="color:#080;font-weight:bold">end</span>
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- <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>
- inner = rand()
- outer = C(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:foo</span>, inner }
+<li>
+<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>
+</li>
- <span style="color:#036;font-weight:bold">T</span> { outer == inner }
- <span style="color:#080;font-weight:bold">end</span>
-<span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
-<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>
- C!(<span style="color:#A60">:bar</span>) { throw <span style="color:#A60">:foo</span> }
+<li>
+<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>
+</li>
- <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>
- C!(<span style="color:#A60">:bar</span>) {}
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<p>The <code class="line"><span style="color:#A60">:debug</span></code> option is now set to Ruby’s <code class="line"><span style="color:#d70;font-weight:bold">$DEBUG</span></code> global by default.</p>
+</li>
+</ul></div>
+</div>
- <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>
- <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> } }
- <span style="color:#080;font-weight:bold">end</span>
- <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>
- C! <span style="color:#A60">:bar</span> <span style="color:#080;font-weight:bold">do</span>
- catch <span style="color:#A60">:moz</span> <span style="color:#080;font-weight:bold">do</span>
- throw <span style="color:#A60">:moz</span>
- <span style="color:#080;font-weight:bold">end</span>
- throw <span style="color:#A60">:foo</span>
- <span style="color:#080;font-weight:bold">end</span>
- <span style="color:#080;font-weight:bold">end</span>
+<div class="paragraph" id="New-features">
+ <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>
+ <p class="title">New features</p>
+ <div class="content"><ul>
+<li>
+<p>Print failures as they occur instead of waiting until the end.</p>
+</li>
- <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>
- inner = rand()
- outer = C!(<span style="color:#A60">:foo</span>) { throw <span style="color:#A60">:bar</span>, inner }
+<li>
+<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>
- <span style="color:#036;font-weight:bold">F</span> { outer == inner }
- <span style="color:#036;font-weight:bold">T</span> { outer == <span style="color:#038;font-weight:bold">nil</span> }
+<p>This allows you to reduce “line noise” in your tests:</p>
+</li>
+</ul>
+
+<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">"</span><span style="">Lottery</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
+ winning_ticket = rand()
+
+ <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">My chances of winning</span><span style="color:#710">"</span></span> <span style="color:#080;font-weight:bold">do</span>
+ my_ticket = rand()
+ <span style="color:#036;font-weight:bold">F</span> my_ticket == winning_ticket, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">I won?! Dream on.</span><span style="color:#710">"</span></span>
<span style="color:#080;font-weight:bold">end</span>
<span style="color:#080;font-weight:bold">end</span>
+</pre></ins>
-<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>
- history = []
+<ul>
+<li>
+<p>Add <a class="xref" href="#Sharing" title="Section 3.2.2. "Sharing""><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>::S()</code> methods</a> for sharing code between tests.</p>
+</li>
- <span style="color:#036;font-weight:bold">D</span> .<< { history << <span style="color:#A60">:before_all</span> }
- <span style="color:#036;font-weight:bold">D</span> .< { history << <span style="color:#A60">:before_each</span> }
- <span style="color:#036;font-weight:bold">D</span> .> { history << <span style="color:#A60">:after_each</span> }
- <span style="color:#036;font-weight:bold">D</span> .>> { history << <span style="color:#A60">:after_all</span> }
+<li>
+<p>Add <a class="xref" href="#Insulation" title="Section 3.2.3. "Insulation""><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>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<p>Add instance variables to the <code class="line"><span style="color:#A60">:vars</span></code> section of a failure report.</p>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- <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>
- <span style="color:#036;font-weight:bold">D</span> .<< { history << <span style="color:#A60">:nested_before_all</span> }
- <span style="color:#036;font-weight:bold">D</span> .< { history << <span style="color:#A60">:nested_before_each</span> }
- <span style="color:#036;font-weight:bold">D</span> .> { history << <span style="color:#A60">:nested_after_each</span> }
- <span style="color:#036;font-weight:bold">D</span> .>> { history << <span style="color:#A60">:nested_after_all</span> }
+<li>
+<p>Add test execution time to statistics hash (under the <code class="line"><span style="color:#A60">:time</span></code> key).</p>
+</li>
+</ul></div>
+</div>
- nested_before_each = <span style="color:#00D;font-weight:bold">0</span>
- <span style="color:#036;font-weight:bold">D</span> .< <span style="color:#080;font-weight:bold">do</span>
- <span style="color:#888"># outer values remain the same for this nesting</span>
- <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> }
- <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> }
- <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> }
- <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> }
- nested_before_each += <span style="color:#00D;font-weight:bold">1</span>
- <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 }
- <span style="color:#080;font-weight:bold">end</span>
+<div class="paragraph" id="Bug-fixes">
+ <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>
+ <p class="title">Bug fixes</p>
+ <div class="content"><ul>
+<li>
+<p>Do not print any output when <code class="line"><span style="color:#A60">:quiet</span></code> option is active.</p>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
+<li>
+<p>Make before and after hook methods mixin-able like assertions.</p>
+</li>
- <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>
- <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> }
- <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> }
- <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> }
- <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> }
- <span style="color:#080;font-weight:bold">end</span>
- <span style="color:#080;font-weight:bold">end</span>
-<span style="color:#080;font-weight:bold">end</span>
+<li>
+<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>
+</li>
+</ul></div>
+</div>
-<span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">D.<() 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>
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> < <span style="color:#036;font-weight:bold">Kernel</span> }
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> < <span style="color:#036;font-weight:bold">Object</span> }
- <span style="color:#036;font-weight:bold">F</span> { <span style="color:#036;font-weight:bold">D</span> < <span style="color:#036;font-weight:bold">Module</span> }
- <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> }
- c = <span style="color:#036;font-weight:bold">Class</span>.new { include <span style="color:#036;font-weight:bold">D</span> }
- <span style="color:#036;font-weight:bold">T</span> { c < <span style="color:#036;font-weight:bold">D</span> }
-<span style="color:#080;font-weight:bold">end</span>
-<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>
- <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">"</span><span style="">--- SyntaxError</span><span style="color:#b0b">\n</span><span style="color:#710">"</span></span> }
-<span style="color:#080;font-weight:bold">end</span>
+<div class="paragraph" id="Housekeeping">
+ <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>
+ <p class="title">Housekeeping</p>
+ <div class="content"><ul>
+<li>
+<p>Upgrade to Inochi 2.0.0 for managing this project.</p>
+</li>
-<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>
- <span style="color:#036;font-weight:bold">Dfect</span>.stop
- 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>
-<span style="color:#080;font-weight:bold">end</span>
+<li>
+<p>Make emulation libraries modify Dfect module instead of Kernel.</p>
+</li>
-</pre></ins></div>
+<li>
+<p>Do not pollute the user’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>
+</li>
+
+<li>
+<p>Remove “Motivation” section from user manual. It was too fanatic!</p>
+</li>
+</ul></div>
</div>
</div>
</div>
-
-
-
-
-<div class="chapter" id="History">
- <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>
- <h1 class="title">
- Chapter 4
- <br/>
- <big>History</big>
- </h1>
- <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>
+
<div class="section" id="Version-1-1-0-2009-10-27">
- <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>
+ <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>
<h1 class="title">
- 4.1 Version 1.1.0 (2009-10-27)
+ <span class="section_number">4.2 </span>Version 1.1.0 (2009-10-27)
</h1>
<div class="content"><p>This release adds a new method for emitting status messages and does some internal housekeeping.</p>
-<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>
+
<div class="paragraph" id="Thank-you">
- <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>
+ <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>
<p class="title">Thank you</p>
<div class="content"><ul>
<li>Iñaki Baz Castillo used Dfect and suggested new features.</li>
</ul></div>
</div>
-<div class="paragraph" id="New-features">
- <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>
+<div class="paragraph" id="New-features-85749454">
+ <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>
<p class="title">New features</p>
<div class="content"><ul>
-<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. "Reporting"">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>
+<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. "Logging"">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>
</ul></div>
</div>
-<div class="paragraph" id="Housekeeping">
- <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>
+<div class="paragraph" id="Housekeeping-85773044">
+ <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>
<p class="title">Housekeeping</p>
<div class="content"><ul>
<li>
<p>Remove unused require of ‘delegate’ standard library in ‘dfect/spec’ RSpec emulation layer.</p>
</li>
<li>
-<p>Mention <a class="xref" href="#Emulation" title="Section 3.5">Emulation</a> layers for popular testing libraries.</p>
+<p>Mention <a class="xref" href="#Emulation" title="Section 3.1.4">Emulation</a> layers for popular testing libraries.</p>
</li>
<li>
<p>Mention that assertions take an optional message parameter.</p>
</li>
@@ -1999,33 +2332,33 @@
<li>
<p>Upgrade user manual to ERBook 9.0.0.</p>
</li>
</ul></div>
</div>
-</div></div>
</div>
+</div>
<div class="section" id="Version-1-0-1-2009-10-07">
- <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>
+ <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>
<h1 class="title">
- 4.2 Version 1.0.1 (2009-10-07)
+ <span class="section_number">4.3 </span>Version 1.0.1 (2009-10-07)
</h1>
<div class="content"><p>This release fixes a bug in the Test::Unit emulation library and revises the user manual.</p>
-<div class="tabs"><ul><li><a href="#Bug-fixes">Bug fixes</a></li><li><a href="#Housekeeping-89349386">Housekeeping</a></li></ul>
-<div class="paragraph" id="Bug-fixes">
- <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>
+
+<div class="paragraph" id="Bug-fixes-85824340">
+ <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>
<p class="title">Bug fixes</p>
<div class="content"><ul>
<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>
</ul></div>
</div>
-<div class="paragraph" id="Housekeeping-89349386">
- <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>
+<div class="paragraph" id="Housekeeping-85820322">
+ <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>
<p class="title">Housekeeping</p>
<div class="content"><ul>
<li>
<p>Revise user manual to better fit jQuery UI tabs.</p>
</li>
@@ -2045,27 +2378,27 @@
<li>
<p>Mark code spans with <code class="line">{<span style="color:#A60">:lang=</span>ruby}</code> instead of HTML <code class="line"><code/></code> tags.</p>
</li>
<li>
-<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 “related works” instead of “competitors”.</p>
+<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 “related works” instead of “competitors”.</p>
</li>
</ul></div>
</div>
-</div></div>
</div>
+</div>
<div class="section" id="Version-1-0-0-2009-05-03">
- <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>
+ <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>
<h1 class="title">
- 4.3 Version 1.0.0 (2009-05-03)
+ <span class="section_number">4.4 </span>Version 1.0.0 (2009-05-03)
</h1>
<div class="content"><p>This release improves default choices, adds emulation layers to mimic other testing libraries, and fixes some bugs.</p>
-<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>
-<div class="paragraph" id="Incompatible-changes">
- <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>
+
+<div class="paragraph" id="Incompatible-changes-85843282">
+ <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>
<p class="title">Incompatible changes</p>
<div class="content"><ul>
<li>
<p>The <code class="line"><span style="color:#A60">:debug</span></code> option is now enabled by default and is no longer linked to the value of <code class="line"><span style="color:#d70;font-weight:bold">$DEBUG</span></code>.</p>
</li>
@@ -2078,12 +2411,12 @@
</ul></div>
</div>
-<div class="paragraph" id="New-features-89369182">
- <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>
+<div class="paragraph" id="New-features-85870708">
+ <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>
<p class="title">New features</p>
<div class="content"><ul>
<li>
<p>Add emulation layers to mimic other testing libraries:</p>
@@ -2098,30 +2431,30 @@
</ul></div>
</div>
-<div class="paragraph" id="Bug-fixes-89398092">
- <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>
+<div class="paragraph" id="Bug-fixes-85866662">
+ <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>
<p class="title">Bug fixes</p>
<div class="content"><ul>
<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>
</ul></div>
</div>
-<div class="paragraph" id="Housekeeping-89393948">
- <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>
+<div class="paragraph" id="Housekeeping-85894242">
+ <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>
<p class="title">Housekeeping</p>
<div class="content"><ul>
<li>
-<p>Add <a class="xref" href="#Motivation" title="Section 1.2">Motivation</a> section in user manual to promote interactive debugging.</p>
+<p>Add “Motivation” section in user manual to promote interactive debugging.</p>
</li>
<li>
-<p>Add brief <a class="xref" href="#History" title="Chapter 4">History</a> of this project’s inception.</p>
+<p>Add brief <a class="xref" href="#History" title="Part 4">History</a> of this project’s inception.</p>
</li>
<li>
<p>Remove redundant assertions for F!() and T!() methods in test suite.</p>
</li>
@@ -2129,51 +2462,49 @@
<li>
<p>Add copyright notice at the top of every file.</p>
</li>
</ul></div>
</div>
-</div></div>
</div>
+</div>
<div class="section" id="Version-0-1-0-2009-04-28">
- <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>
+ <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>
<h1 class="title">
- 4.4 Version 0.1.0 (2009-04-28)
+ <span class="section_number">4.5 </span>Version 0.1.0 (2009-04-28)
</h1>
<div class="content"><p>This release adds new variations to assertion methods, fixes several bugs, and improves test coverage.</p>
-<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>
-<div class="paragraph" id="Thank-you-89444068">
- <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>
+
+<div class="paragraph" id="Thank-you-80236618">
+ <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>
<p class="title">Thank you</p>
<div class="content"><ul>
<li>François Beausoleil contributed patches for both code <em>and</em> tests! :-)</li>
</ul></div>
</div>
-<div class="paragraph" id="New-features-89472950">
- <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>
+<div class="paragraph" id="New-features-80867682">
+ <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>
<p class="title">New features</p>
<div class="content"><ul>
-<li>
-<p>Added <a class="xref" href="#Negation" title="Paragraph. "Negation"">negation (m!)</a> and <a class="xref" href="#Sampling" title="Paragraph. "Sampling"">sampling (m?)</a> variations to <a class="xref" href="#Assertions" title="Section 3.1. "Assertions"">assertion methods</a>.</p>
+<li>Added <a class="xref" href="#Negation" title="Section 3.1.1. "Negation"">negation (m!)</a> and <a class="xref" href="#Sampling" title="Section 3.1.2. "Sampling"">sampling (m?)</a> variations to <a class="xref" href="#Assertions" title="Section 3.1. "Assertions"">assertion methods</a>.</li>
+</ul>
<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>
-</li>
-<li>
-<p>Added documentation on <a class="xref" href="#Insulation" title="Section 3.2.2. "Insulation"">how to insulate tests</a> from the global Ruby namespace.</p>
-</li>
-</ul></div>
+<pre>* Added documentation on <a class="xref" href="#Insulation" title="Section 3.2.3. "Insulation"">how to insulate tests</a></pre>
+
+<p>from the global Ruby namespace.</p></div>
</div>
-<div class="paragraph" id="Bug-fixes-79582034">
- <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>
+<div class="paragraph" id="Bug-fixes-84138754">
+ <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>
<p class="title">Bug fixes</p>
<div class="content"><ul>
<li>
<p>The <code class="line">E()</code> method did not consider the case where a block does not raise anything as a failure. —<em>François Beausoleil</em></p>
</li>
@@ -2196,26 +2527,26 @@
</ul></div>
</div>
-<div class="paragraph" id="Housekeeping-81713450">
- <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>
+<div class="paragraph" id="Housekeeping-84457184">
+ <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>
<p class="title">Housekeeping</p>
<div class="content"><ul>
<li>Filled the big holes in test coverage. Everything except the runtime debugging logic is now covered by the unit tests.</li>
</ul></div>
</div>
-</div></div>
</div>
+</div>
<div class="section" id="Version-0-0-0-2009-04-13">
- <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>
+ <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>
<h1 class="title">
- 4.5 Version 0.0.0 (2009-04-13)
+ <span class="section_number">4.6 </span>Version 0.0.0 (2009-04-13)
</h1>
- <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>
+ <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>
<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>
<p>Recent experiments in assertion testing libraries smashed my world view:</p>
@@ -2229,23 +2560,22 @@
<p>The status quo was certainly <em>not</em> “good enough”, as I had so blindly believed all these years. In fact, they were <em>verbose</em> behemoths that chose to encode endless permutations of conjecture into methods.</p>
<p>Empowered by this revelation and inspired by <a href='http://www.ruby-forum.com/topic/183354#801895'>Sean O’Halpin’s musing</a> on alternative names for assertion methods, I rose to challenge the status quo.</p>
-<p>And so I present to you the first public release of Dfect.</p></div>
+<p>And so I present to you the first public release of “Dfect”.</p></div>
</div>
</div></div>
</div>
-
</div>
<div style="display: none"><br/><hr/><br/></div>
- <div id="__nfo__">
- <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>
+ <div id="_about">
+ <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>
<table border="1">
<thead>
<tr>
<th>Resource</th>
@@ -2254,21 +2584,22 @@
</tr>
</thead>
<tbody>
<tr>
<td>
- <img alt="here_frag" src="84731598" class="icon"/>
- <img alt="important" src="84731220" class="icon"/>
- <img alt="warning" src="84730758" class="icon"/>
- <img alt="caution" src="84730296" class="icon"/>
- <img alt="note" src="84729764" class="icon"/>
- <img alt="tip" src="84729302" class="icon"/>
- <img alt="quote" src="84728784" class="icon"/>
- <img alt="nav_here" src="84728322" class="icon"/>
- <img alt="nav_prev" src="84727874" class="icon"/>
- <img alt="nav_next" src="84727398" class="icon"/>
- <img alt="nav_list" src="84726992" class="icon"/>
+ <img alt="here_frag" src="cid:82357212" class="icon"/>
+ <img alt="command" src="cid:82356834" class="icon"/>
+ <img alt="important" src="cid:82356428" class="icon"/>
+ <img alt="warning" src="cid:82356008" class="icon"/>
+ <img alt="caution" src="cid:82355644" class="icon"/>
+ <img alt="note" src="cid:81900308" class="icon"/>
+ <img alt="tip" src="cid:81899636" class="icon"/>
+ <img alt="quote" src="cid:81899006" class="icon"/>
+ <img alt="nav_here" src="cid:81898502" class="icon"/>
+ <img alt="nav_prev" src="cid:81898012" class="icon"/>
+ <img alt="nav_next" src="cid:81897676" class="icon"/>
+ <img alt="nav_list" src="cid:81897116" class="icon"/>
</td>
<td>
<a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a>
<p>© 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a></p>
@@ -2278,11 +2609,11 @@
</td>
</tr>
<tr>
<td>
- <img alt="hyperlink" src="84731990" class="icon"/>
+ <img alt="hyperlink" src="cid:82357576" class="icon"/>
</td>
<td>
<a href="http://www.mediawiki.org/skins-1.5/monobook/external.png">MediaWiki Monobook Skin</a>
<p>© 2007 <a href="https://www.ohloh.net/projects/mediawiki/contributors">MediaWiki contributors</a></p>
@@ -2294,23 +2625,23 @@
</tbody>
</table>
<p class="validations">
<a href="http://validator.w3.org/check?uri=referer"><img
- src="http://www.w3.org/Icons/valid-xhtml10-blue"
+ src="cid:81896640"
alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"><img
- src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
- alt="Valid CSS!" height="31" width="88" /></a>
+ src="cid:81896052"
+ alt="Valid CSS 3!" height="31" width="88" /></a>
</p>
</div>
</div>
- <div id="__footer__">
+ <div id="_footer">
</div>