Hi, I'm trying to use RSpec (latest version, 2.1.0) with MacRuby, but there seems to be information missing from the exception backtraces which makes it difficult to see where exactly specs fail.
Running a straightforward helloworld_spec.rb with a failing example for instance, shows a reference to the failing line (hello_world.greeting.should == "Hello World!") in MRI Ruby 1.9.2: Failures: 1) A new HelloWorld object should return the appropriate greeting Failure/Error: hello_world.greeting.should == "Hello World!" expected: "Hello World!", got: "Hello Earth!" (using ==) # ./Spec/helloworld_spec.rb:6:in `block (2 levels) in <top (required)>' In MacRuby (0.7.1) however, RSpec displays a 'Failure/Error: Unable to find matching line from backtrace' instead, which makes sense with no traces present referring to the actual spec: Failures: 1) A new HelloWorld object should return the appropriate greeting Failure/Error: Unable to find matching line from backtrace expected: "Hello World!", got: "Hello Earth!" (using ==) # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:41:in `block' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:39:in `block' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:75:in `block' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:74:in `with_pending_capture' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:32:in `run:' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:260:in `block' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:257:in `run_examples:' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:222:in `run:' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:26:in `block' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:15:in `run:' # /usr/local/rvm/gems/macruby-0....@test/gems/rspec-core-2.1.0/lib/rspec/core/runner.rb:10:in `block' ' Looking at the complete backtrace in MRI Ruby 1.9.2 shows there seems to be a lot of information missing from the MacRuby backtrace. Apart from missing information about the context of a block and other differences in descriptions, MacRuby doesn't seem to list any traces beyond the instance_eval. The RSpec source (example.rb) shows it indeed uses instance_eval to evaluate the example block. I checked the backtraces in the rescue clauses there, but they don't contain traces from any execution beyond the instance_eval call. Is loss of exception backtraces in instance_eval a known limitations of MacRuby? Are there any plans to improve backtraces? Failures: 1) A new HelloWorld object should return the appropriate greeting Failure/Error: hello_world.greeting.should == "Hello World!" expected: "Hello World!", got: "Hello Earth!" (using ==) # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-expectations-2.1.0/lib/rspec/expectations/fail_with.rb:29:in `fail_with' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-expectations-2.1.0/lib/rspec/matchers/operator_matcher.rb:48:in `fail_with_message' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-expectations-2.1.0/lib/rspec/matchers/operator_matcher.rb:70:in `__delegate_operator' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-expectations-2.1.0/lib/rspec/matchers/operator_matcher.rb:60:in `eval_match' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-expectations-2.1.0/lib/rspec/matchers/operator_matcher.rb:29:in `block in use_custom_matcher_or_delegate' # ./Spec/helloworld_spec.rb:6:in `block (2 levels) in <top (required)>' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:42:in `instance_eval' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:42:in `block (2 levels) in run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:81:in `call' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:81:in `with_around_hooks' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:39:in `block in run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:75:in `call' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:75:in `block in with_pending_capture' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:74:in `catch' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:74:in `with_pending_capture' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example.rb:38:in `run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:261:in `block in run_examples' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:257:in `map' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:257:in `run_examples' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/example_group.rb:231:in `run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:27:in `block (2 levels) in run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:27:in `map' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:27:in `block in run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/reporter.rb:12:in `report' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/command_line.rb:24:in `run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/runner.rb:55:in `run_in_process' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/runner.rb:46:in `run' # /usr/local/rvm/gems/ruby-1.9.2...@test/gems/rspec-core-2.1.0/lib/rspec/core/runner.rb:10:in `block in autorun' Just for completeness' sake, this is the code from example.rb that runs the example: begin unless pending with_pending_capture do with_around_hooks do begin run_before_each @example_group_instance.instance_eval(&@example_block) rescue Exception => e set_exception(e) ensure run_after_each end end end end rescue Exception => e set_exception(e) ensure @example_group_instance.example = nil assign_auto_description end Thanks, Martijn _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel