diff options
Diffstat (limited to 'test/ruby/test_syntax.rb')
-rw-r--r-- | test/ruby/test_syntax.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb new file mode 100644 index 0000000000..e25ad75f7a --- /dev/null +++ b/test/ruby/test_syntax.rb @@ -0,0 +1,22 @@ +require 'test/unit' + +class TestSyntax < Test::Unit::TestCase + def valid_syntax?(code, 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") + catch {|tag| eval(code, binding, fname, 0)} + rescue SyntaxError + false + end + + def test_syntax + assert_nothing_raised(Exception) do + for script in Dir[File.expand_path("../../../{lib,sample,ext,test}/**/*.rb", __FILE__)].sort + assert(valid_syntax?(IO::read(script), script)) + end + end + end +end |