module Rake::TeamCity::MessageFactory
Constants
- CUSTOM_MSG_TYPES
- MOCK_ATTRIBUTES_VALUES
- MSG_BLOCK_TYPES
- MSG_STATUS_TYPES
Public Class Methods
create_build_error_report(message)
click to toggle source
This message should show custom build status on buildserver and can be ignored by IDE tests runners
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 126 def self.create_build_error_report(message) create_message :message_name => 'buildStatus', :status => MSG_STATUS_TYPES[:error], :text => message end
create_close_target(message)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 157 def self.create_close_target(message) create_message :message_name => 'blockClosed', :name => message, :type => MSG_BLOCK_TYPES[:target] end
create_custom_progress_test_status(status)
click to toggle source
noinspection RubyClassMethodNamingConvention
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 171 def self.create_custom_progress_test_status(status) create_message :message_name => 'customProgressStatus', :type => CUSTOM_MSG_TYPES[status] end
create_custom_progress_tests_category(category_name, int_count = 0)
click to toggle source
noinspection RubyClassMethodNamingConvention
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 164 def self.create_custom_progress_tests_category(category_name, int_count = 0) create_message :message_name => 'customProgressStatus', :testsCategory => category_name, :count => int_count end
create_msg_error(message, stacktrace = nil)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 132 def self.create_msg_error(message, stacktrace = nil) attrs = { :message_name => 'message', :text => message, :status => MSG_STATUS_TYPES[:error], :errorDetails => stacktrace } attrs[:text] &&= MOCK_ATTRIBUTES_VALUES[:error_msg][:value] if MOCK_ATTRIBUTES_VALUES[:error_msg][:enabled] create_message attrs end
create_msg_warning(message, stacktrace = nil)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 144 def self.create_msg_warning(message, stacktrace = nil) create_message :message_name => 'message', :text => message, :status => MSG_STATUS_TYPES[:warning], :errorDetails => stacktrace end
create_open_target(message)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 151 def self.create_open_target(message) create_message :message_name => 'blockOpened', :name => message, :type => MSG_BLOCK_TYPES[:target] end
create_progress_message(message)
click to toggle source
This message should show progress on buildserver and can be ignored by IDE tests runners
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 118 def self.create_progress_message(message) # This kind of message doesn't support timestamp attribute create_message :message_name => 'progressMessage', :message_text => message end
create_suite_finished(suite_name)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 61 def self.create_suite_finished(suite_name) create_message :message_name => "testSuiteFinished", :name => suite_name end
create_suite_started(suite_name, location_url = nil)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 55 def self.create_suite_started(suite_name, location_url = nil) create_message :message_name => "testSuiteStarted", :name => suite_name, :locationHint => location_url end
create_test_error(test_name, message, stacktrace)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 100 def self.create_test_error(test_name, message, stacktrace) stacktrace = format_stacktrace_if_needed(message, stacktrace) create_message :message_name => 'testFailed', :name => test_name, :message => message, :details => stacktrace, :error => 'true' end
create_test_failed(test_name, message, stacktrace)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 92 def self.create_test_failed(test_name, message, stacktrace) stacktrace = format_stacktrace_if_needed(message, stacktrace) create_message :message_name => 'testFailed', :name => test_name, :message => message, :details => stacktrace end
create_test_finished(test_name, duration_ms, diagnostic_info=nil)
click to toggle source
Duration in millisec
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 79 def self.create_test_finished(test_name, duration_ms, diagnostic_info=nil) create_message :message_name => "testFinished", :name => test_name, :duration => [duration_ms, 0].max, :diagnosticInfo => diagnostic_info end
create_test_ignored(test_name, message, stacktrace = nil)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 109 def self.create_test_ignored(test_name, message, stacktrace = nil) create_message :message_name => 'testIgnored', :name => test_name, :message => message, :details => stacktrace end
create_test_output_message(test_name, is_std_out, out_text)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 86 def self.create_test_output_message(test_name, is_std_out, out_text) create_message :message_name => "testStd#{is_std_out ? "Out" : "Err"}", :name => test_name, :out => out_text end
create_test_reported_attached()
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 176 def self.create_test_reported_attached # Allows to distinguish 2 situations # * nothing to test - no tests, suites # * test reporter wasn't attached # Can be reported several times create_message :message_name => 'enteredTheMatrix' end
create_test_started(test_name, location_url = nil)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 71 def self.create_test_started(test_name, location_url = nil) create_message :message_name => "testStarted", :name => test_name, :captureStandardOutput => 'true', :locationHint => location_url end
create_tests_count(int_count)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 66 def self.create_tests_count(int_count) create_message :message_name => "testCount", :count => int_count end
replace_escaped_symbols(text)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 188 def self.replace_escaped_symbols(text) copy_of_text = String.new(text) copy_of_text.gsub!(/\|/, "||") copy_of_text.gsub!(/'/, "|'") copy_of_text.gsub!(/\n/, "|n") copy_of_text.gsub!(/\r/, "|r") copy_of_text.gsub!(/\]/, "|]") copy_of_text.gsub!(/\[/, "|[") begin copy_of_text.encode!('UTF-8') if copy_of_text.respond_to? :encode! copy_of_text.gsub!(/\u0085/, "|x") # next line copy_of_text.gsub!(/\u2028/, "|l") # line separator copy_of_text.gsub!(/\u2029/, "|p") # paragraph separator rescue # it is not an utf-8 compatible string :( end copy_of_text end
Protected Class Methods
convert_time_to_java_simple_date(time)
click to toggle source
noinspection RubyClassMethodNamingConvention
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 263 def self.convert_time_to_java_simple_date(time) if MOCK_ATTRIBUTES_VALUES[:time][:enabled] return MOCK_ATTRIBUTES_VALUES[:time][:value] end gmt_offset = time.gmt_offset gmt_sign = gmt_offset < 0 ? "-" : "+" gmt_hours = gmt_offset.abs / 3600 gmt_minutes = gmt_offset.abs % 3600 millisec = time.usec == 0 ? 0 : time.usec / 1000 #Time string in Java SimpleDateFormat sprintf("#{time.strftime("%Y-%m-%dT%H:%M:%S.")}%03d#{gmt_sign}%02d%02d", millisec, gmt_hours, gmt_minutes) end
create_message(msg_attrs = {})
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 225 def self.create_message(msg_attrs = {}) # message type: message_name = msg_attrs.delete(:message_name) # optional body message_text = msg_attrs[:message_text] # if diagnostic info is null - don't pass it' diagnostic = msg_attrs[:diagnosticInfo] unless diagnostic msg_attrs.delete(:diagnosticInfo) end if message_text.nil? # mock some attrs [:details, :errorDetails, :locationHint, :duration].each do |key| if msg_attrs[key].nil? # if key is nil - don't include in msg attrs msg_attrs.delete(key) if MOCK_ATTRIBUTES_VALUES[key][:remove_empty] else # if not nil & debug mode - mock it msg_attrs[key] = MOCK_ATTRIBUTES_VALUES[key][:value] if MOCK_ATTRIBUTES_VALUES[key][:enabled] end end # add auto timestamp msg_attrs[:timestamp] ||= convert_time_to_java_simple_date(Time.now) # message args message_args = msg_attrs.map { |k, v| "#{k.to_s} = '#{v.nil? ? "" : replace_escaped_symbols(v.to_s)}'" }.join(" ") else message_args = "'#{message_text}'" end "##teamcity[#{message_name}#{message_args.empty? ? '' : " #{message_args}"}]" end
Private Class Methods
format_stacktrace_if_needed(message, stacktrace)
click to toggle source
# File lib/rspec/teamcity/utils/service_message_factory.rb, line 213 def self.format_stacktrace_if_needed message, stacktrace if Rake::TeamCity.is_in_buildserver_mode() # At current moment TC doesn't extract message from corresponding attribute. # see [TW-6270] http://jetbrains.net/tracker/workspace?currentIssueId=TW-6270 message + "\n\nStack trace:\n" + stacktrace else stacktrace end end