class Teaspoon::Formatter::Teamcity

Public Class Methods

new(*args) click to toggle source
Calls superclass method Teaspoon::Formatter::Base::new
# File lib/teaspoon/formatter/teamcity.rb, line 6
def initialize(*args)
  log("enteredTheMatrix timestamp='#{Time.now.to_json.gsub('"', '')}'")
  super
end

Protected Instance Methods

log_complete(failure_count) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 60
def log_complete(failure_count)
  log_line("\nFinished in #{@result.elapsed} seconds")
  stats = "#{pluralize('example', run_count)}, #{pluralize('failure', failure_count)}"
  stats << ", #{pendings.size} pending" if pendings.size > 0
  log_line(stats)
  log_line if failure_count > 0
end
log_coverage(message) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 45
def log_coverage(message)
  log("testSuiteStarted name='Coverage summary'")
  log_line(message)
  log("testSuiteFinished name='Coverage summary'")
end
log_error(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 36
def log_error(result)
  log("message text='#{escape(result.message)}' errorDetails='#{escape_trace(result.trace)}' status='ERROR'")
end
log_failing_spec(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 30
def log_failing_spec(result)
  log_teamcity_spec(type: "testStarted", desc: escape(result.description)) do
    log("testFailed name='#{escape(result.description)}' message='#{escape(result.message)}'")
  end
end
log_passing_spec(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 22
def log_passing_spec(result)
  log_teamcity_spec(type: "testStarted", desc: escape(result.description))
end
log_pending_spec(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 26
def log_pending_spec(result)
  log_teamcity_spec(type: "testIgnored", desc: escape(result.description))
end
log_result(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 40
def log_result(result)
  log_end_suite
  @result = result
end
log_runner(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 13
def log_runner(result)
  log("testCount count='#{result.total}' timestamp='#{result.start}'")
end
log_suite(result) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 17
def log_suite(result)
  log_end_suite
  log("testSuiteStarted name='#{result.label}'")
end
log_threshold_failure(message) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 51
def log_threshold_failure(message)
  log("testSuiteStarted name='Coverage thresholds'")
  log_teamcity_spec(type: "testStarted", desc: "Coverage thresholds") do
    log("testFailed name='Coverage thresholds' message='were not met'")
    log_line(message)
  end
  log("testSuiteFinished name='Coverage thresholds'")
end

Private Instance Methods

escape(str) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 85
def escape(str)
  str = str.gsub(/[|'\[\]]/) { |c| "|#{c}" }
  str.gsub("\n", "|n").gsub("\r", "|r")
end
escape_trace(trace) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 90
def escape_trace(trace)
  lines = trace.map { |t| ["#{t['file']}:#{t['line']}", t["function"]].compact.join(" ") }
  escape(lines.join("\n"))
end
log(str) click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 81
def log(str)
  log_line("##teamcity[#{str}]")
end
log_end_suite() click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 70
def log_end_suite
  log("testSuiteFinished name='#{escape(@last_suite.label)}'") if @last_suite
end
log_teamcity_spec(opts) { || ... } click to toggle source
# File lib/teaspoon/formatter/teamcity.rb, line 74
def log_teamcity_spec(opts, &_block)
  log("#{opts[:type]} name='#{opts[:desc]}' captureStandardOutput='true'")
  log_line(@stdout.gsub(/\n$/, "")) unless @stdout.blank?
  yield if block_given?
  log("testFinished name='#{opts[:desc]}'")
end