PageRenderTime 35ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/test/readline/test_readline_history.rb

http://github.com/ruby/ruby
Ruby | 287 lines | 247 code | 39 blank | 1 comment | 9 complexity | 787f6de9d01797e158db7bb1f2d9dae4 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, AGPL-3.0
  1. # frozen_string_literal: false
  2. require_relative "helper"
  3. require "test/unit"
  4. module BasetestReadlineHistory
  5. def setup
  6. Readline::HISTORY.clear
  7. end
  8. def test_to_s
  9. expected = "HISTORY"
  10. assert_equal(expected, Readline::HISTORY.to_s)
  11. end
  12. def test_get
  13. lines = push_history(5)
  14. lines.each_with_index do |s, i|
  15. assert_external_string_equal(s, Readline::HISTORY[i])
  16. end
  17. end
  18. def test_get__negative
  19. lines = push_history(5)
  20. (1..5).each do |i|
  21. assert_equal(lines[-i], Readline::HISTORY[-i])
  22. end
  23. end
  24. def test_get__out_of_range
  25. push_history(5)
  26. invalid_indexes = [5, 6, 100, -6, -7, -100]
  27. invalid_indexes.each do |i|
  28. assert_raise(IndexError, "i=<#{i}>") do
  29. Readline::HISTORY[i]
  30. end
  31. end
  32. invalid_indexes = [100_000_000_000_000_000_000,
  33. -100_000_000_000_000_000_000]
  34. invalid_indexes.each do |i|
  35. assert_raise(RangeError, "i=<#{i}>") do
  36. Readline::HISTORY[i]
  37. end
  38. end
  39. end
  40. def test_set
  41. begin
  42. push_history(5)
  43. 5.times do |i|
  44. expected = "set: #{i}"
  45. Readline::HISTORY[i] = expected
  46. assert_external_string_equal(expected, Readline::HISTORY[i])
  47. end
  48. rescue NotImplementedError
  49. end
  50. end
  51. def test_set__out_of_range
  52. assert_raise(IndexError, NotImplementedError, "index=<0>") do
  53. Readline::HISTORY[0] = "set: 0"
  54. end
  55. push_history(5)
  56. invalid_indexes = [5, 6, 100, -6, -7, -100]
  57. invalid_indexes.each do |i|
  58. assert_raise(IndexError, NotImplementedError, "index=<#{i}>") do
  59. Readline::HISTORY[i] = "set: #{i}"
  60. end
  61. end
  62. invalid_indexes = [100_000_000_000_000_000_000,
  63. -100_000_000_000_000_000_000]
  64. invalid_indexes.each do |i|
  65. assert_raise(RangeError, NotImplementedError, "index=<#{i}>") do
  66. Readline::HISTORY[i] = "set: #{i}"
  67. end
  68. end
  69. end
  70. def test_push
  71. 5.times do |i|
  72. s = i.to_s
  73. assert_equal(Readline::HISTORY, Readline::HISTORY.push(s))
  74. assert_external_string_equal(s, Readline::HISTORY[i])
  75. end
  76. assert_equal(5, Readline::HISTORY.length)
  77. end
  78. def test_push__operator
  79. 5.times do |i|
  80. s = i.to_s
  81. assert_equal(Readline::HISTORY, Readline::HISTORY << s)
  82. assert_external_string_equal(s, Readline::HISTORY[i])
  83. end
  84. assert_equal(5, Readline::HISTORY.length)
  85. end
  86. def test_push__plural
  87. assert_equal(Readline::HISTORY, Readline::HISTORY.push("0", "1", "2", "3", "4"))
  88. (0..4).each do |i|
  89. assert_external_string_equal(i.to_s, Readline::HISTORY[i])
  90. end
  91. assert_equal(5, Readline::HISTORY.length)
  92. assert_equal(Readline::HISTORY, Readline::HISTORY.push("5", "6", "7", "8", "9"))
  93. (5..9).each do |i|
  94. assert_external_string_equal(i.to_s, Readline::HISTORY[i])
  95. end
  96. assert_equal(10, Readline::HISTORY.length)
  97. end
  98. def test_pop
  99. begin
  100. assert_equal(nil, Readline::HISTORY.pop)
  101. lines = push_history(5)
  102. (1..5).each do |i|
  103. assert_external_string_equal(lines[-i], Readline::HISTORY.pop)
  104. assert_equal(lines.length - i, Readline::HISTORY.length)
  105. end
  106. assert_equal(nil, Readline::HISTORY.pop)
  107. rescue NotImplementedError
  108. end
  109. end
  110. def test_shift
  111. begin
  112. assert_equal(nil, Readline::HISTORY.shift)
  113. lines = push_history(5)
  114. (0..4).each do |i|
  115. assert_external_string_equal(lines[i], Readline::HISTORY.shift)
  116. assert_equal(lines.length - (i + 1), Readline::HISTORY.length)
  117. end
  118. assert_equal(nil, Readline::HISTORY.shift)
  119. rescue NotImplementedError
  120. end
  121. end
  122. def test_each
  123. e = Readline::HISTORY.each do |s|
  124. assert(false) # not reachable
  125. end
  126. assert_equal(Readline::HISTORY, e)
  127. lines = push_history(5)
  128. i = 0
  129. e = Readline::HISTORY.each do |s|
  130. assert_external_string_equal(Readline::HISTORY[i], s)
  131. assert_external_string_equal(lines[i], s)
  132. i += 1
  133. end
  134. assert_equal(Readline::HISTORY, e)
  135. end
  136. def test_each__enumerator
  137. e = Readline::HISTORY.each
  138. assert_instance_of(Enumerator, e)
  139. end
  140. def test_length
  141. assert_equal(0, Readline::HISTORY.length)
  142. push_history(1)
  143. assert_equal(1, Readline::HISTORY.length)
  144. push_history(4)
  145. assert_equal(5, Readline::HISTORY.length)
  146. Readline::HISTORY.clear
  147. assert_equal(0, Readline::HISTORY.length)
  148. end
  149. def test_empty_p
  150. 2.times do
  151. assert(Readline::HISTORY.empty?)
  152. Readline::HISTORY.push("s")
  153. assert_equal(false, Readline::HISTORY.empty?)
  154. Readline::HISTORY.clear
  155. assert(Readline::HISTORY.empty?)
  156. end
  157. end
  158. def test_delete_at
  159. begin
  160. lines = push_history(5)
  161. (0..4).each do |i|
  162. assert_external_string_equal(lines[i], Readline::HISTORY.delete_at(0))
  163. end
  164. assert(Readline::HISTORY.empty?)
  165. lines = push_history(5)
  166. (1..5).each do |i|
  167. assert_external_string_equal(lines[lines.length - i], Readline::HISTORY.delete_at(-1))
  168. end
  169. assert(Readline::HISTORY.empty?)
  170. lines = push_history(5)
  171. assert_external_string_equal(lines[0], Readline::HISTORY.delete_at(0))
  172. assert_external_string_equal(lines[4], Readline::HISTORY.delete_at(3))
  173. assert_external_string_equal(lines[1], Readline::HISTORY.delete_at(0))
  174. assert_external_string_equal(lines[3], Readline::HISTORY.delete_at(1))
  175. assert_external_string_equal(lines[2], Readline::HISTORY.delete_at(0))
  176. assert(Readline::HISTORY.empty?)
  177. rescue NotImplementedError
  178. end
  179. end
  180. def test_delete_at__out_of_range
  181. assert_raise(IndexError, NotImplementedError, "index=<0>") do
  182. Readline::HISTORY.delete_at(0)
  183. end
  184. push_history(5)
  185. invalid_indexes = [5, 6, 100, -6, -7, -100]
  186. invalid_indexes.each do |i|
  187. assert_raise(IndexError, NotImplementedError, "index=<#{i}>") do
  188. Readline::HISTORY.delete_at(i)
  189. end
  190. end
  191. invalid_indexes = [100_000_000_000_000_000_000,
  192. -100_000_000_000_000_000_000]
  193. invalid_indexes.each do |i|
  194. assert_raise(RangeError, NotImplementedError, "index=<#{i}>") do
  195. Readline::HISTORY.delete_at(i)
  196. end
  197. end
  198. end
  199. private
  200. def push_history(num)
  201. lines = []
  202. num.times do |i|
  203. s = "a"
  204. i.times do
  205. s = s.succ
  206. end
  207. lines.push("#{i + 1}:#{s}")
  208. end
  209. Readline::HISTORY.push(*lines)
  210. return lines
  211. end
  212. def assert_external_string_equal(expected, actual)
  213. assert_equal(expected, actual)
  214. assert_equal(get_default_internal_encoding, actual.encoding)
  215. end
  216. def get_default_internal_encoding
  217. return Encoding.default_internal || Encoding.find("locale")
  218. end
  219. end
  220. class TestReadlineHistory < Test::Unit::TestCase
  221. include BasetestReadlineHistory
  222. def setup
  223. use_ext_readline
  224. super
  225. end
  226. end if defined?(::ReadlineSo) && defined?(::ReadlineSo::HISTORY) &&
  227. ENV["TEST_READLINE_OR_RELINE"] != "Reline" &&
  228. (
  229. begin
  230. ReadlineSo::HISTORY.clear
  231. rescue NotImplementedError
  232. false
  233. end
  234. )
  235. class TestRelineAsReadlineHistory < Test::Unit::TestCase
  236. include BasetestReadlineHistory
  237. def setup
  238. use_lib_reline
  239. super
  240. end
  241. def get_default_internal_encoding
  242. if RUBY_PLATFORM =~ /mswin|mingw/
  243. Encoding.default_internal || Encoding::UTF_8
  244. else
  245. super
  246. end
  247. end
  248. end if defined?(Reline) && ENV["TEST_READLINE_OR_RELINE"] != "Readline"