lookout 2.3.0 → 3.0.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 (328) hide show
  1. checksums.yaml +7 -0
  2. data/README +351 -181
  3. data/Rakefile +20 -5
  4. data/lib/lookout-3.0.rb +138 -0
  5. data/lib/lookout-3.0/actual.rb +30 -0
  6. data/lib/lookout-3.0/actual/method.rb +31 -0
  7. data/lib/lookout-3.0/actual/not.rb +13 -0
  8. data/lib/lookout-3.0/actual/not/method.rb +10 -0
  9. data/lib/lookout-3.0/aphonic.rb +44 -0
  10. data/lib/lookout-3.0/diff.rb +29 -0
  11. data/lib/{lookout → lookout-3.0}/diff/algorithms.rb +1 -1
  12. data/lib/lookout-3.0/diff/algorithms/difflib.rb +62 -0
  13. data/lib/lookout-3.0/diff/algorithms/difflib/position.rb +63 -0
  14. data/lib/{lookout/diff/algorithms/difflib/position/to.rb → lookout-3.0/diff/algorithms/difflib/position/new.rb} +8 -17
  15. data/lib/lookout-3.0/diff/formats.rb +5 -0
  16. data/lib/lookout-3.0/diff/formats/inline.rb +43 -0
  17. data/lib/lookout-3.0/diff/formats/set.rb +48 -0
  18. data/lib/lookout-3.0/diff/formats/unified.rb +56 -0
  19. data/lib/lookout-3.0/diff/group.rb +57 -0
  20. data/lib/lookout-3.0/diff/groups.rb +47 -0
  21. data/lib/lookout-3.0/diff/match.rb +31 -0
  22. data/lib/lookout-3.0/diff/operation.rb +41 -0
  23. data/lib/lookout-3.0/diff/operations.rb +35 -0
  24. data/lib/lookout-3.0/diff/operations/copy.rb +25 -0
  25. data/lib/lookout-3.0/diff/operations/delete.rb +5 -0
  26. data/lib/lookout-3.0/diff/operations/insert.rb +5 -0
  27. data/lib/lookout-3.0/diff/operations/replace.rb +6 -0
  28. data/lib/lookout-3.0/diff/slice.rb +97 -0
  29. data/lib/lookout-3.0/difference.rb +10 -0
  30. data/lib/lookout-3.0/difference/array.rb +22 -0
  31. data/lib/lookout-3.0/difference/exception.rb +40 -0
  32. data/lib/lookout-3.0/difference/hash.rb +31 -0
  33. data/lib/lookout-3.0/difference/lookout.rb +5 -0
  34. data/lib/lookout-3.0/difference/lookout/actual.rb +6 -0
  35. data/lib/lookout-3.0/difference/lookout/actual/method.rb +13 -0
  36. data/lib/lookout-3.0/difference/lookout/actual/not.rb +6 -0
  37. data/lib/lookout-3.0/difference/lookout/actual/not/method.rb +9 -0
  38. data/lib/lookout-3.0/difference/lookout/output.rb +8 -0
  39. data/lib/lookout-3.0/difference/lookout/reception.rb +21 -0
  40. data/lib/lookout-3.0/difference/lookout/warning.rb +9 -0
  41. data/lib/lookout-3.0/difference/module.rb +12 -0
  42. data/lib/lookout-3.0/difference/object.rb +73 -0
  43. data/lib/lookout-3.0/difference/range.rb +12 -0
  44. data/lib/lookout-3.0/difference/regexp.rb +12 -0
  45. data/lib/lookout-3.0/difference/string.rb +21 -0
  46. data/lib/lookout-3.0/difference/symbol.rb +21 -0
  47. data/lib/lookout-3.0/encode.rb +20 -0
  48. data/lib/lookout-3.0/exception.rb +79 -0
  49. data/lib/lookout-3.0/exception/backtrace.rb +65 -0
  50. data/lib/lookout-3.0/exception/unknown.rb +25 -0
  51. data/lib/lookout-3.0/expect.rb +32 -0
  52. data/lib/lookout-3.0/expect/classes.rb +6 -0
  53. data/lib/lookout-3.0/expect/classes/exception.rb +27 -0
  54. data/lib/lookout-3.0/expect/exception.rb +30 -0
  55. data/lib/lookout-3.0/expect/object.rb +54 -0
  56. data/lib/lookout-3.0/expect/object/context.rb +149 -0
  57. data/lib/lookout-3.0/expectations.rb +69 -0
  58. data/lib/lookout-3.0/expectations/context.rb +52 -0
  59. data/lib/lookout-3.0/expected.rb +10 -0
  60. data/lib/lookout-3.0/expected/array.rb +16 -0
  61. data/lib/lookout-3.0/expected/classes.rb +5 -0
  62. data/lib/lookout-3.0/expected/classes/exception.rb +14 -0
  63. data/lib/lookout-3.0/expected/exception.rb +46 -0
  64. data/lib/lookout-3.0/expected/falseclass.rb +9 -0
  65. data/lib/lookout-3.0/expected/hash.rb +14 -0
  66. data/lib/lookout-3.0/expected/lookout.rb +5 -0
  67. data/lib/lookout-3.0/expected/lookout/actual.rb +5 -0
  68. data/lib/lookout-3.0/expected/lookout/actual/method.rb +13 -0
  69. data/lib/lookout-3.0/expected/lookout/actual/not.rb +6 -0
  70. data/lib/lookout-3.0/expected/lookout/actual/not/method.rb +13 -0
  71. data/lib/lookout-3.0/expected/lookout/output.rb +26 -0
  72. data/lib/lookout-3.0/expected/lookout/reception.rb +24 -0
  73. data/lib/lookout-3.0/expected/lookout/warning.rb +29 -0
  74. data/lib/lookout-3.0/expected/module.rb +12 -0
  75. data/lib/lookout-3.0/expected/object.rb +30 -0
  76. data/lib/lookout-3.0/expected/range.rb +12 -0
  77. data/lib/lookout-3.0/expected/regexp.rb +12 -0
  78. data/lib/lookout-3.0/expected/string.rb +11 -0
  79. data/lib/lookout-3.0/expected/symbol.rb +21 -0
  80. data/lib/lookout-3.0/expected/trueclass.rb +9 -0
  81. data/lib/lookout-3.0/inspect.rb +45 -0
  82. data/lib/lookout-3.0/interfaces.rb +5 -0
  83. data/lib/lookout-3.0/interfaces/commandline.rb +109 -0
  84. data/lib/lookout-3.0/literal.rb +18 -0
  85. data/lib/lookout-3.0/mock.rb +24 -0
  86. data/lib/lookout-3.0/object.rb +6 -0
  87. data/lib/lookout-3.0/object/not.rb +16 -0
  88. data/lib/lookout-3.0/object/not/receive.rb +18 -0
  89. data/lib/lookout-3.0/object/to.rb +12 -0
  90. data/lib/lookout-3.0/object/to/receive.rb +18 -0
  91. data/lib/lookout-3.0/output.rb +20 -0
  92. data/lib/lookout-3.0/plugins.rb +7 -0
  93. data/lib/lookout-3.0/reception.rb +128 -0
  94. data/lib/lookout-3.0/reception/arguments.rb +20 -0
  95. data/lib/lookout-3.0/reception/arguments/any.rb +16 -0
  96. data/lib/lookout-3.0/reception/arguments/error.rb +5 -0
  97. data/lib/lookout-3.0/reception/arguments/list.rb +17 -0
  98. data/lib/lookout-3.0/reception/arguments/none.rb +6 -0
  99. data/lib/lookout-3.0/reception/error.rb +24 -0
  100. data/lib/lookout-3.0/result.rb +16 -0
  101. data/lib/lookout-3.0/results.rb +5 -0
  102. data/lib/lookout-3.0/results/error.rb +18 -0
  103. data/lib/lookout-3.0/results/failure.rb +15 -0
  104. data/lib/lookout-3.0/results/success.rb +7 -0
  105. data/lib/lookout-3.0/stub.rb +55 -0
  106. data/lib/lookout-3.0/version.rb +133 -0
  107. data/lib/lookout-3.0/warning.rb +40 -0
  108. data/test/unit/examples.rb +208 -83
  109. data/test/unit/{lookout.rb → lookout-3.0.rb} +0 -0
  110. data/test/unit/lookout-3.0/actual.rb +13 -0
  111. data/test/unit/lookout-3.0/actual/method.rb +31 -0
  112. data/test/unit/lookout-3.0/actual/not.rb +15 -0
  113. data/test/unit/lookout-3.0/actual/not/method.rb +7 -0
  114. data/test/unit/lookout-3.0/aphonic.rb +31 -0
  115. data/test/unit/{lookout → lookout-3.0}/diff.rb +0 -0
  116. data/test/unit/{lookout/diff/group.rb → lookout-3.0/diff/algorithms.rb} +0 -0
  117. data/test/unit/lookout-3.0/diff/algorithms/difflib.rb +56 -0
  118. data/test/unit/lookout-3.0/diff/algorithms/difflib/position.rb +92 -0
  119. data/test/unit/{lookout/diff/algorithms/difflib/position/to.rb → lookout-3.0/diff/algorithms/difflib/position/new.rb} +1 -2
  120. data/test/unit/{lookout/results.rb → lookout-3.0/diff/formats.rb} +0 -0
  121. data/test/unit/{lookout → lookout-3.0}/diff/formats/inline.rb +0 -0
  122. data/test/unit/lookout-3.0/diff/formats/set.rb +26 -0
  123. data/test/unit/{lookout → lookout-3.0}/diff/formats/unified.rb +0 -0
  124. data/test/unit/{lookout/results/error.rb → lookout-3.0/diff/group.rb} +0 -0
  125. data/test/unit/lookout-3.0/diff/groups.rb +102 -0
  126. data/test/unit/{lookout → lookout-3.0}/diff/match.rb +0 -0
  127. data/test/unit/lookout-3.0/diff/operation.rb +17 -0
  128. data/test/unit/lookout-3.0/diff/operations.rb +22 -0
  129. data/test/unit/lookout-3.0/diff/operations/copy.rb +50 -0
  130. data/test/unit/lookout-3.0/diff/operations/delete.rb +45 -0
  131. data/test/unit/lookout-3.0/diff/operations/insert.rb +45 -0
  132. data/test/unit/lookout-3.0/diff/operations/replace.rb +45 -0
  133. data/test/unit/lookout-3.0/diff/slice.rb +56 -0
  134. data/test/unit/{lookout/results/failures/behavior.rb → lookout-3.0/difference.rb} +0 -0
  135. data/test/unit/lookout-3.0/difference/array.rb +32 -0
  136. data/test/unit/lookout-3.0/difference/exception.rb +69 -0
  137. data/test/unit/lookout-3.0/difference/hash.rb +30 -0
  138. data/test/unit/{lookout/results/failures/state.rb → lookout-3.0/difference/lookout.rb} +0 -0
  139. data/test/unit/{lookout/results/fulfilled.rb → lookout-3.0/difference/lookout/actual.rb} +0 -0
  140. data/test/unit/lookout-3.0/difference/lookout/actual/method.rb +7 -0
  141. data/test/unit/{lookout/runners/console.rb → lookout-3.0/difference/lookout/actual/not.rb} +0 -0
  142. data/test/unit/lookout-3.0/difference/lookout/actual/not/method.rb +7 -0
  143. data/test/unit/lookout-3.0/difference/lookout/output.rb +11 -0
  144. data/test/unit/lookout-3.0/difference/lookout/reception.rb +11 -0
  145. data/test/unit/lookout-3.0/difference/lookout/warning.rb +11 -0
  146. data/test/unit/lookout-3.0/difference/module.rb +11 -0
  147. data/test/unit/lookout-3.0/difference/object.rb +31 -0
  148. data/test/unit/lookout-3.0/difference/range.rb +11 -0
  149. data/test/unit/lookout-3.0/difference/regexp.rb +11 -0
  150. data/test/unit/lookout-3.0/difference/string.rb +29 -0
  151. data/test/unit/lookout-3.0/difference/symbol.rb +11 -0
  152. data/test/unit/lookout-3.0/encode.rb +28 -0
  153. data/test/unit/lookout-3.0/exception.rb +107 -0
  154. data/test/unit/lookout-3.0/exception/backtrace.rb +75 -0
  155. data/test/unit/lookout-3.0/exception/unknown.rb +23 -0
  156. data/test/unit/lookout-3.0/expect.rb +15 -0
  157. data/test/unit/{lookout/ui/console.rb → lookout-3.0/expect/classes.rb} +0 -0
  158. data/test/unit/lookout-3.0/expect/classes/exception.rb +41 -0
  159. data/test/unit/lookout-3.0/expect/exception.rb +63 -0
  160. data/test/unit/lookout-3.0/expect/object.rb +55 -0
  161. data/test/unit/lookout-3.0/expect/object/context.rb +120 -0
  162. data/test/unit/lookout-3.0/expectations.rb +55 -0
  163. data/test/unit/lookout-3.0/expectations/context.rb +44 -0
  164. data/test/unit/lookout-3.0/expected.rb +4 -0
  165. data/test/unit/lookout-3.0/expected/array.rb +19 -0
  166. data/test/unit/lookout-3.0/expected/classes.rb +4 -0
  167. data/test/unit/lookout-3.0/expected/classes/exception.rb +7 -0
  168. data/test/unit/lookout-3.0/expected/exception.rb +24 -0
  169. data/test/unit/lookout-3.0/expected/falseclass.rb +23 -0
  170. data/test/unit/lookout-3.0/expected/hash.rb +23 -0
  171. data/test/unit/lookout-3.0/expected/lookout.rb +4 -0
  172. data/test/unit/lookout-3.0/expected/lookout/actual.rb +4 -0
  173. data/test/unit/lookout-3.0/expected/lookout/actual/method.rb +11 -0
  174. data/test/unit/lookout-3.0/expected/lookout/actual/not.rb +4 -0
  175. data/test/unit/lookout-3.0/expected/lookout/actual/not/method.rb +11 -0
  176. data/test/unit/lookout-3.0/expected/lookout/output.rb +27 -0
  177. data/test/unit/lookout-3.0/expected/lookout/reception.rb +25 -0
  178. data/test/unit/lookout-3.0/expected/lookout/warning.rb +48 -0
  179. data/test/unit/lookout-3.0/expected/module.rb +23 -0
  180. data/test/unit/lookout-3.0/expected/object.rb +24 -0
  181. data/test/unit/lookout-3.0/expected/range.rb +19 -0
  182. data/test/unit/lookout-3.0/expected/regexp.rb +19 -0
  183. data/test/unit/lookout-3.0/expected/string.rb +44 -0
  184. data/test/unit/lookout-3.0/expected/symbol.rb +35 -0
  185. data/test/unit/lookout-3.0/expected/trueclass.rb +23 -0
  186. data/test/unit/lookout-3.0/inspect.rb +39 -0
  187. data/test/unit/lookout-3.0/interfaces.rb +4 -0
  188. data/test/unit/lookout-3.0/interfaces/commandline.rb +4 -0
  189. data/test/unit/lookout-3.0/literal.rb +15 -0
  190. data/test/unit/lookout-3.0/mock.rb +22 -0
  191. data/test/unit/lookout-3.0/object.rb +4 -0
  192. data/test/unit/lookout-3.0/object/not.rb +7 -0
  193. data/test/unit/lookout-3.0/object/not/receive.rb +9 -0
  194. data/test/unit/lookout-3.0/object/to.rb +7 -0
  195. data/test/unit/lookout-3.0/object/to/receive.rb +9 -0
  196. data/test/unit/lookout-3.0/output.rb +31 -0
  197. data/test/unit/lookout-3.0/plugins.rb +4 -0
  198. data/test/unit/lookout-3.0/reception.rb +86 -0
  199. data/test/unit/lookout-3.0/reception/arguments.rb +23 -0
  200. data/test/unit/lookout-3.0/reception/arguments/any.rb +15 -0
  201. data/test/unit/lookout-3.0/reception/arguments/error.rb +4 -0
  202. data/test/unit/lookout-3.0/reception/arguments/list.rb +19 -0
  203. data/test/unit/lookout-3.0/reception/arguments/none.rb +15 -0
  204. data/test/unit/lookout-3.0/reception/error.rb +4 -0
  205. data/test/unit/lookout-3.0/result.rb +27 -0
  206. data/test/unit/lookout-3.0/results.rb +4 -0
  207. data/test/unit/lookout-3.0/results/error.rb +37 -0
  208. data/test/unit/lookout-3.0/results/failure.rb +21 -0
  209. data/test/unit/lookout-3.0/results/success.rb +4 -0
  210. data/test/unit/lookout-3.0/stub.rb +53 -0
  211. data/test/unit/lookout-3.0/version.rb +4 -0
  212. data/test/unit/lookout-3.0/warning.rb +47 -0
  213. metadata +1159 -456
  214. data/lib/lookout.rb +0 -30
  215. data/lib/lookout/aphonic.rb +0 -40
  216. data/lib/lookout/diff.rb +0 -10
  217. data/lib/lookout/diff/algorithms/difflib.rb +0 -38
  218. data/lib/lookout/diff/algorithms/difflib/position.rb +0 -92
  219. data/lib/lookout/diff/formats.rb +0 -7
  220. data/lib/lookout/diff/formats/hash.rb +0 -53
  221. data/lib/lookout/diff/formats/inline.rb +0 -39
  222. data/lib/lookout/diff/formats/unified.rb +0 -57
  223. data/lib/lookout/diff/group.rb +0 -61
  224. data/lib/lookout/diff/groups.rb +0 -34
  225. data/lib/lookout/diff/match.rb +0 -36
  226. data/lib/lookout/diff/operation.rb +0 -33
  227. data/lib/lookout/diff/operations.rb +0 -36
  228. data/lib/lookout/diff/operations/delete.rb +0 -9
  229. data/lib/lookout/diff/operations/equal.rb +0 -27
  230. data/lib/lookout/diff/operations/insert.rb +0 -9
  231. data/lib/lookout/diff/operations/replace.rb +0 -9
  232. data/lib/lookout/diff/range.rb +0 -91
  233. data/lib/lookout/equalities.rb +0 -13
  234. data/lib/lookout/equalities/array.rb +0 -22
  235. data/lib/lookout/equalities/boolean.rb +0 -9
  236. data/lib/lookout/equalities/hash.rb +0 -25
  237. data/lib/lookout/equalities/include.rb +0 -9
  238. data/lib/lookout/equalities/object.rb +0 -24
  239. data/lib/lookout/equalities/output.rb +0 -19
  240. data/lib/lookout/equalities/standarderror.rb +0 -32
  241. data/lib/lookout/equalities/string.rb +0 -19
  242. data/lib/lookout/equalities/warning.rb +0 -16
  243. data/lib/lookout/equality.rb +0 -36
  244. data/lib/lookout/expectation.rb +0 -69
  245. data/lib/lookout/expectations.rb +0 -49
  246. data/lib/lookout/expectations/behavior.rb +0 -20
  247. data/lib/lookout/expectations/line.rb +0 -29
  248. data/lib/lookout/expectations/state.rb +0 -31
  249. data/lib/lookout/expectations/state/warning.rb +0 -26
  250. data/lib/lookout/mock.rb +0 -20
  251. data/lib/lookout/mock/method.rb +0 -70
  252. data/lib/lookout/mock/method/arguments.rb +0 -33
  253. data/lib/lookout/mock/method/arguments/any.rb +0 -11
  254. data/lib/lookout/mock/method/arguments/anything.rb +0 -11
  255. data/lib/lookout/mock/method/arguments/list.rb +0 -15
  256. data/lib/lookout/mock/method/arguments/none.rb +0 -11
  257. data/lib/lookout/mock/method/arguments/one.rb +0 -11
  258. data/lib/lookout/mock/method/calls.rb +0 -11
  259. data/lib/lookout/mock/method/calls/class.rb +0 -21
  260. data/lib/lookout/mock/method/calls/exactly.rb +0 -28
  261. data/lib/lookout/mock/method/calls/instance.rb +0 -25
  262. data/lib/lookout/mock/method/calls/lower.rb +0 -22
  263. data/lib/lookout/mock/method/calls/upper.rb +0 -22
  264. data/lib/lookout/mock/methods.rb +0 -12
  265. data/lib/lookout/mock/object.rb +0 -12
  266. data/lib/lookout/object.rb +0 -11
  267. data/lib/lookout/output.rb +0 -21
  268. data/lib/lookout/rake/tasks.rb +0 -36
  269. data/lib/lookout/rake/tasks/gem.rb +0 -49
  270. data/lib/lookout/rake/tasks/tags.rb +0 -16
  271. data/lib/lookout/rake/tasks/test.rb +0 -46
  272. data/lib/lookout/rake/tasks/test/loader.rb +0 -22
  273. data/lib/lookout/recorder.rb +0 -45
  274. data/lib/lookout/recorder/not.rb +0 -11
  275. data/lib/lookout/recorder/tape.rb +0 -21
  276. data/lib/lookout/recorders.rb +0 -6
  277. data/lib/lookout/recorders/reception.rb +0 -47
  278. data/lib/lookout/recorders/state.rb +0 -35
  279. data/lib/lookout/result.rb +0 -13
  280. data/lib/lookout/results.rb +0 -25
  281. data/lib/lookout/results/error.rb +0 -18
  282. data/lib/lookout/results/error/exception.rb +0 -34
  283. data/lib/lookout/results/error/exception/backtrace.rb +0 -50
  284. data/lib/lookout/results/failure.rb +0 -16
  285. data/lib/lookout/results/failures.rb +0 -6
  286. data/lib/lookout/results/failures/behavior.rb +0 -5
  287. data/lib/lookout/results/failures/state.rb +0 -5
  288. data/lib/lookout/results/fulfilled.rb +0 -5
  289. data/lib/lookout/results/unsuccessful.rb +0 -31
  290. data/lib/lookout/runners.rb +0 -6
  291. data/lib/lookout/runners/console.rb +0 -49
  292. data/lib/lookout/runners/trackers.rb +0 -5
  293. data/lib/lookout/runners/trackers/failure.rb +0 -14
  294. data/lib/lookout/stub.rb +0 -18
  295. data/lib/lookout/stub/method.rb +0 -105
  296. data/lib/lookout/stub/methods.rb +0 -18
  297. data/lib/lookout/stub/object.rb +0 -11
  298. data/lib/lookout/ui.rb +0 -7
  299. data/lib/lookout/ui/console.rb +0 -19
  300. data/lib/lookout/ui/silent.rb +0 -9
  301. data/lib/lookout/version.rb +0 -5
  302. data/lib/lookout/warning.rb +0 -7
  303. data/lib/lookout/xml.rb +0 -17
  304. data/test/unit/lookout/diff/algorithms/difflib.rb +0 -56
  305. data/test/unit/lookout/diff/algorithms/difflib/position.rb +0 -92
  306. data/test/unit/lookout/diff/groups.rb +0 -102
  307. data/test/unit/lookout/diff/operations.rb +0 -22
  308. data/test/unit/lookout/diff/operations/delete.rb +0 -45
  309. data/test/unit/lookout/diff/operations/equal.rb +0 -45
  310. data/test/unit/lookout/diff/operations/insert.rb +0 -45
  311. data/test/unit/lookout/diff/operations/replace.rb +0 -45
  312. data/test/unit/lookout/diff/range.rb +0 -50
  313. data/test/unit/lookout/equality.rb +0 -113
  314. data/test/unit/lookout/expectation.rb +0 -47
  315. data/test/unit/lookout/expectations.rb +0 -36
  316. data/test/unit/lookout/expectations/behavior.rb +0 -35
  317. data/test/unit/lookout/expectations/line.rb +0 -29
  318. data/test/unit/lookout/expectations/state.rb +0 -29
  319. data/test/unit/lookout/mock/method.rb +0 -143
  320. data/test/unit/lookout/mock/method/arguments.rb +0 -57
  321. data/test/unit/lookout/mock/method/arguments/any.rb +0 -11
  322. data/test/unit/lookout/recorder.rb +0 -11
  323. data/test/unit/lookout/results/error/exception/backtrace.rb +0 -20
  324. data/test/unit/lookout/results/unsuccessful.rb +0 -9
  325. data/test/unit/lookout/runners/trackers/failure.rb +0 -30
  326. data/test/unit/lookout/stub/method.rb +0 -48
  327. data/test/unit/lookout/stub/methods.rb +0 -19
  328. data/test/unit/lookout/xml.rb +0 -55
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Arguments that should be passed to a method reception expectation. Sets
4
+ # things up based on what kind of arguments were passed to it and may then be
5
+ # used to {List#=~ verify} that arguments that don’t {Lookout::Difference
6
+ # differ} from them are subsequently passed to the method.
7
+ module Lookout::Reception::Arguments
8
+ class << self
9
+ # @param [Object, …] args
10
+ # @return [Any, List, None] {Any} if ARGS is #empty?, {Any} or {None} if
11
+ # ARGS contain either, or a {List} wrapping ARGS
12
+ def for(*args)
13
+ if args.empty? then Any.new
14
+ elsif any = args.find{ |e| Any === e } then any
15
+ elsif none = args.find{ |e| None === e } then none
16
+ else List.new(*args)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Arguments matcher matching any arguments.
4
+ class Lookout::Reception::Arguments::Any
5
+ # @param [Array<Object>] other
6
+ # @return [true]
7
+ def =~(other) true end
8
+
9
+ # @return True if the receiver’s class `#==` that of OTHER
10
+ def ==(other) self.class == other.class end
11
+ alias eql? ==
12
+ def hash; self.class.hash end
13
+
14
+ # @return The receiver as a String argument list
15
+ def to_s; '*args, &block' end
16
+ end
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Error raised when the passed arguments differ from the expected ones.
4
+ class Lookout::Reception::Arguments::Error < StandardError
5
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Arguments matcher matching a list of arguments. It uses
4
+ # {Lookout::Difference} to do the actual work.
5
+ class Lookout::Reception::Arguments::List
6
+ # Expects ARGS.
7
+ # @param [Object, …] args
8
+ Value(:'*args')
9
+
10
+ # @param [Array<Object>] other
11
+ # @return True if there are no {Expected::Object#difference
12
+ # differences} between the expected arguments and OTHER
13
+ def =~(other) not args.to_lookout_expected.difference(other) end
14
+
15
+ # @return The receiver as a String argument list
16
+ def to_s; Lookout::Inspect.args(*args) end
17
+ end
@@ -0,0 +1,6 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Arguments matcher matching an empty list of arguments.
4
+ class Lookout::Reception::Arguments::None < Lookout::Reception::Arguments::List
5
+ def initialize; super end
6
+ end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Error raised when a method is received too many times.
4
+ class Lookout::Reception::Error < StandardError
5
+ class << self
6
+ # @param [Reception] reception
7
+ # @param [Integer] calls
8
+ # @return [Error] A new error with a suitable error message for the
9
+ # RECEPTION of a method, where CALLS is outside the RANGE of expected
10
+ # calls.
11
+ def from(reception, calls, range)
12
+ new('%s: unexpected number of invocations (%d for %s)' %
13
+ [reception,
14
+ calls,
15
+ if range.begin == range.end
16
+ range.begin
17
+ elsif range.end == 1.0/0
18
+ '%d..' % range.begin
19
+ else
20
+ range
21
+ end])
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Base module for {Results}.
4
+ module Lookout::Result
5
+ # Initializes the result pertaining to the expect block defined on LINE in
6
+ # the expanded path to FILE.
7
+ # @param [String] file The expanded path of the file containing the expect
8
+ # block that this result pertains to
9
+ # @param [Integer] line The line in FILE on which the expectation that this
10
+ # result pertains to is defined
11
+ Value(:file, :line, :comparable => true)
12
+ public :file, :line
13
+
14
+ # @return A String formatted according to the GNU standard for error messages
15
+ def to_s; '%s:%d' % [file, line] end
16
+ end
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Namespace for {Result} types.
4
+ module Lookout::Results
5
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # An error result used when the evalution of an {Expect expect block} failed.
4
+ class Lookout::Results::Error
5
+ include Lookout::Result
6
+
7
+ # (see Result#initialize)
8
+ # An additional MESSAGE may also be associated with the result, which was
9
+ # caused by EXCEPTION.
10
+ # @param (see Result#initialize)
11
+ # @param [String, nil] message Any additional message associated with this
12
+ # error
13
+ # @param [Exception] exception The raised exception
14
+ Value(:file, :line, :message, :exception, :comparable => [:file, :line])
15
+ public :message, :exception
16
+
17
+ def to_s; [super, message, exception.format].compact.join(': ') end
18
+ end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # A failed result used when the actual result of an expect block exhibits
4
+ # differences from the expected value.
5
+ class Lookout::Results::Failure
6
+ include Lookout::Result
7
+
8
+ # (see Result#initialize)
9
+ # The DIFFERENCE report between the actual result and the expected value
10
+ # will be used to display this information to the user.
11
+ # @param [Difference::Object] difference
12
+ Value(:file, :line, :difference, :comparable => [:file, :line])
13
+
14
+ def to_s; [super, difference].join(': ') end
15
+ end
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # A successful result used when the actual result of an expect block exhibits
4
+ # no differences from the expected value.
5
+ class Lookout::Results::Success
6
+ include Lookout::Result
7
+ end
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Object that only responds to a given set of methods and returns itself
4
+ # whenever it receives a method call it doesn’t know anything about.
5
+ class Lookout::Stub
6
+ class << self
7
+ # Defines METHOD on an objects META object to VALUE. If _value_ is a Proc
8
+ # it’ll be used as a method definition with rules that depend on if whether
9
+ # it’s a lambda or not. Otherwise, the method definition will be set up to
10
+ # return VALUE.
11
+ # @param [Object] meta
12
+ # @param [Symbol] method
13
+ # @param [Object] value
14
+ def define(meta, method, value)
15
+ meta.instance_eval{
16
+ case value
17
+ when Proc
18
+ if (value.lambda? rescue false)
19
+ define_method method, value
20
+ else
21
+ define_method method do |*args, &block|
22
+ value.call(*args, &block)
23
+ end
24
+ end
25
+ else
26
+ define_method method do |*|
27
+ value
28
+ end
29
+ end
30
+ }
31
+ end
32
+ end
33
+
34
+ # Maps each method name key in METHODS to its value definition. If the value
35
+ # of the key is a Proc it’ll be used as the method definition. Otherwise,
36
+ # the method definition will be set up to return VALUE.
37
+ # @param [Hash<Symbol,Object>] methods
38
+ def initialize(methods = {})
39
+ (class << self; self; end).module_eval do
40
+ methods.each do |name, value|
41
+ Lookout::Stub.define self, name, value
42
+ end
43
+ end unless methods.empty?
44
+ end
45
+
46
+ def inspect; 'stub' end
47
+
48
+ private
49
+
50
+ # Ignores any method calls that it doesn’t know anything about.
51
+ # @param [Symbol] method
52
+ # @param [Object, …] args
53
+ # @return [self]
54
+ def method_missing(method, *args) self end
55
+ end
@@ -0,0 +1,133 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'inventory-1.0'
4
+
5
+ module Lookout
6
+ Version = Inventory.new(3, 0, 0){
7
+ def dependencies
8
+ super + Inventory::Dependencies.new{
9
+ development 'inventory-rake', 1, 4, 0
10
+ development 'inventory-rake-tasks-yard', 1, 3, 0
11
+ development 'lookout-rake', 3, 0, 0
12
+ development 'yard', 0, 8, 0
13
+ development 'yard-heuristics', 1, 1, 0
14
+ development 'yard-value', 1, 2, 0
15
+
16
+ runtime 'value', 1, 1, 0
17
+ }
18
+ end
19
+
20
+ def requires
21
+ %w[stringio]
22
+ end
23
+
24
+ def package_libs
25
+ %w[object.rb
26
+ aphonic.rb
27
+ actual.rb
28
+ actual/method.rb
29
+ actual/not.rb
30
+ actual/not/method.rb
31
+ diff.rb
32
+ diff/slice.rb
33
+ diff/algorithms.rb
34
+ diff/algorithms/difflib.rb
35
+ diff/algorithms/difflib/position.rb
36
+ diff/algorithms/difflib/position/new.rb
37
+ diff/formats.rb
38
+ diff/formats/inline.rb
39
+ diff/formats/set.rb
40
+ diff/formats/unified.rb
41
+ diff/group.rb
42
+ diff/groups.rb
43
+ diff/match.rb
44
+ diff/operation.rb
45
+ diff/operations.rb
46
+ diff/operations/delete.rb
47
+ diff/operations/copy.rb
48
+ diff/operations/insert.rb
49
+ diff/operations/replace.rb
50
+ difference.rb
51
+ difference/object.rb
52
+ difference/array.rb
53
+ difference/exception.rb
54
+ difference/hash.rb
55
+ difference/range.rb
56
+ difference/lookout.rb
57
+ difference/lookout/actual.rb
58
+ difference/lookout/actual/method.rb
59
+ difference/lookout/actual/not.rb
60
+ difference/lookout/actual/not/method.rb
61
+ difference/lookout/output.rb
62
+ difference/lookout/reception.rb
63
+ difference/lookout/warning.rb
64
+ difference/module.rb
65
+ difference/regexp.rb
66
+ difference/string.rb
67
+ difference/symbol.rb
68
+ encode.rb
69
+ exception.rb
70
+ exception/backtrace.rb
71
+ exception/unknown.rb
72
+ expect.rb
73
+ expect/object.rb
74
+ expect/object/context.rb
75
+ expect/classes.rb
76
+ expect/classes/exception.rb
77
+ expect/exception.rb
78
+ expected.rb
79
+ expected/object.rb
80
+ expected/array.rb
81
+ expected/classes.rb
82
+ expected/classes/exception.rb
83
+ expected/exception.rb
84
+ expected/falseclass.rb
85
+ expected/hash.rb
86
+ expected/lookout.rb
87
+ expected/lookout/actual.rb
88
+ expected/lookout/actual/method.rb
89
+ expected/lookout/actual/not.rb
90
+ expected/lookout/actual/not/method.rb
91
+ expected/lookout/output.rb
92
+ expected/lookout/reception.rb
93
+ expected/lookout/warning.rb
94
+ expected/module.rb
95
+ expected/range.rb
96
+ expected/regexp.rb
97
+ expected/string.rb
98
+ expected/symbol.rb
99
+ expected/trueclass.rb
100
+ expectations.rb
101
+ expectations/context.rb
102
+ inspect.rb
103
+ interfaces.rb
104
+ interfaces/commandline.rb
105
+ literal.rb
106
+ stub.rb
107
+ mock.rb
108
+ output.rb
109
+ plugins.rb
110
+ reception.rb
111
+ reception/arguments.rb
112
+ reception/arguments/any.rb
113
+ reception/arguments/error.rb
114
+ reception/arguments/list.rb
115
+ reception/arguments/none.rb
116
+ reception/error.rb
117
+ object/not.rb
118
+ object/not/receive.rb
119
+ object/to.rb
120
+ object/to/receive.rb
121
+ result.rb
122
+ results.rb
123
+ results/error.rb
124
+ results/failure.rb
125
+ results/success.rb
126
+ warning.rb]
127
+ end
128
+
129
+ def additional_unit_tests
130
+ %w[examples.rb]
131
+ end
132
+ }
133
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Warning expectation proxy. Used to expect warning outputs during the
4
+ # execution of the {Lookout::Expect expect block}. Warnings are matched by
5
+ # ignoring any trailing newlines and by removing any file/line warning
6
+ # prefixes. This is done as Ruby internally uses two different functions to
7
+ # generate warnings (rb_warn() and rb_warning()).
8
+ class Lookout::Warning < Lookout::Output
9
+ # Proxies the EXPECTED warning output.
10
+ # @param (see Output#initialize)
11
+ def initialize(expected) super expected.chomp end
12
+
13
+ # @return True if the receiver `#==` OTHER or if their classes and normalized
14
+ # expected output `#==` each other
15
+ def ===(other)
16
+ self == other or
17
+ (self.class == other.class and normalized == other.normalized)
18
+ end
19
+
20
+ def inspect; 'warning(%p)' % expected end
21
+
22
+ # @return [Enumerable<String>] An Enumerable over the formatted operations
23
+ # that would have to be applied to the actual warning output to get the
24
+ # expected warning output after any normalization of the warning outputs
25
+ # have been performed
26
+ def diff(other)
27
+ self == normalized ? super(other.normalized) : normalized.diff(other)
28
+ end
29
+
30
+ # @return [Expected::Lookout::Warning] A wrapper around the receiver, making
31
+ # it an expected value
32
+ def to_lookout_expected; Lookout::Expected::Lookout::Warning.new(self) end
33
+
34
+ protected
35
+
36
+ def normalized
37
+ normalized = expected.sub(/\A.*?:\d+: warning: /, '')
38
+ expected == normalized ? self : self.class.new(normalized)
39
+ end
40
+ end
@@ -8,42 +8,62 @@ Expectations do
8
8
  1 + 1
9
9
  end
10
10
 
11
- # Determine if the result, retrieved through a stub, equals a value.
12
- expect 2 do
13
- Object.new.tap{ |o| stub(o).two{ 2 } }.two
11
+ # Verify that an exception is raised.
12
+ expect ArgumentError do
13
+ Integer('1 + 1')
14
14
  end
15
15
 
16
- # Match against a Regexp. Please note the use of parentheses to silence
17
- # warnings.
18
- expect(/a string/) do
19
- 'a string'
16
+ # Verify that the result is an Array.
17
+ expect Array do
18
+ [1, 2, 3].select{ |i| i % 2 == 0 }
19
+ end
20
+
21
+ # Verify that the result is what we expect it to be.
22
+ expect [2, 4, 6] do
23
+ [1, 2, 3].map{ |i| i * 2 }
24
+ end
25
+
26
+ # Check that the result is within a given range.
27
+ expect 0.099..0.101 do
28
+ 0.4 - 0.3
20
29
  end
21
30
 
22
- # Match inside a Range.
23
- expect 1..5 do
24
- 3
31
+ # Check an explicit result.
32
+ expect 'ab' do
33
+ 'abc'[0..1]
25
34
  end
26
35
 
27
- # Verify that the result is an Enumerable.
36
+ # Match against a regexp (using %r{…} syntax to avoid a warning).
37
+ expect %r{a substring} do
38
+ 'a string with a substring'
39
+ end
40
+
41
+
42
+ # Modules and Classes
43
+
44
+ # Check that the result includes a given module.
28
45
  expect Enumerable do
29
46
  []
30
47
  end
31
48
 
32
- # Verify that the result is a String.
49
+ # Check that the result is of a given class.
33
50
  expect String do
34
51
  'a string'
35
52
  end
36
53
 
37
- # Determine equality of modules.
54
+ # Verify the equality of modules.
38
55
  expect Enumerable do
39
56
  Enumerable
40
57
  end
41
58
 
42
- # Determine equality of classes.
59
+ # Verify the equality of classes.
43
60
  expect String do
44
61
  String
45
62
  end
46
63
 
64
+
65
+ # Booleans
66
+
47
67
  # Verify that the result is truthful.
48
68
  expect true do
49
69
  1
@@ -54,43 +74,53 @@ Expectations do
54
74
  nil
55
75
  end
56
76
 
57
- # Verify that the result is actually true.
77
+ # Verify that the result is literally true.
58
78
  expect TrueClass do
59
79
  true
60
80
  end
61
81
 
62
- # Verify that the result is actually false.
82
+ # Verify that the result is literally false.
63
83
  expect FalseClass do
64
84
  false
65
85
  end
66
86
 
67
- # Match XML contents, ignoring whitespace between tags.
68
- expect xml('<a><foo>bar</foo></a>') do
69
- "<a>\n\t<foo>bar</foo> \n</a>"
70
- end
71
87
 
72
- # Match XML contents, ignoring whitespace between tags.
73
- expect xml(<<-EOX) do
74
- <one>
75
- <two>
76
- <three>4</three>
77
- <five> 6 </five>
78
- </two>
79
- </one>
80
- EOX
81
- '<one><two><three>4</three>
82
- <five> 6 </five>
83
- </two></one>'
84
- end
88
+ # Output
85
89
 
86
90
  # Verify that the given text is output.
87
91
  expect output("abc\ndef\n") do |io|
88
92
  io.puts 'abc', 'def'
89
93
  end
90
94
 
95
+
96
+ # Warnings
97
+
98
+ # Expect a warning to be output.
99
+ expect warning('this is your final one!') do
100
+ warn 'this is your final one!'
101
+ end
102
+
103
+ # Expect a warning to be output; the “header” is automatically ignored.
104
+ expect warning('this is your final one!') do
105
+ warn '%s:%d: warning: this is your final one!' % [__FILE__, __LINE__]
106
+ end
107
+
108
+
109
+ # Verbosity
110
+
111
+ # Use #with_verbose to set $VERBOSE during the execution of a block.
112
+ expect nil do
113
+ with_verbose nil do
114
+ $VERBOSE
115
+ end
116
+ end
117
+
118
+
119
+ # Exceptions
120
+
91
121
  # Verify that an exception is raised.
92
- expect NoMethodError do
93
- Object.no_method
122
+ expect ArgumentError do
123
+ Integer('1 + 1')
94
124
  end
95
125
 
96
126
  # Verify that an exception with a specific message is raised.
@@ -103,90 +133,185 @@ Expectations do
103
133
  raise StandardError.new('message')
104
134
  end
105
135
 
106
- # State-based Fluent Boolean Expectations
107
136
 
108
- # Expect an object to “be” something.
109
- expect(Class.new{ attr_accessor :running }.new.to.be.running) do |process|
110
- process.running = true
137
+ # Query Expectations
138
+
139
+ # Expect #empty? on the result to be true.
140
+ expect :empty? do
141
+ []
142
+ end
143
+
144
+ # Equivalently, but less explicitly, expect #empty? on the result to be true.
145
+ expect true do
146
+ []
147
+ end
148
+
149
+ # Expect #empty? on the result to be false.
150
+ expect :not_empty? do
151
+ [1, 2, 3]
152
+ end
153
+
154
+ # Equivalently, but less explicitly, expect #empty? on the result to be false.
155
+ expect false do
156
+ [1, 2, 3].empty?
157
+ end
158
+
159
+
160
+ # Explicit Query Expectations
161
+
162
+ # Expect [1, 2, 3] with all even integers removed to include 1.
163
+ expect result.to.include? 1 do
164
+ [1, 2, 3].reject{ |e| e.even? }
165
+ end
166
+
167
+ # Expect [1, 2, 3] with all even integers removed not to include 2.
168
+ expect result.not.to.include? 2 do
169
+ [1, 2, 3].reject{ |e| e.even? }
111
170
  end
112
171
 
113
- # Expect an object to “have” something.
114
- expect(Class.new{ attr_accessor :finished }.new.to.have.finished) do |process|
115
- process.finished = true
172
+ # Equivalently, but less explicitly, though marginally faster, expect [1, 2,
173
+ # 3] with all even integers not to include 2.
174
+ expect false do
175
+ [1, 2, 3].reject{ |e| e.even? }.include? 2
116
176
  end
117
177
 
118
- # Expect nil to respond to #nil?.
119
- expect nil.to.respond_to? :nil?
120
178
 
121
- # Expect nil to be nil.
122
- expect nil.to.be.nil?
179
+ # Literal Expectations
180
+
181
+ # Expect the symbol :empty?, not #empty? on the result to be true.
182
+ expect literal(:empty?) do
183
+ :empty?
184
+ end
185
+
123
186
 
124
- # Expect Object not to be nil.
125
- expect Object.not.to.be.nil?
126
187
 
127
188
  # Behavior-based Expectations
128
189
 
129
190
  # Use a mock to verify that a method is called appropriately.
130
- expect mock.to.receive.dial('2125551212').twice do |phone|
131
- phone.dial('2125551212')
132
- phone.dial('2125551212')
191
+ expect mock.to.receive.to_str(without_arguments){ '123' } do |o|
192
+ o.to_str
133
193
  end
134
194
 
135
- # Use a stub that ignores all calls to verify that a method is called
136
- # appropriately. Any other calls made are ignored.
137
- expect stub.to.receive.dial('2125551212').twice do |phone|
138
- phone.dial('2125551212')
139
- phone.hangup
140
- phone.dial('2125551212')
195
+ # Use a stub that returns stub objects for unknown methods to only verify
196
+ # that a method of interest is called appropriately.
197
+ expect stub.to.receive.to_str(without_arguments){ '123' } do |o|
198
+ o.to_str if o.convertable?
141
199
  end
142
200
 
143
- # Use a stub that’s set up with a set of methods.
201
+ # Use a contrete mock to verify that a method is called.
202
+ expect Object.to.receive.name do
203
+ Object.name
204
+ end
205
+
206
+ # Expect the reception of #a with any number of arguments.
207
+ expect mock.to.receive.a do |m|
208
+ m.a
209
+ end
210
+
211
+ # Expect the reception of #a with one argument.
212
+ expect mock.to.receive.a(Object) do |m|
213
+ m.a 0
214
+ end
215
+
216
+ # Expect the reception of #a with either 1 or 2.
217
+ expect mock.to.receive.a(1..2) do |m|
218
+ m.a 1
219
+ end
220
+
221
+ # Expect the reception of #a without any arguments.
222
+ expect mock.to.receive.a(without_arguments) do |m|
223
+ m.a
224
+ end
225
+
226
+ # Expect the reception of #a with three arguments, the second being 1.
227
+ expect mock.to.receive.a(Object, 2, Object) do |m|
228
+ m.a nil, 2, '3'
229
+ end
230
+
231
+ # Expect the reception of #a and return 1 so that other code works.
232
+ expect mock.to.receive.a{ 1 } do |m|
233
+ raise 'not 1' unless m.a == 1
234
+ end
235
+
236
+ # Expect the reception of #a and call the block with 1.
237
+ expect mock.to.receive.a{ |&b| b.call(1) } do |m|
238
+ j = 0
239
+ m.a{ |i| j = i }
240
+ raise 'not 1' unless j == 1
241
+ end
242
+
243
+ # Stub out a specific method on an object.
244
+ expect 6 do |m|
245
+ stub(Class.new{
246
+ def slips
247
+ raise 'database not available'
248
+ end
249
+
250
+ def total
251
+ slips.reduce(0){ |m, n| m.to_i + n.to_i }
252
+ end
253
+ }.new, :slips => [1, 2, 3]){ |account| account.total }
254
+ end
255
+
256
+
257
+ # Create a stub object that responds to specific methods.
144
258
  expect 3 do
145
259
  s = stub(:a => 1, :b => 2)
146
260
  s.a + s.b
147
261
  end
148
262
 
263
+ # Expect the reception of #a on a stub object that responds to specific methods.
264
+ expect stub(:a => 1, :b => 2).to.receive.a do |o|
265
+ o.a + o.b
266
+ end
267
+
268
+ # Expect the reception of #a on a mock object that responds to specific methods.
269
+ expect mock(:a => 2, :b => 2).to.receive.a do |o|
270
+ o.a + o.b
271
+ end
272
+
149
273
  # Use a stub that’s set up with a set of procs as methods.
150
274
  expect 3 do
151
275
  s = stub(:a => proc{ |a, b| a + b })
152
276
  s.a(1, 2)
153
277
  end
154
278
 
155
- # Use a contrete mock to verify that a method is called.
156
- expect Object.to.receive.deal do
157
- Object.deal
279
+ # Stub out a specific method on an object.
280
+ expect 'def' do
281
+ stub('abc', :to_str => 'def'){ |a| a.to_str }
158
282
  end
159
283
 
160
- # Expect a new object to receive #deal with any arguments.
161
- expect Object.new.to.receive.deal do |o|
162
- o.deal(1, 2, 3)
163
- end
164
284
 
165
- # Expect a new object to receive #deal without arguments.
166
- expect Object.new.to.receive.deal(without_arguments) do |o|
167
- o.deal
168
- end
169
285
 
170
- # Expect a new object to receive #deal with any argument, 1, and any
171
- # argument.
172
- expect Object.new.to.receive.deal(arg, 1, arg) do |o|
173
- o.deal :a, 1, :b
174
- end
175
286
 
176
287
  # Utilities
177
-
178
- # Use #with_verbose to set $VERBOSE during the execution of a block.
179
- expect nil do
180
- with_verbose(nil) do
181
- $VERBOSE
288
+
289
+ # Override the value of a constant during the execution of a block.
290
+ expect 'hello' do
291
+ with_const 'A::B::C', 'hello' do
292
+ A::B::C
182
293
  end
183
294
  end
184
295
 
185
- expect warning('this is your final one!') do
186
- warn 'this is your final one!'
296
+ # Override/add environment keys/values during the execution of a block.
297
+ expect 'hello' do
298
+ with_env 'INTRO' => 'hello' do
299
+ ENV['INTRO']
300
+ end
187
301
  end
188
302
 
189
- expect warning('this is your final one!') do
190
- warn '%s:%d: warning: this is your final one!' % [__FILE__, __LINE__]
303
+ # Override the value of a global during the execution of a block.
304
+ expect 'hello' do
305
+ with_global :$stdout, StringIO.new do
306
+ print 'hello'
307
+ $stdout.string
308
+ end
309
+ end
310
+
311
+ # Use the overridden value of a global during the execution of a block.
312
+ expect true do
313
+ with_global :$stdout, StringIO.new do |overridden|
314
+ $stdout != overridden
315
+ end
191
316
  end
192
317
  end