ci-queue 0.20.0 → 0.20.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 020e4e1012b0be90bc94deac97a2fb6e00a11aeed0c35e1cffba506145f0b2aa
4
- data.tar.gz: 86a96759c23bacf51457b1a24c0284e40dba6904e16ac6a8bc52fdf83fd4243e
3
+ metadata.gz: c5d3525c5eac10718326a27026a9760509bca1a0d23b15f6ad2b8f5521321c29
4
+ data.tar.gz: 05a459ded4b16d60c5dd5e58ed3e175b97467193894d6f64acbdb3d071e971a9
5
5
  SHA512:
6
- metadata.gz: a77b0ee4af5f570ef8a398377049afdd88ce611ac9c16319decb9b627c265ef7f2efa773317e9ae04a5472d88d595471e2384fc7bfd4778c291c59d8fa79a08b
7
- data.tar.gz: ba72651f0072f98167131617a2635b05260d343108ac4d073a5dba56bcb9e5f7980b14abe66ac10d88662967a86b8cd682d549cf8a22f37dad3b5ea94aa82018
6
+ metadata.gz: e1589714a963162803a93e134b671026c90910d7a645057d58dafa785f97408f94562d43d4545c7123b63feb93a0966710b43acf63cc1d7aa727684db7a952e7
7
+ data.tar.gz: da902c68164c997ebbda25d6305742059c101d08a23d084b3b0bedeb3e2f4bace623e1241c4298dff24b0061a846be201b9ae4edda4d3df3537ae40642bab276
@@ -2,7 +2,7 @@
2
2
 
3
3
  module CI
4
4
  module Queue
5
- VERSION = '0.20.0'
5
+ VERSION = '0.20.1'
6
6
  DEV_SCRIPTS_ROOT = ::File.expand_path('../../../../../redis', __FILE__)
7
7
  RELEASE_SCRIPTS_ROOT = ::File.expand_path('../redis', __FILE__)
8
8
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'shellwords'
2
3
  require 'minitest'
3
4
  require 'minitest/reporters'
4
5
 
@@ -102,6 +103,47 @@ module Minitest
102
103
  end
103
104
 
104
105
  module Queue
106
+ attr_writer :run_command_formatter, :project_root
107
+
108
+ def run_command_formatter
109
+ @run_command_formatter ||= if defined?(Railties)
110
+ RAILS_RUN_COMMAND_FORMATTER
111
+ else
112
+ DEFAULT_RUN_COMMAND_FORMATTER
113
+ end
114
+ end
115
+
116
+ DEFAULT_RUN_COMMAND_FORMATTER = lambda do |runnable|
117
+ filename = Minitest::Queue.relative_path(runnable.source_location[0])
118
+ identifier = "#{runnable.klass}##{runnable.name}"
119
+ ['bundle', 'exec', 'ruby', '-Ilib:test', filename, '-n', identifier]
120
+ end
121
+
122
+ RAILS_RUN_COMMAND_FORMATTER = lambda do |runnable|
123
+ filename = Minitest::Queue.relative_path(runnable.source_location[0])
124
+ lineno = runnable.source_location[1]
125
+ ['bin/rails', 'test', "#{filename}:#{lineno}"]
126
+ end
127
+
128
+ def run_command_for_runnable(runnable)
129
+ command = run_command_formatter.call(runnable)
130
+ if command.is_a?(Array)
131
+ Shellwords.join(command)
132
+ else
133
+ command
134
+ end
135
+ end
136
+
137
+ def self.project_root
138
+ @project_root ||= Dir.pwd
139
+ end
140
+
141
+ def self.relative_path(path, root: project_root)
142
+ Pathname(path).relative_path_from(Pathname(root)).to_s
143
+ rescue ArgumentError
144
+ path
145
+ end
146
+
105
147
  class SingleExample
106
148
 
107
149
  def initialize(runnable, method_name)
@@ -16,7 +16,12 @@ module Minitest
16
16
  def generate_document
17
17
  suites = tests.group_by { |test| test.klass }
18
18
 
19
- doc = REXML::Document.new
19
+ doc = REXML::Document.new(nil, {
20
+ :prologue_quote => :quote,
21
+ :attribute_quote => :quote,
22
+ })
23
+ doc << REXML::XMLDecl.new('1.1', 'utf-8')
24
+
20
25
  testsuites = doc.add_element('testsuites')
21
26
  suites.each do |suite, tests|
22
27
  add_tests_to(testsuites, suite, tests)
@@ -25,7 +30,6 @@ module Minitest
25
30
  end
26
31
 
27
32
  def format_document(doc, io)
28
- io << "<?xml version='1.0' encoding='UTF-8'?>\n"
29
33
  formatter = REXML::Formatters::Pretty.new
30
34
  formatter.write(doc, io)
31
35
  io << "\n"
@@ -44,17 +48,7 @@ module Minitest
44
48
 
45
49
  def add_tests_to(testsuites, suite, tests)
46
50
  suite_result = analyze_suite(tests)
47
- relative_path = if tests.first.source_location.first == 'unknown'
48
- Pathname.new('')
49
- else
50
- file_path = Pathname.new(tests.first.source_location.first)
51
- if file_path.relative?
52
- file_path
53
- else
54
- base_path = Pathname.new(@base_path)
55
- file_path.relative_path_from(base_path)
56
- end
57
- end
51
+ relative_path = location_for_runnable(tests.first) || '<unknown>'
58
52
 
59
53
  testsuite = testsuites.add_element(
60
54
  'testsuite',
@@ -75,7 +69,8 @@ module Minitest
75
69
  'classname' => suite,
76
70
  'assertions' => test.assertions,
77
71
  'time' => test.time,
78
- 'flaky_test' => test.flaked?
72
+ 'flaky_test' => test.flaked?,
73
+ 'run-command' => Minitest.run_command_for_runnable(test),
79
74
  }
80
75
  attributes['lineno'] = lineno if lineno != -1
81
76
 
@@ -106,24 +101,25 @@ module Minitest
106
101
  name = test.name
107
102
  error = test.failure
108
103
 
104
+ message_with_relative_paths = error.message.gsub("#{Minitest::Queue.project_root}/", '')
105
+
109
106
  if test.passed?
110
107
  nil
111
108
  elsif test.skipped?
112
- "\nSkipped:\n#{name}(#{suite}) [#{location(error)}]:\n#{error.message}\n"
109
+ "\nSkipped:\n#{name}(#{suite}) [#{location_for_runnable(test)}]:\n#{message_with_relative_paths}\n"
113
110
  elsif test.failure
114
- "\nFailure:\n#{name}(#{suite}) [#{location(error)}]:\n#{error.message}\n"
111
+ "\nFailure:\n#{name}(#{suite}) [#{location_for_runnable(test)}]:\n#{message_with_relative_paths}\n"
115
112
  elsif test.error?
116
- "\nError:\n#{name}(#{suite}) [#{location(error)}]:\n#{error.message}\n"
113
+ "\nError:\n#{name}(#{suite}) [#{location_for_runnable(test)}]:\n#{message_with_relative_paths}\n"
117
114
  end
118
115
  end
119
116
 
120
- def location(exception)
121
- last_before_assertion = ''
122
- (exception.backtrace || []).reverse_each do |s|
123
- break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
124
- last_before_assertion = s
117
+ def location_for_runnable(runnable)
118
+ if runnable.source_location.first == 'unknown'
119
+ nil
120
+ else
121
+ Minitest::Queue.relative_path(runnable.source_location.first)
125
122
  end
126
- last_before_assertion.sub(/:in .*$/, '')
127
123
  end
128
124
 
129
125
  def analyze_suite(tests)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Boussier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-07 00:00:00.000000000 Z
11
+ date: 2020-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler