lookout 2.3.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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