1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/erb.rb: adjust line number for magic comment.

* test/erb/test_erb.rb: add tests for def_method.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kazu 2008-06-27 08:48:24 +00:00
parent 7a6cafc88e
commit f0bb63782a
3 changed files with 35 additions and 4 deletions

View file

@ -1,3 +1,9 @@
Fri Jun 27 17:45:17 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
* lib/erb.rb: adjust line number for magic comment.
* test/erb/test_erb.rb: add tests for def_method.
Fri Jun 27 14:25:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm.c (vm_eval_body): if thrown exception is frozen, reraise it to

View file

@ -736,16 +736,16 @@ class ERB
if @safe_level
th = Thread.start {
$SAFE = @safe_level
eval(@src, b, (@filename || '(erb)'), 1)
eval(@src, b, (@filename || '(erb)'), 0)
}
return th.value
else
return eval(@src, b, (@filename || '(erb)'), 1)
return eval(@src, b, (@filename || '(erb)'), 0)
end
end
def def_method(mod, methodname, fname='(ERB)') # :nodoc:
mod.module_eval("def #{methodname}\n" + self.src + "\nend\n", fname, 0)
mod.module_eval("def #{methodname}\n" + self.src + "\nend\n", fname, -1)
end
def def_module(methodname='erb') # :nodoc:

View file

@ -220,7 +220,7 @@ EOS
class Bar; end
def test_def_method
def test_def_erb_method
assert(! Bar.new.respond_to?('hello'))
Bar.module_eval do
extend ERB::DefMethod
@ -237,6 +237,31 @@ EOS
assert(Bar.new.respond_to?('hello_world'))
end
class DefMethodWithoutFname; end
class DefMethodWithFname; end
def test_def_method_without_filename
erb = ERB.new("<% raise ::TestERB::MyError %>")
erb.filename = "test filename"
assert(! DefMethodWithoutFname.new.respond_to?('my_error'))
erb.def_method(DefMethodWithoutFname, 'my_error')
e = assert_raise(::TestERB::MyError) {
DefMethodWithoutFname.new.my_error
}
assert_match(/\A\(ERB\):1\b/, e.backtrace[0])
end
def test_def_method_with_fname
erb = ERB.new("<% raise ::TestERB::MyError %>")
erb.filename = "test filename"
assert(! DefMethodWithFname.new.respond_to?('my_error'))
erb.def_method(DefMethodWithFname, 'my_error', 'test fname')
e = assert_raise(::TestERB::MyError) {
DefMethodWithFname.new.my_error
}
assert_match(/\Atest fname:1\b/, e.backtrace[0])
end
def test_escape
src = <<EOS
1.<%% : <%="<%%"%>