selective-ruby-rspec 0.1.4 → 0.1.5
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/.semaphore/semaphore.yml +19 -0
- data/lib/selective/ruby/rspec/formatter.rb +25 -0
- data/lib/selective/ruby/rspec/runner_wrapper.rb +29 -17
- data/lib/selective/ruby/rspec/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 742c9d113ea3409cd38857cad3943deaf6bf8c660f8061e97c57957b35ff2d07
|
4
|
+
data.tar.gz: 420c8ea9dac4e9b21a0346c7eba4ee8a0430ee83225f8f2dc1254bd175b0d413
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e8e31650ee078e7f0cabf43120c99b06f3a500b463b3c04fbe49dd9723db2a97ced3565c82729956f1f13a8c3fc0d0442d4eac96e8f228a7a02b2e3e483592e
|
7
|
+
data.tar.gz: 269a44800fb7a24bf58f32552d7313d54ddf6cb033eb252f1cebc220f2364b92fe67ee822d25cce1db731d1175266a85bf7d58931f770f1054409c32cfcff1d4
|
@@ -0,0 +1,19 @@
|
|
1
|
+
version: v1.0
|
2
|
+
name: Ruby
|
3
|
+
agent:
|
4
|
+
machine:
|
5
|
+
type: e1-standard-2
|
6
|
+
os_image: ubuntu2004
|
7
|
+
blocks:
|
8
|
+
- name: Run RSpec tests
|
9
|
+
task:
|
10
|
+
jobs:
|
11
|
+
- name: Run RSpec tests
|
12
|
+
parallelism: 2
|
13
|
+
commands:
|
14
|
+
- sem-version ruby 3.3.0
|
15
|
+
- checkout
|
16
|
+
- bundle install
|
17
|
+
- bundle exec selective rspec
|
18
|
+
secrets:
|
19
|
+
- name: Selective
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Selective
|
2
|
+
module Ruby
|
3
|
+
module RSpec
|
4
|
+
class Formatter
|
5
|
+
::RSpec::Core::Formatters.register self, :example_passed, :example_failed, :example_pending
|
6
|
+
|
7
|
+
def initialize(...); end
|
8
|
+
|
9
|
+
def self.callback=(callback)
|
10
|
+
@callback = callback
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.callback
|
14
|
+
@callback
|
15
|
+
end
|
16
|
+
|
17
|
+
%i(example_passed example_failed example_pending).each do |method|
|
18
|
+
define_method(method) do |notification|
|
19
|
+
self.class.callback.call(notification.example)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -7,12 +7,13 @@ module Selective
|
|
7
7
|
class RunnerWrapper
|
8
8
|
class TestManifestError < StandardError; end
|
9
9
|
|
10
|
-
attr_reader :rspec_runner, :config
|
10
|
+
attr_reader :rspec_runner, :config, :example_callback
|
11
11
|
|
12
12
|
FRAMEWORK = "rspec"
|
13
13
|
DEFAULT_SPEC_PATH = "./spec"
|
14
14
|
|
15
|
-
def initialize(args)
|
15
|
+
def initialize(args, example_callback)
|
16
|
+
@example_callback = example_callback
|
16
17
|
rspec_args, wrapper_config_hash = parse_args(args)
|
17
18
|
Selective::Ruby::RSpec::Monkeypatches.apply(wrapper_config_hash)
|
18
19
|
apply_rspec_configuration
|
@@ -22,6 +23,8 @@ module Selective
|
|
22
23
|
config.options[:files_or_directories_to_run] = [DEFAULT_SPEC_PATH]
|
23
24
|
end
|
24
25
|
|
26
|
+
Formatter.callback = method(:report_example)
|
27
|
+
|
25
28
|
@rspec_runner = ::RSpec::Core::Runner.new(@config)
|
26
29
|
@rspec_runner.setup($stderr, $stdout)
|
27
30
|
end
|
@@ -59,12 +62,22 @@ module Selective
|
|
59
62
|
raise_test_manifest_error(e.message)
|
60
63
|
end
|
61
64
|
|
62
|
-
def run_test_cases(test_case_ids
|
65
|
+
def run_test_cases(test_case_ids)
|
63
66
|
::RSpec.world.reporter.send(:start, nil)
|
64
67
|
Selective::Ruby::Core::Controller.suppress_reporting!
|
65
|
-
|
66
|
-
|
68
|
+
|
69
|
+
::RSpec.configuration.reset_filters
|
70
|
+
::RSpec.world.prepare_example_filtering
|
71
|
+
config.options[:files_or_directories_to_run] = test_case_ids
|
72
|
+
ensure_formatter
|
73
|
+
|
74
|
+
rspec_runner.setup($stderr, $stdout)
|
75
|
+
|
76
|
+
example_groups = test_case_ids.each_with_object(Set.new) do |test_case_id, set|
|
77
|
+
set << ::RSpec.world.example_map[test_case_id]
|
67
78
|
end
|
79
|
+
|
80
|
+
rspec_runner.run_specs(example_groups.to_a)
|
68
81
|
end
|
69
82
|
|
70
83
|
def exec
|
@@ -108,18 +121,6 @@ module Selective
|
|
108
121
|
|
109
122
|
private
|
110
123
|
|
111
|
-
def run_test_case(test_case_id, callback)
|
112
|
-
::RSpec.configuration.reset_filters
|
113
|
-
::RSpec.world.prepare_example_filtering
|
114
|
-
config.options[:files_or_directories_to_run] = test_case_id
|
115
|
-
rspec_runner.options = config
|
116
|
-
rspec_runner.setup($stderr, $stdout)
|
117
|
-
|
118
|
-
# $rspec_rerun_debug = true if test_case == './spec/selective_spec.rb[1:2]' && ::RSpec.world.reporter.examples.length == 5
|
119
|
-
rspec_runner.run_specs([::RSpec.world.example_map[test_case_id]])
|
120
|
-
callback.call(format_example(get_example_from_reporter(test_case_id)))
|
121
|
-
end
|
122
|
-
|
123
124
|
def get_example_from_reporter(test_case_id)
|
124
125
|
::RSpec.world.reporter.examples.detect { |e| e.id == test_case_id }
|
125
126
|
end
|
@@ -151,6 +152,10 @@ module Selective
|
|
151
152
|
}
|
152
153
|
end
|
153
154
|
|
155
|
+
def report_example(example)
|
156
|
+
example_callback.call(format_example(example))
|
157
|
+
end
|
158
|
+
|
154
159
|
def apply_rspec_configuration
|
155
160
|
::RSpec.configure do |config|
|
156
161
|
config.backtrace_exclusion_patterns = config.backtrace_exclusion_patterns | [/lib\/selective/]
|
@@ -161,6 +166,13 @@ module Selective
|
|
161
166
|
def raise_test_manifest_error(output)
|
162
167
|
raise TestManifestError.new("Selective could not generate a test manifest. The output was:\n#{output}")
|
163
168
|
end
|
169
|
+
|
170
|
+
def ensure_formatter
|
171
|
+
formatter = [Selective::Ruby::RSpec::Formatter.to_s]
|
172
|
+
return if config.options[:formatters].include?(formatter)
|
173
|
+
|
174
|
+
config.options[:formatters] << formatter
|
175
|
+
end
|
164
176
|
end
|
165
177
|
end
|
166
178
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selective-ruby-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Wood
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-01-
|
12
|
+
date: 2024-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: zeitwerk
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 0.2.2
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 0.2.2
|
42
42
|
description: Selective is an intelligent test runner for your current CI provider.
|
43
43
|
Get real-time test results, intelligent ordering based on code changes, shorter
|
44
44
|
run times, automatic flake detection, the ability to re-enqueue failed tests, and
|
@@ -50,9 +50,11 @@ executables: []
|
|
50
50
|
extensions: []
|
51
51
|
extra_rdoc_files: []
|
52
52
|
files:
|
53
|
+
- ".semaphore/semaphore.yml"
|
53
54
|
- LICENSE
|
54
55
|
- Rakefile
|
55
56
|
- lib/selective-ruby-rspec.rb
|
57
|
+
- lib/selective/ruby/rspec/formatter.rb
|
56
58
|
- lib/selective/ruby/rspec/monkeypatches.rb
|
57
59
|
- lib/selective/ruby/rspec/runner_wrapper.rb
|
58
60
|
- lib/selective/ruby/rspec/version.rb
|