rspec-signal 0.2.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +73 -0
- data/README.md +326 -38
- data/exe/rspec-signal +9 -0
- data/exe/rspec-signal-parallel +12 -5
- data/lib/rspec/signal/causal/analysis.rb +292 -0
- data/lib/rspec/signal/causal/census.rb +86 -0
- data/lib/rspec/signal/causal/entities.rb +67 -0
- data/lib/rspec/signal/causal/evidence.rb +144 -0
- data/lib/rspec/signal/causal/phase.rb +98 -0
- data/lib/rspec/signal/causal/scope_analysis.rb +80 -0
- data/lib/rspec/signal/code_paths.rb +101 -0
- data/lib/rspec/signal/comparison.rb +101 -0
- data/lib/rspec/signal/configuration.rb +18 -2
- data/lib/rspec/signal/failure.rb +26 -3
- data/lib/rspec/signal/failure_builder.rb +17 -2
- data/lib/rspec/signal/fingerprint.rb +18 -2
- data/lib/rspec/signal/formatter.rb +121 -69
- data/lib/rspec/signal/group.rb +20 -3
- data/lib/rspec/signal/history.rb +102 -0
- data/lib/rspec/signal/message.rb +54 -1
- data/lib/rspec/signal/outside_example.rb +148 -0
- data/lib/rspec/signal/parallel_merger.rb +67 -7
- data/lib/rspec/signal/parallel_run.rb +4 -3
- data/lib/rspec/signal/progress_bar.rb +48 -0
- data/lib/rspec/signal/report.rb +119 -23
- data/lib/rspec/signal/reporters/json_report.rb +3 -2
- data/lib/rspec/signal/reporters/markdown.rb +29 -21
- data/lib/rspec/signal/reporters/outside_examples.rb +101 -0
- data/lib/rspec/signal/reporters/relationships.rb +228 -0
- data/lib/rspec/signal/reporters/shared_code_paths.rb +86 -0
- data/lib/rspec/signal/rerun.rb +39 -0
- data/lib/rspec/signal/run_status.rb +40 -0
- data/lib/rspec/signal/selection.rb +130 -0
- data/lib/rspec/signal/terminal_summary.rb +119 -0
- data/lib/rspec/signal/version.rb +1 -1
- data/lib/rspec/signal/writer.rb +55 -18
- data/lib/rspec/signal.rb +18 -0
- metadata +20 -2
data/lib/rspec/signal/writer.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "fileutils"
|
|
4
|
+
require "tempfile"
|
|
4
5
|
|
|
5
6
|
module RSpec
|
|
6
7
|
module Signal
|
|
@@ -26,17 +27,21 @@ module RSpec
|
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def write(report)
|
|
29
|
-
return clean
|
|
30
|
+
return clean unless report.reportable?
|
|
30
31
|
|
|
31
32
|
FileUtils.mkdir_p(dir)
|
|
32
33
|
write_gitignore
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
rendered = render_artifacts(report)
|
|
36
|
+
publish(rendered)
|
|
37
|
+
end
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
# Invalidating is deliberately separate from rendering. Callers do this
|
|
40
|
+
# at the beginning of a run, so an abort before #write cannot make the
|
|
41
|
+
# preceding run look current. History uses different names and is never
|
|
42
|
+
# included in MANAGED.
|
|
43
|
+
def invalidate_current!
|
|
44
|
+
remove(MANAGED)
|
|
40
45
|
end
|
|
41
46
|
|
|
42
47
|
# Relative to the project root when possible, because that is what you
|
|
@@ -48,15 +53,53 @@ module RSpec
|
|
|
48
53
|
|
|
49
54
|
private
|
|
50
55
|
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
def render_artifacts(report)
|
|
57
|
+
artifacts = { SIGNAL => Reporters::Markdown.new(report, @config).render }
|
|
58
|
+
artifacts[JSON] = Reporters::JsonReport.new(report, @config).render if @config.write_json
|
|
59
|
+
artifacts[FULL] = Reporters::FullOutput.new(report, @config).render if @config.write_full
|
|
60
|
+
artifacts
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# signal.md is the publication marker. Supporting artifacts are moved
|
|
64
|
+
# first and the marker last, so its presence always identifies a fully
|
|
65
|
+
# published generation. All content is staged beside its destination so
|
|
66
|
+
# rename remains on the same filesystem.
|
|
67
|
+
def publish(rendered)
|
|
68
|
+
staged = stage(rendered)
|
|
69
|
+
cleaned = invalidate_current!
|
|
70
|
+
published = []
|
|
71
|
+
publication_order(rendered.keys).each do |name|
|
|
72
|
+
File.rename(staged.fetch(name).path, File.join(dir, name))
|
|
73
|
+
published << File.join(dir, name)
|
|
74
|
+
end
|
|
75
|
+
Result.new(summary_path: File.join(dir, SIGNAL), written: published, cleaned: cleaned)
|
|
76
|
+
ensure
|
|
77
|
+
staged&.each_value(&:close!)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def stage(rendered)
|
|
81
|
+
staged = {}
|
|
82
|
+
rendered.each do |name, contents|
|
|
83
|
+
temporary = Tempfile.new([".#{name}", ".tmp"], dir)
|
|
84
|
+
temporary.binmode
|
|
85
|
+
temporary.write(contents)
|
|
86
|
+
temporary.flush
|
|
87
|
+
temporary.fsync
|
|
88
|
+
staged[name] = temporary
|
|
89
|
+
end
|
|
90
|
+
staged
|
|
91
|
+
rescue StandardError
|
|
92
|
+
temporary&.close!
|
|
93
|
+
staged&.each_value(&:close!)
|
|
94
|
+
raise
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def publication_order(names)
|
|
98
|
+
names.reject { |name| name == SIGNAL } + [SIGNAL]
|
|
56
99
|
end
|
|
57
100
|
|
|
58
101
|
def clean
|
|
59
|
-
Result.new(summary_path: nil, written: [], cleaned:
|
|
102
|
+
Result.new(summary_path: nil, written: [], cleaned: invalidate_current!)
|
|
60
103
|
end
|
|
61
104
|
|
|
62
105
|
def remove(names)
|
|
@@ -69,12 +112,6 @@ module RSpec
|
|
|
69
112
|
end
|
|
70
113
|
end
|
|
71
114
|
|
|
72
|
-
def write_file(name, contents)
|
|
73
|
-
path = File.join(dir, name)
|
|
74
|
-
File.write(path, contents)
|
|
75
|
-
path
|
|
76
|
-
end
|
|
77
|
-
|
|
78
115
|
# Failure artifacts routinely contain application data. Keeping them out of
|
|
79
116
|
# version control by default is cheap insurance.
|
|
80
117
|
def write_gitignore
|
data/lib/rspec/signal.rb
CHANGED
|
@@ -12,19 +12,37 @@ require_relative "signal/redactor"
|
|
|
12
12
|
require_relative "signal/html_summary"
|
|
13
13
|
require_relative "signal/message"
|
|
14
14
|
require_relative "signal/fingerprint"
|
|
15
|
+
require_relative "signal/rerun"
|
|
15
16
|
require_relative "signal/symptom"
|
|
16
17
|
require_relative "signal/symptoms"
|
|
17
18
|
require_relative "signal/failure"
|
|
19
|
+
require_relative "signal/outside_example"
|
|
18
20
|
require_relative "signal/group"
|
|
19
21
|
require_relative "signal/grouper"
|
|
20
22
|
require_relative "signal/cluster"
|
|
21
23
|
require_relative "signal/clusterer"
|
|
24
|
+
require_relative "signal/code_paths"
|
|
25
|
+
require_relative "signal/comparison"
|
|
26
|
+
require_relative "signal/selection"
|
|
27
|
+
require_relative "signal/causal/evidence"
|
|
28
|
+
require_relative "signal/causal/phase"
|
|
29
|
+
require_relative "signal/causal/entities"
|
|
30
|
+
require_relative "signal/causal/census"
|
|
31
|
+
require_relative "signal/causal/scope_analysis"
|
|
32
|
+
require_relative "signal/causal/analysis"
|
|
33
|
+
require_relative "signal/history"
|
|
34
|
+
require_relative "signal/run_status"
|
|
22
35
|
require_relative "signal/report"
|
|
23
36
|
require_relative "signal/configuration"
|
|
24
37
|
require_relative "signal/reporters/related_failures"
|
|
38
|
+
require_relative "signal/reporters/outside_examples"
|
|
39
|
+
require_relative "signal/reporters/shared_code_paths"
|
|
40
|
+
require_relative "signal/reporters/relationships"
|
|
25
41
|
require_relative "signal/reporters/markdown"
|
|
26
42
|
require_relative "signal/reporters/json_report"
|
|
27
43
|
require_relative "signal/reporters/full_output"
|
|
44
|
+
require_relative "signal/progress_bar"
|
|
45
|
+
require_relative "signal/terminal_summary"
|
|
28
46
|
require_relative "signal/writer"
|
|
29
47
|
require_relative "signal/parallel_run"
|
|
30
48
|
require_relative "signal/parallel_merger"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspec-signal
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chad Snow
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-10-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec-core
|
|
@@ -55,8 +55,16 @@ files:
|
|
|
55
55
|
- lib/rspec/signal/backtrace/frame.rb
|
|
56
56
|
- lib/rspec/signal/backtrace/parser.rb
|
|
57
57
|
- lib/rspec/signal/backtrace/reducer.rb
|
|
58
|
+
- lib/rspec/signal/causal/analysis.rb
|
|
59
|
+
- lib/rspec/signal/causal/census.rb
|
|
60
|
+
- lib/rspec/signal/causal/entities.rb
|
|
61
|
+
- lib/rspec/signal/causal/evidence.rb
|
|
62
|
+
- lib/rspec/signal/causal/phase.rb
|
|
63
|
+
- lib/rspec/signal/causal/scope_analysis.rb
|
|
58
64
|
- lib/rspec/signal/cluster.rb
|
|
59
65
|
- lib/rspec/signal/clusterer.rb
|
|
66
|
+
- lib/rspec/signal/code_paths.rb
|
|
67
|
+
- lib/rspec/signal/comparison.rb
|
|
60
68
|
- lib/rspec/signal/configuration.rb
|
|
61
69
|
- lib/rspec/signal/failure.rb
|
|
62
70
|
- lib/rspec/signal/failure_builder.rb
|
|
@@ -64,18 +72,27 @@ files:
|
|
|
64
72
|
- lib/rspec/signal/formatter.rb
|
|
65
73
|
- lib/rspec/signal/group.rb
|
|
66
74
|
- lib/rspec/signal/grouper.rb
|
|
75
|
+
- lib/rspec/signal/history.rb
|
|
67
76
|
- lib/rspec/signal/html_summary.rb
|
|
68
77
|
- lib/rspec/signal/integrations/capybara.rb
|
|
69
78
|
- lib/rspec/signal/message.rb
|
|
79
|
+
- lib/rspec/signal/outside_example.rb
|
|
70
80
|
- lib/rspec/signal/parallel_merger.rb
|
|
71
81
|
- lib/rspec/signal/parallel_run.rb
|
|
82
|
+
- lib/rspec/signal/progress_bar.rb
|
|
72
83
|
- lib/rspec/signal/project.rb
|
|
73
84
|
- lib/rspec/signal/redactor.rb
|
|
74
85
|
- lib/rspec/signal/report.rb
|
|
75
86
|
- lib/rspec/signal/reporters/full_output.rb
|
|
76
87
|
- lib/rspec/signal/reporters/json_report.rb
|
|
77
88
|
- lib/rspec/signal/reporters/markdown.rb
|
|
89
|
+
- lib/rspec/signal/reporters/outside_examples.rb
|
|
78
90
|
- lib/rspec/signal/reporters/related_failures.rb
|
|
91
|
+
- lib/rspec/signal/reporters/relationships.rb
|
|
92
|
+
- lib/rspec/signal/reporters/shared_code_paths.rb
|
|
93
|
+
- lib/rspec/signal/rerun.rb
|
|
94
|
+
- lib/rspec/signal/run_status.rb
|
|
95
|
+
- lib/rspec/signal/selection.rb
|
|
79
96
|
- lib/rspec/signal/symptom.rb
|
|
80
97
|
- lib/rspec/signal/symptoms.rb
|
|
81
98
|
- lib/rspec/signal/symptoms/exception_class.rb
|
|
@@ -84,6 +101,7 @@ files:
|
|
|
84
101
|
- lib/rspec/signal/symptoms/route.rb
|
|
85
102
|
- lib/rspec/signal/symptoms/ruby_error.rb
|
|
86
103
|
- lib/rspec/signal/symptoms/selector.rb
|
|
104
|
+
- lib/rspec/signal/terminal_summary.rb
|
|
87
105
|
- lib/rspec/signal/version.rb
|
|
88
106
|
- lib/rspec/signal/writer.rb
|
|
89
107
|
homepage: https://github.com/SilenceDogood1984/rspec-signal
|