PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/TDDBC_Yokohama2_PCUnit/Ruby/doc/ruby/ruby-1.9.2/test/erb/test_erb.rb

https://bitbucket.org/aetos/tddbc_yokohama2
Ruby | 462 lines | 400 code | 61 blank | 1 comment | 0 complexity | b87df8bd7a862c37e5fa2c628b4c4687 MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0, AGPL-3.0, 0BSD, Unlicense
  1. require 'test/unit'
  2. require 'erb'
  3. class TestERB < Test::Unit::TestCase
  4. class MyError < RuntimeError ; end
  5. def test_without_filename
  6. erb = ERB.new("<% raise ::TestERB::MyError %>")
  7. e = assert_raise(MyError) {
  8. erb.result
  9. }
  10. assert_match(/\A\(erb\):1\b/, e.backtrace[0])
  11. end
  12. def test_with_filename
  13. erb = ERB.new("<% raise ::TestERB::MyError %>")
  14. erb.filename = "test filename"
  15. e = assert_raise(MyError) {
  16. erb.result
  17. }
  18. assert_match(/\Atest filename:1\b/, e.backtrace[0])
  19. end
  20. def test_without_filename_with_safe_level
  21. erb = ERB.new("<% raise ::TestERB::MyError %>", 1)
  22. e = assert_raise(MyError) {
  23. erb.result
  24. }
  25. assert_match(/\A\(erb\):1\b/, e.backtrace[0])
  26. end
  27. def test_with_filename_and_safe_level
  28. erb = ERB.new("<% raise ::TestERB::MyError %>", 1)
  29. erb.filename = "test filename"
  30. e = assert_raise(MyError) {
  31. erb.result
  32. }
  33. assert_match(/\Atest filename:1\b/, e.backtrace[0])
  34. end
  35. end
  36. class TestERBCore < Test::Unit::TestCase
  37. def setup
  38. @erb = ERB
  39. end
  40. def test_core
  41. _test_core(nil)
  42. _test_core(0)
  43. _test_core(1)
  44. _test_core(2)
  45. _test_core(3)
  46. end
  47. def _test_core(safe)
  48. erb = @erb.new("hello")
  49. assert_equal("hello", erb.result)
  50. erb = @erb.new("hello", safe, 0)
  51. assert_equal("hello", erb.result)
  52. erb = @erb.new("hello", safe, 1)
  53. assert_equal("hello", erb.result)
  54. erb = @erb.new("hello", safe, 2)
  55. assert_equal("hello", erb.result)
  56. src = <<EOS
  57. %% hi
  58. = hello
  59. <% 3.times do |n| %>
  60. % n=0
  61. * <%= n %>
  62. <% end %>
  63. EOS
  64. ans = <<EOS
  65. %% hi
  66. = hello
  67. % n=0
  68. * 0
  69. % n=0
  70. * 1
  71. % n=0
  72. * 2
  73. EOS
  74. erb = @erb.new(src)
  75. assert_equal(ans, erb.result)
  76. erb = @erb.new(src, safe, 0)
  77. assert_equal(ans, erb.result)
  78. erb = @erb.new(src, safe, '')
  79. assert_equal(ans, erb.result)
  80. ans = <<EOS
  81. %% hi
  82. = hello
  83. % n=0
  84. * 0% n=0
  85. * 1% n=0
  86. * 2
  87. EOS
  88. erb = @erb.new(src, safe, 1)
  89. assert_equal(ans.chomp, erb.result)
  90. erb = @erb.new(src, safe, '>')
  91. assert_equal(ans.chomp, erb.result)
  92. ans = <<EOS
  93. %% hi
  94. = hello
  95. % n=0
  96. * 0
  97. % n=0
  98. * 1
  99. % n=0
  100. * 2
  101. EOS
  102. erb = @erb.new(src, safe, 2)
  103. assert_equal(ans, erb.result)
  104. erb = @erb.new(src, safe, '<>')
  105. assert_equal(ans, erb.result)
  106. ans = <<EOS
  107. % hi
  108. = hello
  109. * 0
  110. * 0
  111. * 0
  112. EOS
  113. erb = @erb.new(src, safe, '%')
  114. assert_equal(ans, erb.result)
  115. ans = <<EOS
  116. % hi
  117. = hello
  118. * 0* 0* 0
  119. EOS
  120. erb = @erb.new(src, safe, '%>')
  121. assert_equal(ans.chomp, erb.result)
  122. ans = <<EOS
  123. % hi
  124. = hello
  125. * 0
  126. * 0
  127. * 0
  128. EOS
  129. erb = @erb.new(src, safe, '%<>')
  130. assert_equal(ans, erb.result)
  131. end
  132. def test_safe_04
  133. erb = @erb.new('<%=$SAFE%>', 4)
  134. assert_equal('4', erb.result(TOPLEVEL_BINDING.taint))
  135. end
  136. class Foo; end
  137. def test_def_class
  138. erb = @erb.new('hello')
  139. cls = erb.def_class
  140. assert_equal(Object, cls.superclass)
  141. assert(cls.new.respond_to?('result'))
  142. cls = erb.def_class(Foo)
  143. assert_equal(Foo, cls.superclass)
  144. assert(cls.new.respond_to?('result'))
  145. cls = erb.def_class(Object, 'erb')
  146. assert_equal(Object, cls.superclass)
  147. assert(cls.new.respond_to?('erb'))
  148. end
  149. def test_percent
  150. src = <<EOS
  151. %n = 1
  152. <%= n%>
  153. EOS
  154. assert_equal("1\n", ERB.new(src, nil, '%').result)
  155. src = <<EOS
  156. <%
  157. %>
  158. EOS
  159. ans = "\n"
  160. assert_equal(ans, ERB.new(src, nil, '%').result)
  161. src = "<%\n%>"
  162. # ans = "\n"
  163. ans = ""
  164. assert_equal(ans, ERB.new(src, nil, '%').result)
  165. src = <<EOS
  166. <%
  167. n = 1
  168. %><%= n%>
  169. EOS
  170. assert_equal("1\n", ERB.new(src, nil, '%').result)
  171. src = <<EOS
  172. %n = 1
  173. %% <% n = 2
  174. n.times do |i|%>
  175. %% %%><%%<%= i%><%
  176. end%>
  177. %%%
  178. EOS
  179. ans = <<EOS
  180. %
  181. % %%><%0
  182. % %%><%1
  183. %%
  184. EOS
  185. assert_equal(ans, ERB.new(src, nil, '%').result)
  186. end
  187. def test_def_erb_method
  188. klass = Class.new
  189. klass.module_eval do
  190. extend ERB::DefMethod
  191. fname = File.join(File.dirname(File.expand_path(__FILE__)), 'hello.erb')
  192. def_erb_method('hello', fname)
  193. end
  194. assert(klass.new.respond_to?('hello'))
  195. assert(! klass.new.respond_to?('hello_world'))
  196. erb = @erb.new('hello, world')
  197. klass.module_eval do
  198. def_erb_method('hello_world', erb)
  199. end
  200. assert(klass.new.respond_to?('hello_world'))
  201. end
  202. def test_def_method_without_filename
  203. klass = Class.new
  204. erb = ERB.new("<% raise ::TestERB::MyError %>")
  205. erb.filename = "test filename"
  206. assert(! klass.new.respond_to?('my_error'))
  207. erb.def_method(klass, 'my_error')
  208. e = assert_raise(::TestERB::MyError) {
  209. klass.new.my_error
  210. }
  211. assert_match(/\A\(ERB\):1\b/, e.backtrace[0])
  212. end
  213. def test_def_method_with_fname
  214. klass = Class.new
  215. erb = ERB.new("<% raise ::TestERB::MyError %>")
  216. erb.filename = "test filename"
  217. assert(! klass.new.respond_to?('my_error'))
  218. erb.def_method(klass, 'my_error', 'test fname')
  219. e = assert_raise(::TestERB::MyError) {
  220. klass.new.my_error
  221. }
  222. assert_match(/\Atest fname:1\b/, e.backtrace[0])
  223. end
  224. def test_escape
  225. src = <<EOS
  226. 1.<%% : <%="<%%"%>
  227. 2.%%> : <%="%%>"%>
  228. 3.
  229. % x = "foo"
  230. <%=x%>
  231. 4.
  232. %% print "foo"
  233. 5.
  234. %% <%="foo"%>
  235. 6.<%="
  236. % print 'foo'
  237. "%>
  238. 7.<%="
  239. %% print 'foo'
  240. "%>
  241. EOS
  242. ans = <<EOS
  243. 1.<% : <%%
  244. 2.%%> : %>
  245. 3.
  246. foo
  247. 4.
  248. % print "foo"
  249. 5.
  250. % foo
  251. 6.
  252. % print 'foo'
  253. 7.
  254. %% print 'foo'
  255. EOS
  256. assert_equal(ans, ERB.new(src, nil, '%').result)
  257. end
  258. def test_keep_lineno
  259. src = <<EOS
  260. Hello,
  261. % x = "World"
  262. <%= x%>
  263. % raise("lineno")
  264. EOS
  265. erb = ERB.new(src, nil, '%')
  266. begin
  267. erb.result
  268. assert(false)
  269. rescue
  270. assert_match(/\A\(erb\):4\b/, $@[0].to_s)
  271. end
  272. src = <<EOS
  273. %>
  274. Hello,
  275. <% x = "World%%>
  276. "%>
  277. <%= x%>
  278. EOS
  279. ans = <<EOS
  280. %>Hello,
  281. World%>
  282. EOS
  283. assert_equal(ans, ERB.new(src, nil, '>').result)
  284. ans = <<EOS
  285. %>
  286. Hello,
  287. World%>
  288. EOS
  289. assert_equal(ans, ERB.new(src, nil, '<>').result)
  290. ans = <<EOS
  291. %>
  292. Hello,
  293. World%>
  294. EOS
  295. assert_equal(ans, ERB.new(src).result)
  296. src = <<EOS
  297. Hello,
  298. <% x = "World%%>
  299. "%>
  300. <%= x%>
  301. <% raise("lineno") %>
  302. EOS
  303. erb = ERB.new(src)
  304. begin
  305. erb.result
  306. assert(false)
  307. rescue
  308. assert_match(/\A\(erb\):5\b/, $@[0].to_s)
  309. end
  310. erb = ERB.new(src, nil, '>')
  311. begin
  312. erb.result
  313. assert(false)
  314. rescue
  315. assert_match(/\A\(erb\):5\b/, $@[0].to_s)
  316. end
  317. erb = ERB.new(src, nil, '<>')
  318. begin
  319. erb.result
  320. assert(false)
  321. rescue
  322. assert_match(/\A\(erb\):5\b/, $@[0].to_s)
  323. end
  324. src = <<EOS
  325. % y = 'Hello'
  326. <%- x = "World%%>
  327. "-%>
  328. <%= x %><%- x = nil -%>
  329. <% raise("lineno") %>
  330. EOS
  331. erb = ERB.new(src, nil, '-')
  332. begin
  333. erb.result
  334. assert(false)
  335. rescue
  336. assert_match(/\A\(erb\):5\b/, $@[0].to_s)
  337. end
  338. erb = ERB.new(src, nil, '%-')
  339. begin
  340. erb.result
  341. assert(false)
  342. rescue
  343. assert_match(/\A\(erb\):5\b/, $@[0].to_s)
  344. end
  345. end
  346. def test_explicit
  347. src = <<EOS
  348. <% x = %w(hello world) -%>
  349. NotSkip <%- y = x -%> NotSkip
  350. <% x.each do |w| -%>
  351. <%- up = w.upcase -%>
  352. * <%= up %>
  353. <% end -%>
  354. <%- z = nil -%> NotSkip <%- z = x %>
  355. <%- z.each do |w| -%>
  356. <%- down = w.downcase -%>
  357. * <%= down %>
  358. <%- up = w.upcase -%>
  359. * <%= up %>
  360. <%- end -%>
  361. KeepNewLine <%- z = nil -%>
  362. EOS
  363. ans = <<EOS
  364. NotSkip NotSkip
  365. * HELLO
  366. * WORLD
  367. NotSkip
  368. * hello
  369. * HELLO
  370. * world
  371. * WORLD
  372. KeepNewLine
  373. EOS
  374. assert_equal(ans, ERB.new(src, nil, '-').result)
  375. assert_equal(ans, ERB.new(src, nil, '-%').result)
  376. end
  377. def test_url_encode
  378. assert_equal("Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide",
  379. ERB::Util.url_encode("Programming Ruby: The Pragmatic Programmer's Guide"))
  380. assert_equal("%A5%B5%A5%F3%A5%D7%A5%EB",
  381. ERB::Util.url_encode("\xA5\xB5\xA5\xF3\xA5\xD7\xA5\xEB".force_encoding("EUC-JP")))
  382. end
  383. def test_percent_after_etag
  384. assert_equal("1%", @erb.new("<%= 1 %>%", nil, "%").result)
  385. end
  386. end
  387. class TestERBCoreWOStrScan < TestERBCore
  388. def setup
  389. @save_map = ERB::Compiler::Scanner.instance_variable_get('@scanner_map')
  390. map = {[nil, false]=>ERB::Compiler::SimpleScanner}
  391. ERB::Compiler::Scanner.instance_variable_set('@scanner_map', map)
  392. super
  393. end
  394. def teardown
  395. ERB::Compiler::Scanner.instance_variable_set('@scanner_map', @save_map)
  396. end
  397. end