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.
Files changed (296) hide show
  1. data/CHANGES +22 -1
  2. data/MANIFEST +30 -339
  3. data/RELEASE +2 -4
  4. data/VERSION +1 -1
  5. data/bin/quarry +14 -10
  6. data/bin/quarry-doc +2 -2
  7. data/lib/quarry/assertion.rb +27 -0
  8. data/lib/quarry/{spec/config.rb → config.rb} +0 -0
  9. data/lib/quarry/document/template.rhtml +239 -0
  10. data/lib/quarry/document.rb +126 -0
  11. data/lib/quarry/expectation.rb +60 -0
  12. data/lib/quarry/extract.rb +2 -0
  13. data/lib/quarry/grammar/assert.rb +48 -0
  14. data/lib/quarry/grammar/expect.rb +114 -0
  15. data/lib/quarry/grammar/legacy/assert.rb +280 -0
  16. data/lib/quarry/grammar/should.rb +50 -0
  17. data/lib/quarry/grammar.rb +4 -0
  18. data/lib/quarry/{spec → markup}/step.rb +4 -3
  19. data/lib/quarry/markup.rb +70 -0
  20. data/lib/quarry/{stub/mock.rb → mock.rb} +1 -1
  21. data/lib/quarry/{loadmonitor.rb → monitor.rb} +0 -0
  22. data/lib/quarry/{stub/probe.rb → probe.rb} +8 -35
  23. data/lib/quarry/reporter/dotprogress.rb +62 -0
  24. data/lib/quarry/reporter/summary.rb +70 -0
  25. data/lib/quarry/reporter/verbatim.rb +82 -0
  26. data/lib/quarry/reporter.rb +70 -0
  27. data/lib/quarry/{spec → runner}/context.rb +7 -2
  28. data/lib/quarry/runner.rb +123 -0
  29. data/lib/quarry/{stub/stub.rb → stub.rb} +1 -1
  30. data/lib/quarry.rb +10 -0
  31. data/spec/basic.rd +0 -2
  32. data/spec/complex.rd +0 -2
  33. data/spec/mock.rd +20 -26
  34. data/spec/stub.rd +8 -12
  35. metadata +48 -361
  36. data/bin/ruby-break +0 -10
  37. data/doc/assets/images/clipboard.jpg +0 -0
  38. data/doc/assets/images/clipboard2.png +0 -0
  39. data/doc/assets/images/darksilver.png +0 -0
  40. data/doc/assets/images/icon/book.jpg +0 -0
  41. data/doc/assets/images/icon/download.gif +0 -0
  42. data/doc/assets/images/icon/letter_r.png +0 -0
  43. data/doc/assets/images/icon/license.png +0 -0
  44. data/doc/assets/images/icon/software.png +0 -0
  45. data/doc/assets/images/icon/source.png +0 -0
  46. data/doc/assets/images/miner.jpg +0 -0
  47. data/doc/assets/images/rbrylmtrx.png +0 -0
  48. data/doc/assets/images/ruby.gif +0 -0
  49. data/doc/assets/images/runneth.png +0 -0
  50. data/doc/assets/images/silver.gif +0 -0
  51. data/doc/assets/images/test.jpg +0 -0
  52. data/doc/assets/jquery/jquery.js +0 -1
  53. data/doc/assets/jquery/jquery.tabs.js +0 -1
  54. data/doc/assets/rdoc_ad.html +0 -12
  55. data/doc/assets/styles/index.css +0 -138
  56. data/doc/guide/stubs.md +0 -125
  57. data/doc/index.html +0 -285
  58. data/doc/log/bstats/stats.html +0 -39
  59. data/doc/log/notes.xml +0 -32
  60. data/doc/log/stats.html +0 -25
  61. data/doc/log/stats.log +0 -14
  62. data/doc/log/syntax.log +0 -0
  63. data/doc/rdoc/classes/Assertion/False.html +0 -177
  64. data/doc/rdoc/classes/Assertion/True.html +0 -152
  65. data/doc/rdoc/classes/Assertion.html +0 -171
  66. data/doc/rdoc/classes/Kernel.html +0 -105
  67. data/doc/rdoc/classes/Method.html +0 -168
  68. data/doc/rdoc/classes/Object.html +0 -507
  69. data/doc/rdoc/classes/Quarry/Break.html +0 -231
  70. data/doc/rdoc/classes/Quarry/Command.html +0 -443
  71. data/doc/rdoc/classes/Quarry/Extract.html +0 -215
  72. data/doc/rdoc/classes/Quarry/MethodProbe.html +0 -325
  73. data/doc/rdoc/classes/Quarry/Mock/Delegator.html +0 -179
  74. data/doc/rdoc/classes/Quarry/Mock/Setter.html +0 -175
  75. data/doc/rdoc/classes/Quarry/Mock.html +0 -233
  76. data/doc/rdoc/classes/Quarry/Spec/Comment.html +0 -237
  77. data/doc/rdoc/classes/Quarry/Spec/Config.html +0 -257
  78. data/doc/rdoc/classes/Quarry/Spec/Context.html +0 -154
  79. data/doc/rdoc/classes/Quarry/Spec/Document.html +0 -382
  80. data/doc/rdoc/classes/Quarry/Spec/Header.html +0 -195
  81. data/doc/rdoc/classes/Quarry/Spec/Macro.html +0 -166
  82. data/doc/rdoc/classes/Quarry/Spec/Markup.html +0 -279
  83. data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +0 -234
  84. data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +0 -294
  85. data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +0 -311
  86. data/doc/rdoc/classes/Quarry/Spec/Runner.html +0 -352
  87. data/doc/rdoc/classes/Quarry/Spec/Step.html +0 -190
  88. data/doc/rdoc/classes/Quarry/Spec/Template.html +0 -205
  89. data/doc/rdoc/classes/Quarry/Stub/Delegator.html +0 -179
  90. data/doc/rdoc/classes/Quarry/Stub/Setter.html +0 -175
  91. data/doc/rdoc/classes/Quarry/Stub.html +0 -224
  92. data/doc/rdoc/classes/Quarry.html +0 -176
  93. data/doc/rdoc/created.rid +0 -1
  94. data/doc/rdoc/files/CHANGES.html +0 -150
  95. data/doc/rdoc/files/COPYING.html +0 -468
  96. data/doc/rdoc/files/README.html +0 -195
  97. data/doc/rdoc/files/RELEASE.html +0 -122
  98. data/doc/rdoc/files/VERSION.html +0 -107
  99. data/doc/rdoc/files/bin/quarry-doc.html +0 -109
  100. data/doc/rdoc/files/bin/quarry.html +0 -109
  101. data/doc/rdoc/files/bin/ruby-break.html +0 -108
  102. data/doc/rdoc/files/bin/ruby-xacto.html +0 -101
  103. data/doc/rdoc/files/lib/quarry/assert_rb.html +0 -155
  104. data/doc/rdoc/files/lib/quarry/break_rb.html +0 -101
  105. data/doc/rdoc/files/lib/quarry/extract_rb.html +0 -108
  106. data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +0 -101
  107. data/doc/rdoc/files/lib/quarry/spec/config_rb.html +0 -101
  108. data/doc/rdoc/files/lib/quarry/spec/context_rb.html +0 -101
  109. data/doc/rdoc/files/lib/quarry/spec/document_rb.html +0 -111
  110. data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +0 -108
  111. data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +0 -108
  112. data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +0 -108
  113. data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +0 -108
  114. data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +0 -109
  115. data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +0 -109
  116. data/doc/rdoc/files/lib/quarry/spec/step_rb.html +0 -101
  117. data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +0 -228
  118. data/doc/rdoc/files/lib/quarry/spec_rb.html +0 -113
  119. data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +0 -101
  120. data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +0 -122
  121. data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +0 -118
  122. data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +0 -101
  123. data/doc/rdoc/fr_class_index.html +0 -56
  124. data/doc/rdoc/fr_file_index.html +0 -55
  125. data/doc/rdoc/fr_method_index.html +0 -117
  126. data/doc/rdoc/index.html +0 -24
  127. data/doc/rdoc/rdoc-style.css +0 -208
  128. data/doc/ri/Assertion/False/assert-i.yaml +0 -10
  129. data/doc/ri/Assertion/False/cdesc-False.yaml +0 -21
  130. data/doc/ri/Assertion/False/message-i.yaml +0 -10
  131. data/doc/ri/Assertion/True/assert-i.yaml +0 -11
  132. data/doc/ri/Assertion/True/cdesc-True.yaml +0 -26
  133. data/doc/ri/Assertion/True/message-c.yaml +0 -11
  134. data/doc/ri/Assertion/True/message-i.yaml +0 -11
  135. data/doc/ri/Assertion/True/method_missing-i.yaml +0 -12
  136. data/doc/ri/Assertion/True/new-c.yaml +0 -11
  137. data/doc/ri/Assertion/cdesc-Assertion.yaml +0 -40
  138. data/doc/ri/Kernel/cdesc-Kernel.yaml +0 -15
  139. data/doc/ri/Method/cdesc-Method.yaml +0 -18
  140. data/doc/ri/Method/migration-i.yaml +0 -12
  141. data/doc/ri/Method/signature-i.yaml +0 -12
  142. data/doc/ri/Object/assert%21-i.yaml +0 -17
  143. data/doc/ri/Object/assert-i.yaml +0 -15
  144. data/doc/ri/Object/assert_raises%21-i.yaml +0 -12
  145. data/doc/ri/Object/assert_raises-i.yaml +0 -15
  146. data/doc/ri/Object/cdesc-Object.yaml +0 -42
  147. data/doc/ri/Object/mock-i.yaml +0 -12
  148. data/doc/ri/Object/refute-i.yaml +0 -13
  149. data/doc/ri/Object/refute_raises-i.yaml +0 -17
  150. data/doc/ri/Object/remove-i.yaml +0 -12
  151. data/doc/ri/Object/should-i.yaml +0 -12
  152. data/doc/ri/Object/should_not-i.yaml +0 -12
  153. data/doc/ri/Object/should_not_raise-i.yaml +0 -12
  154. data/doc/ri/Object/should_raise-i.yaml +0 -12
  155. data/doc/ri/Object/stub-i.yaml +0 -12
  156. data/doc/ri/Quarry/Break/cdesc-Break.yaml +0 -23
  157. data/doc/ri/Quarry/Break/edit-i.yaml +0 -11
  158. data/doc/ri/Quarry/Break/new-c.yaml +0 -11
  159. data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +0 -26
  160. data/doc/ri/Quarry/Extract/create_test-i.yaml +0 -12
  161. data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +0 -12
  162. data/doc/ri/Quarry/Extract/test_extract-i.yaml +0 -18
  163. data/doc/ri/Quarry/MethodProbe/cdesc-MethodProbe.yaml +0 -46
  164. data/doc/ri/Quarry/MethodProbe/duckcall-c.yaml +0 -10
  165. data/doc/ri/Quarry/MethodProbe/initialize_copy-i.yaml +0 -10
  166. data/doc/ri/Quarry/MethodProbe/method_missing-i.yaml +0 -10
  167. data/doc/ri/Quarry/MethodProbe/new-c.yaml +0 -10
  168. data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +0 -20
  169. data/doc/ri/Quarry/Mock/Delegator/method_missing-i.yaml +0 -10
  170. data/doc/ri/Quarry/Mock/Delegator/new-c.yaml +0 -10
  171. data/doc/ri/Quarry/Mock/Setter/%3d%3d-i.yaml +0 -10
  172. data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +0 -18
  173. data/doc/ri/Quarry/Mock/Setter/new-c.yaml +0 -10
  174. data/doc/ri/Quarry/Mock/__table__-i.yaml +0 -11
  175. data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +0 -25
  176. data/doc/ri/Quarry/Mock/method_missing-i.yaml +0 -12
  177. data/doc/ri/Quarry/Mock/new-c.yaml +0 -10
  178. data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +0 -33
  179. data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +0 -12
  180. data/doc/ri/Quarry/Spec/Comment/new-c.yaml +0 -10
  181. data/doc/ri/Quarry/Spec/Comment/type-i.yaml +0 -12
  182. data/doc/ri/Quarry/Spec/Config/after-i.yaml +0 -12
  183. data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +0 -12
  184. data/doc/ri/Quarry/Spec/Config/before-i.yaml +0 -12
  185. data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +0 -12
  186. data/doc/ri/Quarry/Spec/Config/cdesc-Config.yaml +0 -26
  187. data/doc/ri/Quarry/Spec/Config/new-c.yaml +0 -10
  188. data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +0 -21
  189. data/doc/ri/Quarry/Spec/Context/new-c.yaml +0 -10
  190. data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +0 -76
  191. data/doc/ri/Quarry/Spec/Document/generate-i.yaml +0 -12
  192. data/doc/ri/Quarry/Spec/Document/new-c.yaml +0 -12
  193. data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +0 -12
  194. data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +0 -11
  195. data/doc/ri/Quarry/Spec/Document/save-i.yaml +0 -12
  196. data/doc/ri/Quarry/Spec/Document/template-i.yaml +0 -12
  197. data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +0 -30
  198. data/doc/ri/Quarry/Spec/Header/new-c.yaml +0 -10
  199. data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +0 -22
  200. data/doc/ri/Quarry/Spec/Macro/new-c.yaml +0 -10
  201. data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +0 -31
  202. data/doc/ri/Quarry/Spec/Markup/description-i.yaml +0 -11
  203. data/doc/ri/Quarry/Spec/Markup/new-c.yaml +0 -11
  204. data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +0 -11
  205. data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +0 -11
  206. data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +0 -21
  207. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_intro-i.yaml +0 -10
  208. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +0 -10
  209. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +0 -16
  210. data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +0 -31
  211. data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +0 -10
  212. data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +0 -10
  213. data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +0 -10
  214. data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +0 -10
  215. data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +0 -10
  216. data/doc/ri/Quarry/Spec/Reporter/Summary/report_pass-i.yaml +0 -10
  217. data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +0 -29
  218. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +0 -10
  219. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +0 -10
  220. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +0 -10
  221. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +0 -16
  222. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +0 -10
  223. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +0 -10
  224. data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +0 -20
  225. data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +0 -47
  226. data/doc/ri/Quarry/Spec/Runner/check-i.yaml +0 -12
  227. data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +0 -12
  228. data/doc/ri/Quarry/Spec/Runner/new-c.yaml +0 -12
  229. data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +0 -12
  230. data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +0 -30
  231. data/doc/ri/Quarry/Spec/Step/new-c.yaml +0 -10
  232. data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +0 -31
  233. data/doc/ri/Quarry/Spec/Template/new-c.yaml +0 -11
  234. data/doc/ri/Quarry/Spec/Template/parse_template-i.yaml +0 -10
  235. data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +0 -15
  236. data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +0 -20
  237. data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +0 -10
  238. data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +0 -10
  239. data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +0 -10
  240. data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +0 -18
  241. data/doc/ri/Quarry/Stub/Setter/new-c.yaml +0 -10
  242. data/doc/ri/Quarry/Stub/__table__-i.yaml +0 -11
  243. data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +0 -23
  244. data/doc/ri/Quarry/Stub/method_missing-i.yaml +0 -11
  245. data/doc/ri/Quarry/Stub/new-c.yaml +0 -10
  246. data/doc/ri/Quarry/cdesc-Quarry.yaml +0 -16
  247. data/doc/ri/created.rid +0 -1
  248. data/doc/spec/stub.html +0 -394
  249. data/lib/quarry/assert.rb +0 -198
  250. data/lib/quarry/break.rb +0 -51
  251. data/lib/quarry/spec/document.rb +0 -130
  252. data/lib/quarry/spec/markup.rb +0 -85
  253. data/lib/quarry/spec/reporter/dotprogress.rb +0 -66
  254. data/lib/quarry/spec/reporter/summary.rb +0 -74
  255. data/lib/quarry/spec/reporter/verbatim.rb +0 -87
  256. data/lib/quarry/spec/reporter.rb +0 -74
  257. data/lib/quarry/spec/runner.rb +0 -127
  258. data/lib/quarry/spec/template.rhtml +0 -116
  259. data/lib/quarry/spec.rb +0 -7
  260. data/lib/quarry/stub/spec.txt +0 -113
  261. data/work/consider/document.rb +0 -35
  262. data/work/consider/fixture.rb +0 -153
  263. data/work/deprecated/assert/must.rb +0 -9
  264. data/work/deprecated/assert/should.rb +0 -9
  265. data/work/deprecated/build.rb +0 -82
  266. data/work/deprecated/mock/file.rb +0 -11
  267. data/work/deprecated/mock/mock.0.rb +0 -77
  268. data/work/deprecated/overlay.rb +0 -64
  269. data/work/deprecated/spec.rb +0 -195
  270. data/work/deprecated/stub/stub.0.rb +0 -180
  271. data/work/deprecated/stub/stub.1.rb +0 -114
  272. data/work/deprecated/stub/test_stub.rb +0 -66
  273. data/work/deprecated/test/case.rb +0 -141
  274. data/work/sandbox/assert.rb +0 -100
  275. data/work/sandbox/bug.rb +0 -49
  276. data/work/sandbox/build/announce.rb +0 -213
  277. data/work/sandbox/build/check.rb +0 -109
  278. data/work/sandbox/build/gem.rb +0 -235
  279. data/work/sandbox/build/make.rb +0 -118
  280. data/work/sandbox/build/manpage.rb +0 -201
  281. data/work/sandbox/build/notes.rb +0 -214
  282. data/work/sandbox/build/pack.rb +0 -228
  283. data/work/sandbox/build/rdoc.rb +0 -289
  284. data/work/sandbox/build/rubyforge.rb +0 -91
  285. data/work/sandbox/build/sign.rb +0 -241
  286. data/work/sandbox/build/stamp.rb +0 -37
  287. data/work/sandbox/build/stats.rb +0 -154
  288. data/work/sandbox/build/svn.rb +0 -193
  289. data/work/sandbox/build/test.rb +0 -521
  290. data/work/sandbox/design.rb +0 -200
  291. data/work/sandbox/iface_scanner.rb +0 -102
  292. data/work/sandbox/testunit/assertions/assert_has_keys.rb +0 -38
  293. data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +0 -38
  294. data/work/sandbox/testunit/unit.rb +0 -104
  295. data/work/sandbox/unitspec.rb +0 -54
  296. data/work/sandbox/x_isotest.rb +0 -532
@@ -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