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/meta/created
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2006-12-16
|
data/meta/homepage
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
http://quarry.rubyforge.org
|
data/meta/requires
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
clio
|
data/meta/summary
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Ruby Development Libraries
|
data/spec/basic.rd
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
= Example of Ruby Quarry Specification
|
|
2
|
+
|
|
3
|
+
Notice this file is just a RDoc formatted text file.
|
|
4
|
+
It could just as well be a Markdown file, or nearly any
|
|
5
|
+
other markup format.
|
|
6
|
+
|
|
7
|
+
Okay. Lets try out some code.
|
|
8
|
+
|
|
9
|
+
(2 + 2).assert == 4
|
|
10
|
+
|
|
11
|
+
Now something that will fail:
|
|
12
|
+
|
|
13
|
+
(2 + 2).assert == 5
|
|
14
|
+
|
|
15
|
+
And some that will raise an error:
|
|
16
|
+
|
|
17
|
+
nobody_knows_method
|
|
18
|
+
|
|
19
|
+
QED.
|
|
20
|
+
|
data/spec/complex.rd
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
= Before and After in a Quarry Specification
|
|
2
|
+
|
|
3
|
+
Quarry supports before and after clauses in specifications through
|
|
4
|
+
the use of *BEFORE:* and *AFTER:* indicators. Before and after
|
|
5
|
+
clauses are executed at the beginning and at the end of each test
|
|
6
|
+
step.
|
|
7
|
+
|
|
8
|
+
BEFORE: We use a before clause if we want to setup some code at the
|
|
9
|
+
start of each step.
|
|
10
|
+
|
|
11
|
+
#puts "Starting step..."
|
|
12
|
+
|
|
13
|
+
AFTER: And an after clause to teardown objects after a step.
|
|
14
|
+
|
|
15
|
+
#puts "Finished!"
|
|
16
|
+
|
|
17
|
+
There can only be one before or after clause at a time. So if
|
|
18
|
+
we define a new BEFORE: or AFTER: section later in the specification,
|
|
19
|
+
it will replace the current clause in use.
|
|
20
|
+
|
|
21
|
+
Only use before and after claues when necessary --specifications
|
|
22
|
+
are typically more readible without them. In fact, some developers
|
|
23
|
+
make a policy of avoiding them altogether. YMMV.
|
|
24
|
+
|
|
25
|
+
Macros, and any other non-testable code, can be designated using the
|
|
26
|
+
*MACRO:* indicator. Because the context in which a specification
|
|
27
|
+
is run is a self-extended module, macros are just method definitions.
|
|
28
|
+
|
|
29
|
+
MACRO: Macro's contain code to execute but not tested.
|
|
30
|
+
|
|
31
|
+
def assert_integer(x)
|
|
32
|
+
x.assert.is_a? Integer
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Okay. Now lets try out some code.
|
|
36
|
+
|
|
37
|
+
(2 + 2).assert == 4
|
|
38
|
+
|
|
39
|
+
assert_integer(4)
|
|
40
|
+
|
|
41
|
+
Now something that will fail:
|
|
42
|
+
|
|
43
|
+
(2 + 2).assert == 5
|
|
44
|
+
|
|
45
|
+
And some that will raise an error:
|
|
46
|
+
|
|
47
|
+
nobody_knows_method
|
|
48
|
+
|
|
49
|
+
QED.
|
|
50
|
+
|
data/spec/mock.rd
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
= Quarry's Mocking Facility
|
|
2
|
+
|
|
3
|
+
Require mock.rb library.
|
|
4
|
+
|
|
5
|
+
require 'quarry/stub/mock'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
== Delegation Approach
|
|
9
|
+
|
|
10
|
+
obj = "hello"
|
|
11
|
+
|
|
12
|
+
@mck = Quarry::Mock.new
|
|
13
|
+
|
|
14
|
+
@mck.upcase == "HeLLo"
|
|
15
|
+
|
|
16
|
+
alt = obj.mock(@mck)
|
|
17
|
+
|
|
18
|
+
lambda{ alt.upcase }.assert_raises(Assertion)
|
|
19
|
+
|
|
20
|
+
obj.upcase.assert == "HELLO"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
== Singleton Approach
|
|
24
|
+
|
|
25
|
+
obj = "hi"
|
|
26
|
+
|
|
27
|
+
obj.extend(@mck)
|
|
28
|
+
|
|
29
|
+
@mck.upcase == "hI"
|
|
30
|
+
|
|
31
|
+
lambda{ obj.upcase }.assert_raises(Assertion)
|
|
32
|
+
|
|
33
|
+
obj.remove(@mck)
|
|
34
|
+
|
|
35
|
+
obj.upcase.assert == "HI"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
== Quick Extend Stubs
|
|
39
|
+
|
|
40
|
+
obj = "hey"
|
|
41
|
+
|
|
42
|
+
# implict obj.extend(obj.mock) here
|
|
43
|
+
obj.mock.upcase == "HeY"
|
|
44
|
+
|
|
45
|
+
lambda{ obj.upcase }.assert_raises(Assertion)
|
|
46
|
+
|
|
47
|
+
obj.remove # imples obj.remove(obj.stub)
|
|
48
|
+
|
|
49
|
+
obj.upcase.assert == "HEY"
|
|
50
|
+
|
|
51
|
+
QED.
|
|
52
|
+
|
|
53
|
+
|
data/spec/stub.rd
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
= Quarry's Stubbing Facility
|
|
2
|
+
|
|
3
|
+
Require stub.rb library.
|
|
4
|
+
|
|
5
|
+
require 'quarry/stub/stub'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
== Delegation Approach
|
|
9
|
+
|
|
10
|
+
We will stub-out a simple string.
|
|
11
|
+
|
|
12
|
+
obj = "hello"
|
|
13
|
+
|
|
14
|
+
We can create a reusable stub module.
|
|
15
|
+
|
|
16
|
+
@stb = Quarry::Stub.new
|
|
17
|
+
@stb.upcase == "HeLLo"
|
|
18
|
+
|
|
19
|
+
Appy the stub module to the object we want to stub.
|
|
20
|
+
|
|
21
|
+
alt = obj.stub(@stb)
|
|
22
|
+
|
|
23
|
+
And get teh newly stubbed output.
|
|
24
|
+
|
|
25
|
+
alt.upcase.assert == "HeLLo"
|
|
26
|
+
|
|
27
|
+
Teh original is still intact.
|
|
28
|
+
|
|
29
|
+
obj.upcase.assert == "HELLO"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
== Singleton Approach
|
|
33
|
+
|
|
34
|
+
obj = "hi"
|
|
35
|
+
|
|
36
|
+
obj.extend(@stb)
|
|
37
|
+
|
|
38
|
+
@stb.upcase == "hI"
|
|
39
|
+
|
|
40
|
+
obj.upcase.assert == "hI"
|
|
41
|
+
|
|
42
|
+
obj.remove(@stb)
|
|
43
|
+
|
|
44
|
+
obj.upcase.assert == "HI"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
== Quick Extend Stubs
|
|
48
|
+
|
|
49
|
+
obj = "hey"
|
|
50
|
+
|
|
51
|
+
# implict obj.extend(obj.stub) here
|
|
52
|
+
obj.stub.upcase == "HeY"
|
|
53
|
+
|
|
54
|
+
obj.upcase.assert == "HeY"
|
|
55
|
+
|
|
56
|
+
obj.remove # imples obj.remove(obj.stub)
|
|
57
|
+
|
|
58
|
+
obj.upcase.assert == "HEY"
|
|
59
|
+
|
|
60
|
+
QED.
|
|
61
|
+
|
|
File without changes
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
require 'facets/core/kernel/constant'
|
|
2
|
+
#require 'facets/more/ormsupport'
|
|
3
|
+
require 'facets/more/settings'
|
|
4
|
+
|
|
5
|
+
require 'nitro/template'
|
|
6
|
+
|
|
7
|
+
module Quarry
|
|
8
|
+
|
|
9
|
+
# A collection of helper methods.
|
|
10
|
+
|
|
11
|
+
class Fixtures
|
|
12
|
+
|
|
13
|
+
# The directory where the fixtures are located.
|
|
14
|
+
|
|
15
|
+
setting :root_dir, :default => 'test/fixture', :doc => 'The directory where the fixtures are located'
|
|
16
|
+
|
|
17
|
+
@fixtures = {}
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
|
|
21
|
+
def load(*classes)
|
|
22
|
+
for klass in classes
|
|
23
|
+
f = Fixture.new(klass).load
|
|
24
|
+
@fixtures[f.name] = f
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def [](klass)
|
|
29
|
+
@fixtures[klass]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def []=(klass, fixture)
|
|
33
|
+
@fixtures[klass] = fixture
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def method_missing(sym)
|
|
37
|
+
if f = @fixtures[sym.to_s]
|
|
38
|
+
return f
|
|
39
|
+
end
|
|
40
|
+
super
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Fixtures is a fancy word for ‘sample data’. Fixtures allow you
|
|
46
|
+
# to populate your database with predefined data. Fixtures are
|
|
47
|
+
# typically used during testing or when providing initial data
|
|
48
|
+
# (bootstrap data) for a live application.
|
|
49
|
+
#
|
|
50
|
+
# A Fixture is a collection (Hash) of objects.
|
|
51
|
+
|
|
52
|
+
class Fixture < Hash
|
|
53
|
+
|
|
54
|
+
# The name of this Fixture.
|
|
55
|
+
|
|
56
|
+
attr_accessor :name
|
|
57
|
+
|
|
58
|
+
# The class that the Fixtures refer to.
|
|
59
|
+
|
|
60
|
+
attr_accessor :klass
|
|
61
|
+
|
|
62
|
+
# Used to keep the order.
|
|
63
|
+
|
|
64
|
+
attr_accessor :objects
|
|
65
|
+
|
|
66
|
+
def initialize(klass, options = { } )
|
|
67
|
+
@klass = klass
|
|
68
|
+
@name = class_to_name(klass)
|
|
69
|
+
@objects = []
|
|
70
|
+
load(options[:root_dir] || options[:root] || Fixtures.root_dir)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def load(root_dir = Fixtures.root_dir)
|
|
74
|
+
raise("The fixture root directory '#{root_dir}' doesn't exits") unless File.exist?(root_dir)
|
|
75
|
+
|
|
76
|
+
if path = "#{root_dir}/#{@name}.yml" and File.exist?(path)
|
|
77
|
+
parse_yaml(path)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if path = "#{root_dir}/#{@name}.yaml" and File.exist?(path)
|
|
81
|
+
parse_yaml(path)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
if path = "#{root_dir}/#{@name}.csv" and File.exist?(path)
|
|
85
|
+
parse_csv(path)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
return self
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Parse a fixture file in YAML format.
|
|
92
|
+
|
|
93
|
+
def parse_yaml(path)
|
|
94
|
+
require 'yaml'
|
|
95
|
+
|
|
96
|
+
str = Nitro::Template.new.render(File.read(path))
|
|
97
|
+
|
|
98
|
+
if yaml = YAML::load(str)
|
|
99
|
+
for name, data in yaml
|
|
100
|
+
self[name] = instantiate(data)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# sort the objects.
|
|
105
|
+
|
|
106
|
+
str.scan(/^(\w*?):$/).each do |key|
|
|
107
|
+
@objects << self[key.to_s]
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Parse a fixture file in CSV format. Many RDBM systems and
|
|
112
|
+
# Spreadsheets can export to CVS, so this is a rather useful
|
|
113
|
+
# format.
|
|
114
|
+
|
|
115
|
+
def parse_csv(path)
|
|
116
|
+
require 'csv'
|
|
117
|
+
|
|
118
|
+
str = Nitro::Template.new.render(File.read(path))
|
|
119
|
+
|
|
120
|
+
reader = CSV::Reader.create(str)
|
|
121
|
+
header = reader.shift
|
|
122
|
+
|
|
123
|
+
reader.each_with_index do |row, i|
|
|
124
|
+
data = {}
|
|
125
|
+
row.each_with_index do |cell, j|
|
|
126
|
+
data[header[j].to_s.strip] = cell.to_s.strip
|
|
127
|
+
end
|
|
128
|
+
self["#{@name}_#{i+1}"] = obj = instantiate(data)
|
|
129
|
+
@objects << obj
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
private
|
|
134
|
+
|
|
135
|
+
# Instantiate an actual object from the Fixture data.
|
|
136
|
+
|
|
137
|
+
def instantiate(data)
|
|
138
|
+
obj = @klass.allocate
|
|
139
|
+
|
|
140
|
+
for key, value in data
|
|
141
|
+
obj.instance_variable_set("@#{key}", value)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
return obj
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def class_to_name(klass)
|
|
148
|
+
klass.to_s.demodulize.underscore
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# = TITLE:
|
|
2
|
+
#
|
|
3
|
+
# Utils
|
|
4
|
+
#
|
|
5
|
+
# = COPYING:
|
|
6
|
+
#
|
|
7
|
+
# Copyright (c) 2007 Tiger Ops
|
|
8
|
+
#
|
|
9
|
+
# This file is part of the Reap program.
|
|
10
|
+
#
|
|
11
|
+
# Reap is free software: you can redistribute it and/or modify
|
|
12
|
+
# it under the terms of the GNU General Public License as published by
|
|
13
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
14
|
+
# (at your option) any later version.
|
|
15
|
+
#
|
|
16
|
+
# Reap is distributed in the hope that it will be useful,
|
|
17
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
+
# GNU General Public License for more details.
|
|
20
|
+
#
|
|
21
|
+
# You should have received a copy of the GNU General Public License
|
|
22
|
+
# along with Reap. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
|
|
24
|
+
require 'yaml' # make it generally available
|
|
25
|
+
require 'rbconfig' # replace with facets/system?
|
|
26
|
+
|
|
27
|
+
require 'quarry/support/options'
|
|
28
|
+
require 'quarry/utils/fileutils'
|
|
29
|
+
require 'quarry/utils/shellutils'
|
|
30
|
+
require 'quarry/utils/netutils'
|
|
31
|
+
#require 'reap/tasksystem'
|
|
32
|
+
|
|
33
|
+
module Quarry
|
|
34
|
+
|
|
35
|
+
class Build
|
|
36
|
+
include ShellUtils
|
|
37
|
+
include FileUtils
|
|
38
|
+
include NetUtils
|
|
39
|
+
|
|
40
|
+
def initialize(*configs)
|
|
41
|
+
configs.each do |config|
|
|
42
|
+
next unless config
|
|
43
|
+
config.each do |key,value|
|
|
44
|
+
send("#{key}=", value) if respond_to?("#{key}=")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def initialize(options=nil)
|
|
50
|
+
options ||= {}
|
|
51
|
+
options.each do |k,v|
|
|
52
|
+
k = k.to_s.downcase
|
|
53
|
+
send("#{k}=", v) if respond_to?("#{k}=")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# General options.
|
|
58
|
+
|
|
59
|
+
attr_writer :dryrun, :trace, :force, :verbose
|
|
60
|
+
|
|
61
|
+
def dryrun? ; @dryrun ; end
|
|
62
|
+
def trace? ; @trace ; end
|
|
63
|
+
def force? ; @force ; end
|
|
64
|
+
def verbose? ; @verbose ; end
|
|
65
|
+
def debug? ; @debug ; end
|
|
66
|
+
|
|
67
|
+
alias_method :noharm=, :dryrun=
|
|
68
|
+
alias_method :noharm?, :dryrun?
|
|
69
|
+
|
|
70
|
+
def options
|
|
71
|
+
{
|
|
72
|
+
:dryrun => dryrun?,
|
|
73
|
+
:trace => trace?,
|
|
74
|
+
:force => force?,
|
|
75
|
+
:verbose => verbose?,
|
|
76
|
+
:debug => debug?
|
|
77
|
+
}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'quarry/assert'
|
|
2
|
+
|
|
3
|
+
module Quarry
|
|
4
|
+
|
|
5
|
+
# Quarry's Mocking facility.
|
|
6
|
+
#
|
|
7
|
+
# obj = "hello"
|
|
8
|
+
#
|
|
9
|
+
# obj.mock.upcase == "HeLLo"
|
|
10
|
+
#
|
|
11
|
+
# obj.upcase #=> "HeLLo"
|
|
12
|
+
#
|
|
13
|
+
# obj.mockless!
|
|
14
|
+
#
|
|
15
|
+
# obj.upcase #=> "HELLO"
|
|
16
|
+
#
|
|
17
|
+
class Mock < Module
|
|
18
|
+
attr :object
|
|
19
|
+
|
|
20
|
+
def initialize(object)
|
|
21
|
+
super()
|
|
22
|
+
@object = object
|
|
23
|
+
@table = {}
|
|
24
|
+
object.extend(self)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def __table__ ; @table ; end
|
|
28
|
+
|
|
29
|
+
def method_missing(meth, *args, &block)
|
|
30
|
+
table = @table
|
|
31
|
+
interface = [meth, args, block_given?]
|
|
32
|
+
|
|
33
|
+
table[interface] = nil
|
|
34
|
+
|
|
35
|
+
define_method(meth) do |*args|
|
|
36
|
+
result = super
|
|
37
|
+
result.assert == table[interface]
|
|
38
|
+
return result
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Setter.new(table, interface)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
class Setter
|
|
46
|
+
def initialize(table, interface)
|
|
47
|
+
@table = table
|
|
48
|
+
@interface = interface
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def ==(result)
|
|
52
|
+
@table[@interface] = result
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
class ::Object
|
|
60
|
+
|
|
61
|
+
def mock
|
|
62
|
+
@_mock ||= Mock.new(self)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def mockless!
|
|
66
|
+
mock.__table__.each do |interface, result|
|
|
67
|
+
meth = interface[0]
|
|
68
|
+
mock.module_eval do
|
|
69
|
+
remove_method(meth)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Quarry
|
|
2
|
+
|
|
3
|
+
# = Overlay
|
|
4
|
+
#
|
|
5
|
+
# The idea of the Overlay is to proved a convenient way to
|
|
6
|
+
# create test stubs. You can take an original class and
|
|
7
|
+
# turn features on and off at your leasure, substituting
|
|
8
|
+
# in your choice of code piece meal.
|
|
9
|
+
#
|
|
10
|
+
# class X
|
|
11
|
+
# def a; 1; end
|
|
12
|
+
# def b; a + 1; end
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# XO = Quarry::Overlay.new do
|
|
16
|
+
# def_over(:a) do
|
|
17
|
+
# 2
|
|
18
|
+
# end
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# x = X.new
|
|
22
|
+
# p x.a #=> 1
|
|
23
|
+
#
|
|
24
|
+
# XO.append_features(X)
|
|
25
|
+
# p x.a #=> 2
|
|
26
|
+
#
|
|
27
|
+
# XO.remove_features(X)
|
|
28
|
+
# p x.a #=> 1
|
|
29
|
+
#
|
|
30
|
+
class Overlay
|
|
31
|
+
|
|
32
|
+
def initialize(&block)
|
|
33
|
+
@over = {}
|
|
34
|
+
@cache = Hash.new{ |h,k| h[k]={} }
|
|
35
|
+
instance_eval(&block) if block_given?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def define_method(methname, &block)
|
|
39
|
+
@over[methname] = block
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def append_features(base)
|
|
43
|
+
@over.each do |name, block|
|
|
44
|
+
next if base.instance_methods(true).include?("#{name}:#{base.__id__}:super")
|
|
45
|
+
if m = base.instance_methods(true).include?(name.to_s)
|
|
46
|
+
base.__send__(:alias_method, "#{name}:#{base.__id__}:super", name)
|
|
47
|
+
base.__send__(:define_method, name, &block)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def remove_features(base)
|
|
53
|
+
@over.each do |name, block|
|
|
54
|
+
next unless base.instance_methods(true).include?("#{name}:#{base.__id__}:super")
|
|
55
|
+
if m = base.instance_method("#{name}:#{base.__id__}:super")
|
|
56
|
+
base.__send__(:alias_method, name, "#{name}:#{base.__id__}:super")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|