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/x_isotest.rb
DELETED
|
@@ -1,532 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'facets/core/hash/rekey'
|
|
4
|
-
require 'facets/core/string/margin'
|
|
5
|
-
require 'facets/more/progressbar'
|
|
6
|
-
|
|
7
|
-
require 'test/unit/ui/testrunnermediator' #require 'test/unit'
|
|
8
|
-
::Test::Unit.run = true # Don't autorun tests!
|
|
9
|
-
|
|
10
|
-
class Project
|
|
11
|
-
|
|
12
|
-
# Define testing tasks.
|
|
13
|
-
|
|
14
|
-
def task_test()
|
|
15
|
-
|
|
16
|
-
#desc "Run unit tests"
|
|
17
|
-
#task :run do
|
|
18
|
-
# project.run_iso_tests # TODO Fix
|
|
19
|
-
#end
|
|
20
|
-
|
|
21
|
-
desc "Run isolated unit test"
|
|
22
|
-
task :test do
|
|
23
|
-
project.run_isotests
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
desc "Extract embedded tests"
|
|
27
|
-
task :tests do
|
|
28
|
-
project.extract_tests
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
desc "Run syntax check"
|
|
32
|
-
task :syntax do
|
|
33
|
-
project.test_syntax
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
desc 'Test load dependencies'
|
|
37
|
-
task :load do
|
|
38
|
-
project.test_load
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Default test files to run.
|
|
44
|
-
DEFAULT_TEST_FILES = [ 'test/**/tc*.rb', 'test/**/test*.rb', 'test/**/*test.rb' ]
|
|
45
|
-
DEFAULT_SCRIPT_FILES = [ 'lib/**/*.rb' ]
|
|
46
|
-
|
|
47
|
-
# Test syntax.
|
|
48
|
-
|
|
49
|
-
def test_syntax
|
|
50
|
-
res = true
|
|
51
|
-
cnt = 0
|
|
52
|
-
scripts = info.scripts || DEFAULT_SCRIPT_FILES
|
|
53
|
-
scripts = Dir.multiglob(*scripts) - Dir.multiglob_r(ignore)
|
|
54
|
-
scripts.each do |s|
|
|
55
|
-
next unless File.file?(s)
|
|
56
|
-
if not system "ruby -c -Ibin:lib:test #{s} &> /dev/null" then
|
|
57
|
-
puts "Syntax Error: #{s}"
|
|
58
|
-
checklist << :syntax
|
|
59
|
-
cnt += 1
|
|
60
|
-
res = false
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
if cnt == 0
|
|
64
|
-
puts "Syntax [PASS]"
|
|
65
|
-
else
|
|
66
|
-
puts "Syntax [FAIL]"
|
|
67
|
-
end
|
|
68
|
-
return res
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Test load dependencies.
|
|
72
|
-
|
|
73
|
-
def test_load
|
|
74
|
-
res = true
|
|
75
|
-
cnt = 0
|
|
76
|
-
tests = info.test_files || DEFAULT_TEST_FILES
|
|
77
|
-
tests = Dir.multiglob(*tests)
|
|
78
|
-
tests.each do |t|
|
|
79
|
-
if not system "ruby -Ibin:lib:test #{t} &> /dev/null" then
|
|
80
|
-
puts "Load Issue: #{t}"
|
|
81
|
-
checklist << :load
|
|
82
|
-
cnt += 1
|
|
83
|
-
res = false
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
if cnt == 0
|
|
87
|
-
puts "Load [PASS]"
|
|
88
|
-
else
|
|
89
|
-
puts "Load [FAIL]"
|
|
90
|
-
end
|
|
91
|
-
#puts "#{cnt} Dependency Issues"
|
|
92
|
-
return res
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Run unit-tests. Each test is run in a separate interpretor
|
|
96
|
-
# to prevent script clash. This makes for a more robust test
|
|
97
|
-
# facility and prevents potential conflicts between test scripts.
|
|
98
|
-
#
|
|
99
|
-
# tests Test files (eg. test/tc_**/*.rb) [test/**/*]
|
|
100
|
-
# libs Directories to include in load path.
|
|
101
|
-
# ('./lib' is always included)
|
|
102
|
-
# live Deactive use of local libs and test against install.
|
|
103
|
-
# reqs List of files to require prior to running tests.
|
|
104
|
-
# extract Extract embedded tests first? [false]
|
|
105
|
-
#
|
|
106
|
-
# To isolate tests this tool marshals test results across a
|
|
107
|
-
# stdout->stdin shell pipe. This prevents interfence of one
|
|
108
|
-
# script's tests on another. But consequently it is not always
|
|
109
|
-
# possible to send debug info to stdout in the tests themselves
|
|
110
|
-
# (eg. #p and #puts).
|
|
111
|
-
|
|
112
|
-
def run_isotests
|
|
113
|
-
tests = info.test_files
|
|
114
|
-
libs = info.test_libpath
|
|
115
|
-
reqs = info.test_require
|
|
116
|
-
live = info.test_live
|
|
117
|
-
extract = info.test_extract
|
|
118
|
-
|
|
119
|
-
tests = [ tests ].flatten
|
|
120
|
-
libs = [ libs ].flatten
|
|
121
|
-
|
|
122
|
-
#files = [ @files ].flatten
|
|
123
|
-
extract_tests if extract
|
|
124
|
-
|
|
125
|
-
results = TestResults.new #(style)
|
|
126
|
-
|
|
127
|
-
# get test files
|
|
128
|
-
test_libs = libs.join(':')
|
|
129
|
-
test_files = Dir.multiglob( *tests )
|
|
130
|
-
if test_files.empty?
|
|
131
|
-
puts "Tests [NONE]"
|
|
132
|
-
return
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# run tests
|
|
136
|
-
|
|
137
|
-
if trace?
|
|
138
|
-
pbar = nil
|
|
139
|
-
size = test_files.collect{|f| f.size}.max + 5
|
|
140
|
-
dots = '.' * size
|
|
141
|
-
else
|
|
142
|
-
pbar = Console::ProgressBar.new( 'Testing', test_files.size )
|
|
143
|
-
pbar.inc
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
test_files.each do |test_file|
|
|
147
|
-
pbar.inc if pbar
|
|
148
|
-
if ! File.file?(test_file)
|
|
149
|
-
next #r = nil
|
|
150
|
-
else
|
|
151
|
-
unless pbar
|
|
152
|
-
print test_file + dots[test_file.size..-1]
|
|
153
|
-
$stdout.flush
|
|
154
|
-
end
|
|
155
|
-
r = fork_test( test_file, :libs=>libs, :reqs=>reqs, :live=>live )
|
|
156
|
-
unless pbar
|
|
157
|
-
puts r.passed? ? "[PASS]" : "[FAIL]"
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
results << r
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
pbar.finish if pbar
|
|
164
|
-
|
|
165
|
-
# display results
|
|
166
|
-
puts results
|
|
167
|
-
|
|
168
|
-
fails, errrs = results.failure_count, results.error_count
|
|
169
|
-
CHECKLIST << :test if fails > 0
|
|
170
|
-
CHECKLIST << :test if errrs > 0
|
|
171
|
-
return (fails + errrs > 0)
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
# Run a test in a separate process.
|
|
175
|
-
#
|
|
176
|
-
# Currently send program output to null device.
|
|
177
|
-
# Could send to a logger in future version.
|
|
178
|
-
#
|
|
179
|
-
# Key parameters are libs, reqs, live.
|
|
180
|
-
|
|
181
|
-
def fork_test( file, keys )
|
|
182
|
-
keys = keys.rekey(:to_s)
|
|
183
|
-
|
|
184
|
-
libs = keys['lib'] || []
|
|
185
|
-
reqs = keys['req'] || []
|
|
186
|
-
live = keys['live']
|
|
187
|
-
|
|
188
|
-
src = ''
|
|
189
|
-
|
|
190
|
-
unless live
|
|
191
|
-
l = File.join( Dir.pwd, 'lib' )
|
|
192
|
-
if File.directory?( l )
|
|
193
|
-
src << %{$:.unshift('#{l}')\n}
|
|
194
|
-
end
|
|
195
|
-
libs.each { |r| src << %{$:.unshift('#{r}')\n} }
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
src << %{
|
|
199
|
-
#require 'test/unit'
|
|
200
|
-
require 'test/unit/collector'
|
|
201
|
-
require 'test/unit/collector/objectspace'
|
|
202
|
-
require 'test/unit/ui/testrunnermediator'
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
reqs.each do |fix|
|
|
206
|
-
src << %Q{
|
|
207
|
-
require '#{fix}'
|
|
208
|
-
}
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
src << %{
|
|
212
|
-
def warn(*null); end # silence warnings
|
|
213
|
-
|
|
214
|
-
output = STDOUT.dup
|
|
215
|
-
STDOUT.reopen( PLATFORM =~ /mswin/ ? "NUL" : "/dev/null" )
|
|
216
|
-
|
|
217
|
-
load('#{file}')
|
|
218
|
-
tests = Test::Unit::Collector::ObjectSpace.new.collect
|
|
219
|
-
runner = Test::Unit::UI::TestRunnerMediator.new( tests )
|
|
220
|
-
result = runner.run_suite
|
|
221
|
-
|
|
222
|
-
begin
|
|
223
|
-
marshalled = Marshal.dump(result)
|
|
224
|
-
rescue TypeError => e
|
|
225
|
-
$stderr << "MARSHAL ERROR\n"
|
|
226
|
-
$stderr << "TEST: #{file}\n"
|
|
227
|
-
$stderr << "DATA:" << result.inspect
|
|
228
|
-
exit -1
|
|
229
|
-
end
|
|
230
|
-
output << marshalled
|
|
231
|
-
|
|
232
|
-
STDOUT.reopen(output)
|
|
233
|
-
output.close
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
result = IO.popen("ruby","w+") do |ruby|
|
|
237
|
-
ruby.puts src
|
|
238
|
-
ruby.close_write
|
|
239
|
-
ruby.read
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
begin
|
|
243
|
-
marsh = Marshal.load(result)
|
|
244
|
-
rescue ArgumentError
|
|
245
|
-
$stderr << "\nCannot load marshalled test data.\n"
|
|
246
|
-
$stderr << result << "\n"
|
|
247
|
-
exit -1
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
return marsh
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
#
|
|
254
|
-
# Support class for collecting test results.
|
|
255
|
-
#
|
|
256
|
-
|
|
257
|
-
class TestResults
|
|
258
|
-
attr_reader :assertion_count,
|
|
259
|
-
:run_count,
|
|
260
|
-
:failure_count,
|
|
261
|
-
:error_count
|
|
262
|
-
|
|
263
|
-
attr_accessor :style
|
|
264
|
-
|
|
265
|
-
def initialize( style=nil )
|
|
266
|
-
@style = style
|
|
267
|
-
|
|
268
|
-
@results = []
|
|
269
|
-
|
|
270
|
-
@assertion_count = 0
|
|
271
|
-
@run_count = 0
|
|
272
|
-
@failure_count = 0
|
|
273
|
-
@error_count = 0
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
# Add a result to the results collection.
|
|
277
|
-
|
|
278
|
-
def <<( result )
|
|
279
|
-
@results << result
|
|
280
|
-
|
|
281
|
-
@assertion_count += result.assertion_count
|
|
282
|
-
@run_count += result.run_count
|
|
283
|
-
@failure_count += result.failure_count
|
|
284
|
-
@error_count += result.error_count
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
#
|
|
288
|
-
|
|
289
|
-
def errors
|
|
290
|
-
errors = []
|
|
291
|
-
@results.each do |r|
|
|
292
|
-
unless r.passed?
|
|
293
|
-
errors << r.instance_variable_get('@errors')
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
|
-
errors.reject! { |e| e == [] }
|
|
297
|
-
errors
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
#
|
|
301
|
-
|
|
302
|
-
def failures
|
|
303
|
-
failures = []
|
|
304
|
-
@results.each do |r|
|
|
305
|
-
unless r.passed?
|
|
306
|
-
failures << r.instance_variable_get('@failures')
|
|
307
|
-
end
|
|
308
|
-
end
|
|
309
|
-
failures.reject! { |e| e == [] }
|
|
310
|
-
failures
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
# Output format for test results.
|
|
314
|
-
|
|
315
|
-
def to_s
|
|
316
|
-
return @results.to_s if style == 'pease'
|
|
317
|
-
|
|
318
|
-
s = []
|
|
319
|
-
# Display failures
|
|
320
|
-
unless failures.empty?
|
|
321
|
-
s << ''
|
|
322
|
-
s << "FAILURES:"
|
|
323
|
-
failures.reverse.each do |fails|
|
|
324
|
-
fails.reverse.each do |failure|
|
|
325
|
-
#puts
|
|
326
|
-
s << %{ - test : #{failure.test_name}}
|
|
327
|
-
s << %{ location : #{failure.location}}
|
|
328
|
-
if failure.message.index("\n")
|
|
329
|
-
s << %{ message : >}
|
|
330
|
-
s << failure.message.tabto(6)
|
|
331
|
-
else
|
|
332
|
-
s << %{ message : #{failure.message}}
|
|
333
|
-
end
|
|
334
|
-
end
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
# Display errors
|
|
339
|
-
unless errors.empty?
|
|
340
|
-
s << ''
|
|
341
|
-
s << "ERRORS:"
|
|
342
|
-
errors.reverse.each do |errs|
|
|
343
|
-
errs.reverse.each do |err|
|
|
344
|
-
s << ''
|
|
345
|
-
s << %{ - test : #{err.test_name}}
|
|
346
|
-
s << %{ message : #{err.exception.message}}
|
|
347
|
-
s << %{ backtrace :}
|
|
348
|
-
err.exception.backtrace[0...-1].each { |bt| s << %Q{ - #{bt}} }
|
|
349
|
-
end
|
|
350
|
-
end
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
# Display final results
|
|
354
|
-
s << ''
|
|
355
|
-
s << "Summary:"
|
|
356
|
-
s << " Tests : #{@run_count}"
|
|
357
|
-
s << " Assertions : #{@assertion_count}"
|
|
358
|
-
s << " Failures : #{@failure_count}"
|
|
359
|
-
s << " Errors : #{@error_count}"
|
|
360
|
-
s << ''
|
|
361
|
-
s << ''
|
|
362
|
-
|
|
363
|
-
return s.join("\n")
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
# Delegate missing call to the results array.
|
|
367
|
-
|
|
368
|
-
def method_missing(*a,&b)
|
|
369
|
-
@results.send(*a,&b)
|
|
370
|
-
end
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
# Extract unit tests. This task scans every package script
|
|
374
|
-
# looking for sections of the form:
|
|
375
|
-
#
|
|
376
|
-
# =begin test
|
|
377
|
-
# ...
|
|
378
|
-
# =end
|
|
379
|
-
#
|
|
380
|
-
# With appropriate headers, it copies these sections to files
|
|
381
|
-
# in your project's test/ dir, which then can be run using the
|
|
382
|
-
# Ratchet test task. The exact directory layout of the files to
|
|
383
|
-
# be tested is reflected in the test directory. You can then
|
|
384
|
-
# use project.rb's test task to run the tests.
|
|
385
|
-
#
|
|
386
|
-
# files Files to extract ['lib/**/*.rb']
|
|
387
|
-
# output Test directory ['test/']
|
|
388
|
-
#
|
|
389
|
-
|
|
390
|
-
def extract_tests
|
|
391
|
-
#files = info.extract
|
|
392
|
-
files = ['lib/**/*.rb'] # FIXME Includes everthing? Perhaps extracts should be configurable.
|
|
393
|
-
output = 'test' # Don't think output should be setable.
|
|
394
|
-
|
|
395
|
-
filelist = Dir.multiglob(*files)
|
|
396
|
-
if filelist.empty?
|
|
397
|
-
puts "No script files found."
|
|
398
|
-
return
|
|
399
|
-
end
|
|
400
|
-
|
|
401
|
-
mkdir_p(output) unless File.directory?(output)
|
|
402
|
-
|
|
403
|
-
if trace?
|
|
404
|
-
pbar = nil
|
|
405
|
-
dots = '.' * (filelist.collect{ |f| f.size }.max + 11)
|
|
406
|
-
else
|
|
407
|
-
pbar = Console::ProgressBar.new('Extracting', filelist.size)
|
|
408
|
-
pbar.inc
|
|
409
|
-
end
|
|
410
|
-
|
|
411
|
-
filelist.each do |file|
|
|
412
|
-
if pbar
|
|
413
|
-
pbar.inc
|
|
414
|
-
else
|
|
415
|
-
print file + dots[file.size..-1]
|
|
416
|
-
$stdout.flush
|
|
417
|
-
end
|
|
418
|
-
testing = extract_test_from_file( file )
|
|
419
|
-
if testing.strip.empty?
|
|
420
|
-
puts "[NONE]" unless pbar
|
|
421
|
-
else
|
|
422
|
-
complete_test = create_test( testing, file )
|
|
423
|
-
libpath = File.dirname( file )
|
|
424
|
-
testfile = "test_" + File.basename( file )
|
|
425
|
-
fp = File.join( output, libpath, testfile )
|
|
426
|
-
unless File.directory?( File.dirname( fp ) )
|
|
427
|
-
FileUtils.mkdir_p( File.dirname(fp) )
|
|
428
|
-
end
|
|
429
|
-
File.open( fp, "w" ) { |fw| fw << complete_test }
|
|
430
|
-
puts "[TEST]" unless pbar
|
|
431
|
-
end
|
|
432
|
-
end
|
|
433
|
-
pbar ? pbar.finish : puts
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
private
|
|
437
|
-
|
|
438
|
-
# Extract test from a file's testing comments.
|
|
439
|
-
|
|
440
|
-
def extract_test_from_file( file )
|
|
441
|
-
return nil if ! File.file?( file )
|
|
442
|
-
tests = ""; inside = false
|
|
443
|
-
fstr = File.read( file )
|
|
444
|
-
fstr.split(/\n/).each do |l|
|
|
445
|
-
if l =~ /^=begin[ ]*test/i
|
|
446
|
-
tests << "\n"
|
|
447
|
-
inside = true
|
|
448
|
-
next
|
|
449
|
-
elsif inside and l =~ /^=[ ]*end/
|
|
450
|
-
inside = false
|
|
451
|
-
next
|
|
452
|
-
end
|
|
453
|
-
if inside
|
|
454
|
-
tests << l << "\n"
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
tests
|
|
458
|
-
end
|
|
459
|
-
|
|
460
|
-
# Generate the test.
|
|
461
|
-
|
|
462
|
-
def create_test( testing, file )
|
|
463
|
-
fp = file.split(/[\/]/)
|
|
464
|
-
if fp[0] == 'lib'
|
|
465
|
-
reqf = "require '#{fp[1..-1].join('/')}'"
|
|
466
|
-
else
|
|
467
|
-
reqf = ''
|
|
468
|
-
end
|
|
469
|
-
teststr = <<-HERE.margin
|
|
470
|
-
`# _____ _
|
|
471
|
-
`# |_ _|__ ___| |_
|
|
472
|
-
`# | |/ _ \\/ __| __|
|
|
473
|
-
`# | | __/\\__ \\ |_
|
|
474
|
-
`# |_|\\___||___/\\__|
|
|
475
|
-
`#
|
|
476
|
-
`# for #{file}
|
|
477
|
-
`#
|
|
478
|
-
`# Extracted #{Time.now}
|
|
479
|
-
`# Project.rb Test Extraction
|
|
480
|
-
`#
|
|
481
|
-
`
|
|
482
|
-
`#{reqf}
|
|
483
|
-
`
|
|
484
|
-
HERE
|
|
485
|
-
teststr << testing << "\n"
|
|
486
|
-
teststr
|
|
487
|
-
end
|
|
488
|
-
|
|
489
|
-
end # class Project
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
=begin
|
|
493
|
-
# Files and file patterns of the test scripts to run.
|
|
494
|
-
attr_accessor :tests
|
|
495
|
-
alias_method :files, :tests
|
|
496
|
-
alias_method :files=, :tests=
|
|
497
|
-
|
|
498
|
-
# Prerequisite libraries to require before running tests.
|
|
499
|
-
attr_accessor :reqs
|
|
500
|
-
alias_method :require, :reqs
|
|
501
|
-
alias_method :require=, :reqs=
|
|
502
|
-
|
|
503
|
-
# Prerequisite additions to the $LOAD_PATH.
|
|
504
|
-
attr_accessor :libs
|
|
505
|
-
alias_method :libpath, :libs
|
|
506
|
-
alias_method :libpath=, :libs=
|
|
507
|
-
|
|
508
|
-
# Run from live installation instead of from the project.
|
|
509
|
-
attr_accessor :live
|
|
510
|
-
|
|
511
|
-
# Test result output format (tim pease)
|
|
512
|
-
#attr_accessor :style
|
|
513
|
-
|
|
514
|
-
# Extract embedded unit tests?
|
|
515
|
-
attr_accessor :extract
|
|
516
|
-
|
|
517
|
-
# Files to check syntax.
|
|
518
|
-
attr_accessor :scripts
|
|
519
|
-
|
|
520
|
-
# New testing tasks.
|
|
521
|
-
def initialize
|
|
522
|
-
yield self if block_given?
|
|
523
|
-
|
|
524
|
-
@tests ||= DEFAULT_TEST_FILES
|
|
525
|
-
@reqs ||= []
|
|
526
|
-
@libs ||= []
|
|
527
|
-
@live ||= false
|
|
528
|
-
@extract ||= false
|
|
529
|
-
|
|
530
|
-
define
|
|
531
|
-
end
|
|
532
|
-
=end
|