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
data/Rakefile CHANGED
@@ -1,9 +1,24 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- $:.unshift File.expand_path('../lib', __FILE__)
4
- require 'lookout/rake/tasks'
3
+ require 'inventory-rake-1.0'
5
4
 
6
- Lookout::Rake::Tasks::Test.new do |t|
7
- ENV['LOOKOUT_DO_NOT_FILTER_BACKTRACE'] = ''
5
+ load File.expand_path('../lib/lookout-3.0/version.rb', __FILE__)
6
+
7
+ Inventory::Rake::Tasks.define Lookout::Version, :gem => proc{ |_, s|
8
+ s.author = 'Nikolai Weibull'
9
+ s.email = 'now@bitwi.se'
10
+ s.homepage = 'https://github.com/now/lookout'
11
+ }
12
+
13
+ Inventory::Rake::Tasks.unless_installing_dependencies do
14
+ require 'lookout-rake-3.0'
15
+ Lookout::Rake::Tasks::Test.new do |t|
16
+ ENV['LOOKOUT_DO_NOT_FILTER_BACKTRACE'] = ''
17
+ end
18
+
19
+ require 'inventory-rake-tasks-yard-1.0'
20
+ Inventory::Rake::Tasks::YARD.new do |t|
21
+ t.options += %w'--plugin yard-heuristics-1.0 --plugin yard-value-1.0'
22
+ t.globals[:source_code_url] = 'https://github.com/now/%s/blob/v%s/%%s#L%%d' % [t.inventory.package, t.inventory]
23
+ end
8
24
  end
9
- Lookout::Rake::Tasks::Gem.new
@@ -0,0 +1,138 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Main namespace of the Lookout library.
4
+ #
5
+ # {Expectations} is the main entry point to the library, representing the
6
+ # “Expectations” keyword in expectation files and allowing such files to be
7
+ # loaded, enumerating the {Expect} blocks found in such files. Each such block
8
+ # has an {Expected} value that’s an {Actual} result wrapper, a {Literal}, an
9
+ # expected {Output}, an expected {Warning}, an expected method {Reception}, or
10
+ # any {::Object} really, which it’ll compare to the actual result of executing
11
+ # the block, reporting any {Difference}s – which may, in turn, be shown as
12
+ # {Diff}s – as its {Result}.
13
+ #
14
+ # To help out, {Stub stub} and {Mock mock} objects may be created.
15
+ # Furthermore, all ::Objects have been extended to support easy creation of
16
+ # expected method {Reception}s, using a simple {Object domain-specific
17
+ # language} that uses {Aphonic} receivers to gather the necessary information.
18
+ #
19
+ # To avoid failing while trying to report failures, non-failing access to
20
+ # {Exception}s and {Inspect}ions of objects is used, as well as making sure to
21
+ # {Encode} any output properly.
22
+ #
23
+ # There’s a command-line interface defined in {Interfaces::Commandline} that can
24
+ # be used by other interfaces that want to invoke Lookout on a set of files.
25
+ # It’s used by the {http://disu.se/software/lookout-rake Lookout-Rake} library.
26
+ #
27
+ # Plugins should place their namespace under the {Lookout::Plugins} namespace.
28
+ module Lookout
29
+ class << self
30
+ def location(location)
31
+ return nil, nil unless match = /\A(.*):(\d+)(?::in .*)?\z/.match(location)
32
+ [match[1], match[2].to_i]
33
+ end
34
+ end
35
+
36
+ load File.expand_path('../lookout-3.0/version.rb', __FILE__)
37
+ Version.load
38
+ end
39
+
40
+ # Adds keyword methods “to” and “not” and #to_lookout_expected for Objects.
41
+ class Object
42
+ # @return [Lookout::Object::To] A wrapper around the receiver that handles
43
+ # “to” keywords, such as “receive”
44
+ def to; Lookout::Object::To.new(self) end
45
+
46
+ # @return [Lookout::Object::To] A wrapper around the receiver that handles
47
+ # “not” keywords, such as “to”, that’ll then handle “receive”
48
+ def not; Lookout::Object::Not.new(self) end
49
+
50
+ # @return [Lookout::Expected::Object] A wrapper around the receiver, making
51
+ # it an expected value
52
+ def to_lookout_expected; Lookout::Expected::Object.new(self) end
53
+ end
54
+
55
+ # Adds #to_lookout_expected to Arrays for better difference reports.
56
+ class Array
57
+ # @return [Lookout::Expected::Array] A wrapper around the receiver, making
58
+ # it an expected value
59
+ def to_lookout_expected; Lookout::Expected::Array.new(self) end
60
+ end
61
+
62
+ # Adds #to_lookout_expected to TrueClasses (`true`) for better difference
63
+ # reports.
64
+ class TrueClass
65
+ # @return [Lookout::Expected::TrueClass] A wrapper around the receiver,
66
+ # making it an expected value
67
+ def to_lookout_expected; Lookout::Expected::TrueClass.new(self) end
68
+ end
69
+
70
+ # Adds #to_lookout_expected to FalseClasses (`false`) for better difference
71
+ # reports.
72
+ class FalseClass
73
+ # @return [Lookout::Expected::FalseClass] A wrapper around the receiver,
74
+ # making it an expected value
75
+ def to_lookout_expected; Lookout::Expected::FalseClass.new(self) end
76
+ end
77
+
78
+ # Adds #to_lookout_expected to Hashes for better difference reports.
79
+ class Hash
80
+ # @return [Lookout::Expected::Hash] A wrapper around the receiver, making it
81
+ # an expected value
82
+ def to_lookout_expected; Lookout::Expected::Hash.new(self) end
83
+ end
84
+
85
+ # Adds #to_lookout_expected to Modules for better difference reports.
86
+ class Module
87
+ # @return [Lookout::Expected::Module] A wrapper around the receiver, making
88
+ # it an expected value
89
+ def to_lookout_expected; Lookout::Expected::Module.new(self) end
90
+ end
91
+
92
+ # Adds #to_lookout_expected to Ranges for better difference reports.
93
+ class Range
94
+ # @return [Lookout::Expected::Range] A wrapper around the receiver, making it
95
+ # an expected value
96
+ def to_lookout_expected; Lookout::Expected::Range.new(self) end
97
+ end
98
+
99
+ # Adds #to_lookout_expected to Regexps for better difference reports.
100
+ class Regexp
101
+ # @return [Lookout::Expected::Regexps] A wrapper around the receiver, making
102
+ # it an expected value
103
+ def to_lookout_expected; Lookout::Expected::Regexp.new(self) end
104
+ end
105
+
106
+ # Adds #to_lookout_expected to Exceptions and their classes for better
107
+ # difference reports.
108
+ class Exception
109
+ class << self
110
+ # @return [Lookout::Expected::Classes::Exception] A wrapper around the
111
+ # receiver, making it an expected value
112
+ def to_lookout_expected; Lookout::Expected::Classes::Exception.new(self) end
113
+ end
114
+
115
+ # @return [Lookout::Expected::Exception] A wrapper around the receiver,
116
+ # making it an expected value
117
+ def to_lookout_expected; Lookout::Expected::Exception.new(self) end
118
+ end
119
+
120
+ # Adds #to_lookout_expected to Strings for better difference reports.
121
+ class String
122
+ # @return [Lookout::Expected::String] A wrapper around the receiver, making
123
+ # it an expected value
124
+ def to_lookout_expected; Lookout::Expected::String.new(self) end
125
+ end
126
+
127
+ # Adds #to_lookout_expected to Symbols for query method expectations and better
128
+ # difference reports.
129
+ class Symbol
130
+ # @return [Lookout::Expected::Smybol] A wrapper around the receiver, making
131
+ # it an expected value
132
+ def to_lookout_expected; Lookout::Expected::Symbol.new(self) end
133
+ end
134
+
135
+ def Expectations(&block)
136
+ Lookout::Expectations.evaluate Lookout.location(caller.first).first, &block
137
+ self
138
+ end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Stands in for the actual result of the {Lookout::Expect expect block},
4
+ # allowing a query method to call on the actual result to be set up and checked
5
+ # after the expect block returns. Used by
6
+ # {Lookout::Expectations::Context#result}.
7
+ class Lookout::Actual < Lookout::Aphonic
8
+ # @return [Actual::Not] A result stand-in that’s the inversion of the
9
+ # receiver
10
+ def not; Lookout::Actual::Not.new end
11
+
12
+ # Method for improving readability of query method set-up.
13
+ # @return [self]
14
+ def to; self end
15
+
16
+ # Method for improving readability of query method set-up.
17
+ # @return [self]
18
+ def be; self end
19
+
20
+ # Method for improving readability of query method set-up.
21
+ # @return [self]
22
+ def have; self end
23
+
24
+ private
25
+
26
+ # @param (see Method#initialize)
27
+ # @return [Method] A method wrapper that’ll call METHOD with ARGS and BLOCK
28
+ # when called
29
+ def method_missing(method, *args, &block) Method.new(method, *args, &block) end
30
+ end
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Proxies a method for later invocation on the actual result. The method
4
+ # information is stored and used when this method is {#call}ed, which passes it
5
+ # along to the given actual result.
6
+ class Lookout::Actual::Method
7
+ # Proxies METHOD, passing in ARGS and BLOCK when {#call}ed.
8
+ # @param [Symbol] method
9
+ # @param [Object, …] args
10
+ Value(:method, :'*args', :'&block')
11
+
12
+ # @param [Object] actual
13
+ # @return [Object] The result of invoking the method with the given arguments
14
+ # on the ACTUAL result
15
+ def call(actual) actual.__send__(method, *args, &block) end
16
+
17
+ # @return [Expected::Lookout::Actual::Method] An expected value wrapper of
18
+ # the receiver
19
+ def to_lookout_expected; Lookout::Expected::Lookout::Actual::Method.new(self) end
20
+
21
+ # @return A string of the form “#_method_(_args_){ … }”, depending on if any
22
+ # arguments or block has been given
23
+ def to_s
24
+ ['#',
25
+ method,
26
+ args.empty? ? '' : '(%s)' % Lookout::Inspect.args(*args),
27
+ block ? '{ … }' : ''].join('')
28
+ end
29
+
30
+ alias inspect to_s
31
+ end
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Inverts {Actual}. Allows a query method to call on the actual result to be
4
+ # set up and its inversion checked after the expect block returns.
5
+ class Lookout::Actual::Not < Lookout::Actual
6
+ # @return [Actual] A result stand-in that’s the inversion of the receiver
7
+ def not; Lookout::Actual.new end
8
+
9
+ private
10
+
11
+ # (see Lookout::Actual#method_missing)
12
+ def method_missing(method, *args, &block); Method.new(method, *args, &block) end
13
+ end
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Proxies a method for later invocation on the actual result. The method
4
+ # information is stored and used when this method is {#call}ed, which passes it
5
+ # along to the given actual result.
6
+ class Lookout::Actual::Not::Method < Lookout::Actual::Method
7
+ # @return [Expected::Lookout::Actual::Not::Method] An expected value wrapper
8
+ # of the receiver
9
+ def to_lookout_expected; Lookout::Expected::Lookout::Actual::Not::Method.new(self) end
10
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Class that only responds to `#__send__` and #object_id. Useful for DSLs and
4
+ # classes that make use of #method_missing. Things are set
5
+ # up so that if methods are added to Kernel, Object, or Method after the
6
+ # initial set-up, such methods will similarly be {.silence}d.
7
+ class Lookout::Aphonic
8
+ Methods = [:__send__, :object_id]
9
+ Methods << :__id__ if RUBY_VERSION < '1.9' # Ruby 1.8 warns if __id__ is undefined
10
+
11
+ class << self
12
+ # Undefines METHOD unless it’s on the short-list of methods to keep.
13
+ # @param [Symbol] method
14
+ # @return [self]
15
+ def silence(method)
16
+ undef_method method if
17
+ instance_methods.include?(RUBY_VERSION < '1.9' ? method.to_s : method.to_sym) and
18
+ not Methods.include? method.to_sym
19
+ self
20
+ end
21
+ end
22
+
23
+ instance_methods.each(&method(:silence))
24
+ end
25
+
26
+ [Kernel, Object].each do |object|
27
+ object.instance_eval{ class << self; self; end }.instance_eval do
28
+ method_added = method(:method_added)
29
+ define_method :method_added do |name|
30
+ result = method_added.call(name)
31
+ Lookout::Aphonic.silence name if self == object
32
+ result
33
+ end
34
+ end
35
+ end
36
+
37
+ class Module
38
+ append_features = instance_method(:append_features)
39
+ define_method :append_features do |mod|
40
+ result = append_features.bind(self).call(mod)
41
+ instance_methods.each{ |name| Lookout::Aphonic.silence name } if mod == Object
42
+ result
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Namespace for the “diff” subsystem. Includes various algorithms for
4
+ # generating “diffs” and output formats for displaying them. Used by
5
+ # {Difference} to generate meaningful “diffs” of objects.
6
+ #
7
+ # A “diff” is a {Operations sequence} of {Operation}s that describe how to turn
8
+ # an old/original/from version of a structure, such as an {::Array}, to a
9
+ # new/new/to version of that structure. For example, if the old version of an
10
+ # Array is [1, 2, 3] and the new version of that array is [1, 2, 3, 4], then
11
+ # the “diff” is a sequence of operations containing one operation, the
12
+ # {Operations::Insert insertion} of the element 4 at the end of the Array.
13
+ #
14
+ # A “diff” is generated by one of various {Algorithms} that calculate optimal
15
+ # sequences of operations, for some definition of “optimal”. A common goal is
16
+ # to provide the shortest sequence of operations necessary, but providing a
17
+ # sequence that “feels natural” to a human is often also a priority. The
18
+ # algorithms work by looking for {Match}es between {Slice}s of the sequences
19
+ # and then turning the information provided by these matches into the
20
+ # operations that describe the changes that need to be made.
21
+ #
22
+ # “Diffs” can be turned into quite a few different textual {Formats} for
23
+ # display to a human. Such formats may {Group} together related {Groups} of
24
+ # operations, focusing the display on the actual differences.
25
+ #
26
+ # You can find more information about “diffs” at
27
+ # {http://en.wikipedia.org/wiki/Diff}.
28
+ module Lookout::Diff
29
+ end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ # Namespace for “diff” algorithms.
3
4
  module Lookout::Diff::Algorithms
4
- autoload :Difflib, 'lookout/diff/algorithms/difflib'
5
5
  end
@@ -0,0 +1,62 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # The difflib algorithm is based on the algorithm employed by the difflib
4
+ # library for Python, which is, in turn, based on an algorithm by Ratcliff and
5
+ # Obershelp, see {http://docs.python.org/library/difflib.html}.
6
+ #
7
+ # It’s implemented as an Enumerable over the {Match}es between two sequences.
8
+ # There are very few requirements on these sequences (see {#initialize}), which
9
+ # makes this implementation useful for a wide class of objects.
10
+ class Lookout::Diff::Algorithms::Difflib
11
+ # Initializes the algorithm to generate matches between the OLD and NEW
12
+ # versions of the indexable sequences. The sequences must be indexable by
13
+ # {::Range}s and Integers with the semantics that, for example, {::Array}s
14
+ # have, and their elements must also respond to #hash and #==.
15
+ #
16
+ # A block may be given to determine what elements in NEW are to be ignored.
17
+ # This can be used to, for example, ignore whitespace differences.
18
+ #
19
+ # @param [#each, #[]] old
20
+ # @param [#each, #[]] new
21
+ # @yield [?]
22
+ # @yieldparam element
23
+ # @yieldreturn [Boolean]
24
+ Value(:old, :new, :'&ignorable')
25
+ include Enumerable
26
+
27
+ # @overload
28
+ # Enumerates the matches between the two sequences. There’ll always be at
29
+ # least one match yielded, the {Match#empty? empty} one at the end of the
30
+ # sequences.
31
+ #
32
+ # @yieldparam [Match] match
33
+ # @overload
34
+ # @return [Enumerator<Match>] An Enumerator over the matches between the
35
+ # two sequences
36
+ def each
37
+ return enum_for(__method__) unless block_given?
38
+ current = Lookout::Diff::Match.new(Lookout::Diff::Slice.new(old, 0...0),
39
+ Lookout::Diff::Slice.new(new, 0...0))
40
+ stack = [Position.origin(old, new, &ignorable)]
41
+ until stack.empty?
42
+ case item = stack.pop
43
+ when Position
44
+ match = item.match
45
+ next if match.empty?
46
+ stack.push item.begin_after(match) if item.end_after? match
47
+ stack.push match
48
+ stack.push item.end_before(match) if item.begin_before? match
49
+ when Lookout::Diff::Match
50
+ if current.touch? item
51
+ current += item
52
+ else
53
+ yield current unless current.empty?
54
+ current = item
55
+ end
56
+ end
57
+ end
58
+ yield current unless current.empty?
59
+ yield current.at(old.size...old.size, new.size...new.size)
60
+ self
61
+ end
62
+ end
@@ -0,0 +1,63 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Keeps track of a position into the two sequences currently being “diffed” of
4
+ # the difflib algorithm and generates matches and new positions based on this
5
+ # position.
6
+ #
7
+ # @private
8
+ class Lookout::Diff::Algorithms::Difflib::Position
9
+ Value(:old, :new, :junk)
10
+
11
+ class << self
12
+ def origin(old, new)
13
+ new = New.new(new)
14
+ new(Lookout::Diff::Slice.new(old),
15
+ new,
16
+ block_given? ? new.indexes.reduce({}){ |j, (k, _)| j[k] = yield(k); j } : {})
17
+ end
18
+ end
19
+
20
+ def match; junk.empty? ? leftmost_longest : expand(expand(leftmost_longest, false), true) end
21
+ def begin_before?(match) old.begin_before? match.old and new.begin_before? match.new end
22
+ def end_after?(match) old.end_after? match.old and new.end_after? match.new end
23
+ def begin_after(match) self.class.new(old.begin_after(match.old), new.begin_after(match.new), junk) end
24
+ def end_before(match) self.class.new(old.end_before(match.old), new.end_before(match.new), junk) end
25
+ def inspect; '#<%s %p,%p>' % [self.class, old, new] end
26
+
27
+ private
28
+
29
+ def leftmost_longest
30
+ match = Lookout::Diff::Match.new(@old.at(0...0), @new.at(0...0))
31
+ sizes = Hash.new(0)
32
+ @old.each_with_index do |item, old|
33
+ _sizes = Hash.new(0)
34
+ @new.each_index(item) do |new|
35
+ size = _sizes[new] = sizes[new - 1] + 1
36
+ match = match.at(old - size + 1..old,
37
+ new - size + 1..new) if size > match.size
38
+ end unless junk[item]
39
+ sizes = _sizes
40
+ end
41
+ match
42
+ end
43
+
44
+ def expand(match, junking)
45
+ old_begin, new_begin = match.old.begin, match.new.begin
46
+ while old_begin > old.begin and new_begin > new.begin and
47
+ junk[new[new_begin - 1]] ^ !junking and
48
+ old[old_begin - 1] == new[new_begin - 1]
49
+ old_begin -= 1
50
+ new_begin -= 1
51
+ end
52
+
53
+ old_end, new_end = match.old.end, match.new.end
54
+ while old_end + 1 <= old.end and new_end + 1 <= new.end and
55
+ junk[new[new_end + 1]] ^ !junking and
56
+ old[old_end + 1] == new[new_end + 1]
57
+ old_end += 1
58
+ new_end += 1
59
+ end
60
+
61
+ match.at(old_begin..old_end, new_begin..new_end)
62
+ end
63
+ end