quarry 0.4.0 → 0.5.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 +22 -1
- data/MANIFEST +30 -339
- data/RELEASE +2 -4
- data/VERSION +1 -1
- data/bin/quarry +14 -10
- data/bin/quarry-doc +2 -2
- data/lib/quarry/assertion.rb +27 -0
- data/lib/quarry/{spec/config.rb → config.rb} +0 -0
- data/lib/quarry/document/template.rhtml +239 -0
- data/lib/quarry/document.rb +126 -0
- data/lib/quarry/expectation.rb +60 -0
- data/lib/quarry/extract.rb +2 -0
- data/lib/quarry/grammar/assert.rb +48 -0
- data/lib/quarry/grammar/expect.rb +114 -0
- data/lib/quarry/grammar/legacy/assert.rb +280 -0
- data/lib/quarry/grammar/should.rb +50 -0
- data/lib/quarry/grammar.rb +4 -0
- data/lib/quarry/{spec → markup}/step.rb +4 -3
- data/lib/quarry/markup.rb +70 -0
- data/lib/quarry/{stub/mock.rb → mock.rb} +1 -1
- data/lib/quarry/{loadmonitor.rb → monitor.rb} +0 -0
- data/lib/quarry/{stub/probe.rb → probe.rb} +8 -35
- data/lib/quarry/reporter/dotprogress.rb +62 -0
- data/lib/quarry/reporter/summary.rb +70 -0
- data/lib/quarry/reporter/verbatim.rb +82 -0
- data/lib/quarry/reporter.rb +70 -0
- data/lib/quarry/{spec → runner}/context.rb +7 -2
- data/lib/quarry/runner.rb +123 -0
- data/lib/quarry/{stub/stub.rb → stub.rb} +1 -1
- data/lib/quarry.rb +10 -0
- data/spec/basic.rd +0 -2
- data/spec/complex.rd +0 -2
- data/spec/mock.rd +20 -26
- data/spec/stub.rd +8 -12
- metadata +48 -361
- data/bin/ruby-break +0 -10
- 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 +0 -1
- data/doc/assets/jquery/jquery.tabs.js +0 -1
- data/doc/assets/rdoc_ad.html +0 -12
- data/doc/assets/styles/index.css +0 -138
- data/doc/guide/stubs.md +0 -125
- data/doc/index.html +0 -285
- data/doc/log/bstats/stats.html +0 -39
- data/doc/log/notes.xml +0 -32
- data/doc/log/stats.html +0 -25
- data/doc/log/stats.log +0 -14
- data/doc/log/syntax.log +0 -0
- data/doc/rdoc/classes/Assertion/False.html +0 -177
- data/doc/rdoc/classes/Assertion/True.html +0 -152
- data/doc/rdoc/classes/Assertion.html +0 -171
- data/doc/rdoc/classes/Kernel.html +0 -105
- data/doc/rdoc/classes/Method.html +0 -168
- data/doc/rdoc/classes/Object.html +0 -507
- data/doc/rdoc/classes/Quarry/Break.html +0 -231
- data/doc/rdoc/classes/Quarry/Command.html +0 -443
- data/doc/rdoc/classes/Quarry/Extract.html +0 -215
- data/doc/rdoc/classes/Quarry/MethodProbe.html +0 -325
- data/doc/rdoc/classes/Quarry/Mock/Delegator.html +0 -179
- data/doc/rdoc/classes/Quarry/Mock/Setter.html +0 -175
- data/doc/rdoc/classes/Quarry/Mock.html +0 -233
- data/doc/rdoc/classes/Quarry/Spec/Comment.html +0 -237
- data/doc/rdoc/classes/Quarry/Spec/Config.html +0 -257
- data/doc/rdoc/classes/Quarry/Spec/Context.html +0 -154
- data/doc/rdoc/classes/Quarry/Spec/Document.html +0 -382
- data/doc/rdoc/classes/Quarry/Spec/Header.html +0 -195
- data/doc/rdoc/classes/Quarry/Spec/Macro.html +0 -166
- data/doc/rdoc/classes/Quarry/Spec/Markup.html +0 -279
- data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +0 -234
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +0 -294
- data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +0 -311
- data/doc/rdoc/classes/Quarry/Spec/Runner.html +0 -352
- data/doc/rdoc/classes/Quarry/Spec/Step.html +0 -190
- data/doc/rdoc/classes/Quarry/Spec/Template.html +0 -205
- data/doc/rdoc/classes/Quarry/Stub/Delegator.html +0 -179
- data/doc/rdoc/classes/Quarry/Stub/Setter.html +0 -175
- data/doc/rdoc/classes/Quarry/Stub.html +0 -224
- data/doc/rdoc/classes/Quarry.html +0 -176
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/CHANGES.html +0 -150
- data/doc/rdoc/files/COPYING.html +0 -468
- data/doc/rdoc/files/README.html +0 -195
- data/doc/rdoc/files/RELEASE.html +0 -122
- data/doc/rdoc/files/VERSION.html +0 -107
- data/doc/rdoc/files/bin/quarry-doc.html +0 -109
- data/doc/rdoc/files/bin/quarry.html +0 -109
- data/doc/rdoc/files/bin/ruby-break.html +0 -108
- data/doc/rdoc/files/bin/ruby-xacto.html +0 -101
- data/doc/rdoc/files/lib/quarry/assert_rb.html +0 -155
- data/doc/rdoc/files/lib/quarry/break_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/extract_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/config_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/context_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/document_rb.html +0 -111
- data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +0 -108
- data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +0 -109
- data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +0 -109
- data/doc/rdoc/files/lib/quarry/spec/step_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +0 -228
- data/doc/rdoc/files/lib/quarry/spec_rb.html +0 -113
- data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +0 -101
- data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +0 -122
- data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +0 -118
- data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +0 -101
- data/doc/rdoc/fr_class_index.html +0 -56
- data/doc/rdoc/fr_file_index.html +0 -55
- data/doc/rdoc/fr_method_index.html +0 -117
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/doc/ri/Assertion/False/assert-i.yaml +0 -10
- data/doc/ri/Assertion/False/cdesc-False.yaml +0 -21
- data/doc/ri/Assertion/False/message-i.yaml +0 -10
- data/doc/ri/Assertion/True/assert-i.yaml +0 -11
- data/doc/ri/Assertion/True/cdesc-True.yaml +0 -26
- data/doc/ri/Assertion/True/message-c.yaml +0 -11
- data/doc/ri/Assertion/True/message-i.yaml +0 -11
- data/doc/ri/Assertion/True/method_missing-i.yaml +0 -12
- data/doc/ri/Assertion/True/new-c.yaml +0 -11
- data/doc/ri/Assertion/cdesc-Assertion.yaml +0 -40
- data/doc/ri/Kernel/cdesc-Kernel.yaml +0 -15
- data/doc/ri/Method/cdesc-Method.yaml +0 -18
- data/doc/ri/Method/migration-i.yaml +0 -12
- data/doc/ri/Method/signature-i.yaml +0 -12
- data/doc/ri/Object/assert%21-i.yaml +0 -17
- data/doc/ri/Object/assert-i.yaml +0 -15
- data/doc/ri/Object/assert_raises%21-i.yaml +0 -12
- data/doc/ri/Object/assert_raises-i.yaml +0 -15
- data/doc/ri/Object/cdesc-Object.yaml +0 -42
- data/doc/ri/Object/mock-i.yaml +0 -12
- data/doc/ri/Object/refute-i.yaml +0 -13
- data/doc/ri/Object/refute_raises-i.yaml +0 -17
- data/doc/ri/Object/remove-i.yaml +0 -12
- data/doc/ri/Object/should-i.yaml +0 -12
- data/doc/ri/Object/should_not-i.yaml +0 -12
- data/doc/ri/Object/should_not_raise-i.yaml +0 -12
- data/doc/ri/Object/should_raise-i.yaml +0 -12
- data/doc/ri/Object/stub-i.yaml +0 -12
- data/doc/ri/Quarry/Break/cdesc-Break.yaml +0 -23
- data/doc/ri/Quarry/Break/edit-i.yaml +0 -11
- data/doc/ri/Quarry/Break/new-c.yaml +0 -11
- data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +0 -26
- data/doc/ri/Quarry/Extract/create_test-i.yaml +0 -12
- data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +0 -12
- data/doc/ri/Quarry/Extract/test_extract-i.yaml +0 -18
- data/doc/ri/Quarry/MethodProbe/cdesc-MethodProbe.yaml +0 -46
- data/doc/ri/Quarry/MethodProbe/duckcall-c.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/initialize_copy-i.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/MethodProbe/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +0 -20
- data/doc/ri/Quarry/Mock/Delegator/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/Mock/Delegator/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/Setter/%3d%3d-i.yaml +0 -10
- data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +0 -18
- data/doc/ri/Quarry/Mock/Setter/new-c.yaml +0 -10
- data/doc/ri/Quarry/Mock/__table__-i.yaml +0 -11
- data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +0 -25
- data/doc/ri/Quarry/Mock/method_missing-i.yaml +0 -12
- data/doc/ri/Quarry/Mock/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +0 -33
- data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Comment/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Comment/type-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/after-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/before-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Config/cdesc-Config.yaml +0 -26
- data/doc/ri/Quarry/Spec/Config/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +0 -21
- data/doc/ri/Quarry/Spec/Context/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +0 -76
- data/doc/ri/Quarry/Spec/Document/generate-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/new-c.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Document/save-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Document/template-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +0 -30
- data/doc/ri/Quarry/Spec/Header/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +0 -22
- data/doc/ri/Quarry/Spec/Macro/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +0 -31
- data/doc/ri/Quarry/Spec/Markup/description-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/new-c.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +0 -11
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +0 -21
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_intro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +0 -16
- data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +0 -31
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Summary/report_pass-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +0 -29
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +0 -16
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +0 -20
- data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +0 -47
- data/doc/ri/Quarry/Spec/Runner/check-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/new-c.yaml +0 -12
- data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +0 -12
- data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +0 -30
- data/doc/ri/Quarry/Spec/Step/new-c.yaml +0 -10
- data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +0 -31
- data/doc/ri/Quarry/Spec/Template/new-c.yaml +0 -11
- data/doc/ri/Quarry/Spec/Template/parse_template-i.yaml +0 -10
- data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +0 -15
- data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +0 -20
- data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +0 -10
- data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +0 -10
- data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +0 -10
- data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +0 -18
- data/doc/ri/Quarry/Stub/Setter/new-c.yaml +0 -10
- data/doc/ri/Quarry/Stub/__table__-i.yaml +0 -11
- data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +0 -23
- data/doc/ri/Quarry/Stub/method_missing-i.yaml +0 -11
- data/doc/ri/Quarry/Stub/new-c.yaml +0 -10
- data/doc/ri/Quarry/cdesc-Quarry.yaml +0 -16
- data/doc/ri/created.rid +0 -1
- data/doc/spec/stub.html +0 -394
- data/lib/quarry/assert.rb +0 -198
- data/lib/quarry/break.rb +0 -51
- data/lib/quarry/spec/document.rb +0 -130
- data/lib/quarry/spec/markup.rb +0 -85
- data/lib/quarry/spec/reporter/dotprogress.rb +0 -66
- data/lib/quarry/spec/reporter/summary.rb +0 -74
- data/lib/quarry/spec/reporter/verbatim.rb +0 -87
- data/lib/quarry/spec/reporter.rb +0 -74
- data/lib/quarry/spec/runner.rb +0 -127
- data/lib/quarry/spec/template.rhtml +0 -116
- data/lib/quarry/spec.rb +0 -7
- data/lib/quarry/stub/spec.txt +0 -113
- data/work/consider/document.rb +0 -35
- data/work/consider/fixture.rb +0 -153
- data/work/deprecated/assert/must.rb +0 -9
- data/work/deprecated/assert/should.rb +0 -9
- data/work/deprecated/build.rb +0 -82
- data/work/deprecated/mock/file.rb +0 -11
- data/work/deprecated/mock/mock.0.rb +0 -77
- data/work/deprecated/overlay.rb +0 -64
- data/work/deprecated/spec.rb +0 -195
- data/work/deprecated/stub/stub.0.rb +0 -180
- data/work/deprecated/stub/stub.1.rb +0 -114
- data/work/deprecated/stub/test_stub.rb +0 -66
- data/work/deprecated/test/case.rb +0 -141
- data/work/sandbox/assert.rb +0 -100
- data/work/sandbox/bug.rb +0 -49
- data/work/sandbox/build/announce.rb +0 -213
- data/work/sandbox/build/check.rb +0 -109
- data/work/sandbox/build/gem.rb +0 -235
- data/work/sandbox/build/make.rb +0 -118
- data/work/sandbox/build/manpage.rb +0 -201
- data/work/sandbox/build/notes.rb +0 -214
- data/work/sandbox/build/pack.rb +0 -228
- data/work/sandbox/build/rdoc.rb +0 -289
- data/work/sandbox/build/rubyforge.rb +0 -91
- data/work/sandbox/build/sign.rb +0 -241
- data/work/sandbox/build/stamp.rb +0 -37
- data/work/sandbox/build/stats.rb +0 -154
- data/work/sandbox/build/svn.rb +0 -193
- data/work/sandbox/build/test.rb +0 -521
- data/work/sandbox/design.rb +0 -200
- data/work/sandbox/iface_scanner.rb +0 -102
- data/work/sandbox/testunit/assertions/assert_has_keys.rb +0 -38
- data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +0 -38
- data/work/sandbox/testunit/unit.rb +0 -104
- data/work/sandbox/unitspec.rb +0 -54
- data/work/sandbox/x_isotest.rb +0 -532
data/work/sandbox/build/test.rb
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
require 'quarry/build'
|
|
2
|
-
|
|
3
|
-
require 'facets/hash/rekey'
|
|
4
|
-
require 'facets/string/tabs'
|
|
5
|
-
require 'facets/progressbar'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
module Quarry
|
|
9
|
-
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
class Test < Build
|
|
13
|
-
|
|
14
|
-
attr_accessor :live
|
|
15
|
-
attr_accessor :libpath
|
|
16
|
-
attr_accessor :tests
|
|
17
|
-
attr_accessor :requires
|
|
18
|
-
|
|
19
|
-
def defaults
|
|
20
|
-
@libpath = "lib"
|
|
21
|
-
@tests = 'test/**/test_*.rb'
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def loadpath
|
|
25
|
-
@loadpath ||= ["lib"]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_files
|
|
29
|
-
Dir.glob(tests)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Basic unit test run.
|
|
33
|
-
|
|
34
|
-
def unit_test(options)
|
|
35
|
-
options = TestOptions.new(configuration['test'], options)
|
|
36
|
-
|
|
37
|
-
live = options.live
|
|
38
|
-
libpath = options.libpath
|
|
39
|
-
|
|
40
|
-
unless live
|
|
41
|
-
libpath.each do |lp|
|
|
42
|
-
$LOAD_PATH.unshift(File.expand_path(lp))
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
if find = argv[0]
|
|
47
|
-
unless file?(find)
|
|
48
|
-
find = File.join(find, '**', 'test_*.rb')
|
|
49
|
-
end
|
|
50
|
-
else
|
|
51
|
-
find = 'test/**/test_*.rb'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
Dir.glob(find).each do |file|
|
|
55
|
-
next if dir?(file)
|
|
56
|
-
load file
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
#alias_method :call, :run
|
|
61
|
-
|
|
62
|
-
# Run unit-tests. Each test is run in a separate interpretor
|
|
63
|
-
# to prevent script clash. This makes for a more robust test
|
|
64
|
-
# facility and prevents potential conflicts between test scripts.
|
|
65
|
-
#
|
|
66
|
-
# tests Test files (eg. test/tc_**/*.rb) [test/**/*]
|
|
67
|
-
# libs Directories to include in load path.
|
|
68
|
-
# ('./lib' is always included)
|
|
69
|
-
# live Deactive use of local libs and test against install.
|
|
70
|
-
# reqs List of files to require prior to running tests.
|
|
71
|
-
# extract Extract embedded tests first? [false]
|
|
72
|
-
#
|
|
73
|
-
# To isolate tests this tool marshals test results across a
|
|
74
|
-
# stdout->stdin shell pipe. This prevents interfence of one
|
|
75
|
-
# script's tests on another. But consequently it is not always
|
|
76
|
-
# possible to send debug info to stdout in the tests themselves
|
|
77
|
-
# (eg. #p and #puts).
|
|
78
|
-
|
|
79
|
-
def solo #(config)
|
|
80
|
-
require 'test/unit/ui/testrunnermediator' #require 'test/unit'
|
|
81
|
-
::Test::Unit.run = true # Don't autorun tests!
|
|
82
|
-
|
|
83
|
-
#tests = config['files'] || 'test/unit/**/test_*.rb'
|
|
84
|
-
#libs = libpath #config['libpath']
|
|
85
|
-
reqs = requires #config['require']
|
|
86
|
-
#live = config['live']
|
|
87
|
-
#extract = config['extract']
|
|
88
|
-
|
|
89
|
-
tests = [ tests() ].flatten
|
|
90
|
-
libs = [ libpath() ].flatten
|
|
91
|
-
|
|
92
|
-
#files = [ @files ].flatten
|
|
93
|
-
#extract_tests if extract
|
|
94
|
-
|
|
95
|
-
results = TestResults.new #(style)
|
|
96
|
-
|
|
97
|
-
# get test files
|
|
98
|
-
test_libs = libs.join(':')
|
|
99
|
-
test_files = Dir.multiglob( *tests )
|
|
100
|
-
if test_files.empty?
|
|
101
|
-
puts "Tests [NONE]"
|
|
102
|
-
return
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# run tests
|
|
106
|
-
|
|
107
|
-
if trace?
|
|
108
|
-
pbar = nil
|
|
109
|
-
size = test_files.collect{|f| f.size}.max + 5
|
|
110
|
-
dots = '.' * size
|
|
111
|
-
else
|
|
112
|
-
pbar = Console::ProgressBar.new( 'Testing', test_files.size )
|
|
113
|
-
pbar.inc
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
test_files.each do |test_file|
|
|
117
|
-
pbar.inc if pbar
|
|
118
|
-
if ! File.file?(test_file)
|
|
119
|
-
next #r = nil
|
|
120
|
-
else
|
|
121
|
-
unless pbar
|
|
122
|
-
print test_file + dots[test_file.size..-1]
|
|
123
|
-
$stdout.flush
|
|
124
|
-
end
|
|
125
|
-
r = fork_test( test_file, :libs=>libs, :reqs=>reqs, :live=>live )
|
|
126
|
-
unless pbar
|
|
127
|
-
puts r.passed? ? "[PASS]" : "[FAIL]"
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
results << r
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
pbar.finish if pbar
|
|
134
|
-
|
|
135
|
-
# display results
|
|
136
|
-
puts results
|
|
137
|
-
|
|
138
|
-
fails, errrs = results.failure_count, results.error_count
|
|
139
|
-
#CHECKLIST << :test if fails > 0
|
|
140
|
-
#CHECKLIST << :test if errrs > 0
|
|
141
|
-
return (fails + errrs > 0)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# run cross comparison tests
|
|
145
|
-
#
|
|
146
|
-
# This tool runs unit tests in pairs to make
|
|
147
|
-
# sure there is cross library compatibility.
|
|
148
|
-
#
|
|
149
|
-
# Run unit-tests. Each test is run in a separate interpretor
|
|
150
|
-
# to prevent script clash. This makes for a more robust test
|
|
151
|
-
# facility and prevents potential conflicts between test scripts.
|
|
152
|
-
#
|
|
153
|
-
# tests Test files (eg. test/tc_**/*.rb) [test/**/*]
|
|
154
|
-
# libs Directories to include in load path.
|
|
155
|
-
# ('./lib' is always included)
|
|
156
|
-
# live Deactive use of local libs and test against install.
|
|
157
|
-
# reqs List of files to require prior to running tests.
|
|
158
|
-
# extract Extract embedded tests first? [false]
|
|
159
|
-
#
|
|
160
|
-
# To isolate tests this tool marshals test results across a
|
|
161
|
-
# stdout->stdin shell pipe. This prevents interfence of one
|
|
162
|
-
# script's tests on another. But consequently it is not always
|
|
163
|
-
# possible to send debug info to stdout in the tests themselves
|
|
164
|
-
# (eg. #p and #puts).
|
|
165
|
-
|
|
166
|
-
def cross #(config)
|
|
167
|
-
require 'test/unit/ui/testrunnermediator' #require 'test/unit'
|
|
168
|
-
::Test::Unit.run = true # Don't autorun tests!
|
|
169
|
-
|
|
170
|
-
#tests = config['tests'] || 'test/**/test_*.rb'
|
|
171
|
-
reqs = requires #config['require']
|
|
172
|
-
#libs = config['libpath']
|
|
173
|
-
#live = config['live']
|
|
174
|
-
#extract = info['extract']
|
|
175
|
-
|
|
176
|
-
tests = [ tests() ].flatten
|
|
177
|
-
libs = [ libpath() ].flatten
|
|
178
|
-
|
|
179
|
-
results = TestResults.new #(style)
|
|
180
|
-
|
|
181
|
-
# get test files
|
|
182
|
-
test_libs = libs.join(':')
|
|
183
|
-
test_files = Dir.multiglob( *tests )
|
|
184
|
-
if test_files.empty?
|
|
185
|
-
puts "Tests [NONE]"
|
|
186
|
-
return
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# run tests
|
|
190
|
-
|
|
191
|
-
if trace?
|
|
192
|
-
pbar = nil
|
|
193
|
-
size = test_files.collect{|f| f.size}.max * 2 + 5
|
|
194
|
-
dots = '.' * size
|
|
195
|
-
else
|
|
196
|
-
pbar = Console::ProgressBar.new('Testing', test_files.size ** 2)
|
|
197
|
-
pbar.inc
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
test_files.each do |test_file|
|
|
201
|
-
next unless File.file?(test_file)
|
|
202
|
-
|
|
203
|
-
test_files.each do |test_file_x|
|
|
204
|
-
next unless File.file?(test_file_x)
|
|
205
|
-
next if test_file == test_file_x
|
|
206
|
-
|
|
207
|
-
pbar.inc if pbar
|
|
208
|
-
unless pbar
|
|
209
|
-
out = test_file +' : ' + test_file_x
|
|
210
|
-
print out + dots[out.size..-1]
|
|
211
|
-
$stdout.flush
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
r = fork_crosstest( test_file, test_file_x, :libs=>libs, :reqs=>reqs, :live=>live )
|
|
215
|
-
|
|
216
|
-
unless pbar
|
|
217
|
-
puts r.passed? ? "[PASS]" : "[FAIL]"
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
results << r
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
pbar.finish if pbar
|
|
225
|
-
|
|
226
|
-
# display results
|
|
227
|
-
puts results
|
|
228
|
-
|
|
229
|
-
fails, errrs = results.failure_count, results.error_count
|
|
230
|
-
#CHECKLIST << :test if fails > 0
|
|
231
|
-
#CHECKLIST << :test if errrs > 0
|
|
232
|
-
return (fails + errrs > 0)
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
private
|
|
236
|
-
|
|
237
|
-
# Run a test in a separate process.
|
|
238
|
-
#
|
|
239
|
-
# Currently send program output to null device.
|
|
240
|
-
# Could send to a logger in future version.
|
|
241
|
-
#
|
|
242
|
-
# Key parameters are libs, reqs, live.
|
|
243
|
-
|
|
244
|
-
def fork_crosstest( file, xfile, keys )
|
|
245
|
-
keys = keys.rekey(:to_s)
|
|
246
|
-
|
|
247
|
-
libs = keys['lib'] || []
|
|
248
|
-
reqs = keys['req'] || []
|
|
249
|
-
live = keys['live']
|
|
250
|
-
|
|
251
|
-
src = ''
|
|
252
|
-
|
|
253
|
-
unless live
|
|
254
|
-
l = File.join( Dir.pwd, 'lib' )
|
|
255
|
-
if File.directory?( l )
|
|
256
|
-
src << %{$:.unshift('#{l}')\n}
|
|
257
|
-
end
|
|
258
|
-
libs.each { |r| src << %{$:.unshift('#{r}')\n} }
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
src << %{
|
|
262
|
-
#require 'test/unit'
|
|
263
|
-
require 'test/unit/collector'
|
|
264
|
-
require 'test/unit/collector/objectspace'
|
|
265
|
-
require 'test/unit/ui/testrunnermediator'
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
reqs.each do |fix|
|
|
269
|
-
src << %Q{
|
|
270
|
-
require '#{fix}'
|
|
271
|
-
}
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
src << %{
|
|
275
|
-
def warn(*null); end # silence warnings
|
|
276
|
-
|
|
277
|
-
output = STDOUT.dup
|
|
278
|
-
STDOUT.reopen( PLATFORM =~ /mswin/ ? "NUL" : "/dev/null" )
|
|
279
|
-
|
|
280
|
-
load('#{file}')
|
|
281
|
-
load('#{xfile}')
|
|
282
|
-
|
|
283
|
-
tests = Test::Unit::Collector::ObjectSpace.new.collect
|
|
284
|
-
runner = Test::Unit::UI::TestRunnerMediator.new( tests )
|
|
285
|
-
result = runner.run_suite
|
|
286
|
-
|
|
287
|
-
begin
|
|
288
|
-
marshalled = Marshal.dump(result)
|
|
289
|
-
rescue TypeError => e
|
|
290
|
-
$stderr << "MARSHAL ERROR\n"
|
|
291
|
-
$stderr << "TEST: #{file}\n"
|
|
292
|
-
$stderr << "XTEST: #{xfile}\n"
|
|
293
|
-
$stderr << "DATA:" << result.inspect
|
|
294
|
-
exit -1
|
|
295
|
-
end
|
|
296
|
-
output << marshalled
|
|
297
|
-
|
|
298
|
-
STDOUT.reopen(output)
|
|
299
|
-
output.close
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
result = IO.popen("ruby","w+") do |ruby|
|
|
303
|
-
ruby.puts src
|
|
304
|
-
ruby.close_write
|
|
305
|
-
ruby.read
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
begin
|
|
309
|
-
marsh = Marshal.load(result)
|
|
310
|
-
rescue ArgumentError
|
|
311
|
-
$stderr << "\nCannot load marshalled test data.\n"
|
|
312
|
-
$stderr << result << "\n"
|
|
313
|
-
exit -1
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
return marsh
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
# Run a test in a separate process.
|
|
320
|
-
#
|
|
321
|
-
# Currently send program output to null device.
|
|
322
|
-
# Could send to a logger in future version.
|
|
323
|
-
#
|
|
324
|
-
# Key parameters are libs, reqs, live.
|
|
325
|
-
|
|
326
|
-
def fork_test( file, keys )
|
|
327
|
-
keys = keys.rekey(:to_s)
|
|
328
|
-
|
|
329
|
-
libs = keys['lib'] || []
|
|
330
|
-
reqs = keys['req'] || []
|
|
331
|
-
live = keys['live']
|
|
332
|
-
|
|
333
|
-
src = ''
|
|
334
|
-
|
|
335
|
-
unless live
|
|
336
|
-
l = File.join( Dir.pwd, 'lib' )
|
|
337
|
-
if File.directory?( l )
|
|
338
|
-
src << %{$:.unshift('#{l}')\n}
|
|
339
|
-
end
|
|
340
|
-
libs.each { |r| src << %{$:.unshift('#{r}')\n} }
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
src << %{
|
|
344
|
-
#require 'test/unit'
|
|
345
|
-
require 'test/unit/collector'
|
|
346
|
-
require 'test/unit/collector/objectspace'
|
|
347
|
-
require 'test/unit/ui/testrunnermediator'
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
reqs.each do |fix|
|
|
351
|
-
src << %Q{
|
|
352
|
-
require '#{fix}'
|
|
353
|
-
}
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
src << %{
|
|
357
|
-
def warn(*null); end # silence warnings
|
|
358
|
-
|
|
359
|
-
output = STDOUT.dup
|
|
360
|
-
STDOUT.reopen( PLATFORM =~ /mswin/ ? "NUL" : "/dev/null" )
|
|
361
|
-
|
|
362
|
-
load('#{file}')
|
|
363
|
-
|
|
364
|
-
tests = Test::Unit::Collector::ObjectSpace.new.collect
|
|
365
|
-
runner = Test::Unit::UI::TestRunnerMediator.new( tests )
|
|
366
|
-
result = runner.run_suite
|
|
367
|
-
|
|
368
|
-
begin
|
|
369
|
-
marshalled = Marshal.dump(result)
|
|
370
|
-
rescue TypeError => e
|
|
371
|
-
$stderr << "MARSHAL ERROR\n"
|
|
372
|
-
$stderr << "TEST: #{file}\n"
|
|
373
|
-
$stderr << "DATA:" << result.inspect
|
|
374
|
-
exit -1
|
|
375
|
-
end
|
|
376
|
-
output << marshalled
|
|
377
|
-
|
|
378
|
-
STDOUT.reopen(output)
|
|
379
|
-
output.close
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
result = IO.popen("ruby","w+") do |ruby|
|
|
383
|
-
ruby.puts src
|
|
384
|
-
ruby.close_write
|
|
385
|
-
ruby.read
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
begin
|
|
389
|
-
marsh = Marshal.load(result)
|
|
390
|
-
rescue ArgumentError
|
|
391
|
-
$stderr << "\nCannot load marshalled test data.\n"
|
|
392
|
-
$stderr << result << "\n"
|
|
393
|
-
exit -1
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
return marsh
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
# = Test Results
|
|
400
|
-
#
|
|
401
|
-
# Support class for collecting test results.
|
|
402
|
-
|
|
403
|
-
class TestResults
|
|
404
|
-
attr_reader :assertion_count,
|
|
405
|
-
:run_count,
|
|
406
|
-
:failure_count,
|
|
407
|
-
:error_count
|
|
408
|
-
|
|
409
|
-
attr_accessor :style
|
|
410
|
-
|
|
411
|
-
def initialize( style=nil )
|
|
412
|
-
@style = style
|
|
413
|
-
|
|
414
|
-
@results = []
|
|
415
|
-
|
|
416
|
-
@assertion_count = 0
|
|
417
|
-
@run_count = 0
|
|
418
|
-
@failure_count = 0
|
|
419
|
-
@error_count = 0
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
# Add a result to the results collection.
|
|
423
|
-
|
|
424
|
-
def <<( result )
|
|
425
|
-
@results << result
|
|
426
|
-
|
|
427
|
-
@assertion_count += result.assertion_count
|
|
428
|
-
@run_count += result.run_count
|
|
429
|
-
@failure_count += result.failure_count
|
|
430
|
-
@error_count += result.error_count
|
|
431
|
-
end
|
|
432
|
-
|
|
433
|
-
#
|
|
434
|
-
|
|
435
|
-
def errors
|
|
436
|
-
errors = []
|
|
437
|
-
@results.each do |r|
|
|
438
|
-
unless r.passed?
|
|
439
|
-
errors << r.instance_variable_get('@errors')
|
|
440
|
-
end
|
|
441
|
-
end
|
|
442
|
-
errors.reject! { |e| e == [] }
|
|
443
|
-
errors
|
|
444
|
-
end
|
|
445
|
-
|
|
446
|
-
#
|
|
447
|
-
|
|
448
|
-
def failures
|
|
449
|
-
failures = []
|
|
450
|
-
@results.each do |r|
|
|
451
|
-
unless r.passed?
|
|
452
|
-
failures << r.instance_variable_get('@failures')
|
|
453
|
-
end
|
|
454
|
-
end
|
|
455
|
-
failures.reject! { |e| e == [] }
|
|
456
|
-
failures
|
|
457
|
-
end
|
|
458
|
-
|
|
459
|
-
# Output format for test results.
|
|
460
|
-
|
|
461
|
-
def to_s
|
|
462
|
-
return @results.to_s if style == 'pease'
|
|
463
|
-
|
|
464
|
-
s = []
|
|
465
|
-
# Display failures
|
|
466
|
-
unless failures.empty?
|
|
467
|
-
s << ''
|
|
468
|
-
s << "FAILURES:"
|
|
469
|
-
failures.reverse.each do |fails|
|
|
470
|
-
fails.reverse.each do |failure|
|
|
471
|
-
#puts
|
|
472
|
-
s << %{ - test : #{failure.test_name}}
|
|
473
|
-
s << %{ location : #{failure.location}}
|
|
474
|
-
if failure.message.index("\n")
|
|
475
|
-
s << %{ message : >}
|
|
476
|
-
s << failure.message.tabto(6)
|
|
477
|
-
else
|
|
478
|
-
s << %{ message : #{failure.message}}
|
|
479
|
-
end
|
|
480
|
-
end
|
|
481
|
-
end
|
|
482
|
-
end
|
|
483
|
-
|
|
484
|
-
# Display errors
|
|
485
|
-
unless errors.empty?
|
|
486
|
-
s << ''
|
|
487
|
-
s << "ERRORS:"
|
|
488
|
-
errors.reverse.each do |errs|
|
|
489
|
-
errs.reverse.each do |err|
|
|
490
|
-
s << ''
|
|
491
|
-
s << %{ - test : #{err.test_name}}
|
|
492
|
-
s << %{ message : #{err.exception.message}}
|
|
493
|
-
s << %{ backtrace :}
|
|
494
|
-
err.exception.backtrace[0...-1].each { |bt| s << %Q{ - #{bt}} }
|
|
495
|
-
end
|
|
496
|
-
end
|
|
497
|
-
end
|
|
498
|
-
|
|
499
|
-
# Display final results
|
|
500
|
-
s << ''
|
|
501
|
-
s << "Summary:"
|
|
502
|
-
s << " Tests : #{@run_count}"
|
|
503
|
-
s << " Assertions : #{@assertion_count}"
|
|
504
|
-
s << " Failures : #{@failure_count}"
|
|
505
|
-
s << " Errors : #{@error_count}"
|
|
506
|
-
s << ''
|
|
507
|
-
s << ''
|
|
508
|
-
|
|
509
|
-
return s.join("\n")
|
|
510
|
-
end
|
|
511
|
-
|
|
512
|
-
# Delegate missing call to the results array.
|
|
513
|
-
|
|
514
|
-
def method_missing(*a,&b)
|
|
515
|
-
@results.send(*a,&b)
|
|
516
|
-
end
|
|
517
|
-
end
|
|
518
|
-
|
|
519
|
-
end
|
|
520
|
-
|
|
521
|
-
end
|
data/work/sandbox/design.rb
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
#require 'facet/kernel/within?'
|
|
2
|
-
require 'ratchets/test/assert'
|
|
3
|
-
|
|
4
|
-
at_exit { Ratchets::Design.check unless $no_autocheck }
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
module Ratchets
|
|
8
|
-
|
|
9
|
-
# Design module. Hold all contexts.
|
|
10
|
-
|
|
11
|
-
module Design
|
|
12
|
-
|
|
13
|
-
self.specifications
|
|
14
|
-
@specificaitons = []
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def self.specification(desc, &block)
|
|
18
|
-
contexts << Specificaiton.new(desc, &block)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
class Context
|
|
22
|
-
|
|
23
|
-
self.contexts
|
|
24
|
-
@contexts = []
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.context(desc, &block)
|
|
28
|
-
contexts << Context.new(desc, &block)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def self.check
|
|
32
|
-
contexts.each do |context|
|
|
33
|
-
context.check
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.outline
|
|
38
|
-
contexts.each do |context|
|
|
39
|
-
puts "= " + context.description
|
|
40
|
-
context.specifications.each do |spec|
|
|
41
|
-
puts "* " + spec
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Design Context. Context contains unit specifications.
|
|
49
|
-
|
|
50
|
-
class Design::Context
|
|
51
|
-
attr :description
|
|
52
|
-
attr :specifications
|
|
53
|
-
|
|
54
|
-
def initialize(name, description, &block)
|
|
55
|
-
@description = description
|
|
56
|
-
@context = block
|
|
57
|
-
@specifications = []
|
|
58
|
-
|
|
59
|
-
#@context_class = Class.new do
|
|
60
|
-
# def setup; end
|
|
61
|
-
# def teardown; end
|
|
62
|
-
#end
|
|
63
|
-
|
|
64
|
-
instance_eval(&block)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def setup(&setup_block)
|
|
68
|
-
@context_class.instance_eval do
|
|
69
|
-
define_method(:setup, &setup_block)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def teardown(&teardown_block)
|
|
74
|
-
@context_class.instance_eval do
|
|
75
|
-
define_method(:teardown, &teardown_block)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
#def specify(desc, &spec_block)
|
|
80
|
-
# @specifications << desc
|
|
81
|
-
# @context_class.instance_eval do
|
|
82
|
-
# define_method(desc, &spec_block)
|
|
83
|
-
# end
|
|
84
|
-
#end
|
|
85
|
-
|
|
86
|
-
def method_missing(name, *args, &block)
|
|
87
|
-
@specifications << Specification.new(name, args[0], &block)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def check
|
|
92
|
-
@specifications.each do |spec|
|
|
93
|
-
begin
|
|
94
|
-
context = @context_class.new
|
|
95
|
-
context.setup
|
|
96
|
-
context.send(spec)
|
|
97
|
-
context.teardown
|
|
98
|
-
rescue Exception => e
|
|
99
|
-
# TODO: make output compatible with unit_diff
|
|
100
|
-
print "\n", (Assertion === e ? "Failure: " : "Error: ")
|
|
101
|
-
puts "#{spec}: \n #{e}"
|
|
102
|
-
puts e.backtrace
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
#
|
|
110
|
-
|
|
111
|
-
class Specification
|
|
112
|
-
attr :relation, :description, :specification
|
|
113
|
-
|
|
114
|
-
def initialize(relation, decription, &specification)
|
|
115
|
-
@relation = relation
|
|
116
|
-
@description = description
|
|
117
|
-
@specificaiton = specification
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# # Unit of design specification.
|
|
123
|
-
#
|
|
124
|
-
# class Design::Context::Specification
|
|
125
|
-
# attr :description
|
|
126
|
-
# attr :check_routine
|
|
127
|
-
#
|
|
128
|
-
# def initialize(desc, &check)
|
|
129
|
-
# @description = desc
|
|
130
|
-
# @check_routine = check
|
|
131
|
-
# end
|
|
132
|
-
#
|
|
133
|
-
# def to_proc
|
|
134
|
-
# @check_routine
|
|
135
|
-
# end
|
|
136
|
-
# end
|
|
137
|
-
|
|
138
|
-
end #module Ratchets
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
# EXAMPLE
|
|
144
|
-
|
|
145
|
-
if __FILE__ == $0
|
|
146
|
-
|
|
147
|
-
Ratchets::Design.specification "Example Specification" do
|
|
148
|
-
|
|
149
|
-
context "demonstrate basic assertions" do
|
|
150
|
-
|
|
151
|
-
specify "fail if should is false" do
|
|
152
|
-
4.should == 3
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
specify "fail if should_not is true" do
|
|
156
|
-
4.should_not == 4
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
specify "fail on should raise" do
|
|
160
|
-
lambda{raise ArgumentError}.should.raise? SyntaxError
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
$no_autocheck = true
|
|
168
|
-
|
|
169
|
-
Ratchets::Design.outline
|
|
170
|
-
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if __FILE__ == $0
|
|
175
|
-
|
|
176
|
-
Ratchets::Design.specification "Example Specification" do
|
|
177
|
-
|
|
178
|
-
demonstrate "demonstrate basic assertions" do
|
|
179
|
-
|
|
180
|
-
that "4.must == 3 fails" do
|
|
181
|
-
4.should == 3
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
that "4.must_not == 4 fails" do
|
|
185
|
-
4.should_not == 4
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
that "raise ArgumentError does not raise a SyntaxError" do
|
|
189
|
-
lambda{raise ArgumentError}.should.raise? SyntaxError
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
$no_autocheck = true
|
|
197
|
-
|
|
198
|
-
Ratchets::Design.outline
|
|
199
|
-
|
|
200
|
-
end
|