backports 3.0.3 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (487) hide show
  1. data/.gitignore +1 -1
  2. data/.gitmodules +3 -0
  3. data/.travis.yml +11 -2
  4. data/CHANGELOG.rdoc +6 -0
  5. data/Gemfile +20 -0
  6. data/Gemfile.lock +24 -0
  7. data/README.rdoc +39 -11
  8. data/Rakefile +98 -1
  9. data/default.mspec +9 -0
  10. data/lib/backports.rb +4 -4
  11. data/lib/backports/1.8.7.rb +2 -3
  12. data/lib/backports/1.8.7/argf.rb +2 -43
  13. data/lib/backports/1.8.7/argf/bytes.rb +1 -0
  14. data/lib/backports/1.8.7/argf/chars.rb +1 -0
  15. data/lib/backports/1.8.7/argf/each.rb +3 -0
  16. data/lib/backports/1.8.7/argf/each_byte.rb +9 -0
  17. data/lib/backports/1.8.7/argf/each_char.rb +35 -0
  18. data/lib/backports/1.8.7/argf/each_line.rb +3 -0
  19. data/lib/backports/1.8.7/argf/getbyte.rb +5 -0
  20. data/lib/backports/1.8.7/argf/lines.rb +5 -0
  21. data/lib/backports/1.8.7/argf/readbyte.rb +5 -0
  22. data/lib/backports/1.8.7/array.rb +2 -207
  23. data/lib/backports/1.8.7/array/collect.rb +3 -0
  24. data/lib/backports/1.8.7/array/combination.rb +24 -0
  25. data/lib/backports/1.8.7/array/cycle.rb +16 -0
  26. data/lib/backports/1.8.7/array/delete_if.rb +3 -0
  27. data/lib/backports/1.8.7/array/each.rb +3 -0
  28. data/lib/backports/1.8.7/array/each_index.rb +3 -0
  29. data/lib/backports/1.8.7/array/find_index.rb +1 -0
  30. data/lib/backports/1.8.7/array/flatten.rb +47 -0
  31. data/lib/backports/1.8.7/array/index.rb +15 -0
  32. data/lib/backports/1.8.7/array/map.rb +3 -0
  33. data/lib/backports/1.8.7/array/permutation.rb +30 -0
  34. data/lib/backports/1.8.7/array/pop.rb +15 -0
  35. data/lib/backports/1.8.7/array/product.rb +32 -0
  36. data/lib/backports/1.8.7/array/reject.rb +3 -0
  37. data/lib/backports/1.8.7/array/reverse_each.rb +3 -0
  38. data/lib/backports/1.8.7/array/rindex.rb +15 -0
  39. data/lib/backports/1.8.7/array/select.rb +3 -0
  40. data/lib/backports/1.8.7/array/shift.rb +13 -0
  41. data/lib/backports/1.8.7/array/shuffle.rb +17 -0
  42. data/lib/backports/1.8.7/binding.rb +3 -6
  43. data/lib/backports/1.8.7/binding/eval.rb +7 -0
  44. data/lib/backports/1.8.7/dir.rb +2 -57
  45. data/lib/backports/1.8.7/dir/each.rb +7 -0
  46. data/lib/backports/1.8.7/dir/foreach.rb +9 -0
  47. data/lib/backports/1.8.7/dir/mktmpdir.rb +44 -0
  48. data/lib/backports/1.8.7/enumerable.rb +2 -240
  49. data/lib/backports/1.8.7/enumerable/count.rb +17 -0
  50. data/lib/backports/1.8.7/enumerable/cycle.rb +24 -0
  51. data/lib/backports/1.8.7/enumerable/detect.rb +3 -0
  52. data/lib/backports/1.8.7/enumerable/drop.rb +13 -0
  53. data/lib/backports/1.8.7/enumerable/drop_while.rb +16 -0
  54. data/lib/backports/1.8.7/enumerable/each_cons.rb +4 -0
  55. data/lib/backports/1.8.7/enumerable/each_slice.rb +4 -0
  56. data/lib/backports/1.8.7/enumerable/each_with_index.rb +3 -0
  57. data/lib/backports/1.8.7/enumerable/entries.rb +11 -0
  58. data/lib/backports/1.8.7/enumerable/find.rb +3 -0
  59. data/lib/backports/1.8.7/enumerable/find_all.rb +3 -0
  60. data/lib/backports/1.8.7/enumerable/find_index.rb +21 -0
  61. data/lib/backports/1.8.7/enumerable/first.rb +21 -0
  62. data/lib/backports/1.8.7/enumerable/group_by.rb +14 -0
  63. data/lib/backports/1.8.7/enumerable/inject.rb +14 -0
  64. data/lib/backports/1.8.7/enumerable/max_by.rb +16 -0
  65. data/lib/backports/1.8.7/enumerable/min_by.rb +16 -0
  66. data/lib/backports/1.8.7/enumerable/minmax.rb +21 -0
  67. data/lib/backports/1.8.7/enumerable/minmax_by.rb +19 -0
  68. data/lib/backports/1.8.7/enumerable/none.rb +7 -0
  69. data/lib/backports/1.8.7/enumerable/one.rb +23 -0
  70. data/lib/backports/1.8.7/enumerable/partition.rb +3 -0
  71. data/lib/backports/1.8.7/enumerable/reduce.rb +1 -0
  72. data/lib/backports/1.8.7/enumerable/reject.rb +3 -0
  73. data/lib/backports/1.8.7/enumerable/reverse_each.rb +12 -0
  74. data/lib/backports/1.8.7/enumerable/select.rb +3 -0
  75. data/lib/backports/1.8.7/enumerable/sort_by.rb +3 -0
  76. data/lib/backports/1.8.7/enumerable/take.rb +9 -0
  77. data/lib/backports/1.8.7/enumerable/take_while.rb +14 -0
  78. data/lib/backports/1.8.7/enumerable/to_a.rb +12 -0
  79. data/lib/backports/1.8.7/enumerator.rb +2 -31
  80. data/lib/backports/1.8.7/enumerator/each.rb +6 -0
  81. data/lib/backports/1.8.7/enumerator/next.rb +15 -0
  82. data/lib/backports/1.8.7/enumerator/rewind.rb +13 -0
  83. data/lib/backports/1.8.7/enumerator/with_index.rb +14 -0
  84. data/lib/backports/1.8.7/env.rb +3 -3
  85. data/lib/backports/1.8.7/env/delete_if.rb +3 -0
  86. data/lib/backports/1.8.7/env/each.rb +3 -0
  87. data/lib/backports/1.8.7/env/each_key.rb +3 -0
  88. data/lib/backports/1.8.7/env/each_pair.rb +3 -0
  89. data/lib/backports/1.8.7/env/each_value.rb +3 -0
  90. data/lib/backports/1.8.7/env/reject.rb +4 -0
  91. data/lib/backports/1.8.7/env/select.rb +3 -0
  92. data/lib/backports/1.8.7/fixnum.rb +2 -10
  93. data/lib/backports/1.8.7/fixnum/div.rb +7 -0
  94. data/lib/backports/1.8.7/fixnum/fdiv.rb +7 -0
  95. data/lib/backports/1.8.7/float.rb +3 -4
  96. data/lib/backports/1.8.7/float/fdiv.rb +3 -0
  97. data/lib/backports/1.8.7/gc.rb +2 -10
  98. data/lib/backports/1.8.7/gc/stress.rb +9 -0
  99. data/lib/backports/1.8.7/hash.rb +2 -41
  100. data/lib/backports/1.8.7/hash/constructor.rb +25 -0
  101. data/lib/backports/1.8.7/hash/delete_if.rb +3 -0
  102. data/lib/backports/1.8.7/hash/each.rb +3 -0
  103. data/lib/backports/1.8.7/hash/each_key.rb +3 -0
  104. data/lib/backports/1.8.7/hash/each_pair.rb +3 -0
  105. data/lib/backports/1.8.7/hash/each_value.rb +3 -0
  106. data/lib/backports/1.8.7/hash/eql.rb +1 -0
  107. data/lib/backports/1.8.7/hash/hash.rb +17 -0
  108. data/lib/backports/1.8.7/hash/key.rb +3 -0
  109. data/lib/backports/1.8.7/hash/reject.rb +3 -0
  110. data/lib/backports/1.8.7/hash/select.rb +3 -0
  111. data/lib/backports/1.8.7/integer.rb +2 -23
  112. data/lib/backports/1.8.7/integer/downto.rb +3 -0
  113. data/lib/backports/1.8.7/integer/even.rb +7 -0
  114. data/lib/backports/1.8.7/integer/odd.rb +7 -0
  115. data/lib/backports/1.8.7/integer/ord.rb +7 -0
  116. data/lib/backports/1.8.7/integer/pred.rb +7 -0
  117. data/lib/backports/1.8.7/integer/times.rb +3 -0
  118. data/lib/backports/1.8.7/integer/upto.rb +3 -0
  119. data/lib/backports/1.8.7/io.rb +2 -42
  120. data/lib/backports/1.8.7/io/bytes.rb +1 -0
  121. data/lib/backports/1.8.7/io/chars.rb +1 -0
  122. data/lib/backports/1.8.7/io/each.rb +3 -0
  123. data/lib/backports/1.8.7/io/each_byte.rb +6 -0
  124. data/lib/backports/1.8.7/io/each_char.rb +34 -0
  125. data/lib/backports/1.8.7/io/each_line.rb +6 -0
  126. data/lib/backports/1.8.7/io/foreach.rb +7 -0
  127. data/lib/backports/1.8.7/io/getbyte.rb +3 -0
  128. data/lib/backports/1.8.7/io/lines.rb +1 -0
  129. data/lib/backports/1.8.7/io/readbyte.rb +3 -0
  130. data/lib/backports/1.8.7/kernel.rb +2 -35
  131. data/lib/backports/1.8.7/kernel/__method__.rb +8 -0
  132. data/lib/backports/1.8.7/kernel/instance_exec.rb +10 -0
  133. data/lib/backports/1.8.7/kernel/tap.rb +8 -0
  134. data/lib/backports/1.8.7/method.rb +2 -46
  135. data/lib/backports/1.8.7/method/name.rb +49 -0
  136. data/lib/backports/1.8.7/module.rb +3 -7
  137. data/lib/backports/1.8.7/module/class_exec.rb +1 -0
  138. data/lib/backports/1.8.7/module/module_exec.rb +11 -0
  139. data/lib/backports/1.8.7/numeric.rb +3 -3
  140. data/lib/backports/1.8.7/numeric/step.rb +3 -0
  141. data/lib/backports/1.8.7/object_space.rb +3 -5
  142. data/lib/backports/1.8.7/object_space/each_object.rb +5 -0
  143. data/lib/backports/1.8.7/proc.rb +3 -4
  144. data/lib/backports/1.8.7/proc/yield.rb +3 -0
  145. data/lib/backports/1.8.7/process.rb +3 -5
  146. data/lib/backports/1.8.7/process/exec.rb +3 -0
  147. data/lib/backports/1.8.7/range.rb +3 -4
  148. data/lib/backports/1.8.7/range/each.rb +3 -0
  149. data/lib/backports/1.8.7/range/step.rb +3 -0
  150. data/lib/backports/1.8.7/regexp.rb +3 -12
  151. data/lib/backports/1.8.7/regexp/union.rb +11 -0
  152. data/lib/backports/1.8.7/stop_iteration.rb +14 -0
  153. data/lib/backports/1.8.7/string.rb +2 -91
  154. data/lib/backports/1.8.7/string/bytes.rb +1 -0
  155. data/lib/backports/1.8.7/string/bytesize.rb +3 -0
  156. data/lib/backports/1.8.7/string/each.rb +3 -0
  157. data/lib/backports/1.8.7/string/each_byte.rb +5 -0
  158. data/lib/backports/1.8.7/string/each_char.rb +13 -0
  159. data/lib/backports/1.8.7/string/each_line.rb +5 -0
  160. data/lib/backports/1.8.7/string/end_with.rb +12 -0
  161. data/lib/backports/1.8.7/string/lines.rb +1 -0
  162. data/lib/backports/1.8.7/string/partition.rb +20 -0
  163. data/lib/backports/1.8.7/string/rpartition.rb +19 -0
  164. data/lib/backports/1.8.7/string/start_with.rb +12 -0
  165. data/lib/backports/1.8.7/string/upto.rb +15 -0
  166. data/lib/backports/1.8.7/struct.rb +3 -3
  167. data/lib/backports/1.8.7/struct/each.rb +3 -0
  168. data/lib/backports/1.8.7/struct/each_pair.rb +3 -0
  169. data/lib/backports/1.8.7/symbol.rb +3 -6
  170. data/lib/backports/1.8.7/symbol/to_proc.rb +8 -0
  171. data/lib/backports/1.8.8.rb +1 -3
  172. data/lib/backports/1.8.rb +1 -3
  173. data/lib/backports/1.9.1.rb +2 -4
  174. data/lib/backports/1.9.1/array.rb +3 -8
  175. data/lib/backports/1.9.1/array/sample.rb +19 -0
  176. data/lib/backports/1.9.1/array/try_convert.rb +7 -0
  177. data/lib/backports/1.9.1/dir.rb +3 -3
  178. data/lib/backports/1.9.1/dir/to_path.rb +3 -0
  179. data/lib/backports/1.9.1/enumerable.rb +2 -18
  180. data/lib/backports/1.9.1/enumerable/each_with_index.rb +14 -0
  181. data/lib/backports/1.9.1/enumerable/each_with_object.rb +9 -0
  182. data/lib/backports/1.9.1/enumerator.rb +2 -40
  183. data/lib/backports/1.9.1/enumerator/new.rb +40 -0
  184. data/lib/backports/1.9.1/enumerator/with_object.rb +6 -0
  185. data/lib/backports/1.9.1/env.rb +3 -3
  186. data/lib/backports/1.9.1/env/key.rb +5 -0
  187. data/lib/backports/1.9.1/file.rb +2 -43
  188. data/lib/backports/1.9.1/file/atime.rb +5 -0
  189. data/lib/backports/1.9.1/file/basename.rb +5 -0
  190. data/lib/backports/1.9.1/file/binary.rb +6 -0
  191. data/lib/backports/1.9.1/file/blockdev.rb +5 -0
  192. data/lib/backports/1.9.1/file/chardev.rb +5 -0
  193. data/lib/backports/1.9.1/file/chmod.rb +5 -0
  194. data/lib/backports/1.9.1/file/chown.rb +5 -0
  195. data/lib/backports/1.9.1/file/ctime.rb +5 -0
  196. data/lib/backports/1.9.1/file/delete.rb +5 -0
  197. data/lib/backports/1.9.1/file/directory.rb +5 -0
  198. data/lib/backports/1.9.1/file/dirname.rb +5 -0
  199. data/lib/backports/1.9.1/file/executable.rb +5 -0
  200. data/lib/backports/1.9.1/file/executable_real.rb +5 -0
  201. data/lib/backports/1.9.1/file/exist.rb +5 -0
  202. data/lib/backports/1.9.1/file/exists.rb +5 -0
  203. data/lib/backports/1.9.1/file/expand_path.rb +14 -0
  204. data/lib/backports/1.9.1/file/extname.rb +5 -0
  205. data/lib/backports/1.9.1/file/file.rb +5 -0
  206. data/lib/backports/1.9.1/file/ftype.rb +5 -0
  207. data/lib/backports/1.9.1/file/grpowned.rb +5 -0
  208. data/lib/backports/1.9.1/file/join.rb +5 -0
  209. data/lib/backports/1.9.1/file/lchmod.rb +5 -0
  210. data/lib/backports/1.9.1/file/lchown.rb +5 -0
  211. data/lib/backports/1.9.1/file/link.rb +5 -0
  212. data/lib/backports/1.9.1/file/lstat.rb +5 -0
  213. data/lib/backports/1.9.1/file/mtime.rb +5 -0
  214. data/lib/backports/1.9.1/file/new.rb +5 -0
  215. data/lib/backports/1.9.1/file/open.rb +23 -0
  216. data/lib/backports/1.9.1/file/owned.rb +5 -0
  217. data/lib/backports/1.9.1/file/pipe.rb +5 -0
  218. data/lib/backports/1.9.1/file/readable.rb +5 -0
  219. data/lib/backports/1.9.1/file/readable_real.rb +5 -0
  220. data/lib/backports/1.9.1/file/readlink.rb +5 -0
  221. data/lib/backports/1.9.1/file/rename.rb +5 -0
  222. data/lib/backports/1.9.1/file/setgid.rb +5 -0
  223. data/lib/backports/1.9.1/file/setuid.rb +5 -0
  224. data/lib/backports/1.9.1/file/size.rb +14 -0
  225. data/lib/backports/1.9.1/file/socket.rb +5 -0
  226. data/lib/backports/1.9.1/file/split.rb +5 -0
  227. data/lib/backports/1.9.1/file/stat.rb +5 -0
  228. data/lib/backports/1.9.1/file/sticky.rb +5 -0
  229. data/lib/backports/1.9.1/file/symlink.rb +6 -0
  230. data/lib/backports/1.9.1/file/to_path.rb +3 -0
  231. data/lib/backports/1.9.1/file/truncate.rb +5 -0
  232. data/lib/backports/1.9.1/file/unlink.rb +5 -0
  233. data/lib/backports/1.9.1/file/writable.rb +5 -0
  234. data/lib/backports/1.9.1/file/writable_real.rb +5 -0
  235. data/lib/backports/1.9.1/file/zero.rb +5 -0
  236. data/lib/backports/1.9.1/float.rb +3 -19
  237. data/lib/backports/1.9.1/float/round.rb +21 -0
  238. data/lib/backports/1.9.1/hash.rb +2 -35
  239. data/lib/backports/1.9.1/hash/assoc.rb +12 -0
  240. data/lib/backports/1.9.1/hash/default_proc.rb +14 -0
  241. data/lib/backports/1.9.1/hash/rassoc.rb +9 -0
  242. data/lib/backports/1.9.1/hash/try_convert.rb +7 -0
  243. data/lib/backports/1.9.1/integer.rb +2 -21
  244. data/lib/backports/1.9.1/integer/magnitude.rb +3 -0
  245. data/lib/backports/1.9.1/integer/round.rb +24 -0
  246. data/lib/backports/1.9.1/io.rb +2 -33
  247. data/lib/backports/1.9.1/io/binread.rb +10 -0
  248. data/lib/backports/1.9.1/io/open.rb +21 -0
  249. data/lib/backports/1.9.1/io/try_convert.rb +7 -0
  250. data/lib/backports/1.9.1/io/ungetbyte.rb +3 -0
  251. data/lib/backports/1.9.1/kernel.rb +2 -39
  252. data/lib/backports/1.9.1/kernel/__callee__.rb +7 -0
  253. data/lib/backports/1.9.1/kernel/define_singleton_method.rb +9 -0
  254. data/lib/backports/1.9.1/kernel/public_method.rb +11 -0
  255. data/lib/backports/1.9.1/kernel/public_send.rb +13 -0
  256. data/lib/backports/1.9.1/kernel/require_relative.rb +14 -0
  257. data/lib/backports/1.9.1/math.rb +2 -24
  258. data/lib/backports/1.9.1/math/log.rb +22 -0
  259. data/lib/backports/1.9.1/math/log2.rb +5 -0
  260. data/lib/backports/1.9.1/numeric.rb +3 -9
  261. data/lib/backports/1.9.1/numeric/round.rb +11 -0
  262. data/lib/backports/1.9.1/proc.rb +2 -53
  263. data/lib/backports/1.9.1/proc/case_compare.rb +6 -0
  264. data/lib/backports/1.9.1/proc/curry.rb +24 -0
  265. data/lib/backports/1.9.1/proc/lambda.rb +40 -0
  266. data/lib/backports/1.9.1/range.rb +3 -3
  267. data/lib/backports/1.9.1/range/cover.rb +3 -0
  268. data/lib/backports/1.9.1/regexp.rb +3 -8
  269. data/lib/backports/1.9.1/regexp/try_convert.rb +7 -0
  270. data/lib/backports/1.9.1/stdlib.rb +1 -1
  271. data/lib/backports/1.9.1/string.rb +2 -44
  272. data/lib/backports/1.9.1/string/ascii_only.rb +7 -0
  273. data/lib/backports/1.9.1/string/chr.rb +7 -0
  274. data/lib/backports/1.9.1/string/clear.rb +8 -0
  275. data/lib/backports/1.9.1/string/codepoints.rb +8 -0
  276. data/lib/backports/1.9.1/string/each_codepoint.rb +3 -0
  277. data/lib/backports/1.9.1/string/getbyte.rb +3 -0
  278. data/lib/backports/1.9.1/string/ord.rb +7 -0
  279. data/lib/backports/1.9.1/string/setbyte.rb +3 -0
  280. data/lib/backports/1.9.1/string/try_convert.rb +7 -0
  281. data/lib/backports/1.9.1/symbol.rb +2 -31
  282. data/lib/backports/1.9.1/symbol/capitalize.rb +7 -0
  283. data/lib/backports/1.9.1/symbol/casecmp.rb +8 -0
  284. data/lib/backports/1.9.1/symbol/comparable.rb +7 -0
  285. data/lib/backports/1.9.1/symbol/comparison.rb +8 -0
  286. data/lib/backports/1.9.1/symbol/downcase.rb +7 -0
  287. data/lib/backports/1.9.1/symbol/element_reference.rb +7 -0
  288. data/lib/backports/1.9.1/symbol/empty.rb +7 -0
  289. data/lib/backports/1.9.1/symbol/length.rb +7 -0
  290. data/lib/backports/1.9.1/symbol/match.rb +9 -0
  291. data/lib/backports/1.9.1/symbol/next.rb +1 -0
  292. data/lib/backports/1.9.1/symbol/size.rb +7 -0
  293. data/lib/backports/1.9.1/symbol/succ.rb +8 -0
  294. data/lib/backports/1.9.1/symbol/swapcase.rb +7 -0
  295. data/lib/backports/1.9.1/symbol/upcase.rb +7 -0
  296. data/lib/backports/1.9.2.rb +2 -4
  297. data/lib/backports/1.9.2/array.rb +2 -109
  298. data/lib/backports/1.9.2/array/keep_if.rb +8 -0
  299. data/lib/backports/1.9.2/array/product.rb +26 -0
  300. data/lib/backports/1.9.2/array/repeated_combination.rb +25 -0
  301. data/lib/backports/1.9.2/array/repeated_permutation.rb +26 -0
  302. data/lib/backports/1.9.2/array/rotate.rb +17 -0
  303. data/lib/backports/1.9.2/array/select.rb +8 -0
  304. data/lib/backports/1.9.2/array/sort_by.rb +9 -0
  305. data/lib/backports/1.9.2/array/uniq.rb +29 -0
  306. data/lib/backports/1.9.2/complex.rb +3 -6
  307. data/lib/backports/1.9.2/complex/to_r.rb +10 -0
  308. data/lib/backports/1.9.2/dir.rb +3 -5
  309. data/lib/backports/1.9.2/dir/home.rb +5 -0
  310. data/lib/backports/1.9.2/enumerable.rb +2 -73
  311. data/lib/backports/1.9.2/enumerable/chunk.rb +39 -0
  312. data/lib/backports/1.9.2/enumerable/collect_concat.rb +1 -0
  313. data/lib/backports/1.9.2/enumerable/each_entry.rb +11 -0
  314. data/lib/backports/1.9.2/enumerable/flat_map.rb +11 -0
  315. data/lib/backports/1.9.2/enumerable/slice_before.rb +30 -0
  316. data/lib/backports/1.9.2/float.rb +3 -4
  317. data/lib/backports/1.9.2/float/infinity.rb +3 -0
  318. data/lib/backports/1.9.2/float/nan.rb +3 -0
  319. data/lib/backports/1.9.2/hash.rb +2 -10
  320. data/lib/backports/1.9.2/hash/keep_if.rb +8 -0
  321. data/lib/backports/1.9.2/hash/select.rb +9 -0
  322. data/lib/backports/1.9.2/kernel.rb +3 -5
  323. data/lib/backports/1.9.2/kernel/singleton_class.rb +7 -0
  324. data/lib/backports/1.9.2/random.rb +1 -1
  325. data/lib/backports/1.9.2/stdlib.rb +1 -1
  326. data/lib/backports/1.9.2/stdlib/matrix.rb +9 -8
  327. data/lib/backports/1.9.2/stdlib/set.rb +1 -1
  328. data/lib/backports/1.9.3.rb +2 -4
  329. data/lib/backports/1.9.3/file.rb +3 -14
  330. data/lib/backports/1.9.3/file/null.rb +16 -0
  331. data/lib/backports/1.9.3/io.rb +2 -31
  332. data/lib/backports/1.9.3/io/advise.rb +24 -0
  333. data/lib/backports/1.9.3/io/binwrite.rb +7 -0
  334. data/lib/backports/1.9.3/io/write.rb +7 -0
  335. data/lib/backports/1.9.3/string.rb +2 -38
  336. data/lib/backports/1.9.3/string/byteslice.rb +36 -0
  337. data/lib/backports/1.9.3/string/prepend.rb +10 -0
  338. data/lib/backports/1.9.rb +1 -3
  339. data/lib/backports/2.0.0.rb +2 -4
  340. data/lib/backports/2.0.0/array.rb +2 -29
  341. data/lib/backports/2.0.0/array/bsearch.rb +32 -0
  342. data/lib/backports/2.0.0/enumerable.rb +2 -11
  343. data/lib/backports/2.0.0/enumerable/lazy.rb +216 -0
  344. data/lib/backports/2.0.0/enumerator.rb +3 -0
  345. data/lib/backports/2.0.0/enumerator/lazy.rb +1 -203
  346. data/lib/backports/2.0.0/env.rb +3 -0
  347. data/lib/backports/2.0.0/env/to_h.rb +5 -0
  348. data/lib/backports/2.0.0/hash.rb +2 -18
  349. data/lib/backports/2.0.0/hash/default_proc.rb +16 -0
  350. data/lib/backports/2.0.0/hash/to_h.rb +7 -0
  351. data/lib/backports/2.0.0/nil.rb +3 -0
  352. data/lib/backports/2.0.0/nil/to_h.rb +7 -0
  353. data/lib/backports/2.0.0/range.rb +2 -48
  354. data/lib/backports/2.0.0/range/bsearch.rb +49 -0
  355. data/lib/backports/2.0.0/stdlib/abbrev.rb +1 -0
  356. data/lib/backports/2.0.0/stdlib/fake_stdlib_lib.rb +1 -0
  357. data/lib/backports/2.0.0/stdlib/ostruct.rb +1 -1
  358. data/lib/backports/2.0.0/struct.rb +3 -7
  359. data/lib/backports/2.0.0/struct/to_h.rb +9 -0
  360. data/lib/backports/2.0.rb +1 -3
  361. data/lib/backports/basic_object.rb +29 -29
  362. data/lib/backports/{1.9.2 → extra}/random/MT19937.rb +2 -2
  363. data/lib/backports/{1.9.2 → extra}/random/bits_and_bytes.rb +1 -1
  364. data/lib/backports/{1.9.2 → extra}/random/implementation.rb +1 -1
  365. data/lib/backports/extra/random/load.rb +17 -0
  366. data/lib/backports/force/array_map.rb +1 -1
  367. data/lib/backports/force/enumerable_map.rb +1 -1
  368. data/lib/backports/force/hash_select.rb +1 -1
  369. data/lib/backports/force/string_size.rb +1 -1
  370. data/lib/backports/rails.rb +2 -2
  371. data/lib/backports/rails/enumerable.rb +1 -1
  372. data/lib/backports/rails/hash.rb +1 -1
  373. data/lib/backports/rails/kernel.rb +1 -1
  374. data/lib/backports/rails/module.rb +1 -1
  375. data/lib/backports/rails/string.rb +6 -6
  376. data/lib/backports/tools.rb +74 -64
  377. data/lib/backports/version.rb +1 -1
  378. data/set_version/1.8.7.rb +1 -0
  379. data/set_version/1.9.1.rb +1 -0
  380. data/set_version/1.9.2.rb +1 -0
  381. data/set_version/1.9.3.rb +1 -0
  382. data/set_version/2.0.0.rb +1 -0
  383. data/set_version/setter.rb +14 -0
  384. data/tags/1.8.6/core/array/rotate_spec.rb +2 -0
  385. data/tags/1.8.6/core/array/uniq_spec.rb +3 -0
  386. data/tags/1.8.6/core/complex/to_r_spec.rb +3 -0
  387. data/tags/1.8.6/core/enumerable/each_entry_spec.rb +1 -0
  388. data/tags/1.8.6/core/enumerator/next_spec.rb +1 -0
  389. data/tags/1.8.6/core/env/to_h_spec.rb +2 -0
  390. data/tags/1.8.6/core/file/join_spec.rb +3 -0
  391. data/tags/1.8.6/core/file/lchmod_spec.rb +2 -0
  392. data/tags/1.8.6/core/file/new_spec.rb +2 -0
  393. data/tags/1.8.6/core/file/open_spec.rb +10 -0
  394. data/tags/1.8.6/core/file/to_path_spec.rb +1 -0
  395. data/tags/1.8.6/core/fixnum/fdiv_spec.rb +1 -0
  396. data/tags/1.8.6/core/gc/stress_spec.rb +2 -0
  397. data/tags/1.8.6/core/hash/assoc_spec.rb +1 -0
  398. data/tags/1.8.6/core/hash/default_proc_spec.rb +2 -0
  399. data/tags/1.8.6/core/hash/eql_spec.rb +3 -0
  400. data/tags/1.8.6/core/hash/hash_spec.rb +3 -0
  401. data/tags/1.8.6/core/hash/keep_if_spec.rb +1 -0
  402. data/tags/1.8.6/core/hash/select_spec.rb +1 -0
  403. data/tags/1.8.6/core/integer/round_spec.rb +1 -0
  404. data/tags/1.8.6/core/io/binread_spec.rb +7 -0
  405. data/tags/1.8.6/core/io/chars_spec.rb +1 -0
  406. data/tags/1.8.6/core/io/each_char_spec.rb +1 -0
  407. data/tags/1.8.6/core/io/lines_spec.rb +1 -0
  408. data/tags/1.8.6/core/io/open_spec.rb +24 -0
  409. data/tags/1.8.6/core/io/ungetbyte_spec.rb +4 -0
  410. data/tags/1.8.6/core/io/write_spec.rb +3 -0
  411. data/tags/1.8.6/core/kernel/__callee___spec.rb +5 -0
  412. data/tags/1.8.6/core/kernel/__method___spec.rb +1 -0
  413. data/tags/1.8.6/core/kernel/define_singleton_method_spec.rb +2 -0
  414. data/tags/1.8.6/core/kernel/public_method_spec.rb +2 -0
  415. data/tags/1.8.6/core/math/log2_spec.rb +4 -0
  416. data/tags/1.8.6/core/math/log_spec.rb +3 -0
  417. data/tags/1.8.6/core/module/class_exec_spec.rb +2 -0
  418. data/tags/1.8.6/core/module/module_exec_spec.rb +2 -0
  419. data/tags/1.8.6/core/numeric/step_spec.rb +12 -0
  420. data/tags/1.8.6/core/proc/curry_spec.rb +4 -0
  421. data/tags/1.8.6/core/range/step_spec.rb +12 -0
  422. data/tags/1.8.6/core/string/getbyte_spec.rb +6 -0
  423. data/tags/1.8.6/core/string/partition_spec.rb +1 -0
  424. data/tags/1.8.6/core/string/prepend_spec.rb +1 -0
  425. data/tags/1.8.6/core/string/rpartition_spec.rb +1 -0
  426. data/tags/1.8.6/core/string/setbyte_spec.rb +5 -0
  427. data/tags/1.8.6/core/string/upto_spec.rb +1 -0
  428. data/tags/1.8.6/core/symbol/capitalize_spec.rb +3 -0
  429. data/tags/1.8.6/core/symbol/comparison_spec.rb +1 -0
  430. data/tags/1.8.6/core/symbol/downcase_spec.rb +2 -0
  431. data/tags/1.8.6/core/symbol/element_reference_spec.rb +2 -0
  432. data/tags/1.8.6/core/symbol/empty_spec.rb +1 -0
  433. data/tags/1.8.6/core/symbol/match_spec.rb +2 -0
  434. data/tags/1.8.6/core/symbol/swapcase_spec.rb +2 -0
  435. data/tags/1.8.6/core/symbol/upcase_spec.rb +1 -0
  436. data/tags/1.8.7/core/array/rotate_spec.rb +2 -0
  437. data/tags/1.8.7/core/array/uniq_spec.rb +3 -0
  438. data/tags/1.8.7/core/complex/to_r_spec.rb +3 -0
  439. data/tags/1.8.7/core/env/to_h_spec.rb +2 -0
  440. data/tags/1.8.7/core/file/lchmod_spec.rb +2 -0
  441. data/tags/1.8.7/core/file/new_spec.rb +1 -0
  442. data/tags/1.8.7/core/file/open_spec.rb +1 -0
  443. data/tags/1.8.7/core/file/readlink_spec.rb +6 -0
  444. data/tags/1.8.7/core/file/to_path_spec.rb +1 -0
  445. data/tags/1.8.7/core/hash/assoc_spec.rb +1 -0
  446. data/tags/1.8.7/core/hash/default_proc_spec.rb +2 -0
  447. data/tags/1.8.7/core/hash/keep_if_spec.rb +1 -0
  448. data/tags/1.8.7/core/hash/rassoc_spec.rb +1 -0
  449. data/tags/1.8.7/core/hash/select_spec.rb +1 -0
  450. data/tags/1.8.7/core/integer/round_spec.rb +1 -0
  451. data/tags/1.8.7/core/io/binread_spec.rb +7 -0
  452. data/tags/1.8.7/core/io/open_spec.rb +25 -0
  453. data/tags/1.8.7/core/io/ungetbyte_spec.rb +4 -0
  454. data/tags/1.8.7/core/io/write_spec.rb +3 -0
  455. data/tags/1.8.7/core/kernel/__callee___spec.rb +5 -0
  456. data/tags/1.8.7/core/kernel/define_singleton_method_spec.rb +2 -0
  457. data/tags/1.8.7/core/kernel/public_method_spec.rb +1 -0
  458. data/tags/1.8.7/core/math/log2_spec.rb +4 -0
  459. data/tags/1.8.7/core/math/log_spec.rb +3 -0
  460. data/tags/1.8.7/core/proc/curry_spec.rb +3 -0
  461. data/tags/1.8.7/core/string/getbyte_spec.rb +5 -0
  462. data/tags/1.8.7/core/string/prepend_spec.rb +1 -0
  463. data/tags/1.8.7/core/string/setbyte_spec.rb +5 -0
  464. data/tags/1.8.7/core/symbol/capitalize_spec.rb +3 -0
  465. data/tags/1.8.7/core/symbol/comparison_spec.rb +1 -0
  466. data/tags/1.8.7/core/symbol/downcase_spec.rb +2 -0
  467. data/tags/1.8.7/core/symbol/element_reference_spec.rb +2 -0
  468. data/tags/1.8.7/core/symbol/empty_spec.rb +1 -0
  469. data/tags/1.8.7/core/symbol/match_spec.rb +2 -0
  470. data/tags/1.8.7/core/symbol/swapcase_spec.rb +2 -0
  471. data/tags/1.8.7/core/symbol/upcase_spec.rb +1 -0
  472. data/tags/1.9.1/core/array/rotate_spec.rb +1 -0
  473. data/tags/1.9.1/core/env/to_h_spec.rb +2 -0
  474. data/tags/1.9.1/core/hash/default_proc_spec.rb +1 -0
  475. data/tags/1.9.1/core/io/write_spec.rb +2 -0
  476. data/tags/1.9.2/core/io/write_spec.rb +2 -0
  477. data/test/README +1 -1
  478. data/test/_backport_guards_test.rb +140 -0
  479. data/test/{test_lazy.rb → lazy_test.rb} +25 -20
  480. data/test/{test_socket_interaction.rb → socket_interaction_test.rb} +3 -3
  481. data/test/test_helper.rb +0 -4
  482. metadata +392 -16
  483. data/lib/backports/1.9.2/match_data.rb +0 -3
  484. data/lib/backports/1.9.2/random/load.rb +0 -16
  485. data/lib/backports/2.0.0/nil_class.rb +0 -5
  486. data/test/std_lib_loading_test.rb +0 -57
  487. data/test/test__me_first.rb +0 -51
@@ -0,0 +1 @@
1
+ fails:File#to_path preserves the encoding of the path
@@ -0,0 +1 @@
1
+ fails:Fixnum#fdiv follows the coercion protocol
@@ -0,0 +1,2 @@
1
+ fails:GC.stress returns current status of GC stress mode
2
+ fails:GC.stress= sets the stress mode
@@ -0,0 +1 @@
1
+ fails:Hash#assoc only returns the first matching key-value pair for identity hashes
@@ -0,0 +1,2 @@
1
+ fails:Hash#default_proc= raises an error if passed nil
2
+ fails:Hash#default_proc= raises a TypeError if passed a lambda with an arity other than 2
@@ -0,0 +1,3 @@
1
+ fails:Hash#eql? computes equality for recursive hashes
2
+ fails:Hash#eql? computes equality for complex recursive hashes
3
+ fails:Hash#eql? computes equality for recursive hashes & arrays
@@ -0,0 +1,3 @@
1
+ fails:Hash#hash generates a hash for recursive hash structures
2
+ fails:Hash#hash returns the same hash for recursive hashes
3
+ fails:Hash#hash returns the same hash for recursive hashes through arrays
@@ -0,0 +1 @@
1
+ fails:Hash#keep_if raises an RuntimeError if called on a frozen instance
@@ -0,0 +1 @@
1
+ fails:Hash#select returns a Hash of entries for which block is true
@@ -0,0 +1 @@
1
+ fails:Integer#round raises a RangeError when passed Float::INFINITY
@@ -0,0 +1,7 @@
1
+ fails:IO.binread reads the contents of a file
2
+ fails:IO.binread reads the contents of a file up to a certain size when specified
3
+ fails:IO.binread reads the contents of a file from an offset of a specific size when specified
4
+ fails:IO.binread returns a String in ASCII-8BIT encoding
5
+ fails:IO.binread returns a String in ASCII-8BIT encoding regardless of Encoding.default_internal
6
+ fails:IO.binread raises an ArgumentError when not passed a valid length
7
+ fails:IO.binread raises an Errno::EINVAL when not passed a valid offset
@@ -0,0 +1 @@
1
+ fails:IO#chars yields each character
@@ -0,0 +1 @@
1
+ fails:IO#each_char yields each character
@@ -0,0 +1 @@
1
+ fails:IO#lines ignores a given block
@@ -0,0 +1,24 @@
1
+ fails:IO.open uses the external encoding specified in the mode argument
2
+ fails:IO.open uses the external and the internal encoding specified in the mode argument
3
+ fails:IO.open uses the external encoding specified via the :external_encoding option
4
+ fails:IO.open uses the internal encoding specified via the :internal_encoding option
5
+ fails:IO.open uses the colon-separated encodings specified via the :encoding option
6
+ fails:IO.open ingores the :encoding option when the :external_encoding option is present
7
+ fails:IO.open ingores the :encoding option when the :internal_encoding option is present
8
+ fails:IO.open uses the encoding specified via the :mode option hash
9
+ fails:IO.open ignores the :internal_encoding option when the same as the external encoding
10
+ fails:IO.open sets internal encoding to nil when passed '-'
11
+ fails:IO.open sets binmode from mode string
12
+ fails:IO.open does not set binmode without being asked
13
+ fails:IO.open sets binmode from :binmode option
14
+ fails:IO.open does not set binmode from false :binmode
15
+ fails:IO.open raises an error if passed binary/text mode two ways
16
+ fails:IO.open sets external encoding to binary with binmode in mode string
17
+ fails:IO.open sets external encoding to binary with :binmode option
18
+ fails:IO.open does not use binary encoding when mode encoding is specified
19
+ fails:IO.open does not use binary encoding when :encoding option is specified
20
+ fails:IO.open does not use binary encoding when :external_encoding option is specified
21
+ fails:IO.open does not use binary encoding when :internal_encoding option is specified
22
+ fails:IO.open coerces mode with #to_int
23
+ fails:IO.open coerces options as second argument with #to_hash
24
+ fails:IO.open raises ArgumentError if not passed a hash or nil for options
@@ -0,0 +1,4 @@
1
+ fails:IO#ungetbyte does nothing when passed nil
2
+ fails:IO#ungetbyte puts back each byte in a String argument
3
+ fails:IO#ungetbyte calls #to_str to convert the argument
4
+ fails:IO#ungetbyte puts back one byte for an Integer argument
@@ -0,0 +1,3 @@
1
+ fails:IO.write uses encoding from given options, if provided
2
+ fails:IO.write uses an :open_args option
3
+ fails:IO.write disregards other options if :open_args is given
@@ -0,0 +1,5 @@
1
+ fails:Kernel.__callee__ returns the current method, even when aliased
2
+ fails:Kernel.__callee__ returns the original name when aliased method
3
+ fails:Kernel.__callee__ returns the caller from blocks too
4
+ fails:Kernel.__callee__ returns nil when not called from a method
5
+ fails:Kernel.__callee__ returns the caller when sent as a string
@@ -0,0 +1 @@
1
+ fails:Kernel.__method__ returns the original name when aliased method
@@ -0,0 +1,2 @@
1
+ fails:Kernel#define_singleton_method when given an UnboundMethod defines any Child class method from any Parent's class methods
2
+ fails:Kernel#define_singleton_method when given an UnboundMethod will raise when attempting to define an object's singleton method from another object's singleton method
@@ -0,0 +1,2 @@
1
+ fails:Kernel#public_method returns a method object if we repond_to_missing? method
2
+ fails:Kernel#public_method changes the method called for super on a target aliased method
@@ -0,0 +1,4 @@
1
+ fails:Math.log2 raises an Errno::EDOM if the argument is less than 0
2
+ fails:Math.log2 raises an TypeError if the argument cannot be coerced with Float()
3
+ fails:Math.log2 raises an TypeError if passed a numerical argument as a string
4
+ fails:Math.log2 returns NaN given NaN
@@ -0,0 +1,3 @@
1
+ fails:Math.log raises a TypeError if the argument cannot be coerced with Float()
2
+ fails:Math.log raises a TypeError for numerical values passed as string
3
+ fails:Math.log returns NaN given NaN
@@ -0,0 +1,2 @@
1
+ fails:Module#class_exec defines method in the receiver's scope
2
+ fails:Module#class_exec raises an LocalJumpError when no block is given
@@ -0,0 +1,2 @@
1
+ fails:Module#module_exec defines method in the receiver's scope
2
+ fails:Module#module_exec raises an LocalJumpError when no block is given
@@ -0,0 +1,12 @@
1
+ fails:Numeric#step Numeric#step with [stop, +step] when self, stop or step is a Float is careful about not yielding a value greater than limit
2
+ fails:Numeric#step Numeric#step with [stop, -step] when self, stop or step is a Float is careful about not yielding a value smaller than limit
3
+ fails:Numeric#step Numeric#step with [stop, +Infinity] yields once if self < stop
4
+ fails:Numeric#step Numeric#step with [stop, +Infinity] yields once when stop is Infinity
5
+ fails:Numeric#step Numeric#step with [stop, +Infinity] yields once when self equals stop
6
+ fails:Numeric#step Numeric#step with [stop, +Infinity] yields once when self and stop are Infinity
7
+ fails:Numeric#step Numeric#step with [stop, +Infinity] does not yield when self > stop
8
+ fails:Numeric#step Numeric#step with [stop, -infinity] yields once if self > stop
9
+ fails:Numeric#step Numeric#step with [stop, -infinity] yields once if stop is -Infinity
10
+ fails:Numeric#step Numeric#step with [stop, -infinity] yields once when self equals stop
11
+ fails:Numeric#step Numeric#step with [stop, -infinity] yields once when self and stop are Infinity
12
+ fails:Numeric#step Numeric#step with [stop, -infinity] does not yield when self > stop
@@ -0,0 +1,4 @@
1
+ fails:Proc#curry produces Procs that raise ArgumentError for #binding
2
+ fails:Proc#curry produces Procs that return [[:rest]] for #parameters
3
+ fails:Proc#curry produces Procs that return nil for #source_location
4
+ fails:Proc#curry produces Procs that can be passed as the block for instance_exec
@@ -0,0 +1,12 @@
1
+ fails:Range#step with inclusive end and Integer values yields Float values incremented by a Float step
2
+ fails:Range#step with inclusive end and Float values returns Float values of 'step * n + begin <= end'
3
+ fails:Range#step with inclusive end and Integer, Float values yields Float values incremented by 1 and less than or equal to end when not passed a step
4
+ fails:Range#step with inclusive end and Integer, Float values yields Float values incremented by an Integer step
5
+ fails:Range#step with inclusive end and Integer, Float values yields Float values incremented by a Float step
6
+ fails:Range#step with inclusive end and String values raises a TypeError when passed a Float step
7
+ fails:Range#step with exclusive end and Integer values yields Float values incremented by a Float step
8
+ fails:Range#step with exclusive end and Float values returns Float values of 'step * n + begin < end'
9
+ fails:Range#step with exclusive end and Integer, Float values yields Float values incremented by 1 and less than end when not passed a step
10
+ fails:Range#step with exclusive end and Integer, Float values yields Float values incremented by an Integer step
11
+ fails:Range#step with exclusive end and Integer, Float values yields an Float and then Float values incremented by a Float step
12
+ fails:Range#step with exclusive end and String values raises a TypeError when passed a Float step
@@ -0,0 +1,6 @@
1
+ fails:String#getbyte returns an Integer between 0 and 255
2
+ fails:String#getbyte regards a multi-byte character as having multiple bytes
3
+ fails:String#getbyte mirrors the output of #bytes
4
+ fails:String#getbyte interprets bytes relative to the String's encoding
5
+ fails:String#getbyte raises an ArgumentError unless given one argument
6
+ fails:String#getbyte raises a TypeError unless its argument can be coerced into an Integer
@@ -0,0 +1 @@
1
+ fails:String#partition with String sets global vars if regexp used
@@ -0,0 +1 @@
1
+ fails:String#prepend raises a RuntimeError when self if frozen
@@ -0,0 +1 @@
1
+ fails:String#rpartition with String affects $~
@@ -0,0 +1,5 @@
1
+ fails:String#setbyte allows changing bytes in multi-byte characters
2
+ fails:String#setbyte can invalidate a String's encoding
3
+ fails:String#setbyte sets a byte at an index greater than String size
4
+ fails:String#setbyte raises a RuntimeError if self is frozen
5
+ fails:String#setbyte raises a TypeError unless the second argument is an Integer
@@ -0,0 +1 @@
1
+ fails:String#upto raises a LocalJumpError if other is a string but no block was given
@@ -0,0 +1,3 @@
1
+ fails:Symbol#capitalize leaves the first character alone if it is not an alphabetical ASCII character
2
+ fails:Symbol#capitalize leaves uppercase Unicode characters as they were
3
+ fails:Symbol#capitalize leaves lowercase Unicode characters as they were
@@ -0,0 +1 @@
1
+ fails:Symbol#<=> with Symbol compares individual characters based on their ascii value
@@ -0,0 +1,2 @@
1
+ fails:Symbol#downcase leaves lowercase Unicode characters as they were
2
+ fails:Symbol#downcase leaves uppercase Unicode characters as they were
@@ -0,0 +1,2 @@
1
+ fails:Symbol#[] with a Regex slice without a capture index sets $~ to the MatchData if there is a match
2
+ fails:Symbol#[] with a Regex slice with a capture index sets $~ to the MatchData if there is a match
@@ -0,0 +1 @@
1
+ fails:Symbol#empty? returns true if self is empty
@@ -0,0 +1,2 @@
1
+ fails:Symbol#=~ sets the last match pseudo-variables
2
+ fails:Symbol#match sets the last match pseudo-variables
@@ -0,0 +1,2 @@
1
+ fails:Symbol#swapcase leaves uppercase Unicode characters as they were
2
+ fails:Symbol#swapcase leaves lowercase Unicode characters as they were
@@ -0,0 +1 @@
1
+ fails:Symbol#upcase leaves lowercase Unicode characters as they were
@@ -0,0 +1,2 @@
1
+ fails:Array#rotate returns subclass instance for Array subclasses
2
+ fails:Array#rotate! raises a RuntimeError on a frozen array
@@ -0,0 +1,3 @@
1
+ fails:Array#uniq! raises a RuntimeError on a frozen array when the array is modified
2
+ fails:Array#uniq! raises a RuntimeError on a frozen array when the array would not be modified
3
+ fails:Array#uniq! doesn't yield to the block on a frozen array
@@ -0,0 +1,3 @@
1
+ fails:Complex#to_r when the imaginary part is Fixnum 0 returns the result of sending #to_r to the real part
2
+ fails:Complex#to_r when the imaginary part is Rational 0 returns the result of sending #to_r to the real part
3
+ fails:Complex#to_r when the imaginary part responds to #== 0 with true returns the result of sending #to_r to the real part
@@ -0,0 +1,2 @@
1
+ fails:ENV.to_hash uses the locale encoding for keys
2
+ fails:ENV.to_hash uses the locale encoding for values
@@ -0,0 +1,2 @@
1
+ fails:File.lchmod returns false from #respond_to?
2
+ fails:File.lchmod raises a NotImplementedError when called
@@ -0,0 +1 @@
1
+ fails:File.new raises an Errno::EBADF if the first parameter is an invalid file descriptor
@@ -0,0 +1 @@
1
+ fails:File.open on a FIFO opens it as a normal file
@@ -0,0 +1,6 @@
1
+ fails:File.readlink File.readlink with absolute paths return the name of the file referenced by the given link
2
+ fails:File.readlink File.readlink with absolute paths returns the name of the file referenced by the given link when the file does not exist
3
+ fails:File.readlink File.readlink with absolute paths raises an Errno::ENOENT if there is no such file
4
+ fails:File.readlink File.readlink with absolute paths raises an Errno::EINVAL if called with a normal file
5
+ fails:File.readlink File.readlink when changing the working directory returns the name of the file referenced by the given link
6
+ fails:File.readlink File.readlink when changing the working directory returns the name of the file referenced by the given link when the file does not exist
@@ -0,0 +1 @@
1
+ fails:File#to_path preserves the encoding of the path
@@ -0,0 +1 @@
1
+ fails:Hash#assoc only returns the first matching key-value pair for identity hashes
@@ -0,0 +1,2 @@
1
+ fails:Hash#default_proc= raises an error if passed nil
2
+ fails:Hash#default_proc= raises a TypeError if passed a lambda with an arity other than 2
@@ -0,0 +1 @@
1
+ fails:Hash#keep_if raises an RuntimeError if called on a frozen instance
@@ -0,0 +1 @@
1
+ fails:Hash#rassoc only returns the first matching key-value pair
@@ -0,0 +1 @@
1
+ fails:Hash#select returns a Hash of entries for which block is true
@@ -0,0 +1 @@
1
+ fails:Integer#round raises a RangeError when passed Float::INFINITY
@@ -0,0 +1,7 @@
1
+ fails:IO.binread reads the contents of a file
2
+ fails:IO.binread reads the contents of a file up to a certain size when specified
3
+ fails:IO.binread reads the contents of a file from an offset of a specific size when specified
4
+ fails:IO.binread returns a String in ASCII-8BIT encoding
5
+ fails:IO.binread returns a String in ASCII-8BIT encoding regardless of Encoding.default_internal
6
+ fails:IO.binread raises an ArgumentError when not passed a valid length
7
+ fails:IO.binread raises an Errno::EINVAL when not passed a valid offset
@@ -0,0 +1,25 @@
1
+ fails:IO.open uses the external encoding specified in the mode argument
2
+ fails:IO.open uses the external and the internal encoding specified in the mode argument
3
+ fails:IO.open uses the external encoding specified via the :external_encoding option
4
+ fails:IO.open uses the internal encoding specified via the :internal_encoding option
5
+ fails:IO.open uses the colon-separated encodings specified via the :encoding option
6
+ fails:IO.open ingores the :encoding option when the :external_encoding option is present
7
+ fails:IO.open ingores the :encoding option when the :internal_encoding option is present
8
+ fails:IO.open uses the encoding specified via the :mode option hash
9
+ fails:IO.open ignores the :internal_encoding option when the same as the external encoding
10
+ fails:IO.open sets internal encoding to nil when passed '-'
11
+ fails:IO.open raises an error if passed encodings two ways
12
+ fails:IO.open sets binmode from mode string
13
+ fails:IO.open does not set binmode without being asked
14
+ fails:IO.open sets binmode from :binmode option
15
+ fails:IO.open does not set binmode from false :binmode
16
+ fails:IO.open sets external encoding to binary with binmode in mode string
17
+ fails:IO.open does not use binary encoding when mode encoding is specified
18
+ fails:IO.open does not use binary encoding when :encoding option is specified
19
+ fails:IO.open does not use binary encoding when :external_encoding option is specified
20
+ fails:IO.open does not use binary encoding when :internal_encoding option is specified
21
+ fails:IO.open coerces mode with #to_int
22
+ fails:IO.open coerces options as second argument with #to_hash
23
+ fails:IO.open raises ArgumentError if not passed a hash or nil for options
24
+ fails:IO.open sets external encoding to binary with :binmode option
25
+ fails:IO.open raises an error if passed binary/text mode two ways
@@ -0,0 +1,4 @@
1
+ fails:IO#ungetbyte does nothing when passed nil
2
+ fails:IO#ungetbyte puts back each byte in a String argument
3
+ fails:IO#ungetbyte calls #to_str to convert the argument
4
+ fails:IO#ungetbyte puts back one byte for an Integer argument
@@ -0,0 +1,3 @@
1
+ fails:IO.write uses encoding from given options, if provided
2
+ fails:IO.write uses an :open_args option
3
+ fails:IO.write disregards other options if :open_args is given
@@ -0,0 +1,5 @@
1
+ fails:Kernel.__callee__ returns the current method, even when aliased
2
+ fails:Kernel.__callee__ returns the original name when aliased method
3
+ fails:Kernel.__callee__ returns the caller from blocks too
4
+ fails:Kernel.__callee__ returns nil when not called from a method
5
+ fails:Kernel.__callee__ returns the caller when sent as a string
@@ -0,0 +1,2 @@
1
+ fails:Kernel#define_singleton_method when given an UnboundMethod defines any Child class method from any Parent's class methods
2
+ fails:Kernel#define_singleton_method when given an UnboundMethod will raise when attempting to define an object's singleton method from another object's singleton method
@@ -0,0 +1 @@
1
+ fails:Kernel#public_method returns a method object if we repond_to_missing? method
@@ -0,0 +1,4 @@
1
+ fails:Math.log2 raises an Errno::EDOM if the argument is less than 0
2
+ fails:Math.log2 raises an TypeError if the argument cannot be coerced with Float()
3
+ fails:Math.log2 raises an TypeError if passed a numerical argument as a string
4
+ fails:Math.log2 returns NaN given NaN
@@ -0,0 +1,3 @@
1
+ fails:Math.log raises a TypeError if the argument cannot be coerced with Float()
2
+ fails:Math.log raises a TypeError for numerical values passed as string
3
+ fails:Math.log returns NaN given NaN
@@ -0,0 +1,3 @@
1
+ fails:Proc#curry produces Procs that raise ArgumentError for #binding
2
+ fails:Proc#curry produces Procs that return [[:rest]] for #parameters
3
+ fails:Proc#curry produces Procs that return nil for #source_location
@@ -0,0 +1,5 @@
1
+ fails:String#getbyte returns an Integer between 0 and 255
2
+ fails:String#getbyte regards a multi-byte character as having multiple bytes
3
+ fails:String#getbyte interprets bytes relative to the String's encoding
4
+ fails:String#getbyte raises an ArgumentError unless given one argument
5
+ fails:String#getbyte raises a TypeError unless its argument can be coerced into an Integer
@@ -0,0 +1 @@
1
+ fails:String#prepend raises a RuntimeError when self if frozen
@@ -0,0 +1,5 @@
1
+ fails:String#setbyte allows changing bytes in multi-byte characters
2
+ fails:String#setbyte can invalidate a String's encoding
3
+ fails:String#setbyte sets a byte at an index greater than String size
4
+ fails:String#setbyte raises a RuntimeError if self is frozen
5
+ fails:String#setbyte raises a TypeError unless the second argument is an Integer
@@ -0,0 +1,3 @@
1
+ fails:Symbol#capitalize leaves the first character alone if it is not an alphabetical ASCII character
2
+ fails:Symbol#capitalize leaves uppercase Unicode characters as they were
3
+ fails:Symbol#capitalize leaves lowercase Unicode characters as they were
@@ -0,0 +1 @@
1
+ fails:Symbol#<=> with Symbol compares individual characters based on their ascii value
@@ -0,0 +1,2 @@
1
+ fails:Symbol#downcase leaves lowercase Unicode characters as they were
2
+ fails:Symbol#downcase leaves uppercase Unicode characters as they were
@@ -0,0 +1,2 @@
1
+ fails:Symbol#[] with a Regex slice without a capture index sets $~ to the MatchData if there is a match
2
+ fails:Symbol#[] with a Regex slice with a capture index sets $~ to the MatchData if there is a match
@@ -0,0 +1 @@
1
+ fails:Symbol#empty? returns true if self is empty
@@ -0,0 +1,2 @@
1
+ fails:Symbol#=~ sets the last match pseudo-variables
2
+ fails:Symbol#match sets the last match pseudo-variables
@@ -0,0 +1,2 @@
1
+ fails:Symbol#swapcase leaves uppercase Unicode characters as they were
2
+ fails:Symbol#swapcase leaves lowercase Unicode characters as they were
@@ -0,0 +1 @@
1
+ fails:Symbol#upcase leaves lowercase Unicode characters as they were
@@ -0,0 +1 @@
1
+ fails:Array#rotate returns subclass instance for Array subclasses
@@ -0,0 +1,2 @@
1
+ fails:ENV.to_hash uses the locale encoding for keys
2
+ fails:ENV.to_hash uses the locale encoding for values
@@ -0,0 +1 @@
1
+ fails:Hash#default_proc= raises a TypeError if passed a lambda with an arity other than 2
@@ -0,0 +1,2 @@
1
+ fails:IO.write uses encoding from given options, if provided
2
+ fails:IO.write uses an :open_args option
@@ -0,0 +1,2 @@
1
+ fails:IO.write uses encoding from given options, if provided
2
+ fails:IO.write uses an :open_args option
@@ -10,4 +10,4 @@ For example:
10
10
 
11
11
  This will run the specs for Range#cover for Ruby 1.8.7 after loading backports.
12
12
 
13
- You need to check which tests fail to decide if it's OK that they do or not. For example it is to be expected that specs checking for encoding behavior will fail, as backports does not support the Ruby 1.9 encoding functionality.
13
+ You need to check which tests fail to decide if it's OK that they do or not. For example it is to be expected that specs checking for encoding behavior will fail, as backports does not support the Ruby 1.9 encoding functionality.
@@ -0,0 +1,140 @@
1
+ require 'stringio'
2
+ if RUBY_VERSION < '1.9'
3
+ require 'enumerator'
4
+ require 'generator' # Must require first, because of warning in Ruby 1.8.7 with `ruby -w -r generator -e ""`
5
+ end
6
+ require './test/test_helper'
7
+ $bogus = []
8
+
9
+ module Kernel
10
+ def require_with_bogus_extension(lib)
11
+ $bogus << lib
12
+ require_without_bogus_extension(lib)
13
+ end
14
+ alias_method :require_without_bogus_extension, :require
15
+ alias_method :require, :require_with_bogus_extension
16
+
17
+ if defined? BasicObject and BasicObject.superclass
18
+ BasicObject.send :undef_method, :require
19
+ BasicObject.send :undef_method, :require_with_bogus_extension
20
+ end
21
+ end
22
+
23
+ class AAA_TestBackportGuards < Test::Unit::TestCase
24
+ def setup
25
+ $VERBOSE = true
26
+ @prev, $stderr = $stderr, StringIO.new
27
+ end
28
+
29
+ def teardown
30
+ assert_equal '', $stderr.string
31
+ $stderr = @prev
32
+ end
33
+
34
+ EXCLUDE = %w[require] # Overriden in all circumstances to load the std-lib
35
+ EXCLUDE.map!(&:to_sym) if instance_methods.first.is_a?(Symbol)
36
+
37
+ # For some very strange reason, Hash[kvp.flatten] doesn't always work in 1.8.6??
38
+ def hash(key_value_pairs)
39
+ h = {}
40
+ key_value_pairs.each{|k,v| h[k] = v}
41
+ h
42
+ end
43
+
44
+ def class_signature(klass)
45
+ hash(
46
+ (klass.instance_methods - EXCLUDE).map{|m| [m, klass.instance_method(m)] } +
47
+ (klass.methods - EXCLUDE).map{|m| [".#{m}", klass.method(m) ]}
48
+ )
49
+ end
50
+
51
+ CLASSES = [Array, Binding, Dir, Enumerable, Fixnum, Float, GC,
52
+ Hash, Integer, IO, Kernel, Math, MatchData, Method, Module, Numeric,
53
+ ObjectSpace, Proc, Process, Range, Regexp, String, Struct, Symbol] +
54
+ [ENV, ARGF].map{|obj| class << obj; self; end }
55
+
56
+ case RUBY_VERSION
57
+ when '1.8.6'
58
+ when '1.8.7'
59
+ CLASSES << Enumerable::Enumerator
60
+ else
61
+ CLASSES << Enumerator
62
+ end
63
+
64
+ def digest
65
+ hash(
66
+ CLASSES.map { |klass| [klass, class_signature(klass)] }
67
+ )
68
+ end
69
+
70
+ def digest_delta(before, after)
71
+ delta = {}
72
+ before.each do |klass, methods|
73
+ compare = after[klass]
74
+ d = methods.map do |name, unbound|
75
+ name unless unbound == compare[name]
76
+ end
77
+ d.compact!
78
+ delta[klass] = d unless d.empty?
79
+ end
80
+ delta unless delta.empty?
81
+ end
82
+
83
+ # Order super important!
84
+ def test__1_abbrev_can_be_required_before_backports
85
+ assert require('abbrev')
86
+ assert !$LOADED_FEATURES.include?('backports')
87
+ end
88
+
89
+ # Order super important!
90
+ def test__2_backports_wont_override_unnecessarily
91
+ before = digest
92
+ unless RUBY_VERSION <= '1.8.6'
93
+ require "backports/#{RUBY_VERSION}"
94
+ after = digest
95
+ assert_nil digest_delta(before, after)
96
+ end
97
+ unless RUBY_VERSION == "2.0.0"
98
+ require "backports"
99
+ after = digest
100
+ assert !digest_delta(before, after).nil?
101
+ end
102
+ end
103
+
104
+ def test_setlib_load_correctly_after_requiring_backports
105
+ path = File.expand_path("../../lib/backports/1.9.2/stdlib/matrix.rb", __FILE__)
106
+ assert_equal false, $LOADED_FEATURES.include?(path)
107
+ assert_equal true, require('matrix')
108
+ assert_equal true, $bogus.include?("matrix")
109
+ assert_equal true, $LOADED_FEATURES.include?(path)
110
+ assert_equal false, require('matrix')
111
+ end
112
+
113
+ def test_setlib_load_correctly_before_requiring_backports_test
114
+ assert_equal true, $bogus.include?("abbrev")
115
+ path = File.expand_path("../../lib/backports/2.0.0/stdlib/abbrev.rb", __FILE__)
116
+ assert_equal true, $LOADED_FEATURES.include?(path)
117
+ assert_equal false, require('abbrev')
118
+ end
119
+
120
+ def test_backports_does_not_interfere_for_libraries_without_backports_test
121
+ assert_equal true, require('scanf')
122
+ assert_equal false, require('scanf')
123
+ end
124
+
125
+ def test_load_correctly_new_libraries_test
126
+ path = File.expand_path("../../lib/backports/2.0.0/stdlib/fake_stdlib_lib.rb", __FILE__)
127
+ assert_equal false, $LOADED_FEATURES.include?(path)
128
+ assert_equal true, require('fake_stdlib_lib')
129
+ assert_equal true, $LOADED_FEATURES.include?(path)
130
+ assert_equal false, require('fake_stdlib_lib')
131
+ end
132
+
133
+ def test_no_warnings
134
+ require 'ostruct'
135
+ require 'set'
136
+ require 'backports/1.8.7/array/each'
137
+ require 'backports/1.8.7/enumerator/next'
138
+ assert_equal 1, [1,2,3].each.next # [Bug #70]
139
+ end
140
+ end