/vendor/bundler/ruby/1.9.1/gems/ruby_parser-3.1.2/test/test_ruby_parser_extras.rb

https://bitbucket.org/toihrk/fusuma · Ruby · 291 lines · 241 code · 46 blank · 4 comment · 1 complexity · 25e3b6cdc4d62f773cc41952a5e28508 MD5 · raw file

  1. # encoding: US-ASCII
  2. require 'rubygems'
  3. gem "minitest"
  4. require 'minitest/autorun'
  5. require 'ruby_parser_extras'
  6. require 'minitest/unit'
  7. class TestStackState < MiniTest::Unit::TestCase
  8. attr_reader :s
  9. def setup
  10. @s = RubyParserStuff::StackState.new :test
  11. end
  12. def assert_encoding str, default = false
  13. orig_str = str.dup
  14. p = Ruby19Parser.new
  15. s = nil
  16. out, err = capture_io do
  17. s = p.handle_encoding str
  18. end
  19. assert_equal orig_str.sub(/\357\273\277/, ''), s
  20. exp_err = ""
  21. if defined?(Encoding) then
  22. assert_equal "UTF-8", s.encoding.to_s, str.inspect
  23. else
  24. exp_err = "Skipping magic encoding comment\n" unless default
  25. end
  26. assert_equal "", out, str.inspect
  27. assert_equal exp_err, err, str.inspect # HACK
  28. end
  29. def test_handle_encoding_bom
  30. # bom support, default to utf-8
  31. assert_encoding "\xEF\xBB\xBF# blah"
  32. # we force_encode to US-ASCII, then encode to UTF-8 so our lexer will work
  33. assert_encoding "\xEF\xBB\xBF# encoding: US-ASCII"
  34. end
  35. def test_handle_encoding_default
  36. assert_encoding "blah", :default
  37. end
  38. def test_handle_encoding_emacs
  39. # Q: how many different ways can we screw these up? A: ALL OF THEM
  40. assert_encoding "# - encoding: utf-8 -"
  41. assert_encoding "# - encoding:utf-8"
  42. assert_encoding "# -* coding: UTF-8 -*-"
  43. assert_encoding "# -*- coding: UTF-8 -*-"
  44. assert_encoding "# -*- coding: utf-8 -*"
  45. assert_encoding "# -*- coding: utf-8 -*-"
  46. assert_encoding "# -*- coding: utf-8; mode: ruby -*-"
  47. assert_encoding "# -*- coding: utf-8; mode: ruby; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2"
  48. assert_encoding "# -*- coding:utf-8; mode:ruby; -*-"
  49. assert_encoding "# -*- encoding: UTF-8 -*-"
  50. assert_encoding "# -*- encoding: utf-8 -*"
  51. assert_encoding "# -*- encoding: utf-8 -*-"
  52. assert_encoding "# -*- mode:ruby; coding:utf-8 -*-"
  53. assert_encoding "# -*- ruby encoding: utf-8 -*-"
  54. assert_encoding "# -- encoding: utf-8 --"
  55. assert_encoding "# ~*~ encoding: utf-8 ~*~"
  56. assert_encoding "#-*- coding: utf-8 -*-"
  57. assert_encoding "#-*- coding:utf-8"
  58. assert_encoding "#-- -*- mode: ruby; encoding: utf-8 -*-\n"
  59. end
  60. def test_handle_encoding_wtf
  61. assert_encoding "# coding : utf-8"
  62. assert_encoding "# Ruby 1.9: encoding: utf-8"
  63. assert_encoding "# Encoding: UTF-8 <-- required, please leave this in."
  64. assert_encoding "# Encoding: UTF-8"
  65. assert_encoding "# coding: utf-8"
  66. assert_encoding "# coding:utf-8"
  67. assert_encoding "# coding=utf-8"
  68. assert_encoding "# encoding: ASCII"
  69. assert_encoding "# encoding: ASCII-8BIT"
  70. assert_encoding "# encoding: ISO-8859-1"
  71. assert_encoding "# encoding: UTF-8"
  72. assert_encoding "# encoding: ascii-8bit"
  73. assert_encoding "# encoding: cp1252"
  74. assert_encoding "# encoding: euc-jp -*-"
  75. assert_encoding "# encoding: utf-8 # -*- ruby -*-"
  76. assert_encoding "# encoding: utf-8 require 'github_api/utils/url'"
  77. assert_encoding "# encoding: utf-8!"
  78. assert_encoding "# encoding: utf-8"
  79. assert_encoding "#<Encoding:UTF-8>"
  80. assert_encoding "#Encoding: UTF-8"
  81. assert_encoding "#coding:utf-8"
  82. assert_encoding "#encoding: UTF-8!"
  83. assert_encoding "#encoding: UTF-8"
  84. assert_encoding "#encoding: cp1252"
  85. assert_encoding "#encoding: sjis"
  86. assert_encoding "#encoding: utf-8"
  87. end
  88. def test_handle_encoding_normal
  89. assert_encoding "# encoding: UTF-8"
  90. assert_encoding "# encoding: UTF-8\r\n" # UGH I hate windoze
  91. assert_encoding "# coding: UTF-8"
  92. assert_encoding "# encoding = UTF-8"
  93. assert_encoding "# coding = UTF-8"
  94. end
  95. def test_handle_encoding_vim
  96. assert_encoding "# vim: set fileencoding=utf-8 filetype=ruby ts=2 : "
  97. assert_encoding "# vim: fileencoding=UTF-8 ft=ruby syn=ruby ts=2 sw=2 ai eol et si"
  98. assert_encoding "# vim: fileencoding=UTF-8 nobomb sw=2 ts=2 et"
  99. assert_encoding "# vim: filetype=ruby, fileencoding=UTF-8, tabsize=2, shiftwidth=2"
  100. assert_encoding "# vim: set fileencoding=utf-8"
  101. assert_encoding "# vim:encoding=UTF-8:"
  102. assert_encoding "# vim:fileencoding=UTF-8:"
  103. assert_encoding "# vim:set fileencoding=utf-8 filetype=ruby"
  104. assert_encoding "# vim:set fileencoding=utf-8:"
  105. end
  106. def test_stack_state
  107. s.push true
  108. s.push false
  109. s.lexpop
  110. assert_equal [false, true], s.stack
  111. end
  112. def test_is_in_state
  113. assert_equal false, s.is_in_state
  114. s.push false
  115. assert_equal false, s.is_in_state
  116. s.push true
  117. assert_equal true, s.is_in_state
  118. s.push false
  119. assert_equal false, s.is_in_state
  120. end
  121. def test_lexpop
  122. assert_equal [false], s.stack
  123. s.push true
  124. s.push false
  125. assert_equal [false, true, false], s.stack
  126. s.lexpop
  127. assert_equal [false, true], s.stack
  128. end
  129. def test_pop
  130. assert_equal [false], s.stack
  131. s.push true
  132. assert_equal [false, true], s.stack
  133. assert_equal true, s.pop
  134. assert_equal [false], s.stack
  135. end
  136. def test_push
  137. assert_equal [false], s.stack
  138. s.push true
  139. s.push false
  140. assert_equal [false, true, false], s.stack
  141. end
  142. end
  143. class TestEnvironment < MiniTest::Unit::TestCase
  144. def deny t
  145. assert ! t
  146. end
  147. def setup
  148. @env = RubyParserStuff::Environment.new
  149. @env[:blah] = 42
  150. assert_equal 42, @env[:blah]
  151. end
  152. def test_use
  153. @env.use :blah
  154. expected = [{ :blah => true }]
  155. assert_equal expected, @env.instance_variable_get(:"@use")
  156. end
  157. def test_use_scoped
  158. @env.use :blah
  159. @env.extend
  160. expected = [{}, { :blah => true }]
  161. assert_equal expected, @env.instance_variable_get(:"@use")
  162. end
  163. def test_used_eh
  164. @env.extend :dynamic
  165. @env[:x] = :dvar
  166. @env.use :x
  167. assert_equal true, @env.used?(:x)
  168. end
  169. def test_used_eh_none
  170. assert_equal nil, @env.used?(:x)
  171. end
  172. def test_used_eh_scoped
  173. self.test_used_eh
  174. @env.extend :dynamic
  175. assert_equal true, @env.used?(:x)
  176. end
  177. def test_var_scope_dynamic
  178. @env.extend :dynamic
  179. assert_equal 42, @env[:blah]
  180. @env.unextend
  181. assert_equal 42, @env[:blah]
  182. end
  183. def test_var_scope_static
  184. @env.extend
  185. assert_equal nil, @env[:blah]
  186. @env.unextend
  187. assert_equal 42, @env[:blah]
  188. end
  189. def test_dynamic
  190. expected1 = {}
  191. expected2 = { :x => 42 }
  192. assert_equal expected1, @env.dynamic
  193. begin
  194. @env.extend :dynamic
  195. assert_equal expected1, @env.dynamic
  196. @env[:x] = 42
  197. assert_equal expected2, @env.dynamic
  198. begin
  199. @env.extend :dynamic
  200. assert_equal expected2, @env.dynamic
  201. @env.unextend
  202. end
  203. assert_equal expected2, @env.dynamic
  204. @env.unextend
  205. end
  206. assert_equal expected1, @env.dynamic
  207. end
  208. def test_all_dynamic
  209. expected = { :blah => 42 }
  210. @env.extend :dynamic
  211. assert_equal expected, @env.all
  212. @env.unextend
  213. assert_equal expected, @env.all
  214. end
  215. def test_all_static
  216. @env.extend
  217. expected = { }
  218. assert_equal expected, @env.all
  219. @env.unextend
  220. expected = { :blah => 42 }
  221. assert_equal expected, @env.all
  222. end
  223. def test_dynamic_eh
  224. assert_equal false, @env.dynamic?
  225. @env.extend :dynamic
  226. assert_equal true, @env.dynamic?
  227. @env.extend
  228. assert_equal false, @env.dynamic?
  229. end
  230. def test_all_static_deeper
  231. expected0 = { :blah => 42 }
  232. expected1 = { :blah => 42, :blah2 => 24 }
  233. expected2 = { :blah => 27 }
  234. @env.extend :dynamic
  235. @env[:blah2] = 24
  236. assert_equal expected1, @env.all
  237. @env.extend
  238. @env[:blah] = 27
  239. assert_equal expected2, @env.all
  240. @env.unextend
  241. assert_equal expected1, @env.all
  242. @env.unextend
  243. assert_equal expected0, @env.all
  244. end
  245. end