Author: vborja
Date: Mon Oct  6 11:46:55 2008
New Revision: 702225

URL: http://svn.apache.org/viewvc?rev=702225&view=rev
Log:
Fix JtestR to work with rspec >=1.1.5 used by buildr

Modified:
    incubator/buildr/trunk/lib/buildr/java/bdd.rb
    incubator/buildr/trunk/lib/buildr/java/jtestr_runner.rb.erb
    incubator/buildr/trunk/lib/buildr/java/test_result.rb
    incubator/buildr/trunk/spec/java/bdd_spec.rb

Modified: incubator/buildr/trunk/lib/buildr/java/bdd.rb
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/bdd.rb?rev=702225&r1=702224&r2=702225&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/bdd.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/bdd.rb Mon Oct  6 11:46:55 2008
@@ -269,6 +269,7 @@
         Buildr::TestFramework::TestResult::Error.guard('<%= runner.file %>') do
           ::Spec::Runner::CommandLine.run($rspec_options)
         end
+        exit 0 # let buildr figure the result from the yaml file
       }
       Filter::Mapper.new(:erb, binding).transform(runner_erb)
     end
@@ -365,7 +366,7 @@
 
     def runner_config
       runner = super
-      runner.gems.update 'rspec' => '>0'
+      runner.gems.update 'rspec' => '>= 1.1.5'
       runner.requires.unshift 'spec', 'jtestr'
       runner
     end

Modified: incubator/buildr/trunk/lib/buildr/java/jtestr_runner.rb.erb
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/jtestr_runner.rb.erb?rev=702225&r1=702224&r2=702225&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/jtestr_runner.rb.erb (original)
+++ incubator/buildr/trunk/lib/buildr/java/jtestr_runner.rb.erb Mon Oct  6 
11:46:55 2008
@@ -100,6 +100,16 @@
   argv = <%= runner.rspec.inspect %> || []
   argv.push *<%= tests.inspect %>
   Buildr::TestFramework::TestResult::RSpecResultHandler.init(argv, output, 
output)
+
+  # JtestR uses this method, no longer on rspec
+  module ::Spec; def self.run=(flag); end; end
+  # JtestR uses a deprecated arity, so to complain with latest version we 
override it
+  class ::JtestR::RSpecResultHandler 
+    alias_method :deprecated_example_pending, :example_pending
+    def example_pending(example, message, pending_caller)
+      deprecated_example_pendng(example, message)
+    end
+  end
   
   jtestr.run *args
 
@@ -107,6 +117,8 @@
   Buildr::TestFramework::TestResult::Error.dump_yaml('<%= runner.result %>', 
e) rescue \
   puts "-[--- ERROR ---]-", e.class, e.message, *e.backtrace
 end
+
+exit 0 # let buildr find the erros from the result yaml
   
 # Local Variables:
 # mode: ruby

Modified: incubator/buildr/trunk/lib/buildr/java/test_result.rb
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/buildr/java/test_result.rb?rev=702225&r1=702224&r2=702225&view=diff
==============================================================================
--- incubator/buildr/trunk/lib/buildr/java/test_result.rb (original)
+++ incubator/buildr/trunk/lib/buildr/java/test_result.rb Mon Oct  6 11:46:55 
2008
@@ -27,6 +27,7 @@
         def initialize(message, backtrace)
           @message = message
           @backtrace = backtrace
+          set_backtrace backtrace
         end
 
         def self.dump_yaml(file, e)
@@ -59,9 +60,12 @@
         def initialize(options, where)
           @options = options
           @where = where
+          @result = Hash.new
+          @result[:succeeded] = []
+          @result[:failed] = []
         end
         
-        %w[ example_started example_passed example_failed example_pending
+        %w[ example_started
             start_dump dump_failure dump_summary dump_pending ].each do |meth|
           module_eval "def #{meth}(*args); end"
         end
@@ -70,24 +74,38 @@
           @example_group = example_group
         end
 
+        def example_passed(example)
+        end
+
+        def example_pending(example, counter, failure)
+        end
+
+        def example_failed(example, counter, failure)
+          if example_group.respond_to?(:spec_path)
+            result.failed << example_group.spec_path.gsub(/:\d+$/, '')
+          else
+            path = path_from_bt(failure.exception.backtrace)
+            result.failed << path if path
+          end
+        end
+
         def start(example_count)
           @result = TestResult.new
         end
 
-        def close
+        def path_from_bt(ary)
           files = options.files
-          failure_from_bt = lambda do |ary|
-            test = nil
-            ary.find do |bt|
-              bt = bt.split(':').first.strip
-              test = bt if files.include?(bt)
-            end
-            test
-          end
-          options.reporter.instance_variable_get(:@failures).each do |failure|
-            result.failed << 
files.delete(failure_from_bt[failure.exception.backtrace])
+          test = nil
+          ary.find do |bt|
+            bt = bt.split(':').first.strip
+            test = bt if files.include?(bt)
           end
-          result.succeeded |= files
+          test
+        end
+
+        def close
+          files = options.files
+          result.succeeded = files - result.failed
           
           FileUtils.mkdir_p(File.dirname(where))
           File.open(where, 'w') { |f| f.puts YAML.dump(result) }
@@ -238,8 +256,21 @@
             nil
           when Test::Unit::Failure
             Error.new(fault.message, fault.location)
-          when Test::Unit::Error, Expectations::Results::Error, 
Spec::Runner::Reporter::Failure
+          when Test::Unit::Error
+            if fault.exception.is_a?(NativeException)
+              exception = fault.exception.cause
+              bt = exception.stack_trace.to_a
+            else
+              exception = fault.exception
+              bt = exception.backtrace
+            end
+            Error.new(exception.message, bt)
+          when Expectations::Results::Error
             fault.exception
+          when Spec::Runner::Reporter::Failure
+            ex = fault.exception
+            fault.example.instance_variable_get(:@_implementation).to_s =~ 
/@(.+:\d+)/
+            Error.new(ex.message, [$1.to_s] + ex.backtrace)
           when Expectations::Results
             file = fault.file
             line = fault.line

Modified: incubator/buildr/trunk/spec/java/bdd_spec.rb
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/spec/java/bdd_spec.rb?rev=702225&r1=702224&r2=702225&view=diff
==============================================================================
--- incubator/buildr/trunk/spec/java/bdd_spec.rb (original)
+++ incubator/buildr/trunk/spec/java/bdd_spec.rb Mon Oct  6 11:46:55 2008
@@ -38,7 +38,7 @@
     failure = File.expand_path('src/spec/ruby/failure_spec.rb')
     write(failure, 'describe("failure") { it("is false") { true.should == 
false } }')
     error = File.expand_path('src/spec/ruby/error_spec.rb')
-    write(error, 'describe("error") { it("raises") { eval("lambda") } }')
+    write(error, 'describe("error") { it("raises") { lambda; } }')
     foo do
       lambda { test.invoke }.should raise_error(/Tests failed/)
       test.tests.should include(success, failure, error)
@@ -208,7 +208,7 @@
       require 'test/unit'
       class TC_Error < Test::Unit::TestCase
         def test_error
-          eval('lambda')
+          lambda;
         end
       end
     TESTUNIT
@@ -226,7 +226,7 @@
     failure = File.expand_path('src/spec/ruby/failure_expect.rb')
     write(failure, 'Expectations { expect(true) { false } }')
     error = File.expand_path('src/spec/ruby/error_expect.rb')
-    write(error, 'Expectations { expect(nil) { eval("lambda") } }')
+    write(error, 'Expectations { expect(nil) { lambda; } }')
     foo do
       lambda { test.invoke }.should raise_error(/Tests failed/)
       test.tests.should include(success, failure, error)
@@ -241,7 +241,7 @@
     failure = File.expand_path('src/spec/ruby/failure_spec.rb')
     write(failure, 'describe("failure") { it("is false") { true.should == 
false } }')
     error = File.expand_path('src/spec/ruby/error_spec.rb')
-    write(error, 'describe("error") { it("raises") { eval("lambda") } }')
+    write(error, 'describe("error") { it("raises") { lambda; } }')
     pending =  File.expand_path('src/spec/ruby/pending_spec.rb')
     write(pending, 'describe("peding") { it "is not implemented" }')
     foo do


Reply via email to