minitest-reporters 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'ansi'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'builder'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 4 
     | 
    
         
            +
            module MiniTest
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Reporters
         
     | 
| 
      
 6 
     | 
    
         
            +
                # A reporter for writing JUnit test reports
         
     | 
| 
      
 7 
     | 
    
         
            +
                # Intended for easy integration with CI servers - tested on JetBrains TeamCity
         
     | 
| 
      
 8 
     | 
    
         
            +
                #
         
     | 
| 
      
 9 
     | 
    
         
            +
                # Inspired by ci_reporter (see https://github.com/nicksieger/ci_reporter)
         
     | 
| 
      
 10 
     | 
    
         
            +
                # Also inspired by Marc Seeger's attempt at producing a JUnitReporter (see https://github.com/rb2k/minitest-reporters/commit/e13d95b5f884453a9c77f62bc5cba3fa1df30ef5)
         
     | 
| 
      
 11 
     | 
    
         
            +
                # Also inspired by minitest-ci (see https://github.com/bhenderson/minitest-ci)
         
     | 
| 
      
 12 
     | 
    
         
            +
                class JUnitReporter
         
     | 
| 
      
 13 
     | 
    
         
            +
                  include MiniTest::Reporter
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def initialize(reports_dir = "test/reports", backtrace_filter = MiniTest::BacktraceFilter.default_filter)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @backtrace_filter = backtrace_filter
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @reports_path = File.join(Dir.getwd, reports_dir)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    p "Emptying #{@reports_path}"
         
     | 
| 
      
 19 
     | 
    
         
            +
                    FileUtils.remove_dir(@reports_path) if File.exists?(@reports_path)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    FileUtils.mkdir_p(@reports_path)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def after_suites(suites, type)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    p "Writing XML reports to #{@reports_path}"
         
     | 
| 
      
 25 
     | 
    
         
            +
                    runner.report.each do |suite, tests|
         
     | 
| 
      
 26 
     | 
    
         
            +
                      suite_result = analyze_suite(suite, tests)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      xml = Builder::XmlMarkup.new(:indent => 2)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      xml.instruct!
         
     | 
| 
      
 30 
     | 
    
         
            +
                      xml.testsuite(:name => suite, :skipped => suite_result[:skip_count], :failures => suite_result[:failure_count], :errors => suite_result[:error_count], :tests => suite_result[:test_count], :assertions => suite_result[:assertion_count]) do
         
     | 
| 
      
 31 
     | 
    
         
            +
                        tests.each do |test, test_runner|
         
     | 
| 
      
 32 
     | 
    
         
            +
                          xml.testcase(:name => test_runner.test, :classname => suite, :assertions => test_runner.assertions) do
         
     | 
| 
      
 33 
     | 
    
         
            +
                            xml << xml_message_for(test_runner) if test_runner.result != :pass
         
     | 
| 
      
 34 
     | 
    
         
            +
                          end
         
     | 
| 
      
 35 
     | 
    
         
            +
                        end
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
                      IO.write(filename_for(suite), xml.target!)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                private
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  def xml_message_for(test_runner)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    # This is a trick lifted from ci_reporter
         
     | 
| 
      
 45 
     | 
    
         
            +
                    xml = Builder::XmlMarkup.new(:indent => 2, :margin => 2)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    def xml.trunc!(txt)
         
     | 
| 
      
 47 
     | 
    
         
            +
                      txt.sub(/\n.*/m, '...')
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    test = test_runner.test
         
     | 
| 
      
 51 
     | 
    
         
            +
                    e = test_runner.exception
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    case test_runner.result
         
     | 
| 
      
 54 
     | 
    
         
            +
                    when :skip 
         
     | 
| 
      
 55 
     | 
    
         
            +
                      xml.skipped(:type => test)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    when :error
         
     | 
| 
      
 57 
     | 
    
         
            +
                      xml.error(:type => test, :message => xml.trunc!(e.message)) do
         
     | 
| 
      
 58 
     | 
    
         
            +
                        xml.text!(message_for(test_runner))
         
     | 
| 
      
 59 
     | 
    
         
            +
                      end
         
     | 
| 
      
 60 
     | 
    
         
            +
                    when :failure
         
     | 
| 
      
 61 
     | 
    
         
            +
                      xml.failure(:type => test, :message => xml.trunc!(e.message)) do
         
     | 
| 
      
 62 
     | 
    
         
            +
                        xml.text!(message_for(test_runner))
         
     | 
| 
      
 63 
     | 
    
         
            +
                      end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  def message_for(test_runner)
         
     | 
| 
      
 68 
     | 
    
         
            +
                    suite = test_runner.suite
         
     | 
| 
      
 69 
     | 
    
         
            +
                    test = test_runner.test
         
     | 
| 
      
 70 
     | 
    
         
            +
                    e = test_runner.exception
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                    case test_runner.result
         
     | 
| 
      
 73 
     | 
    
         
            +
                    when :pass then nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                    when :skip then "Skipped:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
         
     | 
| 
      
 75 
     | 
    
         
            +
                    when :failure then "Failure:\n#{test}(#{suite}) [#{location(e)}]:\n#{e.message}\n"
         
     | 
| 
      
 76 
     | 
    
         
            +
                    when :error
         
     | 
| 
      
 77 
     | 
    
         
            +
                      bt = @backtrace_filter.filter(test_runner.exception.backtrace).join "\n    "
         
     | 
| 
      
 78 
     | 
    
         
            +
                      "Error:\n#{test}(#{suite}):\n#{e.class}: #{e.message}\n    #{bt}\n"
         
     | 
| 
      
 79 
     | 
    
         
            +
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  
         
     | 
| 
      
 83 
     | 
    
         
            +
                  def location(exception)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    last_before_assertion = ''
         
     | 
| 
      
 85 
     | 
    
         
            +
                    exception.backtrace.reverse_each do |s|
         
     | 
| 
      
 86 
     | 
    
         
            +
                      break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
         
     | 
| 
      
 87 
     | 
    
         
            +
                      last_before_assertion = s
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
                    last_before_assertion.sub(/:in .*$/, '')
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  def analyze_suite(suite, tests)
         
     | 
| 
      
 93 
     | 
    
         
            +
                    result = Hash.new(0)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    tests.each do |test, test_runner|
         
     | 
| 
      
 95 
     | 
    
         
            +
                      result[:"#{test_runner.result}_count"] += 1
         
     | 
| 
      
 96 
     | 
    
         
            +
                      result[:assertion_count] += test_runner.assertions
         
     | 
| 
      
 97 
     | 
    
         
            +
                      result[:test_count] += 1
         
     | 
| 
      
 98 
     | 
    
         
            +
                    end
         
     | 
| 
      
 99 
     | 
    
         
            +
                    result
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  def filename_for(suite)
         
     | 
| 
      
 103 
     | 
    
         
            +
                    file_counter = 0
         
     | 
| 
      
 104 
     | 
    
         
            +
                    filename = "TEST-#{suite.to_s[0..240]}.xml" #restrict max filename length, to be kind to filesystems
         
     | 
| 
      
 105 
     | 
    
         
            +
                    while File.exists?(File.join(@reports_path, filename)) # restrict number of tries, to avoid infinite loops
         
     | 
| 
      
 106 
     | 
    
         
            +
                      file_counter += 1
         
     | 
| 
      
 107 
     | 
    
         
            +
                      filename = "TEST-#{suite}-#{file_counter}.xml"
         
     | 
| 
      
 108 
     | 
    
         
            +
                      p "Too many duplicate files, overwriting earlier report #{filename}" and break if file_counter >= 99
         
     | 
| 
      
 109 
     | 
    
         
            +
                    end
         
     | 
| 
      
 110 
     | 
    
         
            +
                    File.join(@reports_path, filename)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
              end
         
     | 
| 
      
 114 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/minitest/reporters.rb
    CHANGED
    
    | 
         @@ -15,5 +15,6 @@ module MiniTest 
     | 
|
| 
       15 
15 
     | 
    
         
             
                autoload :RubyMateReporter, "minitest/reporters/ruby_mate_reporter"
         
     | 
| 
       16 
16 
     | 
    
         
             
                autoload :RubyMineReporter, "minitest/reporters/rubymine_reporter"
         
     | 
| 
       17 
17 
     | 
    
         
             
                autoload :GuardReporter, "minitest/reporters/guard_reporter"
         
     | 
| 
      
 18 
     | 
    
         
            +
                autoload :JUnitReporter, "minitest/reporters/junit_reporter"
         
     | 
| 
       18 
19 
     | 
    
         
             
              end
         
     | 
| 
       19 
20 
     | 
    
         
             
            end
         
     | 
    
        data/minitest-reporters.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: minitest-reporters
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-04 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-05-04 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: minitest
         
     | 
| 
         @@ -59,6 +59,22 @@ dependencies: 
     | 
|
| 
       59 
59 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
61 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 62 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 63 
     | 
    
         
            +
              name: builder
         
     | 
| 
      
 64 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 66 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 67 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 68 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 69 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 70 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 71 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 72 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 73 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 74 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 75 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 76 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 77 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       62 
78 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       63 
79 
     | 
    
         
             
              name: mocha
         
     | 
| 
       64 
80 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -142,6 +158,7 @@ files: 
     | 
|
| 
       142 
158 
     | 
    
         
             
            - lib/minitest/reporters.rb
         
     | 
| 
       143 
159 
     | 
    
         
             
            - lib/minitest/reporters/default_reporter.rb
         
     | 
| 
       144 
160 
     | 
    
         
             
            - lib/minitest/reporters/guard_reporter.rb
         
     | 
| 
      
 161 
     | 
    
         
            +
            - lib/minitest/reporters/junit_reporter.rb
         
     | 
| 
       145 
162 
     | 
    
         
             
            - lib/minitest/reporters/progress_reporter.rb
         
     | 
| 
       146 
163 
     | 
    
         
             
            - lib/minitest/reporters/ruby_mate_reporter.rb
         
     | 
| 
       147 
164 
     | 
    
         
             
            - lib/minitest/reporters/rubymine_reporter.rb
         
     | 
| 
         @@ -177,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       177 
194 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       178 
195 
     | 
    
         
             
                  segments:
         
     | 
| 
       179 
196 
     | 
    
         
             
                  - 0
         
     | 
| 
       180 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 197 
     | 
    
         
            +
                  hash: 1544985441330807724
         
     | 
| 
       181 
198 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       182 
199 
     | 
    
         
             
              none: false
         
     | 
| 
       183 
200 
     | 
    
         
             
              requirements:
         
     | 
| 
         @@ -186,10 +203,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       186 
203 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       187 
204 
     | 
    
         
             
                  segments:
         
     | 
| 
       188 
205 
     | 
    
         
             
                  - 0
         
     | 
| 
       189 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 206 
     | 
    
         
            +
                  hash: 1544985441330807724
         
     | 
| 
       190 
207 
     | 
    
         
             
            requirements: []
         
     | 
| 
       191 
208 
     | 
    
         
             
            rubyforge_project: minitest-reporters
         
     | 
| 
       192 
     | 
    
         
            -
            rubygems_version: 1.8. 
     | 
| 
      
 209 
     | 
    
         
            +
            rubygems_version: 1.8.22
         
     | 
| 
       193 
210 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       194 
211 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       195 
212 
     | 
    
         
             
            summary: Create customizable MiniTest output formats
         
     |