quarry 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. data/CHANGES +40 -3
  2. data/MANIFEST +290 -78
  3. data/README +51 -37
  4. data/RELEASE +12 -0
  5. data/VERSION +1 -1
  6. data/bin/quarry +117 -0
  7. data/bin/quarry-doc +26 -0
  8. data/bin/ruby-break +10 -0
  9. data/bin/{xact-ruby → ruby-xacto} +0 -0
  10. data/doc/assets/images/clipboard.jpg +0 -0
  11. data/doc/assets/images/clipboard2.png +0 -0
  12. data/doc/assets/images/darksilver.png +0 -0
  13. data/doc/assets/images/icon/book.jpg +0 -0
  14. data/doc/assets/images/icon/download.gif +0 -0
  15. data/doc/assets/images/icon/letter_r.png +0 -0
  16. data/doc/assets/images/icon/license.png +0 -0
  17. data/doc/assets/images/icon/software.png +0 -0
  18. data/doc/assets/images/icon/source.png +0 -0
  19. data/doc/assets/images/miner.jpg +0 -0
  20. data/doc/assets/images/rbrylmtrx.png +0 -0
  21. data/doc/assets/images/ruby.gif +0 -0
  22. data/doc/assets/images/runneth.png +0 -0
  23. data/doc/assets/images/silver.gif +0 -0
  24. data/doc/assets/images/test.jpg +0 -0
  25. data/doc/assets/jquery/jquery.js +1 -0
  26. data/doc/assets/jquery/jquery.tabs.js +1 -0
  27. data/doc/assets/rdoc_ad.html +12 -0
  28. data/doc/assets/styles/index.css +138 -0
  29. data/doc/guide/stubs.md +125 -0
  30. data/doc/index.html +285 -0
  31. data/doc/log/bstats/stats.html +39 -0
  32. data/doc/log/notes.xml +32 -0
  33. data/doc/log/stats.html +25 -0
  34. data/doc/log/stats.log +14 -0
  35. data/doc/log/syntax.log +0 -0
  36. data/doc/rdoc/classes/Assertion/False.html +151 -106
  37. data/doc/rdoc/classes/Assertion/True.html +128 -113
  38. data/doc/rdoc/classes/Assertion.html +147 -77
  39. data/doc/rdoc/classes/Kernel.html +84 -65
  40. data/doc/rdoc/classes/Method.html +123 -92
  41. data/doc/rdoc/classes/Object.html +468 -115
  42. data/doc/rdoc/classes/Quarry/Break.html +231 -0
  43. data/doc/rdoc/classes/Quarry/Command.html +443 -0
  44. data/doc/rdoc/classes/Quarry/Extract.html +215 -0
  45. data/doc/rdoc/classes/Quarry/MethodProbe.html +203 -145
  46. data/doc/rdoc/classes/Quarry/Mock/Delegator.html +179 -0
  47. data/doc/rdoc/classes/Quarry/Mock/Setter.html +175 -0
  48. data/doc/rdoc/classes/Quarry/Mock.html +211 -67
  49. data/doc/rdoc/classes/Quarry/Spec/Comment.html +237 -0
  50. data/doc/rdoc/classes/Quarry/Spec/Config.html +257 -0
  51. data/doc/rdoc/classes/Quarry/Spec/Context.html +154 -0
  52. data/doc/rdoc/classes/Quarry/Spec/Document.html +382 -0
  53. data/doc/rdoc/classes/Quarry/Spec/Header.html +195 -0
  54. data/doc/rdoc/classes/Quarry/Spec/Macro.html +166 -0
  55. data/doc/rdoc/classes/Quarry/Spec/Markup.html +279 -0
  56. data/doc/rdoc/classes/Quarry/Spec/Reporter/DotProgress.html +234 -0
  57. data/doc/rdoc/classes/Quarry/Spec/Reporter/Summary.html +294 -0
  58. data/doc/rdoc/classes/Quarry/Spec/Reporter/Verbatim.html +311 -0
  59. data/doc/rdoc/classes/Quarry/Spec/Runner.html +352 -0
  60. data/doc/rdoc/classes/Quarry/Spec/Step.html +190 -0
  61. data/doc/rdoc/classes/Quarry/Spec/Template.html +205 -0
  62. data/doc/rdoc/classes/Quarry/Stub/Delegator.html +179 -0
  63. data/doc/rdoc/classes/Quarry/Stub/Setter.html +175 -0
  64. data/doc/rdoc/classes/Quarry/Stub.html +224 -0
  65. data/doc/rdoc/classes/Quarry.html +153 -154
  66. data/doc/rdoc/created.rid +1 -1
  67. data/doc/rdoc/files/CHANGES.html +126 -76
  68. data/doc/rdoc/files/COPYING.html +84 -73
  69. data/doc/rdoc/files/README.html +135 -111
  70. data/doc/rdoc/files/RELEASE.html +122 -0
  71. data/doc/rdoc/files/VERSION.html +85 -74
  72. data/doc/rdoc/files/bin/quarry-doc.html +109 -0
  73. data/doc/rdoc/files/bin/quarry.html +109 -0
  74. data/doc/rdoc/files/bin/ruby-break.html +108 -0
  75. data/doc/rdoc/files/bin/ruby-xacto.html +101 -0
  76. data/doc/rdoc/files/lib/quarry/assert_rb.html +155 -0
  77. data/doc/rdoc/files/lib/quarry/break_rb.html +101 -0
  78. data/doc/rdoc/files/lib/quarry/extract_rb.html +108 -0
  79. data/doc/rdoc/files/lib/quarry/loadmonitor_rb.html +80 -71
  80. data/doc/rdoc/files/lib/quarry/spec/config_rb.html +101 -0
  81. data/doc/rdoc/files/lib/quarry/spec/context_rb.html +101 -0
  82. data/doc/rdoc/files/lib/quarry/spec/document_rb.html +111 -0
  83. data/doc/rdoc/files/lib/quarry/spec/markup_rb.html +108 -0
  84. data/doc/rdoc/files/lib/quarry/spec/reporter/dotprogress_rb.html +108 -0
  85. data/doc/rdoc/files/lib/quarry/spec/reporter/summary_rb.html +108 -0
  86. data/doc/rdoc/files/lib/quarry/spec/reporter/verbatim_rb.html +108 -0
  87. data/doc/rdoc/files/lib/quarry/spec/reporter_rb.html +109 -0
  88. data/doc/rdoc/files/lib/quarry/spec/runner_rb.html +109 -0
  89. data/doc/rdoc/files/lib/quarry/spec/step_rb.html +101 -0
  90. data/doc/rdoc/files/lib/quarry/spec/template_rhtml.html +228 -0
  91. data/doc/rdoc/files/lib/quarry/spec_rb.html +113 -0
  92. data/doc/rdoc/files/lib/quarry/stub/mock_rb.html +101 -0
  93. data/doc/rdoc/files/lib/quarry/stub/probe_rb.html +122 -0
  94. data/doc/rdoc/files/lib/quarry/stub/spec_txt.html +118 -0
  95. data/doc/rdoc/files/lib/quarry/stub/stub_rb.html +101 -0
  96. data/doc/rdoc/fr_class_index.html +48 -52
  97. data/doc/rdoc/fr_file_index.html +47 -57
  98. data/doc/rdoc/fr_method_index.html +109 -69
  99. data/doc/rdoc/index.html +12 -14
  100. data/doc/rdoc/rdoc-style.css +154 -121
  101. data/doc/ri/Assertion/False/cdesc-False.yaml +5 -3
  102. data/doc/ri/Assertion/True/cdesc-True.yaml +4 -2
  103. data/doc/ri/Assertion/True/message-c.yaml +2 -2
  104. data/doc/ri/Assertion/True/message-i.yaml +1 -1
  105. data/doc/ri/Assertion/True/method_missing-i.yaml +4 -3
  106. data/doc/ri/Assertion/cdesc-Assertion.yaml +24 -1
  107. data/doc/ri/Object/assert%21-i.yaml +7 -4
  108. data/doc/ri/Object/assert-i.yaml +3 -2
  109. data/doc/ri/Object/assert_raises%21-i.yaml +12 -0
  110. data/doc/ri/Object/assert_raises-i.yaml +15 -0
  111. data/doc/ri/Object/cdesc-Object.yaml +24 -2
  112. data/doc/ri/{Quarry/Design/Specification/outline-i.yaml → Object/mock-i.yaml} +4 -4
  113. data/doc/ri/Object/refute-i.yaml +13 -0
  114. data/doc/ri/Object/refute_raises-i.yaml +17 -0
  115. data/doc/ri/Object/remove-i.yaml +12 -0
  116. data/doc/ri/{Quarry/Design/check-c.yaml → Object/should-i.yaml} +4 -4
  117. data/doc/ri/Object/should_not-i.yaml +12 -0
  118. data/doc/ri/Object/should_not_raise-i.yaml +12 -0
  119. data/doc/ri/Object/should_raise-i.yaml +12 -0
  120. data/doc/ri/{Quarry/Mock/Object/mock-c.yaml → Object/stub-i.yaml} +5 -5
  121. data/doc/ri/{Module/cdesc-Module.yaml → Quarry/Break/cdesc-Break.yaml} +10 -8
  122. data/doc/ri/Quarry/Break/edit-i.yaml +11 -0
  123. data/doc/ri/Quarry/Break/new-c.yaml +11 -0
  124. data/doc/ri/Quarry/Extract/cdesc-Extract.yaml +26 -0
  125. data/doc/ri/Quarry/Extract/create_test-i.yaml +12 -0
  126. data/doc/ri/Quarry/Extract/extract_test_from_file-i.yaml +12 -0
  127. data/doc/ri/Quarry/Extract/test_extract-i.yaml +18 -0
  128. data/doc/ri/Quarry/Mock/Delegator/cdesc-Delegator.yaml +20 -0
  129. data/doc/ri/Quarry/{Design/Specification/Context → Mock/Delegator}/method_missing-i.yaml +2 -2
  130. data/doc/ri/Quarry/{Design/specification-c.yaml → Mock/Delegator/new-c.yaml} +3 -3
  131. data/doc/ri/{Module/method_added-i.yaml → Quarry/Mock/Setter/%3d%3d-i.yaml} +3 -3
  132. data/doc/ri/Quarry/Mock/Setter/cdesc-Setter.yaml +18 -0
  133. data/doc/ri/Quarry/Mock/Setter/new-c.yaml +10 -0
  134. data/doc/ri/Quarry/Mock/__table__-i.yaml +11 -0
  135. data/doc/ri/Quarry/Mock/cdesc-Mock.yaml +17 -7
  136. data/doc/ri/Quarry/Mock/method_missing-i.yaml +12 -0
  137. data/doc/ri/Quarry/{Design/outline-c.yaml → Mock/new-c.yaml} +2 -2
  138. data/doc/ri/Quarry/Spec/Comment/cdesc-Comment.yaml +33 -0
  139. data/doc/ri/Quarry/Spec/Comment/macro%3f-i.yaml +12 -0
  140. data/doc/ri/Quarry/Spec/Comment/new-c.yaml +10 -0
  141. data/doc/ri/Quarry/Spec/Comment/type-i.yaml +12 -0
  142. data/doc/ri/Quarry/Spec/Config/after-i.yaml +12 -0
  143. data/doc/ri/Quarry/Spec/Config/after_spec-i.yaml +12 -0
  144. data/doc/ri/Quarry/Spec/Config/before-i.yaml +12 -0
  145. data/doc/ri/Quarry/Spec/Config/before_spec-i.yaml +12 -0
  146. data/doc/ri/Quarry/{Design/Specification/Context/cdesc-Context.yaml → Spec/Config/cdesc-Config.yaml} +11 -9
  147. data/doc/ri/Quarry/{Mock/Object/mocks-c.yaml → Spec/Config/new-c.yaml} +2 -2
  148. data/doc/ri/Quarry/Spec/Context/cdesc-Context.yaml +21 -0
  149. data/doc/ri/Quarry/{Design/specifications-c.yaml → Spec/Context/new-c.yaml} +2 -2
  150. data/doc/ri/Quarry/Spec/Document/cdesc-Document.yaml +76 -0
  151. data/doc/ri/Quarry/Spec/Document/generate-i.yaml +12 -0
  152. data/doc/ri/Quarry/{Mock/Object/echo-c.yaml → Spec/Document/new-c.yaml} +4 -4
  153. data/doc/ri/Quarry/Spec/Document/quiet%3f-i.yaml +12 -0
  154. data/doc/ri/Quarry/Spec/Document/require_rdoc-i.yaml +11 -0
  155. data/doc/ri/Quarry/Spec/Document/save-i.yaml +12 -0
  156. data/doc/ri/Quarry/Spec/Document/template-i.yaml +12 -0
  157. data/doc/ri/Quarry/Spec/Header/cdesc-Header.yaml +30 -0
  158. data/doc/ri/Quarry/Spec/Header/new-c.yaml +10 -0
  159. data/doc/ri/Quarry/Spec/Macro/cdesc-Macro.yaml +22 -0
  160. data/doc/ri/Quarry/Spec/Macro/new-c.yaml +10 -0
  161. data/doc/ri/Quarry/Spec/Markup/cdesc-Markup.yaml +31 -0
  162. data/doc/ri/Quarry/Spec/Markup/description-i.yaml +11 -0
  163. data/doc/ri/Quarry/Spec/Markup/new-c.yaml +11 -0
  164. data/doc/ri/Quarry/Spec/Markup/parse-i.yaml +11 -0
  165. data/doc/ri/Quarry/Spec/Markup/parse_section-i.yaml +11 -0
  166. data/doc/ri/Quarry/Spec/Reporter/DotProgress/cdesc-DotProgress.yaml +21 -0
  167. data/doc/ri/Quarry/{Design/Specification/Context/specifications-i.yaml → Spec/Reporter/DotProgress/report_intro-i.yaml} +2 -2
  168. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_step-i.yaml +10 -0
  169. data/doc/ri/Quarry/Spec/Reporter/DotProgress/report_summary-i.yaml +16 -0
  170. data/doc/ri/Quarry/Spec/Reporter/Summary/cdesc-Summary.yaml +31 -0
  171. data/doc/ri/Quarry/Spec/Reporter/Summary/report_comment-i.yaml +10 -0
  172. data/doc/ri/Quarry/Spec/Reporter/Summary/report_error-i.yaml +10 -0
  173. data/doc/ri/Quarry/Spec/Reporter/Summary/report_fail-i.yaml +10 -0
  174. data/doc/ri/Quarry/Spec/Reporter/Summary/report_header-i.yaml +10 -0
  175. data/doc/ri/Quarry/Spec/Reporter/Summary/report_macro-i.yaml +10 -0
  176. data/doc/ri/Quarry/{Design/Specification/Context/before-i.yaml → Spec/Reporter/Summary/report_pass-i.yaml} +3 -3
  177. data/doc/ri/Quarry/Spec/Reporter/Verbatim/cdesc-Verbatim.yaml +29 -0
  178. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_comment-i.yaml +10 -0
  179. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_error-i.yaml +10 -0
  180. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_fail-i.yaml +10 -0
  181. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_header-i.yaml +16 -0
  182. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_macro-i.yaml +10 -0
  183. data/doc/ri/Quarry/Spec/Reporter/Verbatim/report_pass-i.yaml +10 -0
  184. data/doc/ri/Quarry/Spec/Reporter/cdesc-Reporter.yaml +20 -0
  185. data/doc/ri/Quarry/Spec/Runner/cdesc-Runner.yaml +47 -0
  186. data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/check-i.yaml +3 -3
  187. data/doc/ri/Quarry/Spec/Runner/check_spec-i.yaml +12 -0
  188. data/doc/ri/Quarry/{Design/Specification → Spec/Runner}/new-c.yaml +2 -2
  189. data/doc/ri/Quarry/Spec/Runner/run_step-i.yaml +12 -0
  190. data/doc/ri/Quarry/Spec/Step/cdesc-Step.yaml +30 -0
  191. data/doc/ri/Quarry/Spec/Step/new-c.yaml +10 -0
  192. data/doc/ri/Quarry/Spec/Template/cdesc-Template.yaml +31 -0
  193. data/doc/ri/Quarry/Spec/Template/new-c.yaml +11 -0
  194. data/doc/ri/Quarry/{Design/Specification/Context/after-i.yaml → Spec/Template/parse_template-i.yaml} +3 -3
  195. data/doc/ri/Quarry/Spec/cdesc-Spec.yaml +15 -0
  196. data/doc/ri/Quarry/Stub/Delegator/cdesc-Delegator.yaml +20 -0
  197. data/doc/ri/Quarry/Stub/Delegator/method_missing-i.yaml +10 -0
  198. data/doc/ri/Quarry/Stub/Delegator/new-c.yaml +10 -0
  199. data/doc/ri/Quarry/Stub/Setter/%3d%3d-i.yaml +10 -0
  200. data/doc/ri/Quarry/Stub/Setter/cdesc-Setter.yaml +18 -0
  201. data/doc/ri/Quarry/Stub/Setter/new-c.yaml +10 -0
  202. data/doc/ri/Quarry/Stub/__table__-i.yaml +11 -0
  203. data/doc/ri/Quarry/Stub/cdesc-Stub.yaml +23 -0
  204. data/doc/ri/Quarry/Stub/method_missing-i.yaml +11 -0
  205. data/doc/ri/Quarry/Stub/new-c.yaml +10 -0
  206. data/doc/ri/Quarry/cdesc-Quarry.yaml +2 -3
  207. data/doc/ri/created.rid +1 -1
  208. data/doc/spec/stub.html +394 -0
  209. data/lib/quarry/assert.rb +198 -0
  210. data/lib/quarry/break.rb +51 -0
  211. data/lib/quarry/extract.rb +135 -0
  212. data/lib/quarry/loadmonitor.rb +6 -1
  213. data/lib/quarry/spec/config.rb +32 -0
  214. data/lib/quarry/spec/context.rb +19 -0
  215. data/lib/quarry/spec/document.rb +130 -0
  216. data/lib/quarry/spec/markup.rb +85 -0
  217. data/lib/quarry/spec/reporter/dotprogress.rb +66 -0
  218. data/lib/quarry/spec/reporter/summary.rb +74 -0
  219. data/lib/quarry/spec/reporter/verbatim.rb +87 -0
  220. data/lib/quarry/spec/reporter.rb +74 -0
  221. data/lib/quarry/spec/runner.rb +127 -0
  222. data/lib/quarry/spec/step.rb +78 -0
  223. data/lib/quarry/spec/template.rhtml +116 -0
  224. data/lib/quarry/spec.rb +7 -0
  225. data/lib/quarry/stub/mock.rb +94 -0
  226. data/lib/quarry/{methodprobe.rb → stub/probe.rb} +0 -0
  227. data/lib/quarry/stub/spec.txt +113 -0
  228. data/lib/quarry/stub/stub.rb +93 -0
  229. data/meta/abstract +5 -0
  230. data/meta/authors +1 -0
  231. data/meta/created +1 -0
  232. data/meta/homepage +1 -0
  233. data/meta/requires +1 -0
  234. data/meta/summary +1 -0
  235. data/spec/basic.rd +20 -0
  236. data/spec/complex.rd +50 -0
  237. data/spec/mock.rd +53 -0
  238. data/spec/stub.rd +61 -0
  239. data/{lib/quarry → work/consider}/document.rb +0 -0
  240. data/work/consider/fixture.rb +153 -0
  241. data/{lib/quarry → work/deprecated}/assert/must.rb +1 -0
  242. data/{lib/quarry → work/deprecated}/assert/should.rb +0 -0
  243. data/work/deprecated/build.rb +82 -0
  244. data/work/deprecated/mock/file.rb +11 -0
  245. data/work/deprecated/mock/mock.0.rb +77 -0
  246. data/work/deprecated/overlay.rb +64 -0
  247. data/work/deprecated/spec.rb +195 -0
  248. data/work/deprecated/stub/stub.0.rb +180 -0
  249. data/work/deprecated/stub/stub.1.rb +114 -0
  250. data/work/deprecated/stub/test_stub.rb +66 -0
  251. data/work/deprecated/test/case.rb +141 -0
  252. data/work/sandbox/assert.rb +100 -0
  253. data/work/sandbox/bug.rb +49 -0
  254. data/work/sandbox/build/announce.rb +213 -0
  255. data/work/sandbox/build/check.rb +109 -0
  256. data/work/sandbox/build/gem.rb +235 -0
  257. data/work/sandbox/build/make.rb +118 -0
  258. data/work/sandbox/build/manpage.rb +201 -0
  259. data/work/sandbox/build/notes.rb +214 -0
  260. data/work/sandbox/build/pack.rb +228 -0
  261. data/work/sandbox/build/rdoc.rb +289 -0
  262. data/work/sandbox/build/rubyforge.rb +91 -0
  263. data/work/sandbox/build/sign.rb +241 -0
  264. data/work/sandbox/build/stamp.rb +37 -0
  265. data/work/sandbox/build/stats.rb +154 -0
  266. data/work/sandbox/build/svn.rb +193 -0
  267. data/work/sandbox/build/test.rb +521 -0
  268. data/work/sandbox/design.rb +200 -0
  269. data/work/sandbox/iface_scanner.rb +102 -0
  270. data/work/sandbox/testunit/assertions/assert_has_keys.rb +38 -0
  271. data/work/sandbox/testunit/assertions/assert_has_only_keys.rb +38 -0
  272. data/work/sandbox/testunit/unit.rb +104 -0
  273. data/work/sandbox/unitspec.rb +54 -0
  274. data/work/sandbox/x_isotest.rb +532 -0
  275. metadata +318 -93
  276. data/METADATA +0 -22
  277. data/NEWS +0 -8
  278. data/bin/rubybreak +0 -3
  279. data/demo/spec/demo_check.rb +0 -21
  280. data/demo/spec/demo_outline.rb +0 -25
  281. data/demo/test/demo_run.rb +0 -21
  282. data/doc/manual.html2 +0 -1416
  283. data/doc/rdoc/classes/Module.html +0 -165
  284. data/doc/rdoc/classes/Quarry/Design/Specification/Context.html +0 -174
  285. data/doc/rdoc/classes/Quarry/Design/Specification.html +0 -265
  286. data/doc/rdoc/classes/Quarry/Design.html +0 -170
  287. data/doc/rdoc/classes/Quarry/Mock/Object.html +0 -276
  288. data/doc/rdoc/files/MANIFEST.html +0 -630
  289. data/doc/rdoc/files/METADATA.html +0 -92
  290. data/doc/rdoc/files/NEWS.html +0 -99
  291. data/doc/rdoc/files/bin/rubybreak.html +0 -96
  292. data/doc/rdoc/files/bin/xact-ruby.html +0 -92
  293. data/doc/rdoc/files/lib/quarry/assert/must_rb.html +0 -96
  294. data/doc/rdoc/files/lib/quarry/assert/should_rb.html +0 -96
  295. data/doc/rdoc/files/lib/quarry/assertion_rb.html +0 -96
  296. data/doc/rdoc/files/lib/quarry/breakout_rb.html +0 -144
  297. data/doc/rdoc/files/lib/quarry/design/spec_rb.html +0 -100
  298. data/doc/rdoc/files/lib/quarry/document_rb.html +0 -92
  299. data/doc/rdoc/files/lib/quarry/methodprobe_rb.html +0 -111
  300. data/doc/rdoc/files/lib/quarry/mock/object_rb.html +0 -123
  301. data/doc/rdoc/files/lib/quarry/mockery_rb.html +0 -115
  302. data/doc/ri/Module/doc-i.yaml +0 -16
  303. data/doc/ri/Quarry/Design/Specification/cdesc-Specification.yaml +0 -44
  304. data/doc/ri/Quarry/Design/cdesc-Design.yaml +0 -22
  305. data/doc/ri/Quarry/Mock/Object/cdesc-Object.yaml +0 -52
  306. data/doc/ri/Quarry/Mock/Object/keys-c.yaml +0 -12
  307. data/doc/ri/Quarry/Mock/Object/spin-c.yaml +0 -12
  308. data/doc/ri/Quarry/Mockery-i.yaml +0 -12
  309. data/lib/quarry/assertion.rb +0 -95
  310. data/lib/quarry/breakout.rb +0 -45
  311. data/lib/quarry/design/spec.rb +0 -197
  312. data/lib/quarry/mock/object.rb +0 -169
  313. data/lib/quarry/mockery.rb +0 -85
@@ -0,0 +1,195 @@
1
+ require 'quarry/assertion'
2
+
3
+ module Quarry
4
+
5
+ class << self
6
+ def specification(description, &specification)
7
+ Design.specification(description, &specification)
8
+ end
9
+
10
+ alias_method :spec, :specification
11
+ end
12
+
13
+ module Design
14
+
15
+ class << self
16
+ def specifications
17
+ @specifications ||= []
18
+ end
19
+
20
+ def specification(description, &specification)
21
+ specifications << Spec.new(description, nil, &specification)
22
+ end
23
+ alias_method :spec, :specification
24
+
25
+ # TODO: make output compatible with unit_diff ?
26
+
27
+ def check
28
+ specifications.each do |specification|
29
+ Runner.new(specification).check
30
+ end
31
+ end
32
+
33
+ def outline
34
+ specifications.each do |specification|
35
+ Runner.new(specification).outline
36
+ end
37
+ end
38
+ end
39
+
40
+ # = Spec
41
+ #
42
+ class Spec
43
+ #undef_method *instance_methods.select{|m| m.to_s !~ /^(__|instance_|object_)/}
44
+
45
+ # Specification description.
46
+ attr :description
47
+
48
+ # Parent specification (if any).
49
+ attr :parent
50
+
51
+ #
52
+ attr :given
53
+
54
+ #
55
+ attr :before
56
+
57
+ #
58
+ attr :after
59
+
60
+ # Subspecifications
61
+ attr :specs
62
+
63
+ # Steps in specification proof.
64
+ attr :steps
65
+
66
+ #
67
+ def initialize(description, parent, &block)
68
+ #@relation = relation
69
+ @description = description
70
+ @parent = parent
71
+
72
+ @given = nil
73
+ @before = nil
74
+ @after = nil
75
+
76
+ @specs = []
77
+ @steps = []
78
+
79
+ instance_eval(&block)
80
+ end
81
+
82
+ #
83
+ def given(&block)
84
+ block ? @given = block : @given
85
+ end
86
+
87
+ #
88
+ def before(&block)
89
+ block ? @before = block : @before
90
+ end
91
+
92
+ #
93
+ def after(&block)
94
+ block ? @after = block : @after
95
+ end
96
+
97
+ def context(description, &block)
98
+ specs << Spec.new(description, self, &block)
99
+ end
100
+
101
+ #
102
+ def prove(description, &block)
103
+ steps << Step.new(description, self, &block)
104
+ end
105
+
106
+ alias_method :it, :prove
107
+ alias_method :its, :prove
108
+
109
+ #
110
+ #def method_missing(relation, *description, &specification)
111
+ # if description.size > 1
112
+ # super
113
+ # else
114
+ # specifications << Specification.new(relation, description.first, self, &specification)
115
+ # end
116
+ #end
117
+ end #class Context
118
+
119
+ #
120
+ class Step
121
+ attr :description
122
+ attr :parent
123
+ attr :code
124
+
125
+ def initialize(description, parent, &code)
126
+ @description = description
127
+ @parent = parent
128
+ @code = code
129
+ end
130
+ end
131
+
132
+ end #module Desgin
133
+
134
+ end #module Quarry
135
+
136
+ #at_exit { Quarry::Design.check unless $no_autocheck }
137
+
138
+
139
+ =begin demo
140
+
141
+ Quarry::Design.specification "Example Specification" do
142
+
143
+ context "demonstrate basic assertions" do
144
+
145
+ specify "fail if should is false" do
146
+ 4.assert == 3
147
+ end
148
+
149
+ specify "fail if should_not is true" do
150
+ 4.assert! == 4
151
+ end
152
+
153
+ specify "fail on should raise" do
154
+ lambda{raise ArgumentError}.assert.raise? SyntaxError
155
+ end
156
+
157
+ end
158
+
159
+ end
160
+
161
+ $no_autocheck = true
162
+
163
+ Quarry::Design.outline
164
+
165
+ =end
166
+
167
+
168
+ if __FILE__ == $0
169
+
170
+ Quarry::Design.spec "Example Specification" do
171
+
172
+ it "demontrates basic assertions" do
173
+
174
+ it "eg. 4 == 3 fails" do
175
+ 4.assert == 3
176
+ end
177
+
178
+ it "eg. 4 != 4 fails" do
179
+ 4.assert! == 4
180
+ end
181
+
182
+ it "eg. raises an ArgumentError does not raise a SyntaxError" do
183
+ lambda{raise ArgumentError}.assert.raise? SyntaxError
184
+ end
185
+
186
+ end
187
+
188
+ end
189
+
190
+ $no_autocheck = true
191
+
192
+ Quarry::Design.outline
193
+
194
+ end
195
+
@@ -0,0 +1,180 @@
1
+ module Quarry
2
+ require 'ostruct'
3
+
4
+ # = Stub
5
+ #
6
+ # A straightfoward stubbing facility. Typically used in test cases.
7
+ # The Stub class offers a few constructors for quickly building
8
+ # of stubs.
9
+ #
10
+ # stat - Returns a static reponse.
11
+ # echo - Returns the arguments passed-in.
12
+ # spin - Returns a rotation of responses.
13
+ # keys - Returns an index of responses.
14
+ #
15
+ # Stub classes can be built from sratch or partially framed
16
+ # against other classes.
17
+ #
18
+ # === Usage
19
+ #
20
+ # class ContextStub < Stub
21
+ # stat :response_headers, {}
22
+ # spin :host_url, ['http://www.nitrohq.com','http://www.rubyforge.com']
23
+ # end
24
+ #
25
+ # ctx = ContextStub.new
26
+ # ctx.response_headers['location'] = url
27
+ # ctx.host_url #=> "http://www.nitrohq.com"
28
+ # ctx.host_url #=> "http://www.rubyforge.com"
29
+ #
30
+ # === Note
31
+ #
32
+ # Quarry doesn't have Mocks, and may never. You can combine
33
+ # Stubs and Assertions fairly effectively to do essentailly
34
+ # what Mocks do, without having to learn yet another DSL
35
+ # for describing object behaviors.
36
+ #
37
+ class Stub < OpenStruct
38
+
39
+ # Certain methods are not mocked:
40
+ # inspect (tricky)
41
+ # class (delegated)
42
+ # kind_of? (delegated)
43
+ # is_a? (delegated)
44
+ # instance_of? (delegated)
45
+ # method (works as-is)
46
+ # send (works as-is)
47
+ # respond_to? (works as-is)
48
+ # hash (no way to mock)
49
+ #
50
+ # __id__, __call__, etc. (not meant to be stubbed, ever!)
51
+ #
52
+ UnstubbedMethods = %r{^(
53
+ |inspect
54
+ |kind_of\?|is_a\?|instance_of\?|class
55
+ |method|send|respond_to\?
56
+ |hash
57
+ |__
58
+ )}x
59
+
60
+ class << self
61
+ attr :realclass
62
+
63
+ def stubbed_methods
64
+ self.methods(false)
65
+ end
66
+
67
+ # Returns a static response.
68
+ def stat(sym, val)
69
+ define_method(sym){|*args| val}
70
+ end
71
+
72
+ # This one is dumb.
73
+ # Responds with input.
74
+ def echo(sym)
75
+ define_method(sym){|*args| args}
76
+ end
77
+
78
+ # This is probably dumb.
79
+ # Reponds with a rotation of reponses.
80
+ def spin( sym, arr )
81
+ define_method( sym ) { |*args| arr.push(arr.shift) ; arr[-1] }
82
+ end
83
+
84
+ # Responds according to a mapping of input parameters.
85
+ def keys( sym, hsh )
86
+ define_method( sym ) { |*args| hsh[args] }
87
+ end
88
+ end
89
+
90
+ alias :__class :class
91
+
92
+ # Delegate #class method.
93
+ def class # :nodoc:
94
+ return __class.realclass
95
+ end
96
+
97
+ # Delegate #instance_of? method.
98
+ def instance_of?(klass) # :nodoc:
99
+ self.class == klass
100
+ end
101
+
102
+ # Delegate #kind_of? method.
103
+ def kind_of?(klass) # :nodoc:
104
+ self.class <= klass
105
+ end
106
+
107
+ # Delegate #is_a? method.
108
+ alias_method :is_a?, :kind_of?
109
+
110
+ end # class Stub
111
+
112
+ ### Factory method for automatically creating semi-functional
113
+ ### stub classes given a real class. It looks like a constant
114
+ ### for purposes of syntactic sugar.
115
+ ###
116
+ ### class MyStub < Stub(X)
117
+ ### ...
118
+ ### end
119
+ ###
120
+ def self.Stub(realclass)
121
+
122
+ stubclass = Class.new(Stub)
123
+
124
+ stubclass.instance_eval{ @realclass = realclass }
125
+
126
+ # Provide an accessor to class instance var that holds the class
127
+ # object we're faking
128
+ class << stubclass
129
+ # The actual class being mocked
130
+ attr_reader :realclass
131
+
132
+ # Propagate the mocked class ivar to derivatives so it can be
133
+ # called like:
134
+ # class MockFoo < Mock(RealClass)
135
+ def inherited(subclass)
136
+ rc = self.realclass
137
+ subclass.instance_eval{ @realclass = rc }
138
+ end
139
+ end
140
+
141
+ # Build method definitions for all the mocked class's instance
142
+ # methods, as well as those given to it by its superclasses, since
143
+ # we're not really inheriting from it.
144
+ imethods = realclass.instance_methods(true).collect do |name|
145
+ next if name =~ Quarry::Stub::UnstubbedMethods
146
+
147
+ # Figure out the argument list
148
+ arity = realclass.instance_method(name).arity
149
+ optargs = false
150
+
151
+ if arity < 0
152
+ optargs = true
153
+ arity = (arity+1).abs
154
+ end
155
+
156
+ args = []
157
+ arity.times{|n| args << "arg#{n+1}"}
158
+ args << "*optargs" if optargs
159
+
160
+ # Build a method definition. Some methods need special
161
+ # declarations.
162
+ argsj = args.join(',')
163
+ case name.intern
164
+ when :initialize
165
+ "def initialize(#{argsj}) ; super ; end"
166
+ else
167
+ "def #{name}(#{argsj}) ; self.send(#{name},#{argsj}) ; end"
168
+ #"def %s( %s ) ; self.__mockRegisterCall(%s) ; end" %
169
+ # [ name, argstr, [":#{name}", *args].join(',') ]
170
+ end
171
+ end
172
+
173
+ # Now add the instance methods to the stubclass class
174
+ stubclass.class_eval imethods.join( "\n" )
175
+
176
+ return stubclass
177
+ end
178
+
179
+ end
180
+
@@ -0,0 +1,114 @@
1
+ require 'quarry/stub/overlay'
2
+
3
+ module Quarry
4
+
5
+ =begin
6
+ class Stub
7
+ def initialize(object)
8
+ @instance_delegate = object
9
+ end
10
+
11
+ def method_missing(s, *a, &b)
12
+ @instance_delegate.__send__(s, *a, &b)
13
+ end
14
+ end
15
+ =end
16
+
17
+ # Quarry's Stubbing facility.
18
+ #
19
+ # obj = "hello"
20
+ #
21
+ # obj.stub.upcase == "HeLLo"
22
+ #
23
+ # obj.upcase #=> "HeLLo"
24
+ #
25
+ # obj.stubless!
26
+ #
27
+ # obj.upcase #=> "HELLO"
28
+ #
29
+ class Stub < Module
30
+ attr :object
31
+
32
+ def initialize(object)
33
+ super()
34
+ @object = object
35
+ @table = {}
36
+ @overlay = Overlay.new
37
+ end
38
+
39
+ def __table__ ; @table ; end
40
+
41
+ def method_missing(meth, *args, &block)
42
+ table = @table
43
+ interface = [meth, args, block_given?]
44
+
45
+ table[interface] = nil
46
+
47
+ @overlay.define_method(meth) do |*args|
48
+ table[interface]
49
+ end
50
+
51
+ @overlay.append_features((class << @object; self; end))
52
+
53
+ Setter.new(table, interface)
54
+ end
55
+
56
+ #
57
+ class Setter
58
+ def initialize(table, interface)
59
+ @table = table
60
+ @interface = interface
61
+ end
62
+
63
+ def ==(result)
64
+ @table[@interface] = result
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ #
71
+ class ::Object
72
+
73
+ def stub
74
+ @_stub ||= Stub.new(self)
75
+ end
76
+
77
+ def remove_stubs
78
+ stub.instance_eval do
79
+ @overlay.remove_features((class << @object; self; end))
80
+ end
81
+ #stub.__table__.each do |interface, result|
82
+ # meth = interface[0]
83
+ # stub.module_eval do
84
+ # remove_method(meth)
85
+ # end
86
+ #end
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+
93
+ if $0 == __FILE__
94
+
95
+ # Only one possible stub definition per object?
96
+
97
+ obj = "hello"
98
+
99
+ obj.stub.upcase == "HeLLo"
100
+
101
+ p obj.upcase #=> "HeLLo"
102
+
103
+ # We could always copy it.
104
+
105
+ obj2 = obj.copy
106
+
107
+ # Eek that means we need to copy stub too (FIXME: initialize_copy)
108
+
109
+ obj.remove_stubs
110
+
111
+ p obj.upcase #=> "HELLO"
112
+
113
+ end
114
+
@@ -0,0 +1,66 @@
1
+ require 'quarry/stub'
2
+ require 'test/unit'
3
+
4
+ class TC_Stub < Test::Unit::TestCase
5
+
6
+ class S < Quarry::Stub
7
+ stat :m, 10
8
+ echo :e
9
+ spin :s, [1,2,3]
10
+ keys :i, { [:foo] => 'Hello', [:boo] => 'Frog' }
11
+
12
+ def a(k) k+1 end
13
+ end
14
+
15
+ def setup
16
+ @s = S.new
17
+ end
18
+
19
+ def test_stat
20
+ assert_equal(10, @s.m)
21
+ end
22
+
23
+ def test_echo
24
+ assert_equal([:hi], @s.e(:hi))
25
+ end
26
+
27
+ def test_spin
28
+ assert_equal(1, @s.s)
29
+ assert_equal(2, @s.s)
30
+ assert_equal(3, @s.s)
31
+ assert_equal(1, @s.s)
32
+ end
33
+
34
+ def test_keys
35
+ assert_equal('Hello', @s.i(:foo))
36
+ assert_equal('Frog', @s.i(:boo))
37
+ end
38
+
39
+ def assert_normal_method
40
+ assert_equal(2, @s.a(1))
41
+ end
42
+ end
43
+
44
+ class TC_Stub_Wrapper < Test::Unit::TestCase
45
+
46
+ class X
47
+ def a; "a"; end
48
+ def b; "b"; end
49
+ def c; "c"; end
50
+ end
51
+
52
+ class XS < Quarry::Stub(X)
53
+ end
54
+
55
+ def setup
56
+ @xs = XS.new
57
+ end
58
+
59
+ def test_responds
60
+ assert_equal(nil, @xs.a)
61
+ assert_equal(nil, @xs.b)
62
+ assert_equal(nil, @xs.c)
63
+ end
64
+
65
+ end
66
+
@@ -0,0 +1,141 @@
1
+ #require 'facet/kernel/within?'
2
+ require 'quarry/assert'
3
+
4
+ at_exit { Quarry::Test.autotest unless $no_autotest }
5
+
6
+ module Quarry
7
+ module Test
8
+
9
+ # TODO: make output compatible with unit_diff ?
10
+
11
+ def self.autotest
12
+ ::ObjectSpace.each_object(Suite) do |suite|
13
+ puts "Running test suite #{suite.description.upcase}:"
14
+ suite.cases.each do |kase|
15
+ puts "== #{kase.description.upcase}\n"
16
+ kase.units.each_with_index do |test, i|
17
+ kase.setup
18
+ begin
19
+ test.call
20
+
21
+ rescue Assertion => e
22
+ print "#{i+1}) #{test.description}"
23
+ print "\a FAIL! "
24
+ puts "[" + e.backtrace[2] + "]"
25
+ puts "#{e}\n" if $VERBOSE
26
+
27
+ rescue Exception => e
28
+ print "#{i+1}) #{test.description}"
29
+ print "\a ERROR! "
30
+ puts "[" + e.backtrace[2] + "]"
31
+ puts "#{e}\n" if $VERBOSE
32
+ #puts "#{klass}.#{meth}: #{e}"
33
+ ensure
34
+ kase.teardown
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ #
42
+
43
+ def self.suites
44
+ @suites ||= []
45
+ end
46
+
47
+ def self.suite(description, &testsuite)
48
+ suites << Suite.new(description, &testsuite)
49
+ end
50
+
51
+ # A test suite.
52
+
53
+ class Suite
54
+ attr :description
55
+
56
+ def initialize(description, &testsuite)
57
+ @description = description
58
+ @testsuite = testsuite
59
+ @testcases = []
60
+
61
+ instance_eval(&testsuite)
62
+ end
63
+
64
+ def cases
65
+ @testcases ||= []
66
+ end
67
+
68
+ def test_case(description, &testcase)
69
+ cases << Case.new(description, &testcase)
70
+ end
71
+ end
72
+
73
+ # A test case.
74
+
75
+ class Case
76
+ attr :description
77
+
78
+ def initialize(description, &testcase)
79
+ @description = description
80
+ @testcase = testcase
81
+ @testunits = []
82
+ instance_eval(&testcase)
83
+ end
84
+
85
+ def units
86
+ @testunits ||= []
87
+ end
88
+
89
+ def setup; end
90
+
91
+ def teardown; end
92
+
93
+ def test(description, &testunit)
94
+ units << Unit.new(description, &testunit)
95
+ end
96
+ end
97
+
98
+ # A test unit.
99
+
100
+ class Unit
101
+ attr :description
102
+
103
+ def initialize(description, &testunit)
104
+ @description = description
105
+ @testunit = testunit
106
+ end
107
+
108
+ def call
109
+ @testunit.call
110
+ end
111
+ end
112
+
113
+ end
114
+ end
115
+
116
+
117
+ # EXAMPLE
118
+
119
+ if __FILE__ == $0
120
+
121
+ Quarry::Test.suite "example suite" do
122
+
123
+ test_case "example case" do
124
+
125
+ test "4 should equal 3" do
126
+ 4.assert == 3
127
+ end
128
+
129
+ test "4 should not equal 4" do
130
+ 4.assert_not == 4
131
+ end
132
+
133
+ test "raises syntax error" do
134
+ lambda{raise SyntaxError}.should.raise? SyntaxError
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+
141
+ end