forking_test_runner 1.16.0 → 1.18.0

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: 347d5e63755b11aefa879f5c697e9cc6cab2ca169051ec12f326d10037c38a7f
4
- data.tar.gz: 5368d418bad4d28203064fbcb31434a92789a3063be0384b5b7c690478c2c8c7
3
+ metadata.gz: a248306cb1a71ac76fe62cff26f468f3aa8ae39f701f6c2d6ab8ed43bc2c0491
4
+ data.tar.gz: a4683438d4fa23251d609568fec91e147c77325548d6d0c616e5034c6bc26efe
5
5
  SHA512:
6
- metadata.gz: 588c1a0b82819d48e8c3cfc3cdf63d3443c4f64ef20950a110cd3103a150ea42721ed4c71916face7940805ecf1b70071431f88937b03beefb18d033621342c1
7
- data.tar.gz: c25e5abe903f105a56cf7b79c50e00ea8285653329b804813c44de25f2c584c38eb3c6cdde8340f66aba5efe52489161917b1a3c0087be4a13c55effde4a1925
6
+ metadata.gz: a63845433bc9bef04de653f116dc20377ad1c16d7014e81f2bc16b32e02b68f6bab9b46cb9de0ea6740d86c74021381c5f457deb6fc6c212e3555f6b095948c2
7
+ data.tar.gz: b80c1bcb90d560d74af870dff0b44bffee28bc1a60c0a1ee0607d96361c4b00e8fb210d96734482495aabc003fe1a7ef01464e6f1838730dfed317add6871188
@@ -11,16 +11,16 @@ module ForkingTestRunner
11
11
  [:merge_coverage, "--merge-coverage", "Merge base code coverage into individual files coverage and summarize coverage report"],
12
12
  [
13
13
  :record_runtime,
14
- "--record-runtime=MODE",
14
+ "--record-runtime MODE",
15
15
  "\n Record test runtime:\n " \
16
16
  "simple = write to disk at --runtime-log)\n " \
17
17
  "amend = write from multiple remote workers via http://github.com/grosser/amend, needs TRAVIS_REPO_SLUG & TRAVIS_BUILD_NUMBER",
18
18
  String
19
19
  ],
20
- [:runtime_log, "--runtime-log=FILE", "File to store runtime log in or runtime.log", String],
21
- [:parallel, "--parallel=NUM", "Number of parallel groups to run at once", Integer],
22
- [:group, "--group=NUM[,NUM]", "What group this is (use with --groups / starts at 1)", String],
23
- [:groups, "--groups=NUM", "How many groups there are in total (use with --group)", Integer],
20
+ [:runtime_log, "--runtime-log FILE", "File to store runtime log in or runtime.log", String],
21
+ [:parallel, "--parallel [NUM]", "Number of parallel groups to run at once", Integer],
22
+ [:group, "--group NUM[,NUM]", "What group this is (use with --groups / starts at 1)", String],
23
+ [:groups, "--groups NUM", "How many groups there are in total (use with --group)", Integer],
24
24
  [:version, "--version", "Show version"],
25
25
  [:help, "--help", "Show help"]
26
26
  ].freeze
@@ -28,9 +28,13 @@ module ForkingTestRunner
28
28
  class << self
29
29
  def parse_options(argv)
30
30
  options = OPTIONS.each_with_object({}) do |(setting, flag, _, type), all|
31
- all[setting] = delete_argv(flag.split('=', 2)[0], argv, type:)
31
+ optional = flag.include?("[")
32
+ all[setting] = delete_argv(flag.split(' ', 2)[0], argv, type: type, optional: optional)
32
33
  end
33
34
 
35
+ # default parallel to processor count
36
+ options[:parallel] = Parallel.processor_count if options[:parallel] == true
37
+
34
38
  # show version
35
39
  if options.fetch(:version)
36
40
  puts VERSION
@@ -76,18 +80,31 @@ module ForkingTestRunner
76
80
  # so minitest / rspec can read their own options (--seed / -v ...)
77
81
  # - keep our options clear / unambiguous to avoid overriding
78
82
  # - read all serial non-flag arguments as tests and leave only unknown options behind
79
- # - use .fetch everywhere to make sure nothing is misspelled
80
- # GOOD: test --ours --theirs
81
- # OK: --ours test --theirs
82
- # BAD: --theirs test --ours
83
- def delete_argv(name, argv, type: nil)
84
- return unless index = argv.index(name)
85
- argv.delete_at(index)
86
- if type
87
- found = argv.delete_at(index) || raise("Missing argument for #{name}")
88
- send(type.name, found) # case found
89
- else
90
- true
83
+ def delete_argv(name, argv, type: nil, optional: false)
84
+ if type # value needed
85
+ value =
86
+ if (index = argv.index(name)) # user used `--foo bar` style ?
87
+ argv.delete_at(index)
88
+ next_arg = argv[index]
89
+ if next_arg && !next_arg.start_with?("-")
90
+ argv.delete_at(index)
91
+ elsif optional
92
+ return true
93
+ else
94
+ raise(ArgumentError, "Missing argument for #{name}")
95
+ end
96
+ else # user used `--foo=bar` style ?
97
+ prefix = "#{name}="
98
+ return unless (index = argv.index { |arg| arg.start_with?(prefix) })
99
+ argv.delete_at(index).delete_prefix(prefix)
100
+ end
101
+
102
+ send(type.name, value) # for example Integer(found)
103
+ else # no value needed
104
+ if (index = argv.index(name))
105
+ argv.delete_at(index)
106
+ true
107
+ end
91
108
  end
92
109
  end
93
110
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ForkingTestRunner
3
- VERSION = "1.16.0"
3
+ VERSION = "1.18.0"
4
4
  end
@@ -66,8 +66,8 @@ module ForkingTestRunner
66
66
  puts "\nResults:"
67
67
  puts(
68
68
  results
69
- .sort_by { |_, _, _, r, _| r ? 0 : 1 } # failures should be last so they are easy to find
70
- .map { |f, _, _, r, _| "#{f}: #{r ? "OK" : "Fail"}" }
69
+ .sort_by { |_, _, _, r, _| r ? 0 : 1 } # failures should be last so they are easy to find
70
+ .map { |f, _, _, r, _| "#{f}: #{r ? "OK" : "Fail"}" }
71
71
  )
72
72
  puts
73
73
  end
@@ -82,7 +82,7 @@ module ForkingTestRunner
82
82
  puts "Time: #{diff.round(2)} diff to expected"
83
83
  end
84
84
 
85
- if mode = @options.fetch(:record_runtime)
85
+ if (mode = @options.fetch(:record_runtime))
86
86
  # store runtime log
87
87
  log = runtime_log || 'runtime.log'
88
88
  record_test_runtime(mode, results, log)
@@ -162,7 +162,7 @@ module ForkingTestRunner
162
162
  when 'simple'
163
163
  File.write(log, data)
164
164
  when 'amend'
165
- if id = ENV["BUILDKITE_JOB_ID"]
165
+ if (id = ENV["BUILDKITE_JOB_ID"])
166
166
  slug = "#{ENV.fetch("BUILDKITE_ORG_SLUG")}-#{ENV.fetch("BUILDKITE_PIPELINE_SLUG")}"
167
167
  else
168
168
  slug = ENV.fetch("TRAVIS_REPO_SLUG").sub("/", "-")
@@ -278,10 +278,11 @@ module ForkingTestRunner
278
278
  wpipe.close
279
279
 
280
280
  buffer = +""
281
+ tee = !@options.fetch(:quiet) && !@options.fetch(:parallel)
281
282
 
282
- while ch = rpipe.read(1)
283
+ while (ch = rpipe.read(tee ? 1 : 4096))
283
284
  buffer << ch
284
- $stdout.write(ch) if !@options.fetch(:quiet) && !@options.fetch(:parallel) # tee
285
+ $stdout.write(ch) if tee
285
286
  end
286
287
 
287
288
  Process.wait(child)
@@ -344,8 +345,8 @@ module ForkingTestRunner
344
345
  tests = ParallelTests::Test::Runner.send(
345
346
  :tests_with_size,
346
347
  tests,
347
- runtime_log:,
348
- group_by:
348
+ runtime_log: runtime_log,
349
+ group_by: group_by
349
350
  )
350
351
  groups = ParallelTests::Grouper.in_even_groups_by_size(tests, group_count, {})
351
352
  group = groups[group - 1] || raise("Group #{group} not found")
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forking_test_runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0
4
+ version: 1.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-11-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: benchmark
@@ -56,22 +55,16 @@ dependencies:
56
55
  name: bundler
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.4'
62
58
  - - ">="
63
59
  - !ruby/object:Gem::Version
64
- version: 2.4.22
60
+ version: '0'
65
61
  type: :development
66
62
  prerelease: false
67
63
  version_requirements: !ruby/object:Gem::Requirement
68
64
  requirements:
69
- - - "~>"
70
- - !ruby/object:Gem::Version
71
- version: '2.4'
72
65
  - - ">="
73
66
  - !ruby/object:Gem::Version
74
- version: 2.4.22
67
+ version: '0'
75
68
  - !ruby/object:Gem::Dependency
76
69
  name: drb
77
70
  requirement: !ruby/object:Gem::Requirement
@@ -104,16 +97,16 @@ dependencies:
104
97
  name: minitest
105
98
  requirement: !ruby/object:Gem::Requirement
106
99
  requirements:
107
- - - ">="
100
+ - - "~>"
108
101
  - !ruby/object:Gem::Version
109
- version: '0'
102
+ version: '6.0'
110
103
  type: :development
111
104
  prerelease: false
112
105
  version_requirements: !ruby/object:Gem::Requirement
113
106
  requirements:
114
- - - ">="
107
+ - - "~>"
115
108
  - !ruby/object:Gem::Version
116
- version: '0'
109
+ version: '6.0'
117
110
  - !ruby/object:Gem::Dependency
118
111
  name: mutex_m
119
112
  requirement: !ruby/object:Gem::Requirement
@@ -174,17 +167,16 @@ dependencies:
174
167
  name: sqlite3
175
168
  requirement: !ruby/object:Gem::Requirement
176
169
  requirements:
177
- - - "~>"
170
+ - - ">="
178
171
  - !ruby/object:Gem::Version
179
- version: '1.4'
172
+ version: '0'
180
173
  type: :development
181
174
  prerelease: false
182
175
  version_requirements: !ruby/object:Gem::Requirement
183
176
  requirements:
184
- - - "~>"
177
+ - - ">="
185
178
  - !ruby/object:Gem::Version
186
- version: '1.4'
187
- description:
179
+ version: '0'
188
180
  email: michael@grosser.it
189
181
  executables:
190
182
  - forking-test-runner
@@ -201,7 +193,6 @@ homepage: https://github.com/grosser/forking_test_runner
201
193
  licenses:
202
194
  - MIT
203
195
  metadata: {}
204
- post_install_message:
205
196
  rdoc_options: []
206
197
  require_paths:
207
198
  - lib
@@ -209,15 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
200
  requirements:
210
201
  - - ">="
211
202
  - !ruby/object:Gem::Version
212
- version: 3.1.0
203
+ version: 3.3.0
213
204
  required_rubygems_version: !ruby/object:Gem::Requirement
214
205
  requirements:
215
206
  - - ">="
216
207
  - !ruby/object:Gem::Version
217
208
  version: '0'
218
209
  requirements: []
219
- rubygems_version: 3.4.10
220
- signing_key:
210
+ rubygems_version: 3.6.9
221
211
  specification_version: 4
222
212
  summary: Run every test in a fork to avoid pollution and get clean output per test
223
213
  test_files: []