ci-queue 0.20.0 → 0.20.1

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.
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