quarry 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +40 -3
- data/MANIFEST +290 -78
- data/README +51 -37
- data/RELEASE +12 -0
- data/VERSION +1 -1
- data/bin/quarry +117 -0
- data/bin/quarry-doc +26 -0
- data/bin/ruby-break +10 -0
- data/bin/{xact-ruby → ruby-xacto} +0 -0
- data/doc/assets/images/clipboard.jpg +0 -0
- data/doc/assets/images/clipboard2.png +0 -0
- data/doc/assets/images/darksilver.png +0 -0
- data/doc/assets/images/icon/book.jpg +0 -0
- data/doc/assets/images/icon/download.gif +0 -0
- data/doc/assets/images/icon/letter_r.png +0 -0
- data/doc/assets/images/icon/license.png +0 -0
- data/doc/assets/images/icon/software.png +0 -0
- data/doc/assets/images/icon/source.png +0 -0
- data/doc/assets/images/miner.jpg +0 -0
- data/doc/assets/images/rbrylmtrx.png +0 -0
- data/doc/assets/images/ruby.gif +0 -0
- data/doc/assets/images/runneth.png +0 -0
- data/doc/assets/images/silver.gif +0 -0
- data/doc/assets/images/test.jpg +0 -0
- data/doc/assets/jquery/jquery.js +1 -0
- data/doc/assets/jquery/jquery.tabs.js +1 -0
- data/doc/assets/rdoc_ad.html +12 -0
- data/doc/assets/styles/index.css +138 -0
- data/doc/guide/stubs.md +125 -0
- data/doc/index.html +285 -0
- data/doc/log/bstats/stats.html +39 -0
- data/doc/log/notes.xml +32 -0
- data/doc/log/stats.html +25 -0
- data/doc/log/stats.log +14 -0
- data/doc/log/syntax.log +0 -0
- data/doc/rdoc/classes/Assertion/False.html +151 -106
- data/doc/rdoc/classes/Assertion/True.html +128 -113
- data/doc/rdoc/classes/Assertion.html +147 -77
- data/doc/rdoc/classes/Kernel.html +84 -65
- data/doc/rdoc/classes/Method.html +123 -92
- data/doc/rdoc/classes/Object.html +468 -115
- data/doc/rdoc/classes/Quarry/Break.html +231 -0
- data/doc/rdoc/classes/Quarry/Command.html +443 -0
- data/doc/rdoc/classes/Quarry/Extract.html +215 -0
- data/doc/rdoc/classes/Quarry/MethodProbe.html +203 -145
- data/doc/rdoc/classes/Quarry/Mock/Delegator.html +179 -0
- data/doc/rdoc/classes/Quarry/Mock/Setter.html +175 -0
- data/doc/rdoc/classes/Quarry/Mock.html +211 -67
- data/doc/rdoc/classes/Quarry/Spec/Comment.html +237 -0
- data/doc/rdoc/classes/Quarry/Spec/Config.html +257 -0
- data/doc/rdoc/classes/Quarry/Spec/Context.html +154 -0
- data/doc/rdoc/classes/Quarry/Spec/Document.html +382 -0
- data/doc/rdoc/classes/Quarry/Spec/Header.html +195 -0
- data/doc/rdoc/classes/Quarry/Spec/Macro.html +166 -0
- data/doc/rdoc/classes/Quarry/Spec/Markup.html +279 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +234 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +294 -0
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +311 -0
- data/doc/rdoc/classes/Quarry/Spec/Runner.html +352 -0
- data/doc/rdoc/classes/Quarry/Spec/Step.html +190 -0
- data/doc/rdoc/classes/Quarry/Spec/Template.html +205 -0
- data/doc/rdoc/classes/Quarry/Stub/Delegator.html +179 -0
- data/doc/rdoc/classes/Quarry/Stub/Setter.html +175 -0
- data/doc/rdoc/classes/Quarry/Stub.html +224 -0
- data/doc/rdoc/classes/Quarry.html +153 -154
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/CHANGES.html +126 -76
- data/doc/rdoc/files/COPYING.html +84 -73
- data/doc/rdoc/files/README.html +135 -111
- data/doc/rdoc/files/RELEASE.html +122 -0
- data/doc/rdoc/files/VERSION.html +85 -74
- data/doc/rdoc/files/bin/quarry-doc.html +109 -0
- data/doc/rdoc/files/bin/quarry.html +109 -0
- data/doc/rdoc/files/bin/ruby-break.html +108 -0
- data/doc/rdoc/files/bin/ruby-xacto.html +101 -0
- data/doc/rdoc/files/lib/quarry/assert_rb.html +155 -0
- data/doc/rdoc/files/lib/quarry/break_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/extract_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +80 -71
- data/doc/rdoc/files/lib/quarry/spec/config_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/context_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/document_rb.html +111 -0
- data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +108 -0
- data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +109 -0
- data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +109 -0
- data/doc/rdoc/files/lib/quarry/spec/step_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +228 -0
- data/doc/rdoc/files/lib/quarry/spec_rb.html +113 -0
- data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +101 -0
- data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +122 -0
- data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +118 -0
- data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +101 -0
- data/doc/rdoc/fr_class_index.html +48 -52
- data/doc/rdoc/fr_file_index.html +47 -57
- data/doc/rdoc/fr_method_index.html +109 -69
- data/doc/rdoc/index.html +12 -14
- data/doc/rdoc/rdoc-style.css +154 -121
- data/doc/ri/Assertion/False/cdesc-False.yaml +5 -3
- data/doc/ri/Assertion/True/cdesc-True.yaml +4 -2
- data/doc/ri/Assertion/True/message-c.yaml +2 -2
- data/doc/ri/Assertion/True/message-i.yaml +1 -1
- data/doc/ri/Assertion/True/method_missing-i.yaml +4 -3
- data/doc/ri/Assertion/cdesc-Assertion.yaml +24 -1
- data/doc/ri/Object/assert%21-i.yaml +7 -4
- data/doc/ri/Object/assert-i.yaml +3 -2
- data/doc/ri/Object/assert_raises%21-i.yaml +12 -0
- data/doc/ri/Object/assert_raises-i.yaml +15 -0
- data/doc/ri/Object/cdesc-Object.yaml +24 -2
- data/doc/ri/{Quarry/Design/Specification/outline-i.yaml → Object/mock-i.yaml} +4 -4
- data/doc/ri/Object/refute-i.yaml +13 -0
- data/doc/ri/Object/refute_raises-i.yaml +17 -0
- data/doc/ri/Object/remove-i.yaml +12 -0
- data/doc/ri/{Quarry/Design/check-c.yaml → Object/should-i.yaml} +4 -4
- data/doc/ri/Object/should_not-i.yaml +12 -0
- data/doc/ri/Object/should_not_raise-i.yaml +12 -0
- data/doc/ri/Object/should_raise-i.yaml +12 -0
- data/doc/ri/{Quarry/Mock/Object/mock-c.yaml → Object/stub-i.yaml} +5 -5
- data/doc/ri/{Module/cdesc-Module.yaml → Quarry/Break/cdesc-Break.yaml} +10 -8
- data/doc/ri/Quarry/Break/edit-i.yaml +11 -0
- data/doc/ri/Quarry/Break/new-c.yaml +11 -0
- data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +26 -0
- data/doc/ri/Quarry/Extract/create_test-i.yaml +12 -0
- data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +12 -0
- data/doc/ri/Quarry/Extract/test_extract-i.yaml +18 -0
- data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +20 -0
- data/doc/ri/Quarry/{Design/Specification/Context → Mock/Delegator}/method_missing-i.yaml +2 -2
- data/doc/ri/Quarry/{Design/specification-c.yaml → Mock/Delegator/new-c.yaml} +3 -3
- data/doc/ri/{Module/method_added-i.yaml → Quarry/Mock/Setter/%3d%3d-i.yaml} +3 -3
- data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +18 -0
- data/doc/ri/Quarry/Mock/Setter/new-c.yaml +10 -0
- data/doc/ri/Quarry/Mock/__table__-i.yaml +11 -0
- data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +17 -7
- data/doc/ri/Quarry/Mock/method_missing-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/outline-c.yaml → Mock/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +33 -0
- data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Comment/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Comment/type-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/after-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/before-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/Specification/Context/cdesc-Context.yaml → Spec/Config/cdesc-Config.yaml} +11 -9
- data/doc/ri/Quarry/{Mock/Object/mocks-c.yaml → Spec/Config/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +21 -0
- data/doc/ri/Quarry/{Design/specifications-c.yaml → Spec/Context/new-c.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +76 -0
- data/doc/ri/Quarry/Spec/Document/generate-i.yaml +12 -0
- data/doc/ri/Quarry/{Mock/Object/echo-c.yaml → Spec/Document/new-c.yaml} +4 -4
- data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Document/save-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Document/template-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +30 -0
- data/doc/ri/Quarry/Spec/Header/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +22 -0
- data/doc/ri/Quarry/Spec/Macro/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +31 -0
- data/doc/ri/Quarry/Spec/Markup/description-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/new-c.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +11 -0
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +21 -0
- data/doc/ri/Quarry/{Design/Specification/Context/specifications-i.yaml → Spec/Reporter/DotProgress/report_intro-i.yaml} +2 -2
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +16 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +31 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +10 -0
- data/doc/ri/Quarry/{Design/Specification/Context/before-i.yaml → Spec/Reporter/Summary/report_pass-i.yaml} +3 -3
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +29 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +16 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +10 -0
- data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +20 -0
- data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +47 -0
- data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/check-i.yaml +3 -3
- data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +12 -0
- data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/new-c.yaml +2 -2
- data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +12 -0
- data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +30 -0
- data/doc/ri/Quarry/Spec/Step/new-c.yaml +10 -0
- data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +31 -0
- data/doc/ri/Quarry/Spec/Template/new-c.yaml +11 -0
- data/doc/ri/Quarry/{Design/Specification/Context/after-i.yaml → Spec/Template/parse_template-i.yaml} +3 -3
- data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +15 -0
- data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +20 -0
- data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +10 -0
- data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +10 -0
- data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +10 -0
- data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +18 -0
- data/doc/ri/Quarry/Stub/Setter/new-c.yaml +10 -0
- data/doc/ri/Quarry/Stub/__table__-i.yaml +11 -0
- data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +23 -0
- data/doc/ri/Quarry/Stub/method_missing-i.yaml +11 -0
- data/doc/ri/Quarry/Stub/new-c.yaml +10 -0
- data/doc/ri/Quarry/cdesc-Quarry.yaml +2 -3
- data/doc/ri/created.rid +1 -1
- data/doc/spec/stub.html +394 -0
- data/lib/quarry/assert.rb +198 -0
- data/lib/quarry/break.rb +51 -0
- data/lib/quarry/extract.rb +135 -0
- data/lib/quarry/loadmonitor.rb +6 -1
- data/lib/quarry/spec/config.rb +32 -0
- data/lib/quarry/spec/context.rb +19 -0
- data/lib/quarry/spec/document.rb +130 -0
- data/lib/quarry/spec/markup.rb +85 -0
- data/lib/quarry/spec/reporter/dotprogress.rb +66 -0
- data/lib/quarry/spec/reporter/summary.rb +74 -0
- data/lib/quarry/spec/reporter/verbatim.rb +87 -0
- data/lib/quarry/spec/reporter.rb +74 -0
- data/lib/quarry/spec/runner.rb +127 -0
- data/lib/quarry/spec/step.rb +78 -0
- data/lib/quarry/spec/template.rhtml +116 -0
- data/lib/quarry/spec.rb +7 -0
- data/lib/quarry/stub/mock.rb +94 -0
- data/lib/quarry/{methodprobe.rb → stub/probe.rb} +0 -0
- data/lib/quarry/stub/spec.txt +113 -0
- data/lib/quarry/stub/stub.rb +93 -0
- data/meta/abstract +5 -0
- data/meta/authors +1 -0
- data/meta/created +1 -0
- data/meta/homepage +1 -0
- data/meta/requires +1 -0
- data/meta/summary +1 -0
- data/spec/basic.rd +20 -0
- data/spec/complex.rd +50 -0
- data/spec/mock.rd +53 -0
- data/spec/stub.rd +61 -0
- data/{lib/quarry → work/consider}/document.rb +0 -0
- data/work/consider/fixture.rb +153 -0
- data/{lib/quarry → work/deprecated}/assert/must.rb +1 -0
- data/{lib/quarry → work/deprecated}/assert/should.rb +0 -0
- data/work/deprecated/build.rb +82 -0
- data/work/deprecated/mock/file.rb +11 -0
- data/work/deprecated/mock/mock.0.rb +77 -0
- data/work/deprecated/overlay.rb +64 -0
- data/work/deprecated/spec.rb +195 -0
- data/work/deprecated/stub/stub.0.rb +180 -0
- data/work/deprecated/stub/stub.1.rb +114 -0
- data/work/deprecated/stub/test_stub.rb +66 -0
- data/work/deprecated/test/case.rb +141 -0
- data/work/sandbox/assert.rb +100 -0
- data/work/sandbox/bug.rb +49 -0
- data/work/sandbox/build/announce.rb +213 -0
- data/work/sandbox/build/check.rb +109 -0
- data/work/sandbox/build/gem.rb +235 -0
- data/work/sandbox/build/make.rb +118 -0
- data/work/sandbox/build/manpage.rb +201 -0
- data/work/sandbox/build/notes.rb +214 -0
- data/work/sandbox/build/pack.rb +228 -0
- data/work/sandbox/build/rdoc.rb +289 -0
- data/work/sandbox/build/rubyforge.rb +91 -0
- data/work/sandbox/build/sign.rb +241 -0
- data/work/sandbox/build/stamp.rb +37 -0
- data/work/sandbox/build/stats.rb +154 -0
- data/work/sandbox/build/svn.rb +193 -0
- data/work/sandbox/build/test.rb +521 -0
- data/work/sandbox/design.rb +200 -0
- data/work/sandbox/iface_scanner.rb +102 -0
- data/work/sandbox/testunit/assertions/assert_has_keys.rb +38 -0
- data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +38 -0
- data/work/sandbox/testunit/unit.rb +104 -0
- data/work/sandbox/unitspec.rb +54 -0
- data/work/sandbox/x_isotest.rb +532 -0
- metadata +318 -93
- data/METADATA +0 -22
- data/NEWS +0 -8
- data/bin/rubybreak +0 -3
- data/demo/spec/demo_check.rb +0 -21
- data/demo/spec/demo_outline.rb +0 -25
- data/demo/test/demo_run.rb +0 -21
- data/doc/manual.html2 +0 -1416
- data/doc/rdoc/classes/Module.html +0 -165
- data/doc/rdoc/classes/Quarry/Design/Specification/Context.html +0 -174
- data/doc/rdoc/classes/Quarry/Design/Specification.html +0 -265
- data/doc/rdoc/classes/Quarry/Design.html +0 -170
- data/doc/rdoc/classes/Quarry/Mock/Object.html +0 -276
- data/doc/rdoc/files/MANIFEST.html +0 -630
- data/doc/rdoc/files/METADATA.html +0 -92
- data/doc/rdoc/files/NEWS.html +0 -99
- data/doc/rdoc/files/bin/rubybreak.html +0 -96
- data/doc/rdoc/files/bin/xact-ruby.html +0 -92
- data/doc/rdoc/files/lib/quarry/assert/must_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/assert/should_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/assertion_rb.html +0 -96
- data/doc/rdoc/files/lib/quarry/breakout_rb.html +0 -144
- data/doc/rdoc/files/lib/quarry/design/spec_rb.html +0 -100
- data/doc/rdoc/files/lib/quarry/document_rb.html +0 -92
- data/doc/rdoc/files/lib/quarry/methodprobe_rb.html +0 -111
- data/doc/rdoc/files/lib/quarry/mock/object_rb.html +0 -123
- data/doc/rdoc/files/lib/quarry/mockery_rb.html +0 -115
- data/doc/ri/Module/doc-i.yaml +0 -16
- data/doc/ri/Quarry/Design/Specification/cdesc-Specification.yaml +0 -44
- data/doc/ri/Quarry/Design/cdesc-Design.yaml +0 -22
- data/doc/ri/Quarry/Mock/Object/cdesc-Object.yaml +0 -52
- data/doc/ri/Quarry/Mock/Object/keys-c.yaml +0 -12
- data/doc/ri/Quarry/Mock/Object/spin-c.yaml +0 -12
- data/doc/ri/Quarry/Mockery-i.yaml +0 -12
- data/lib/quarry/assertion.rb +0 -95
- data/lib/quarry/breakout.rb +0 -45
- data/lib/quarry/design/spec.rb +0 -197
- data/lib/quarry/mock/object.rb +0 -169
- data/lib/quarry/mockery.rb +0 -85
data/doc/spec/stub.html
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
6
|
+
<meta name="generator" content="AsciiDoc 8.2.2" />
|
|
7
|
+
<style type="text/css">
|
|
8
|
+
/* Debug borders */
|
|
9
|
+
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
|
|
10
|
+
/*
|
|
11
|
+
border: 1px solid red;
|
|
12
|
+
*/
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
body {
|
|
16
|
+
margin: 1em 5% 1em 5%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
a {
|
|
20
|
+
color: blue;
|
|
21
|
+
text-decoration: underline;
|
|
22
|
+
}
|
|
23
|
+
a:visited {
|
|
24
|
+
color: fuchsia;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
em {
|
|
28
|
+
font-style: italic;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
strong {
|
|
32
|
+
font-weight: bold;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
tt {
|
|
36
|
+
color: navy;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
h1, h2, h3, h4, h5, h6 {
|
|
40
|
+
color: #527bbd;
|
|
41
|
+
font-family: sans-serif;
|
|
42
|
+
margin-top: 1.2em;
|
|
43
|
+
margin-bottom: 0.5em;
|
|
44
|
+
line-height: 1.3;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
h1 {
|
|
48
|
+
border-bottom: 2px solid silver;
|
|
49
|
+
}
|
|
50
|
+
h2 {
|
|
51
|
+
border-bottom: 2px solid silver;
|
|
52
|
+
padding-top: 0.5em;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
div.sectionbody {
|
|
56
|
+
font-family: serif;
|
|
57
|
+
margin-left: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
hr {
|
|
61
|
+
border: 1px solid silver;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
p {
|
|
65
|
+
margin-top: 0.5em;
|
|
66
|
+
margin-bottom: 0.5em;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
pre {
|
|
70
|
+
padding: 0;
|
|
71
|
+
margin: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
span#author {
|
|
75
|
+
color: #527bbd;
|
|
76
|
+
font-family: sans-serif;
|
|
77
|
+
font-weight: bold;
|
|
78
|
+
font-size: 1.1em;
|
|
79
|
+
}
|
|
80
|
+
span#email {
|
|
81
|
+
}
|
|
82
|
+
span#revision {
|
|
83
|
+
font-family: sans-serif;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
div#footer {
|
|
87
|
+
font-family: sans-serif;
|
|
88
|
+
font-size: small;
|
|
89
|
+
border-top: 2px solid silver;
|
|
90
|
+
padding-top: 0.5em;
|
|
91
|
+
margin-top: 4.0em;
|
|
92
|
+
}
|
|
93
|
+
div#footer-text {
|
|
94
|
+
float: left;
|
|
95
|
+
padding-bottom: 0.5em;
|
|
96
|
+
}
|
|
97
|
+
div#footer-badges {
|
|
98
|
+
float: right;
|
|
99
|
+
padding-bottom: 0.5em;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
div#preamble,
|
|
103
|
+
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
|
|
104
|
+
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
|
|
105
|
+
div.admonitionblock {
|
|
106
|
+
margin-right: 10%;
|
|
107
|
+
margin-top: 1.5em;
|
|
108
|
+
margin-bottom: 1.5em;
|
|
109
|
+
}
|
|
110
|
+
div.admonitionblock {
|
|
111
|
+
margin-top: 2.5em;
|
|
112
|
+
margin-bottom: 2.5em;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
div.content { /* Block element content. */
|
|
116
|
+
padding: 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Block element titles. */
|
|
120
|
+
div.title, caption.title {
|
|
121
|
+
font-family: sans-serif;
|
|
122
|
+
font-weight: bold;
|
|
123
|
+
text-align: left;
|
|
124
|
+
margin-top: 1.0em;
|
|
125
|
+
margin-bottom: 0.5em;
|
|
126
|
+
}
|
|
127
|
+
div.title + * {
|
|
128
|
+
margin-top: 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
td div.title:first-child {
|
|
132
|
+
margin-top: 0.0em;
|
|
133
|
+
}
|
|
134
|
+
div.content div.title:first-child {
|
|
135
|
+
margin-top: 0.0em;
|
|
136
|
+
}
|
|
137
|
+
div.content + div.title {
|
|
138
|
+
margin-top: 0.0em;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
div.sidebarblock > div.content {
|
|
142
|
+
background: #ffffee;
|
|
143
|
+
border: 1px solid silver;
|
|
144
|
+
padding: 0.5em;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
div.listingblock {
|
|
148
|
+
margin-right: 0%;
|
|
149
|
+
}
|
|
150
|
+
div.listingblock > div.content {
|
|
151
|
+
border: 1px solid silver;
|
|
152
|
+
background: #f4f4f4;
|
|
153
|
+
padding: 0.5em;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
div.quoteblock > div.content {
|
|
157
|
+
padding-left: 2.0em;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
div.attribution {
|
|
161
|
+
text-align: right;
|
|
162
|
+
}
|
|
163
|
+
div.verseblock + div.attribution {
|
|
164
|
+
text-align: left;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
div.admonitionblock .icon {
|
|
168
|
+
vertical-align: top;
|
|
169
|
+
font-size: 1.1em;
|
|
170
|
+
font-weight: bold;
|
|
171
|
+
text-decoration: underline;
|
|
172
|
+
color: #527bbd;
|
|
173
|
+
padding-right: 0.5em;
|
|
174
|
+
}
|
|
175
|
+
div.admonitionblock td.content {
|
|
176
|
+
padding-left: 0.5em;
|
|
177
|
+
border-left: 2px solid silver;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
div.exampleblock > div.content {
|
|
181
|
+
border-left: 2px solid silver;
|
|
182
|
+
padding: 0.5em;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
div.verseblock div.content {
|
|
186
|
+
white-space: pre;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
div.imageblock div.content { padding-left: 0; }
|
|
190
|
+
div.imageblock img { border: 1px solid silver; }
|
|
191
|
+
span.image img { border-style: none; }
|
|
192
|
+
|
|
193
|
+
dl {
|
|
194
|
+
margin-top: 0.8em;
|
|
195
|
+
margin-bottom: 0.8em;
|
|
196
|
+
}
|
|
197
|
+
dt {
|
|
198
|
+
margin-top: 0.5em;
|
|
199
|
+
margin-bottom: 0;
|
|
200
|
+
font-style: italic;
|
|
201
|
+
}
|
|
202
|
+
dd > *:first-child {
|
|
203
|
+
margin-top: 0;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
ul, ol {
|
|
207
|
+
list-style-position: outside;
|
|
208
|
+
}
|
|
209
|
+
ol.olist2 {
|
|
210
|
+
list-style-type: lower-alpha;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
div.tableblock > table {
|
|
214
|
+
border: 3px solid #527bbd;
|
|
215
|
+
}
|
|
216
|
+
thead {
|
|
217
|
+
font-family: sans-serif;
|
|
218
|
+
font-weight: bold;
|
|
219
|
+
}
|
|
220
|
+
tfoot {
|
|
221
|
+
font-weight: bold;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
div.hlist {
|
|
225
|
+
margin-top: 0.8em;
|
|
226
|
+
margin-bottom: 0.8em;
|
|
227
|
+
}
|
|
228
|
+
div.hlist td {
|
|
229
|
+
padding-bottom: 5px;
|
|
230
|
+
}
|
|
231
|
+
td.hlist1 {
|
|
232
|
+
vertical-align: top;
|
|
233
|
+
font-style: italic;
|
|
234
|
+
padding-right: 0.8em;
|
|
235
|
+
}
|
|
236
|
+
td.hlist2 {
|
|
237
|
+
vertical-align: top;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
@media print {
|
|
241
|
+
div#footer-badges { display: none; }
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
div#toctitle {
|
|
245
|
+
color: #527bbd;
|
|
246
|
+
font-family: sans-serif;
|
|
247
|
+
font-size: 1.1em;
|
|
248
|
+
font-weight: bold;
|
|
249
|
+
margin-top: 1.0em;
|
|
250
|
+
margin-bottom: 0.1em;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
|
|
254
|
+
margin-top: 0;
|
|
255
|
+
margin-bottom: 0;
|
|
256
|
+
}
|
|
257
|
+
div.toclevel2 {
|
|
258
|
+
margin-left: 2em;
|
|
259
|
+
font-size: 0.9em;
|
|
260
|
+
}
|
|
261
|
+
div.toclevel3 {
|
|
262
|
+
margin-left: 4em;
|
|
263
|
+
font-size: 0.9em;
|
|
264
|
+
}
|
|
265
|
+
div.toclevel4 {
|
|
266
|
+
margin-left: 6em;
|
|
267
|
+
font-size: 0.9em;
|
|
268
|
+
}
|
|
269
|
+
/* Workarounds for IE6's broken and incomplete CSS2. */
|
|
270
|
+
|
|
271
|
+
div.sidebar-content {
|
|
272
|
+
background: #ffffee;
|
|
273
|
+
border: 1px solid silver;
|
|
274
|
+
padding: 0.5em;
|
|
275
|
+
}
|
|
276
|
+
div.sidebar-title, div.image-title {
|
|
277
|
+
font-family: sans-serif;
|
|
278
|
+
font-weight: bold;
|
|
279
|
+
margin-top: 0.0em;
|
|
280
|
+
margin-bottom: 0.5em;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
div.listingblock div.content {
|
|
284
|
+
border: 1px solid silver;
|
|
285
|
+
background: #f4f4f4;
|
|
286
|
+
padding: 0.5em;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
div.quoteblock-content {
|
|
290
|
+
padding-left: 2.0em;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
div.exampleblock-content {
|
|
294
|
+
border-left: 2px solid silver;
|
|
295
|
+
padding-left: 0.5em;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* IE6 sets dynamically generated links as visited. */
|
|
299
|
+
div#toc a:visited { color: blue; }
|
|
300
|
+
</style>
|
|
301
|
+
<title>Quarry's Stubbing Facility</title>
|
|
302
|
+
</head>
|
|
303
|
+
<body>
|
|
304
|
+
<div id="header">
|
|
305
|
+
<h1>Quarry's Stubbing Facility</h1>
|
|
306
|
+
</div>
|
|
307
|
+
<div id="preamble">
|
|
308
|
+
<div class="sectionbody">
|
|
309
|
+
<p>Require stub.rb library.</p>
|
|
310
|
+
<div class="literalblock">
|
|
311
|
+
<div class="content">
|
|
312
|
+
<pre><tt>require 'quarry/stub/stub'</tt></pre>
|
|
313
|
+
</div></div>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
<h2>Delegation Approach</h2>
|
|
317
|
+
<div class="sectionbody">
|
|
318
|
+
<p>We will stub-out a simple string.</p>
|
|
319
|
+
<div class="literalblock">
|
|
320
|
+
<div class="content">
|
|
321
|
+
<pre><tt>obj = "hello"</tt></pre>
|
|
322
|
+
</div></div>
|
|
323
|
+
<p>We can create a reusable stub module.</p>
|
|
324
|
+
<div class="literalblock">
|
|
325
|
+
<div class="content">
|
|
326
|
+
<pre><tt>@stb = Quarry::Stub.new
|
|
327
|
+
@stb.upcase == "HeLLo"</tt></pre>
|
|
328
|
+
</div></div>
|
|
329
|
+
<p>Appy the stub module to the object we want to stub.</p>
|
|
330
|
+
<div class="literalblock">
|
|
331
|
+
<div class="content">
|
|
332
|
+
<pre><tt>alt = obj.stub(@stb)</tt></pre>
|
|
333
|
+
</div></div>
|
|
334
|
+
<p>And get teh newly stubbed output.</p>
|
|
335
|
+
<div class="literalblock">
|
|
336
|
+
<div class="content">
|
|
337
|
+
<pre><tt>alt.upcase.assert == "HeLLo"</tt></pre>
|
|
338
|
+
</div></div>
|
|
339
|
+
<p>Teh original is still intact.</p>
|
|
340
|
+
<div class="literalblock">
|
|
341
|
+
<div class="content">
|
|
342
|
+
<pre><tt>obj.upcase.assert == "HELLO"</tt></pre>
|
|
343
|
+
</div></div>
|
|
344
|
+
</div>
|
|
345
|
+
<h2>Singleton Approach</h2>
|
|
346
|
+
<div class="sectionbody">
|
|
347
|
+
<div class="listingblock">
|
|
348
|
+
<div class="title">Example: Printing (myApp.cpp)</div>
|
|
349
|
+
<div class="content">
|
|
350
|
+
<pre><tt> obj = "hi"
|
|
351
|
+
|
|
352
|
+
obj.extend(@stb)
|
|
353
|
+
|
|
354
|
+
@stb.upcase == "hI"
|
|
355
|
+
|
|
356
|
+
obj.upcase.assert == "hI"
|
|
357
|
+
|
|
358
|
+
obj.remove(@stb)
|
|
359
|
+
|
|
360
|
+
obj.upcase.assert == "HI"</tt></pre>
|
|
361
|
+
</div></div>
|
|
362
|
+
</div>
|
|
363
|
+
<h2>Quick Extend Stubs</h2>
|
|
364
|
+
<div class="sectionbody">
|
|
365
|
+
<div class="literalblock">
|
|
366
|
+
<div class="content">
|
|
367
|
+
<pre><tt>obj = "hey"</tt></pre>
|
|
368
|
+
</div></div>
|
|
369
|
+
<div class="literalblock">
|
|
370
|
+
<div class="content">
|
|
371
|
+
<pre><tt># implict obj.extend(obj.stub) here
|
|
372
|
+
obj.stub.upcase == "HeY"</tt></pre>
|
|
373
|
+
</div></div>
|
|
374
|
+
<div class="literalblock">
|
|
375
|
+
<div class="content">
|
|
376
|
+
<pre><tt>obj.upcase.assert == "HeY"</tt></pre>
|
|
377
|
+
</div></div>
|
|
378
|
+
<div class="literalblock">
|
|
379
|
+
<div class="content">
|
|
380
|
+
<pre><tt>obj.remove # imples obj.remove(obj.stub)</tt></pre>
|
|
381
|
+
</div></div>
|
|
382
|
+
<div class="literalblock">
|
|
383
|
+
<div class="content">
|
|
384
|
+
<pre><tt>obj.upcase.assert == "HEY"</tt></pre>
|
|
385
|
+
</div></div>
|
|
386
|
+
<p>QED.</p>
|
|
387
|
+
</div>
|
|
388
|
+
<div id="footer">
|
|
389
|
+
<div id="footer-text">
|
|
390
|
+
Last updated 25-Oct-2008 01:11:19 EDT
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
</body>
|
|
394
|
+
</html>
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Assertion is a special subclass of Exception used
|
|
2
|
+
# to raise assertion errors.
|
|
3
|
+
#
|
|
4
|
+
# Assertions are generally invoked via the #assert or #should
|
|
5
|
+
# functors. For instance to assert that 4 == 4 use:
|
|
6
|
+
#
|
|
7
|
+
# 4.assert == 4
|
|
8
|
+
#
|
|
9
|
+
# If the assertion does not hold true an Assertion exception
|
|
10
|
+
# will be raised.
|
|
11
|
+
#
|
|
12
|
+
# You can also create your own assertion "macros" simply by
|
|
13
|
+
# defining applicable methods resuing previous assertion methods.
|
|
14
|
+
#
|
|
15
|
+
# class Module
|
|
16
|
+
# def should_be_enumerable(module)
|
|
17
|
+
# should < Enumerable
|
|
18
|
+
# instance_methods.should.include?('each')
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# As fancy as assertion functors may seem, under the hood they
|
|
23
|
+
# translate into quite simple code. Consider this valid macro:
|
|
24
|
+
#
|
|
25
|
+
# def assert_fail_every_time
|
|
26
|
+
# raise Assertion, "this will fail every time"
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
# Not very useful, but completely valid.
|
|
30
|
+
#
|
|
31
|
+
# == Concerning Nomenclature
|
|
32
|
+
#
|
|
33
|
+
# Unfortunately there's a bit of rift in the naming scheme of
|
|
34
|
+
# assertion methods. With TDD the term 'assert' became the
|
|
35
|
+
# standard. However, with the advent of BDD, 'should' has
|
|
36
|
+
# become the dominant term.
|
|
37
|
+
#
|
|
38
|
+
# If I had my druthers I would probably have picked 'must'
|
|
39
|
+
# since it is short and carries the semantics of enforcement.
|
|
40
|
+
#
|
|
41
|
+
class Assertion < Exception
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# = Assertion::True
|
|
45
|
+
#
|
|
46
|
+
class Assertion::True
|
|
47
|
+
|
|
48
|
+
hide = instance_methods.reject { |m| m.to_s =~ /^__/ }
|
|
49
|
+
hide.each { |m| protected m }
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
def initialize(delegate)
|
|
55
|
+
@delegate = delegate
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# TODO: Not sure about the raises here.
|
|
59
|
+
def method_missing(sym, *a, &b)
|
|
60
|
+
#case sym
|
|
61
|
+
#when :raise?, :raises?
|
|
62
|
+
# begin
|
|
63
|
+
# @delegate.call #yield
|
|
64
|
+
# assert false, "Expected #{a[0]} to be raised"
|
|
65
|
+
# rescue Exception => e
|
|
66
|
+
# assert a[0] === e, "Expected #{a[0]} to be raised, but got #{e.class}"
|
|
67
|
+
# return e
|
|
68
|
+
# end
|
|
69
|
+
#else
|
|
70
|
+
assert(@delegate.__send__(sym, *a, &b), message(@delegate, sym, *a, &b))
|
|
71
|
+
#end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
def assert(assertion, msg="failed assertion (no message given)")
|
|
76
|
+
raise Assertion, msg unless assertion
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
def message(obj, sym, *a, &b)
|
|
81
|
+
#self.class.message(sym)[@delegate, *a] )
|
|
82
|
+
"#{obj.inspect} #{sym} #{a.collect{|x| x.inspect}.join(',')}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# TODO: Ultimately better messages would be nice.
|
|
86
|
+
|
|
87
|
+
#
|
|
88
|
+
def self.message(op,&block)
|
|
89
|
+
@message ||= {}
|
|
90
|
+
block ? @message[op.to_sym] = block : @message[op.to_sym]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
message(:==){ |*a| "Expected #{a[0].inspect} to be equal to #{a[1].inspect}" }
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# = Assertion::False
|
|
99
|
+
#
|
|
100
|
+
class Assertion::False < Assertion::True
|
|
101
|
+
message(:==){ |*a| "Expected #{a[0].inspect} not to be equal to #{a[1].inspect}" }
|
|
102
|
+
|
|
103
|
+
def assert(assertion, msg="failed assertion (no message given)")
|
|
104
|
+
raise Assertion, msg if assertion
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def message( obj, sym, *a, &b )
|
|
108
|
+
#self.class.message(sym)[@delegate, *a] )
|
|
109
|
+
"NOT #{obj.inspect} #{sym} #{a.collect{|x| x.inspect}.join(',')}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Object
|
|
115
|
+
# Assert a operational relationship.
|
|
116
|
+
#
|
|
117
|
+
# 4.assert == 3 #=> Assertion Error
|
|
118
|
+
#
|
|
119
|
+
def assert
|
|
120
|
+
return Assertion::True.new(self)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# The term 'should' has basically become the defacto
|
|
124
|
+
# standard for BDD assertions, so Quarry will support
|
|
125
|
+
# this nomenclature as well.
|
|
126
|
+
#
|
|
127
|
+
# AUTHOR'S NOTE: Left to my own choosing, I likely
|
|
128
|
+
# would have picked #must, myself, since it is shorter
|
|
129
|
+
# and more convincing. ;)
|
|
130
|
+
#
|
|
131
|
+
alias_method :should, :assert
|
|
132
|
+
|
|
133
|
+
# Assert not an operational relationship.
|
|
134
|
+
# Read it as "assert not".
|
|
135
|
+
#
|
|
136
|
+
# 4.assert! == 4 #=> Assertion Error
|
|
137
|
+
#
|
|
138
|
+
# AUHTOR'S NOTE: This method would not be necessary
|
|
139
|
+
# if Ruby would allow +!=+ to be define as a method,
|
|
140
|
+
# or at least +!+ as a unary method.
|
|
141
|
+
#
|
|
142
|
+
def assert!
|
|
143
|
+
return Assertion::False.new(self)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Same as #assert!.
|
|
147
|
+
#
|
|
148
|
+
# 4.refute == 4 #=> Assertion Error
|
|
149
|
+
#
|
|
150
|
+
alias_method :refute, :assert!
|
|
151
|
+
|
|
152
|
+
# See the note on #should.
|
|
153
|
+
#
|
|
154
|
+
alias_method :should_not, :refute
|
|
155
|
+
|
|
156
|
+
# Provides a way to assert that a procedure
|
|
157
|
+
# raises an exception.
|
|
158
|
+
#
|
|
159
|
+
# assert_raises(StandardError){ raise }
|
|
160
|
+
#
|
|
161
|
+
def assert_raises(exception, &block)
|
|
162
|
+
Assertion::True.new(
|
|
163
|
+
lambda do |*a|
|
|
164
|
+
begin
|
|
165
|
+
block.call(*a)
|
|
166
|
+
false
|
|
167
|
+
rescue exception
|
|
168
|
+
true
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
alias_method :should_raise, :assert_raises
|
|
175
|
+
|
|
176
|
+
# Provides a way to assert that a procedure
|
|
177
|
+
# does not raise an exception.
|
|
178
|
+
#
|
|
179
|
+
# refute_raises(StandardError){ raise }
|
|
180
|
+
#
|
|
181
|
+
def refute_raises(exception, &block)
|
|
182
|
+
Assertion::True.new(
|
|
183
|
+
begin
|
|
184
|
+
block.call(*a)
|
|
185
|
+
true
|
|
186
|
+
rescue exception
|
|
187
|
+
false
|
|
188
|
+
end
|
|
189
|
+
)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
alias_method :assert_raises!, :refute_raises
|
|
193
|
+
|
|
194
|
+
alias_method :should_not_raise, :refute_raises
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Copyright (c) 2008 Tiger Ops
|
|
198
|
+
|
data/lib/quarry/break.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Quarry
|
|
2
|
+
|
|
3
|
+
# = Exception Break and Edit
|
|
4
|
+
#
|
|
5
|
+
class Break
|
|
6
|
+
|
|
7
|
+
attr :exception
|
|
8
|
+
|
|
9
|
+
alias_method :error, :exception
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
def initialize(exception)
|
|
13
|
+
@exception = exception
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
def edit
|
|
18
|
+
file, line = *exception.backtrace[0].split(':')
|
|
19
|
+
line = line.to_i
|
|
20
|
+
|
|
21
|
+
puts exception
|
|
22
|
+
|
|
23
|
+
e = "# DEBUG " + exception.to_s
|
|
24
|
+
e.gsub!("`","'")
|
|
25
|
+
|
|
26
|
+
e = Regexp.escape(e)
|
|
27
|
+
|
|
28
|
+
case ed = ENV['EDITOR']
|
|
29
|
+
when 'vi', 'vim', 'gvim'
|
|
30
|
+
cmd = []
|
|
31
|
+
cmd << "#{ed} -e -s #{file} <<-EOS"
|
|
32
|
+
cmd << ":#{line}"
|
|
33
|
+
cmd << "a"
|
|
34
|
+
cmd << "#{e}"
|
|
35
|
+
cmd << "."
|
|
36
|
+
cmd << ":.,+#{e.size}"
|
|
37
|
+
cmd << "EOS"
|
|
38
|
+
cmd = cmd.join("\n")
|
|
39
|
+
when nil
|
|
40
|
+
puts "EDITOR environment variable not set"
|
|
41
|
+
else
|
|
42
|
+
puts "EDITOR environment variable not supported"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
system cmd
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end #class Break
|
|
49
|
+
|
|
50
|
+
end #module Quarry
|
|
51
|
+
|