From 200770c4468f8b9ff2d9a1f7f77773a3a4b63a64 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Sat, 21 Jun 2014 11:39:06 -0400 Subject: [PATCH] Add a syntax test to help support multiple Rubies This is no real gain on Travis, which runs the full test suite against two Rubies. It does catch a few classes of error when running the test suite locally. --- test/syntax_test.rb | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 test/syntax_test.rb diff --git a/test/syntax_test.rb b/test/syntax_test.rb new file mode 100644 index 0000000000000..2fdc14e637f6d --- /dev/null +++ b/test/syntax_test.rb @@ -0,0 +1,32 @@ +require 'test_helper' + +describe "Syntax check" do + project_root = Pathname.new(File.expand_path("#{File.dirname(__FILE__)}/../")) + backend_files = Dir[project_root.join('**', '*.rb')].reject{|f| f.match %r{/Casks/}} + %w{1.8 1.9 2.0 2.1}.each do |major_version| + describe "under Ruby #{major_version}" do + interpreter = Pathname.new("/System/Library/Frameworks/Ruby.framework/Versions/#{major_version}/usr/bin/ruby") + interpreter = Pathname.new(Dir["#{ENV['HOME']}/.rbenv/versions/#{major_version}*/bin/ruby"].first.to_s) unless interpreter.exist? + interpreter = Pathname.new(Dir["#{ENV['HOME']}/.rvm/rubies/ruby-#{major_version}*/bin/ruby"].first.to_s) unless interpreter.exist? + interpreter = Pathname.new(Dir["/usr/local/bin/ruby{-,}#{major_version}*"].first.to_s) unless interpreter.exist? + interpreter = Pathname.new(Dir["/opt/local/bin/ruby{-,}#{major_version}*"].first.to_s) unless interpreter.exist? + flags = %w{-c} + flags.unshift '--disable-all' if major_version.to_f > 1.8 # perf + backend_files.each do |file| + it "#{file} is valid Ruby" do + skip unless interpreter.exist? + + # Reason for this hack is unknown. Travis appears to freeze, + # but only in one section of the build matrix. + skip if ENV.key?('TRAVIS_JOB_ID') and + RUBY_VERSION.match(%r{^1\.8}) + + args = flags + [ '--', file ] + shutup do + raise SyntaxError.new("#{file} failed syntax check") unless system(interpreter, *args) + end + end + end + end + end +end