From 32b4a8b36b04878a761b274293f5708a40a622a5 Mon Sep 17 00:00:00 2001 From: seki Date: Sat, 2 Jan 2016 07:19:58 +0000 Subject: Allow ERB subclass to add token easily. [Feature #11936] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/erb/test_erb.rb | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'test') diff --git a/test/erb/test_erb.rb b/test/erb/test_erb.rb index 4e2d49a866..ee3333f66e 100644 --- a/test/erb/test_erb.rb +++ b/test/erb/test_erb.rb @@ -481,6 +481,59 @@ EOS def test_percent_after_etag assert_equal("1%", @erb.new("<%= 1 %>%", nil, "%").result) end + + def test_token_extension + extended_erb = Class.new(ERB) + extended_erb.module_eval do + def make_compiler(trim_mode) + compiler = Class.new(ERB::Compiler) + compiler.module_eval do + def compile_stag(stag, out, scanner) + case stag + when '<%==' + scanner.stag = stag + add_put_cmd(out, content) if content.size > 0 + self.content = '' + else + super + end + end + + def compile_content(stag, out) + case stag + when '<%==' + out.push("#{@insert_cmd}(::ERB::Util.html_escape(#{content}))") + else + super + end + end + + def make_scanner(src) + scanner = Class.new(ERB::Compiler::SimpleScanner) + scanner.module_eval do + def stags + ['<%=='] + super + end + end + scanner.new(src, @trim_mode, @percent) + end + end + compiler.new(trim_mode) + end + end + + src = <<~EOS + <% tag = '<>' %> + <%= tag %> + <%== tag %> + EOS + ans = <<~EOS + + <> + <> + EOS + assert_equal(ans, extended_erb.new(src).result) + end end class TestERBCoreWOStrScan < TestERBCore -- cgit v1.2.3