diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-20 02:05:37 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-20 02:05:37 +0000 |
commit | 0de805f62bda2cbfac2a0c6392bdf7cae014cde4 (patch) | |
tree | 1a47b73ac36f022b58a0dcb1d78c9d431e0fff0e /test/ruby/envutil.rb | |
parent | 3ec171510eafbf682d67b1997460f2c5c27a3636 (diff) | |
download | ruby-0de805f62bda2cbfac2a0c6392bdf7cae014cde4.tar.gz |
envutil.rb: validate syntax
* test/ruby/envutil.rb (assert_valid_syntax): move from
test_syntax.rb.
* test/ruby/envutil.rb (assert_normal_exit): validate syntax before
running because this assertion passes even if the code fails by
SyntaxError.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/envutil.rb')
-rw-r--r-- | test/ruby/envutil.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index 6006ae75b4..42a9bf0aa6 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -133,7 +133,23 @@ module Test module Unit module Assertions public + def assert_valid_syntax(code, fname, mesg = fname) + code = code.dup.force_encoding("ascii-8bit") + code.sub!(/\A(?:\xef\xbb\xbf)?(\s*\#.*$)*(\n)?/n) { + "#$&#{"\n" if $1 && !$2}BEGIN{throw tag, :ok}\n" + } + code.force_encoding("us-ascii") + verbose, $VERBOSE = $VERBOSE, nil + yield if defined?(yield) + assert_nothing_raised(SyntaxError, mesg) do + assert_equal(:ok, catch {|tag| eval(code, binding, fname, 0)}, mesg) + end + ensure + $VERBOSE = verbose + end + def assert_normal_exit(testsrc, message = '', opt = {}) + assert_valid_syntax(testsrc, caller_locations(1, 1)[0].path) if opt.include?(:child_env) opt = opt.dup child_env = [opt.delete(:child_env)] || [] |