diff --git a/lib/rspec/support/ruby_features.rb b/lib/rspec/support/ruby_features.rb index 20e58075a..ea4033df6 100644 --- a/lib/rspec/support/ruby_features.rb +++ b/lib/rspec/support/ruby_features.rb @@ -47,6 +47,10 @@ def non_mri? def mri? !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' end + + def truffleruby? + defined?(RUBY_ENGINE) && RUBY_ENGINE == 'truffleruby' + end end # @api private @@ -101,7 +105,7 @@ def supports_taint? end ripper_requirements = [ComparableVersion.new(RUBY_VERSION) >= '1.9.2'] - ripper_requirements.push(false) if Ruby.rbx? + ripper_requirements.push(false) if Ruby.rbx? || Ruby.truffleruby? if Ruby.jruby? ripper_requirements.push(Ruby.jruby_version >= '1.7.5') diff --git a/spec/rspec/support/ruby_features_spec.rb b/spec/rspec/support/ruby_features_spec.rb index 10fc1525e..8990c58d4 100644 --- a/spec/rspec/support/ruby_features_spec.rb +++ b/spec/rspec/support/ruby_features_spec.rb @@ -126,12 +126,16 @@ def ripper_works_correctly? # https://github.com/jruby/jruby/issues/3386 def ripper_reports_correct_line_number? in_sub_process_if_possible do - require 'ripper' - tokens = ::Ripper.lex('foo') - token = tokens.first - location = token.first - line_number = location.first - line_number == 1 + begin + require 'ripper' + tokens = ::Ripper.lex('foo') + token = tokens.first + location = token.first + line_number = location.first + line_number == 1 + rescue NoMethodError + false # TruffleRuby defines Ripper but implementation is not complete + end end end