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/ri/Module/doc-i.yaml
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::MethodDescription
|
|
2
|
-
aliases: []
|
|
3
|
-
|
|
4
|
-
block_params:
|
|
5
|
-
comment:
|
|
6
|
-
- !ruby/struct:SM::Flow::P
|
|
7
|
-
body: The idea here is to have dynamic docs.
|
|
8
|
-
- !ruby/struct:SM::Flow::VERB
|
|
9
|
-
body: " doc "X does such and such"\n doc "it is very powerful"\n class X\n doc "f does such and such"\n doc "it is where the power lies"\n def f\n ...\n end\n end\n"
|
|
10
|
-
- !ruby/struct:SM::Flow::P
|
|
11
|
-
body: One of the great things about doc, is that it can be used to "inherit" documentation.
|
|
12
|
-
full_name: Module#doc
|
|
13
|
-
is_singleton: false
|
|
14
|
-
name: doc
|
|
15
|
-
params: (str)
|
|
16
|
-
visibility: public
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::ClassDescription
|
|
2
|
-
attributes:
|
|
3
|
-
- !ruby/object:RI::Attribute
|
|
4
|
-
comment:
|
|
5
|
-
name: after
|
|
6
|
-
rw: R
|
|
7
|
-
- !ruby/object:RI::Attribute
|
|
8
|
-
comment:
|
|
9
|
-
name: before
|
|
10
|
-
rw: R
|
|
11
|
-
- !ruby/object:RI::Attribute
|
|
12
|
-
comment:
|
|
13
|
-
name: context
|
|
14
|
-
rw: R
|
|
15
|
-
- !ruby/object:RI::Attribute
|
|
16
|
-
comment:
|
|
17
|
-
name: description
|
|
18
|
-
rw: R
|
|
19
|
-
- !ruby/object:RI::Attribute
|
|
20
|
-
comment:
|
|
21
|
-
name: relation
|
|
22
|
-
rw: R
|
|
23
|
-
- !ruby/object:RI::Attribute
|
|
24
|
-
comment:
|
|
25
|
-
name: specification
|
|
26
|
-
rw: R
|
|
27
|
-
class_methods:
|
|
28
|
-
- !ruby/object:RI::MethodSummary
|
|
29
|
-
name: new
|
|
30
|
-
comment:
|
|
31
|
-
- !ruby/struct:SM::Flow::P
|
|
32
|
-
body: Design specification. Sepcification can contains sub-specifications.
|
|
33
|
-
constants: []
|
|
34
|
-
|
|
35
|
-
full_name: Quarry::Design::Specification
|
|
36
|
-
includes: []
|
|
37
|
-
|
|
38
|
-
instance_methods:
|
|
39
|
-
- !ruby/object:RI::MethodSummary
|
|
40
|
-
name: check
|
|
41
|
-
- !ruby/object:RI::MethodSummary
|
|
42
|
-
name: outline
|
|
43
|
-
name: Specification
|
|
44
|
-
superclass: Object
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::ClassDescription
|
|
2
|
-
attributes: []
|
|
3
|
-
|
|
4
|
-
class_methods:
|
|
5
|
-
- !ruby/object:RI::MethodSummary
|
|
6
|
-
name: check
|
|
7
|
-
- !ruby/object:RI::MethodSummary
|
|
8
|
-
name: outline
|
|
9
|
-
- !ruby/object:RI::MethodSummary
|
|
10
|
-
name: specification
|
|
11
|
-
- !ruby/object:RI::MethodSummary
|
|
12
|
-
name: specifications
|
|
13
|
-
comment:
|
|
14
|
-
constants: []
|
|
15
|
-
|
|
16
|
-
full_name: Quarry::Design
|
|
17
|
-
includes: []
|
|
18
|
-
|
|
19
|
-
instance_methods: []
|
|
20
|
-
|
|
21
|
-
name: Design
|
|
22
|
-
superclass:
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::ClassDescription
|
|
2
|
-
attributes:
|
|
3
|
-
- !ruby/object:RI::Attribute
|
|
4
|
-
comment:
|
|
5
|
-
name: mocked_class
|
|
6
|
-
rw: R
|
|
7
|
-
class_methods:
|
|
8
|
-
- !ruby/object:RI::MethodSummary
|
|
9
|
-
name: echo
|
|
10
|
-
- !ruby/object:RI::MethodSummary
|
|
11
|
-
name: keys
|
|
12
|
-
- !ruby/object:RI::MethodSummary
|
|
13
|
-
name: mock
|
|
14
|
-
- !ruby/object:RI::MethodSummary
|
|
15
|
-
name: mocks
|
|
16
|
-
- !ruby/object:RI::MethodSummary
|
|
17
|
-
name: spin
|
|
18
|
-
comment:
|
|
19
|
-
- !ruby/struct:SM::Flow::H
|
|
20
|
-
level: 1
|
|
21
|
-
text: Mock Object
|
|
22
|
-
- !ruby/struct:SM::Flow::P
|
|
23
|
-
body: A straightfoward mocking facility. Typically used in test cases. The Mock class offers a few constructors for quickly building mockups.
|
|
24
|
-
- !ruby/struct:SM::Flow::VERB
|
|
25
|
-
body: " mock - Returns a static reponse.\n echo - Returns the arguments passed-in.\n spin - Returns a rotation of responses.\n keys - Returns an index of responses.\n"
|
|
26
|
-
- !ruby/struct:SM::Flow::P
|
|
27
|
-
body: Mock classes can be built from sratch or partially framed against other classes.
|
|
28
|
-
- !ruby/struct:SM::Flow::H
|
|
29
|
-
level: 3
|
|
30
|
-
text: Usage
|
|
31
|
-
- !ruby/struct:SM::Flow::VERB
|
|
32
|
-
body: " class ContextMock < Mock\n mock :response_headers, {}\n spin :host_url, ['http://www.nitrohq.com','http://www.rubyforge.com']\n end\n\n ctx = ContextMock.new\n ctx.response_headers['location'] = url\n ctx.host_url #=> "http://www.nitrohq.com"\n ctx.host_url #=> "http://www.rubyforge.com"\n"
|
|
33
|
-
- !ruby/struct:SM::Flow::P
|
|
34
|
-
body: Or
|
|
35
|
-
- !ruby/struct:SM::Flow::VERB
|
|
36
|
-
body: " class ContextMock < Mock(Context)\n ...\n end\n"
|
|
37
|
-
constants:
|
|
38
|
-
- !ruby/object:RI::Constant
|
|
39
|
-
comment:
|
|
40
|
-
- !ruby/struct:SM::Flow::P
|
|
41
|
-
body: "Certain methods are not mocked:"
|
|
42
|
-
- !ruby/struct:SM::Flow::VERB
|
|
43
|
-
body: " inspect (tricky)\n class (delegated)\n kind_of? (delegated)\n is_a? (delegated)\n instance_of? (delegated)\n method (works as-is)\n send (works as-is)\n respond_to? (works as-is)\n hash (no way to mock)\n\n <em>id</em>, <em>call</em>, etc. (not meant to be mocked, ever!)\n"
|
|
44
|
-
name: UnmockedMethods
|
|
45
|
-
value: "%r{^( |inspect |kind_of\\?|is_a\\?|instance_of\\?|class |method|send|respond_to\\? |hash |__ )}x"
|
|
46
|
-
full_name: Quarry::Mock::Object
|
|
47
|
-
includes: []
|
|
48
|
-
|
|
49
|
-
instance_methods: []
|
|
50
|
-
|
|
51
|
-
name: Object
|
|
52
|
-
superclass: OpenStruct
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::MethodDescription
|
|
2
|
-
aliases: []
|
|
3
|
-
|
|
4
|
-
block_params:
|
|
5
|
-
comment:
|
|
6
|
-
- !ruby/struct:SM::Flow::P
|
|
7
|
-
body: Responds according to a mapping of input parameters.
|
|
8
|
-
full_name: Quarry::Mock::Object::keys
|
|
9
|
-
is_singleton: true
|
|
10
|
-
name: keys
|
|
11
|
-
params: ( sym, hsh )
|
|
12
|
-
visibility: public
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::MethodDescription
|
|
2
|
-
aliases: []
|
|
3
|
-
|
|
4
|
-
block_params:
|
|
5
|
-
comment:
|
|
6
|
-
- !ruby/struct:SM::Flow::P
|
|
7
|
-
body: Reponds with a rotation of reponses.
|
|
8
|
-
full_name: Quarry::Mock::Object::spin
|
|
9
|
-
is_singleton: true
|
|
10
|
-
name: spin
|
|
11
|
-
params: ( sym, arr )
|
|
12
|
-
visibility: public
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
--- !ruby/object:RI::MethodDescription
|
|
2
|
-
aliases: []
|
|
3
|
-
|
|
4
|
-
block_params:
|
|
5
|
-
comment:
|
|
6
|
-
- !ruby/struct:SM::Flow::P
|
|
7
|
-
body: Factory method for creating semi-functional mock object classes given the class which is to be mocked. It looks like a constant for purposes of syntactic sugar.
|
|
8
|
-
full_name: Quarry#Mockery
|
|
9
|
-
is_singleton: false
|
|
10
|
-
name: Mockery
|
|
11
|
-
params: ( realclass )
|
|
12
|
-
visibility: public
|
data/lib/quarry/assertion.rb
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2008 Tiger Ops
|
|
2
|
-
|
|
3
|
-
class Object
|
|
4
|
-
# Assert a operational relationship.
|
|
5
|
-
#
|
|
6
|
-
# 4.assert == 3 #=> Assertion Error
|
|
7
|
-
#
|
|
8
|
-
def assert
|
|
9
|
-
return Assertion::True.new(self)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Assert not an operational relationship.
|
|
13
|
-
#
|
|
14
|
-
# 4.assert! == 4 #=> Assertion Error
|
|
15
|
-
#
|
|
16
|
-
def assert!
|
|
17
|
-
return Assertion::False.new(self)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Assertion object is a special subclass of Exception,
|
|
22
|
-
# used to raise assertion errors.
|
|
23
|
-
#
|
|
24
|
-
class Assertion < Exception
|
|
25
|
-
|
|
26
|
-
#
|
|
27
|
-
class True
|
|
28
|
-
#
|
|
29
|
-
def self.message(msg,&block)
|
|
30
|
-
@messages ||= {}
|
|
31
|
-
if block
|
|
32
|
-
@messages[msg] = block
|
|
33
|
-
else
|
|
34
|
-
@messages[msg]
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
hide = instance_methods.reject { |m| m.to_s =~ /^__/ }
|
|
39
|
-
hide.each { |m| protected m }
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
#
|
|
44
|
-
def initialize(delegate)
|
|
45
|
-
@delegate = delegate
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
def assert(assertion, msg="failed assertion (no message given)")
|
|
50
|
-
raise Assertion, msg unless assertion
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
#
|
|
54
|
-
message(:==){ |*a| "Expected #{a[0].inspect} to be equal to #{a[1].inspect}" }
|
|
55
|
-
|
|
56
|
-
#
|
|
57
|
-
def method_missing( sym, *a, &b )
|
|
58
|
-
case sym
|
|
59
|
-
when :raise?, :raises?
|
|
60
|
-
begin
|
|
61
|
-
@delegate.call #yield
|
|
62
|
-
assert false, "Expected #{a[0]} to be raised"
|
|
63
|
-
rescue Exception => e
|
|
64
|
-
assert a[0] === e, "Expected #{a[0]} to be raised, but got #{e.class}"
|
|
65
|
-
return e
|
|
66
|
-
end
|
|
67
|
-
else
|
|
68
|
-
msg = message(@delegate, sym, *a, &b)
|
|
69
|
-
assert(@delegate.send(sym, *a, &b ), msg)
|
|
70
|
-
#assert( @delegate.send(sym, *a, &b ), self.class.message(sym)[@delegate, *a] )
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
#
|
|
75
|
-
def message( obj, sym, *a, &b )
|
|
76
|
-
"#{sym}\n< #{obj.inspect}\n---\n> #{a.collect{|x| x.inspect}.join(',')}"
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
#
|
|
82
|
-
class False < True
|
|
83
|
-
message(:==){ |*a| "Expected #{a[0].inspect} not to be equal to #{a[1].inspect}" }
|
|
84
|
-
|
|
85
|
-
def assert(assertion, msg="failed assertion (no message given)")
|
|
86
|
-
raise Assertion, msg if assertion
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def message( obj, sym, *a, &b )
|
|
90
|
-
"#{obj.inspect} should not #{sym} #{a.collect{|x| x.inspect}.join(',')}"
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
|
95
|
-
|
data/lib/quarry/breakout.rb
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
require 'facets/core/string/margin' # TODO get rid of.
|
|
2
|
-
|
|
3
|
-
def breakout( error )
|
|
4
|
-
|
|
5
|
-
file, line = *error.exception.backtrace[0].split(':')
|
|
6
|
-
line = line.to_i
|
|
7
|
-
|
|
8
|
-
puts error
|
|
9
|
-
|
|
10
|
-
e = "# DEBUG " + error.to_s
|
|
11
|
-
e.gsub!("`","'")
|
|
12
|
-
|
|
13
|
-
e = Regexp.escape(e)
|
|
14
|
-
|
|
15
|
-
case ed = ENV['EDITOR']
|
|
16
|
-
when 'vi', 'vim', 'gvim'
|
|
17
|
-
cmd = %[
|
|
18
|
-
|#{ed} -e -s #{file} <<-EOS
|
|
19
|
-
|:#{line}
|
|
20
|
-
|a
|
|
21
|
-
|#{e}
|
|
22
|
-
|.
|
|
23
|
-
|:.,+#{e.size}
|
|
24
|
-
|EOS
|
|
25
|
-
].margin
|
|
26
|
-
else
|
|
27
|
-
puts "EDITOR environment variable not set"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
system cmd
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# command-line mode
|
|
35
|
-
|
|
36
|
-
if __FILE__ == $0
|
|
37
|
-
|
|
38
|
-
begin
|
|
39
|
-
load $file = ARGV[0]
|
|
40
|
-
rescue Exception => e
|
|
41
|
-
error = breakout(e)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
|
data/lib/quarry/design/spec.rb
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
#require 'facet/kernel/within?'
|
|
2
|
-
require 'quarry/assertion'
|
|
3
|
-
|
|
4
|
-
module Quarry
|
|
5
|
-
module Design
|
|
6
|
-
|
|
7
|
-
class << self
|
|
8
|
-
def specifications
|
|
9
|
-
@specifications ||= []
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def specification(description, &specification)
|
|
13
|
-
specifications << Specification.new(nil, description, &specification)
|
|
14
|
-
end
|
|
15
|
-
alias_method :spec, :specification
|
|
16
|
-
|
|
17
|
-
# TODO: make output compatible with unit_diff ?
|
|
18
|
-
|
|
19
|
-
def check
|
|
20
|
-
specifications.each do |specification|
|
|
21
|
-
specification.check
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def outline
|
|
26
|
-
specifications.each do |specification|
|
|
27
|
-
specification.outline
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Design specification. Sepcification can contains sub-specifications.
|
|
33
|
-
#
|
|
34
|
-
class Specification
|
|
35
|
-
attr :relation
|
|
36
|
-
attr :description
|
|
37
|
-
attr :specification
|
|
38
|
-
attr :context
|
|
39
|
-
attr :before
|
|
40
|
-
attr :after
|
|
41
|
-
|
|
42
|
-
# New Specification
|
|
43
|
-
|
|
44
|
-
def initialize(relation, description, context=nil, &specification)
|
|
45
|
-
@relation = relation
|
|
46
|
-
@description = description
|
|
47
|
-
@specification = specification
|
|
48
|
-
@context = context
|
|
49
|
-
@before = context.before if context
|
|
50
|
-
@after = context.after if context
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Check Specification
|
|
54
|
-
|
|
55
|
-
def check(level=0)
|
|
56
|
-
padding = " " * 2 * level
|
|
57
|
-
|
|
58
|
-
clause = "#{relation} #{description}".strip
|
|
59
|
-
|
|
60
|
-
new_context = Context.new
|
|
61
|
-
new_context.instance_eval(&before) if before
|
|
62
|
-
begin
|
|
63
|
-
new_context.instance_eval(&specification)
|
|
64
|
-
puts ("=" * (level+1)) + " " + clause.gsub(/\b\w/){$&.upcase}
|
|
65
|
-
rescue Assertion => e
|
|
66
|
-
#puts padding + " (FAIL) [#{e.backtrace[2]}] " + clause
|
|
67
|
-
puts "* " + clause.gsub('_',' ') + " [#{e.backtrace[2]}]"
|
|
68
|
-
puts e if $VERBOSE
|
|
69
|
-
rescue Exception => e
|
|
70
|
-
raise e if $DEBUG
|
|
71
|
-
print padding
|
|
72
|
-
#puts padding + " (ERROR) [#{e.backtrace[2]}] " + clause
|
|
73
|
-
puts padding + " (ERROR) #{e}"
|
|
74
|
-
puts e.backtrace if $VERBOSE
|
|
75
|
-
ensure
|
|
76
|
-
new_context.instance_eval(&after) if after
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
new_context.specifications.each do |s|
|
|
80
|
-
s.check(level+1)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Outline Specification
|
|
85
|
-
|
|
86
|
-
def outline(level=0)
|
|
87
|
-
padding = (" " * 2 * level) + "- "
|
|
88
|
-
context = Context.new
|
|
89
|
-
begin
|
|
90
|
-
context.instance_eval(&specification)
|
|
91
|
-
rescue Assertion => e
|
|
92
|
-
#rescue Exception => e
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
str = ''
|
|
96
|
-
str << "#{relation} " if relation
|
|
97
|
-
str << "#{description}"
|
|
98
|
-
#str = str.strip #.gsub(/\b\w/){$&.upcase}
|
|
99
|
-
|
|
100
|
-
puts padding + str.strip
|
|
101
|
-
|
|
102
|
-
context.specifications.each do |s|
|
|
103
|
-
s.outline(level+1)
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# A context provides a "clean room" to build a specification.
|
|
108
|
-
|
|
109
|
-
class Context
|
|
110
|
-
|
|
111
|
-
def specifications
|
|
112
|
-
@specifications ||= []
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def before(&before)
|
|
116
|
-
before ? @before = before : before
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def after(&after)
|
|
120
|
-
after ? @after = after : after
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def method_missing(relation, *description, &specification)
|
|
124
|
-
if description.size > 1
|
|
125
|
-
super
|
|
126
|
-
else
|
|
127
|
-
specifications << Specification.new(relation, description.first, self, &specification)
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
at_exit { Quarry::Design.check unless $no_autocheck }
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
=begin demo
|
|
142
|
-
|
|
143
|
-
Quarry::Design.specification "Example Specification" do
|
|
144
|
-
|
|
145
|
-
context "demonstrate basic assertions" do
|
|
146
|
-
|
|
147
|
-
specify "fail if should is false" do
|
|
148
|
-
4.assert == 3
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
specify "fail if should_not is true" do
|
|
152
|
-
4.assert! == 4
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
specify "fail on should raise" do
|
|
156
|
-
lambda{raise ArgumentError}.assert.raise? SyntaxError
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
$no_autocheck = true
|
|
164
|
-
|
|
165
|
-
Quarry::Design.outline
|
|
166
|
-
|
|
167
|
-
=end
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if __FILE__ == $0
|
|
171
|
-
|
|
172
|
-
Quarry::Design.spec "Example Specification" do
|
|
173
|
-
|
|
174
|
-
demonstrate "basic assertions" do
|
|
175
|
-
|
|
176
|
-
that "4 == 3 fails" do
|
|
177
|
-
4.assert == 3
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
that "4 != 4 fails" do
|
|
181
|
-
4.assert! == 4
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
that "raising an ArgumentError does not raise a SyntaxError" do
|
|
185
|
-
lambda{raise ArgumentError}.assert.raise? SyntaxError
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
$no_autocheck = true
|
|
193
|
-
|
|
194
|
-
Quarry::Design.outline
|
|
195
|
-
|
|
196
|
-
end
|
|
197
|
-
|
data/lib/quarry/mock/object.rb
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
# = mock.rb
|
|
2
|
-
#
|
|
3
|
-
# == Copyright (c) 2005 Thomas Sawyer, Michael Granger
|
|
4
|
-
#
|
|
5
|
-
# Ruby License
|
|
6
|
-
#
|
|
7
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
|
8
|
-
# software under the same terms as Ruby.
|
|
9
|
-
#
|
|
10
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
11
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
12
|
-
# FOR A PARTICULAR PURPOSE.
|
|
13
|
-
#
|
|
14
|
-
# == Special Thanks
|
|
15
|
-
#
|
|
16
|
-
# Thanks goes to Michael Granger for Test::Unit::Mock on which
|
|
17
|
-
# this library is partially based.
|
|
18
|
-
#
|
|
19
|
-
# == Author(s)
|
|
20
|
-
#
|
|
21
|
-
# * Thomas Sawyer
|
|
22
|
-
# * Michael Granger
|
|
23
|
-
|
|
24
|
-
require 'ostruct'
|
|
25
|
-
|
|
26
|
-
module Quarry
|
|
27
|
-
|
|
28
|
-
module Mock
|
|
29
|
-
|
|
30
|
-
# = Mock Object
|
|
31
|
-
#
|
|
32
|
-
# A straightfoward mocking facility. Typically used in test cases.
|
|
33
|
-
# The Mock class offers a few constructors for quickly building
|
|
34
|
-
# mockups.
|
|
35
|
-
#
|
|
36
|
-
# mock - Returns a static reponse.
|
|
37
|
-
# echo - Returns the arguments passed-in.
|
|
38
|
-
# spin - Returns a rotation of responses.
|
|
39
|
-
# keys - Returns an index of responses.
|
|
40
|
-
#
|
|
41
|
-
# Mock classes can be built from sratch or partially framed
|
|
42
|
-
# against other classes.
|
|
43
|
-
#
|
|
44
|
-
# === Usage
|
|
45
|
-
#
|
|
46
|
-
# class ContextMock < Mock
|
|
47
|
-
# mock :response_headers, {}
|
|
48
|
-
# spin :host_url, ['http://www.nitrohq.com','http://www.rubyforge.com']
|
|
49
|
-
# end
|
|
50
|
-
#
|
|
51
|
-
# ctx = ContextMock.new
|
|
52
|
-
# ctx.response_headers['location'] = url
|
|
53
|
-
# ctx.host_url #=> "http://www.nitrohq.com"
|
|
54
|
-
# ctx.host_url #=> "http://www.rubyforge.com"
|
|
55
|
-
#
|
|
56
|
-
# Or
|
|
57
|
-
#
|
|
58
|
-
# class ContextMock < Mock(Context)
|
|
59
|
-
# ...
|
|
60
|
-
# end
|
|
61
|
-
#
|
|
62
|
-
class Object < OpenStruct
|
|
63
|
-
|
|
64
|
-
# include these?
|
|
65
|
-
#include Test::Unit::Assertions
|
|
66
|
-
|
|
67
|
-
# Certain methods are not mocked:
|
|
68
|
-
# inspect (tricky)
|
|
69
|
-
# class (delegated)
|
|
70
|
-
# kind_of? (delegated)
|
|
71
|
-
# is_a? (delegated)
|
|
72
|
-
# instance_of? (delegated)
|
|
73
|
-
# method (works as-is)
|
|
74
|
-
# send (works as-is)
|
|
75
|
-
# respond_to? (works as-is)
|
|
76
|
-
# hash (no way to mock)
|
|
77
|
-
#
|
|
78
|
-
# __id__, __call__, etc. (not meant to be mocked, ever!)
|
|
79
|
-
#
|
|
80
|
-
|
|
81
|
-
UnmockedMethods = %r{^(
|
|
82
|
-
|inspect
|
|
83
|
-
|kind_of\?|is_a\?|instance_of\?|class
|
|
84
|
-
|method|send|respond_to\?
|
|
85
|
-
|hash
|
|
86
|
-
|__
|
|
87
|
-
)}x
|
|
88
|
-
|
|
89
|
-
class << self
|
|
90
|
-
|
|
91
|
-
attr :mocked_class
|
|
92
|
-
|
|
93
|
-
def mocks
|
|
94
|
-
self.methods(false)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Mock a static repsonse.
|
|
98
|
-
def mock( sym, val )
|
|
99
|
-
define_method( sym ) { |*args| val }
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Responds with input.
|
|
103
|
-
def echo( sym )
|
|
104
|
-
define_method( sym ) { |*args| args }
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Reponds with a rotation of reponses.
|
|
108
|
-
def spin( sym, arr )
|
|
109
|
-
define_method( sym ) { |*args| arr.push(arr.shift) ; arr[-1] }
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Responds according to a mapping of input parameters.
|
|
113
|
-
def keys( sym, hsh )
|
|
114
|
-
define_method( sym ) { |*args| hsh[args] }
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Delegate methods: #class, instance_of?, kind_of?, and is_a?
|
|
120
|
-
|
|
121
|
-
alias :__class :class
|
|
122
|
-
|
|
123
|
-
def class # :nodoc:
|
|
124
|
-
return __class.mocked_class
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def instance_of?( klass ) # :nodoc:
|
|
128
|
-
self.class == klass
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def kind_of?( klass ) # :nodoc:
|
|
132
|
-
self.class <= klass
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
alias_method :is_a?, :kind_of?
|
|
136
|
-
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
# TODO
|
|
145
|
-
|
|
146
|
-
=begin #test
|
|
147
|
-
|
|
148
|
-
class MyMock < Mock::Object
|
|
149
|
-
mock :m, 10
|
|
150
|
-
echo :e
|
|
151
|
-
spin :s, [1,2,3]
|
|
152
|
-
keys :i, { [:foo] => 'Hello', [:boo] => 'Frog' }
|
|
153
|
-
|
|
154
|
-
def a(k) k+1 end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
my = MyMock.new
|
|
158
|
-
|
|
159
|
-
p my.m
|
|
160
|
-
p my.e('hi')
|
|
161
|
-
p my.s
|
|
162
|
-
p my.s
|
|
163
|
-
p my.s
|
|
164
|
-
p my.i(:foo)
|
|
165
|
-
p my.i(:boo)
|
|
166
|
-
p my.a(1)
|
|
167
|
-
|
|
168
|
-
=end
|
|
169
|
-
|