Sha256: ea4310b170eebfc238eae3296841ecf130d2675679c9a3d9823567824ba56543

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'teabag/formatters/base_formatter'

module Teabag
  module Formatters
    class TeamcityFormatter < BaseFormatter
      def runner(result)
        log "##teamcity[testSuiteStarted name='Jasmine']"
      end

      def spec(result)
        log "##teamcity[testStarted name='#{escape result.description}' captureStandardOutput='false']"

        unless result.passing? || result.pending?
          log "##teamcity[testFailed name='#{escape result.description}' message='#{escape result.message}']"
        end

        log "##teamcity[testFinished name='#{escape result.description}']"
      end

      def error(error)
        log "##teamcity[message text='#{escape error.message}' errorDetails='#{escape format_trace(error.trace)}' status='ERROR']"
      end

      def result(result)
        log "##teamcity[testSuiteFinished name='Jasmine']"
      end

      def suppress_logs?
        true
      end

      private
      def log(str)
        STDOUT.print("#{str}\n")
      end

      def escape(str)
        {
          /\|/m => "||",
          /'/m => "|'",
          /\n/m => "|n",
          /\r/m => "|r",
          /\[/m => "|[",
          /\]/m => "|]",
        }.inject(str) do |result, (regex, sub)|
          result.gsub(regex, sub)
        end
      end

      def format_trace(trace)
        trace.map { |line|
          ["#{line['file']}:#{line['line']}", line['function']].compact.join(' ')
        }.join("\n")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
teabag-0.7.3 lib/teabag/formatters/teamcity_formatter.rb