quarry 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|