kettle-test 2.0.29 → 2.0.30
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +25 -1
- data/README.md +29 -1
- data/lib/kettle/test/config/int/rspec/test_events.rb +15 -0
- data/lib/kettle/test/progress_formatter.rb +53 -0
- data/lib/kettle/test/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +37 -15
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a63dbe1a52bd86c0cb0a2c62284d8ecb7cb9a11e351e8d159a08adce19cf7c5b
|
|
4
|
+
data.tar.gz: 8570f606a7bd22d57e510d78de8f6e30750fca48856fba5514a49b01f5c4527e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4e07ebfc2d08021909065f366d2114e13c96fbee2ce6d2248724c1ffeb5b803c3865a9eb0bfa9463881033a674218f7d0ffc83b6247fe4f2f076ffd6be3f474f
|
|
7
|
+
data.tar.gz: 25efabc4b5e51a75e6f0cfaea31ed441a7d9740b6f786d549e85fe02fbe6414feed6be5176473dab53ef61a6a0ab45b7e7d94d38b530f4b827f925e9f2d2cd8e
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,28 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.0.30] - 2026-11-15
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.0.30][2.0.30t]
|
|
36
|
+
- COVERAGE: 97.46% -- 115/118 lines in 19 files
|
|
37
|
+
- BRANCH COVERAGE: 100.00% -- 2/2 branches in 19 files
|
|
38
|
+
- 85.71% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `Kettle::Test::ProgressFormatter`: opt-in (`KETTLE_TEST_EVENTS=1`) throttled `test_progress` NDJSON events for plain rspec runs, an adapter over `Kettle::Ndjson::TestProgress` (kettle-ndjson >= 0.1.24)
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- [kc] kettle-jem/prepare: updated 14 project files:
|
|
47
|
+
- dependencies (14)
|
|
48
|
+
|
|
49
|
+
- [kc] kettle-jem/template: updated 16 project files:
|
|
50
|
+
- code and tests (1)
|
|
51
|
+
- dependencies (3)
|
|
52
|
+
- other (3)
|
|
53
|
+
- workflows (9)
|
|
54
|
+
|
|
33
55
|
## [2.0.29] - 2026-10-28
|
|
34
56
|
|
|
35
57
|
- TAG: [v2.0.29][2.0.29t]
|
|
@@ -778,7 +800,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
778
800
|
- silent_stream
|
|
779
801
|
- timecop-rspec
|
|
780
802
|
|
|
781
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-test/compare/v2.0.
|
|
803
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-test/compare/v2.0.30...HEAD
|
|
804
|
+
[2.0.30]: https://github.com/kettle-dev/kettle-test/compare/v2.0.29...v2.0.30
|
|
805
|
+
[2.0.30t]: https://github.com/kettle-dev/kettle-test/releases/tag/v2.0.30
|
|
782
806
|
[2.0.29]: https://github.com/kettle-dev/kettle-test/compare/v2.0.28...v2.0.29
|
|
783
807
|
[2.0.29t]: https://github.com/kettle-dev/kettle-test/releases/tag/v2.0.29
|
|
784
808
|
[2.0.28]: https://github.com/kettle-dev/kettle-test/compare/v2.0.27...v2.0.28
|
data/README.md
CHANGED
|
@@ -467,6 +467,34 @@ RSpec.describe("flaky external call", :skip_ci) do
|
|
|
467
467
|
end
|
|
468
468
|
```
|
|
469
469
|
|
|
470
|
+
### Live test progress events
|
|
471
|
+
|
|
472
|
+
Opt-in, off by default. Set `KETTLE_TEST_EVENTS=1` (also `true`/`yes`/`on`) and
|
|
473
|
+
`kettle/test/rspec` registers `Kettle::Test::ProgressFormatter` on stdout (or pass
|
|
474
|
+
`--format Kettle::Test::ProgressFormatter` yourself). It emits
|
|
475
|
+
[kettle-ndjson](https://github.com/kettle-dev/kettle-ndjson) `test_progress` events, one JSON
|
|
476
|
+
object per line, never one per example. The schema is identical to
|
|
477
|
+
[turbo_tests2](https://github.com/galtzo-floss/turbo_tests2)'s parallel-run events.
|
|
478
|
+
Under turbo_tests2 workers the formatter stays silent; the parent emits.
|
|
479
|
+
|
|
480
|
+
```json
|
|
481
|
+
{"kind":"tick","source":"kettle-test","examples":120,"failures":1,"pending":2,"elapsed":8.31,"type":"test_progress","event_version":1}
|
|
482
|
+
{"kind":"failure","source":"kettle-test","examples":57,"failures":1,"pending":0,"elapsed":4.02,"location":"./spec/a_spec.rb:3","description":"A fails","type":"test_progress","event_version":1}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
| Field | Meaning |
|
|
486
|
+
| --- | --- |
|
|
487
|
+
| `type` | always `test_progress` |
|
|
488
|
+
| `event_version` | `1` |
|
|
489
|
+
| `kind` | `tick` (throttled, at most 1/s), `failure` (immediate, one per failed example), `final` (once, at end) |
|
|
490
|
+
| `source` | `kettle-test` (turbo_tests2 emits `turbo_tests2`) |
|
|
491
|
+
| `examples`, `failures`, `pending` | running totals |
|
|
492
|
+
| `elapsed` | seconds since the run started (float) |
|
|
493
|
+
| `location`, `description` | `failure` only: example location and full description |
|
|
494
|
+
|
|
495
|
+
`KETTLE_TEST_EVENTS_INTERVAL` (seconds, default `1`) tunes the tick throttle. Each event is
|
|
496
|
+
preceded by a newline so it starts on its own line even amid progress dots.
|
|
497
|
+
|
|
470
498
|
### Profile slowest examples
|
|
471
499
|
|
|
472
500
|
Set KETTLE_TEST_RSPEC_PROFILE_EXAMPLES to a positive integer to enable RSpec profiling.
|
|
@@ -775,7 +803,7 @@ Thanks for RTFM. ☺️
|
|
|
775
803
|
[📌gitmoji]: https://gitmoji.dev
|
|
776
804
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
777
805
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
778
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
806
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.118-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
779
807
|
[🔐security]: https://github.com/kettle-dev/kettle-test/blob/main/SECURITY.md
|
|
780
808
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
781
809
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Opt-in live test_progress events: KETTLE_TEST_EVENTS=1 registers the formatter
|
|
4
|
+
# on stdout. Skipped inside turbo_tests2 workers (the parent process emits).
|
|
5
|
+
require_relative "../../../progress_formatter"
|
|
6
|
+
|
|
7
|
+
# Exercised in a real rspec subprocess by spec/kettle/test/progress_formatter_spec.rb,
|
|
8
|
+
# which in-process coverage cannot see.
|
|
9
|
+
# simplecov:disable
|
|
10
|
+
if Kettle::Test::ProgressFormatter.enabled? && !Kettle::Test::ProgressFormatter.turbo_worker?
|
|
11
|
+
RSpec.configure do |config|
|
|
12
|
+
config.add_formatter(Kettle::Test::ProgressFormatter, $stdout)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
# simplecov:enable
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "kettle/ndjson"
|
|
4
|
+
require "rspec/core"
|
|
5
|
+
require "rspec/core/formatters"
|
|
6
|
+
|
|
7
|
+
module Kettle
|
|
8
|
+
module Test
|
|
9
|
+
# Plain-rspec formatter emitting throttled NDJSON `test_progress` events
|
|
10
|
+
# (the same schema turbo_tests2 emits for parallel runs; see README
|
|
11
|
+
# "Live test progress events"). A thin adapter over Kettle::Ndjson::TestProgress.
|
|
12
|
+
#
|
|
13
|
+
# Opt-in: set KETTLE_TEST_EVENTS=1 (auto-registered by kettle/test/rspec),
|
|
14
|
+
# or pass `--format Kettle::Test::ProgressFormatter` explicitly.
|
|
15
|
+
class ProgressFormatter
|
|
16
|
+
::RSpec::Core::Formatters.register(self, :example_passed, :example_pending, :example_failed, :close)
|
|
17
|
+
|
|
18
|
+
def self.enabled?(env = ENV)
|
|
19
|
+
Kettle::Ndjson::TestProgress.enabled?(env)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Workers spawned by turbo_tests2 must not emit; the parent aggregates.
|
|
23
|
+
def self.turbo_worker?(env = ENV)
|
|
24
|
+
env.key?("RSPEC_FORMATTER_OUTPUT_ID")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def initialize(output, progress: nil)
|
|
28
|
+
@progress = progress || Kettle::Ndjson::TestProgress.new(
|
|
29
|
+
io: output,
|
|
30
|
+
source: "kettle-test",
|
|
31
|
+
interval: Kettle::Ndjson::TestProgress.interval_from_env
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def example_passed(_notification)
|
|
36
|
+
@progress.record(:passed)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def example_pending(_notification)
|
|
40
|
+
@progress.record(:pending)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def example_failed(notification)
|
|
44
|
+
example = notification.example
|
|
45
|
+
@progress.record(:failed, location: example.location, description: example.full_description)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def close(_notification)
|
|
49
|
+
@progress.finish
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
data/lib/kettle/test/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "2.0.
|
|
8
|
+
VERSION = "2.0.30"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-test
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.30
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -71,6 +71,26 @@ dependencies:
|
|
|
71
71
|
- - "~>"
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
73
|
version: '3.0'
|
|
74
|
+
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: kettle-ndjson
|
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - "~>"
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0.1'
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 0.1.24
|
|
84
|
+
type: :runtime
|
|
85
|
+
prerelease: false
|
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - "~>"
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0.1'
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 0.1.24
|
|
74
94
|
- !ruby/object:Gem::Dependency
|
|
75
95
|
name: rspec
|
|
76
96
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -148,7 +168,7 @@ dependencies:
|
|
|
148
168
|
version: '1.0'
|
|
149
169
|
- - ">="
|
|
150
170
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: 1.0.
|
|
171
|
+
version: 1.0.18
|
|
152
172
|
type: :runtime
|
|
153
173
|
prerelease: false
|
|
154
174
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -158,7 +178,7 @@ dependencies:
|
|
|
158
178
|
version: '1.0'
|
|
159
179
|
- - ">="
|
|
160
180
|
- !ruby/object:Gem::Version
|
|
161
|
-
version: 1.0.
|
|
181
|
+
version: 1.0.18
|
|
162
182
|
- !ruby/object:Gem::Dependency
|
|
163
183
|
name: silent_stream
|
|
164
184
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -205,14 +225,14 @@ dependencies:
|
|
|
205
225
|
requirements:
|
|
206
226
|
- - ">="
|
|
207
227
|
- !ruby/object:Gem::Version
|
|
208
|
-
version:
|
|
228
|
+
version: 4.0.2
|
|
209
229
|
type: :runtime
|
|
210
230
|
prerelease: false
|
|
211
231
|
version_requirements: !ruby/object:Gem::Requirement
|
|
212
232
|
requirements:
|
|
213
233
|
- - ">="
|
|
214
234
|
- !ruby/object:Gem::Version
|
|
215
|
-
version:
|
|
235
|
+
version: 4.0.2
|
|
216
236
|
- !ruby/object:Gem::Dependency
|
|
217
237
|
name: version_gem
|
|
218
238
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -242,7 +262,7 @@ dependencies:
|
|
|
242
262
|
version: '3.1'
|
|
243
263
|
- - ">="
|
|
244
264
|
- !ruby/object:Gem::Version
|
|
245
|
-
version: 3.1.
|
|
265
|
+
version: 3.1.28
|
|
246
266
|
type: :development
|
|
247
267
|
prerelease: false
|
|
248
268
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -252,7 +272,7 @@ dependencies:
|
|
|
252
272
|
version: '3.1'
|
|
253
273
|
- - ">="
|
|
254
274
|
- !ruby/object:Gem::Version
|
|
255
|
-
version: 3.1.
|
|
275
|
+
version: 3.1.28
|
|
256
276
|
- !ruby/object:Gem::Dependency
|
|
257
277
|
name: bundler-audit
|
|
258
278
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -344,7 +364,7 @@ dependencies:
|
|
|
344
364
|
version: '1.0'
|
|
345
365
|
- - ">="
|
|
346
366
|
- !ruby/object:Gem::Version
|
|
347
|
-
version: 1.0.
|
|
367
|
+
version: 1.0.10
|
|
348
368
|
type: :development
|
|
349
369
|
prerelease: false
|
|
350
370
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -354,7 +374,7 @@ dependencies:
|
|
|
354
374
|
version: '1.0'
|
|
355
375
|
- - ">="
|
|
356
376
|
- !ruby/object:Gem::Version
|
|
357
|
-
version: 1.0.
|
|
377
|
+
version: 1.0.10
|
|
358
378
|
- !ruby/object:Gem::Dependency
|
|
359
379
|
name: gitmoji-regex
|
|
360
380
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -364,7 +384,7 @@ dependencies:
|
|
|
364
384
|
version: '2.0'
|
|
365
385
|
- - ">="
|
|
366
386
|
- !ruby/object:Gem::Version
|
|
367
|
-
version: 2.0.
|
|
387
|
+
version: 2.0.16
|
|
368
388
|
type: :development
|
|
369
389
|
prerelease: false
|
|
370
390
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -374,7 +394,7 @@ dependencies:
|
|
|
374
394
|
version: '2.0'
|
|
375
395
|
- - ">="
|
|
376
396
|
- !ruby/object:Gem::Version
|
|
377
|
-
version: 2.0.
|
|
397
|
+
version: 2.0.16
|
|
378
398
|
description: "\U0001F372 Kettle::Test is a meta tool from kettle-dev to streamline
|
|
379
399
|
testing. Acts as a shim dependency, pulling in many other dependencies, to give
|
|
380
400
|
you OOTB productivity with a RubyGem, or Ruby app project. Configures RSpec w/ syntactic
|
|
@@ -400,6 +420,7 @@ files:
|
|
|
400
420
|
- lib/kettle/test/config/ext/timecop.rb
|
|
401
421
|
- lib/kettle/test/config/int/rspec/rspec_core.rb
|
|
402
422
|
- lib/kettle/test/config/int/rspec/silent_stream.rb
|
|
423
|
+
- lib/kettle/test/config/int/rspec/test_events.rb
|
|
403
424
|
- lib/kettle/test/config/int/rspec/timecop_rspec.rb
|
|
404
425
|
- lib/kettle/test/config/int/rspec_block_is_expected.rb
|
|
405
426
|
- lib/kettle/test/config/int/rspec_pending_for.rb
|
|
@@ -407,6 +428,7 @@ files:
|
|
|
407
428
|
- lib/kettle/test/external.rb
|
|
408
429
|
- lib/kettle/test/internal.rb
|
|
409
430
|
- lib/kettle/test/mocks/test_task.rake
|
|
431
|
+
- lib/kettle/test/progress_formatter.rb
|
|
410
432
|
- lib/kettle/test/rspec.rb
|
|
411
433
|
- lib/kettle/test/support/shared_contexts/with_rake.rb
|
|
412
434
|
- lib/kettle/test/version.rb
|
|
@@ -418,10 +440,10 @@ licenses:
|
|
|
418
440
|
- PolyForm-Small-Business-1.0.0
|
|
419
441
|
metadata:
|
|
420
442
|
homepage_uri: https://kettle-test.galtzo.com
|
|
421
|
-
source_code_uri: https://github.com/kettle-dev/kettle-test/tree/v2.0.
|
|
422
|
-
changelog_uri: https://github.com/kettle-dev/kettle-test/blob/v2.0.
|
|
443
|
+
source_code_uri: https://github.com/kettle-dev/kettle-test/tree/v2.0.30
|
|
444
|
+
changelog_uri: https://github.com/kettle-dev/kettle-test/blob/v2.0.30/CHANGELOG.md
|
|
423
445
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-test/issues
|
|
424
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-test/2.0.
|
|
446
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-test/2.0.30
|
|
425
447
|
funding_uri: https://github.com/sponsors/pboling
|
|
426
448
|
wiki_uri: https://github.com/kettle-dev/kettle-test/wiki
|
|
427
449
|
news_uri: https://www.railsbling.com/tags/kettle-test
|
|
@@ -451,7 +473,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
451
473
|
- !ruby/object:Gem::Version
|
|
452
474
|
version: '0'
|
|
453
475
|
requirements: []
|
|
454
|
-
rubygems_version: 4.0.
|
|
476
|
+
rubygems_version: 4.0.24
|
|
455
477
|
specification_version: 4
|
|
456
478
|
summary: "\U0001F372 A kettle-dev meta tool to streamline testing"
|
|
457
479
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|