mutant-rspec 0.6.7 → 0.7.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 +4 -4
- data/lib/mutant/integration/rspec.rb +59 -135
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46ada3b79ab252f059d8065f00d72003c6f66fa1
|
4
|
+
data.tar.gz: e8988daaeb561bf5e7456e4cc5ffeb52f93ff32c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90dc03c3a632b7ca89eeb5235f1403fd01c97583aebe49736b343e72e42f4904981d5c74a05f6a14628b0902a90e3bca8444c4a161116b144b04dd0467749550
|
7
|
+
data.tar.gz: 7ba8812781d7209630b66acd13a7fbe99841d6cd13ac8813e9e68bd94c18a04609071ade1eb40a9668856273582d6c4286fc3cc5fd4778c27aed246ede3e06ca
|
@@ -1,28 +1,28 @@
|
|
1
1
|
require 'rspec/core'
|
2
|
-
require 'rspec/core/formatters/base_text_formatter'
|
3
2
|
|
4
3
|
module Mutant
|
5
4
|
class Integration
|
6
5
|
# Shared parts of rspec2/3 integration
|
7
6
|
class Rspec < self
|
8
|
-
include AbstractType
|
9
7
|
|
10
|
-
|
8
|
+
ALL = Mutant::Expression.parse('*')
|
9
|
+
EXPRESSION_DELIMITER = ' '.freeze
|
10
|
+
LOCATION_DELIMITER = ':'.freeze
|
11
|
+
EXIT_SUCCESS = 0
|
12
|
+
CLI_OPTIONS = IceNine.deep_freeze(%w[spec --fail-fast])
|
11
13
|
|
12
|
-
|
14
|
+
register 'rspec'
|
13
15
|
|
14
|
-
#
|
16
|
+
# Initialize rspec integration
|
15
17
|
#
|
16
|
-
# @return [
|
18
|
+
# @return [undefined]
|
17
19
|
#
|
18
20
|
# @api private
|
19
21
|
#
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
Rspec3.new
|
25
|
-
end
|
22
|
+
def initialize
|
23
|
+
@output = StringIO.new
|
24
|
+
@runner = RSpec::Core::Runner.new(RSpec::Core::ConfigurationOptions.new(CLI_OPTIONS))
|
25
|
+
@world = RSpec.world
|
26
26
|
end
|
27
27
|
|
28
28
|
# Setup rspec integration
|
@@ -32,15 +32,14 @@ module Mutant
|
|
32
32
|
# @api private
|
33
33
|
#
|
34
34
|
def setup
|
35
|
-
|
36
|
-
configuration.load_spec_files
|
35
|
+
@runner.setup($stderr, @output)
|
37
36
|
self
|
38
37
|
end
|
39
38
|
memoize :setup
|
40
39
|
|
41
40
|
# Return report for test
|
42
41
|
#
|
43
|
-
# @param [
|
42
|
+
# @param [Enumerable<Mutant::Test>] tests
|
44
43
|
#
|
45
44
|
# @return [Test::Result]
|
46
45
|
#
|
@@ -48,25 +47,17 @@ module Mutant
|
|
48
47
|
#
|
49
48
|
# rubocop:disable MethodLength
|
50
49
|
#
|
51
|
-
def
|
52
|
-
|
53
|
-
|
50
|
+
def call(tests)
|
51
|
+
examples = tests.map(&all_tests_index.method(:fetch)).to_set
|
52
|
+
filter_examples(&examples.method(:include?))
|
54
53
|
start = Time.now
|
55
|
-
|
56
|
-
|
57
|
-
example_group_index.fetch(test.expression.syntax).each do |example_group|
|
58
|
-
next if example_group.run(reporter)
|
59
|
-
failed = true
|
60
|
-
break
|
61
|
-
end
|
62
|
-
end
|
63
|
-
output.rewind
|
54
|
+
passed = @runner.run_specs(RSpec.world.ordered_example_groups).equal?(EXIT_SUCCESS)
|
55
|
+
@output.rewind
|
64
56
|
Result::Test.new(
|
65
|
-
|
66
|
-
|
67
|
-
output: output.read,
|
57
|
+
tests: nil,
|
58
|
+
output: @output.read,
|
68
59
|
runtime: Time.now - start,
|
69
|
-
passed:
|
60
|
+
passed: passed
|
70
61
|
)
|
71
62
|
end
|
72
63
|
|
@@ -77,136 +68,69 @@ module Mutant
|
|
77
68
|
# @api private
|
78
69
|
#
|
79
70
|
def all_tests
|
80
|
-
|
81
|
-
expression = Expression.try_parse(full_description) or next
|
82
|
-
|
83
|
-
aggregate << Test.new(self, expression)
|
84
|
-
end
|
71
|
+
all_tests_index.keys
|
85
72
|
end
|
86
73
|
memoize :all_tests
|
87
74
|
|
88
75
|
private
|
89
76
|
|
90
|
-
# Return all
|
77
|
+
# Return all tests index
|
91
78
|
#
|
92
|
-
# @return [Hash<
|
79
|
+
# @return [Hash<Test, RSpec::Core::Example]
|
93
80
|
#
|
94
81
|
# @api private
|
95
82
|
#
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
RSpec.world.example_groups.flat_map(&:descendants).each do |example_group|
|
100
|
-
full_description = full_description(example_group)
|
101
|
-
index[full_description] << example_group
|
83
|
+
def all_tests_index
|
84
|
+
all_examples.each_with_object({}) do |example, index|
|
85
|
+
index[parse_example(example)] = example
|
102
86
|
end
|
103
|
-
|
104
|
-
index
|
105
87
|
end
|
106
|
-
memoize :
|
88
|
+
memoize :all_tests_index
|
107
89
|
|
108
|
-
#
|
90
|
+
# Parse example into test
|
91
|
+
#
|
92
|
+
# @param [RSpec::Core::Example]
|
109
93
|
#
|
110
|
-
# @return [
|
94
|
+
# @return [Test]
|
111
95
|
#
|
112
96
|
# @api private
|
113
97
|
#
|
114
|
-
def
|
115
|
-
|
98
|
+
def parse_example(example)
|
99
|
+
metadata = example.metadata
|
100
|
+
location = metadata.fetch(:location)
|
101
|
+
full_description = metadata.fetch(:full_description)
|
102
|
+
expression = Expression.try_parse(full_description.split(EXPRESSION_DELIMITER, 2).first) || ALL
|
103
|
+
|
104
|
+
Test.new(
|
105
|
+
id: "rspec:#{location} / #{full_description}",
|
106
|
+
expression: expression
|
107
|
+
)
|
116
108
|
end
|
117
|
-
memoize :configuration, freezer: :noop
|
118
109
|
|
119
|
-
# Return
|
110
|
+
# Return all examples
|
120
111
|
#
|
121
|
-
# @return [RSpec::Core::
|
112
|
+
# @return [Array<String, RSpec::Core::Example]
|
122
113
|
#
|
123
114
|
# @api private
|
124
115
|
#
|
125
|
-
def
|
126
|
-
|
116
|
+
def all_examples
|
117
|
+
@world.example_groups.flat_map(&:descendants).flat_map(&:examples)
|
127
118
|
end
|
128
|
-
memoize :options, freezer: :noop
|
129
|
-
|
130
|
-
# Rspec2 integration
|
131
|
-
class Rspec2 < self
|
132
|
-
|
133
|
-
register 'rspec'
|
134
119
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
# Return full description of example group
|
148
|
-
#
|
149
|
-
# @param [RSpec::Core::ExampleGroup] example_group
|
150
|
-
#
|
151
|
-
# @return [String]
|
152
|
-
#
|
153
|
-
# @api private
|
154
|
-
#
|
155
|
-
def full_description(example_group)
|
156
|
-
example_group.metadata.fetch(:example_group).fetch(:full_description)
|
157
|
-
end
|
158
|
-
|
159
|
-
# Return new reporter
|
160
|
-
#
|
161
|
-
# @param [StringIO] output
|
162
|
-
#
|
163
|
-
# @return [RSpec::Core::Reporter]
|
164
|
-
#
|
165
|
-
# @api private
|
166
|
-
#
|
167
|
-
def new_reporter(output)
|
168
|
-
formatter = RSpec::Core::Formatters::BaseTextFormatter.new(output)
|
169
|
-
|
170
|
-
RSpec::Core::Reporter.new(formatter)
|
171
|
-
end
|
172
|
-
|
173
|
-
end # Rspec2
|
174
|
-
|
175
|
-
# Rspec 3 integration
|
176
|
-
class Rspec3 < self
|
177
|
-
|
178
|
-
private
|
179
|
-
|
180
|
-
# Return full description for example group
|
181
|
-
#
|
182
|
-
# @param [RSpec::Core::ExampleGroup] example_group
|
183
|
-
#
|
184
|
-
# @return [String]
|
185
|
-
#
|
186
|
-
# @api private
|
187
|
-
#
|
188
|
-
def full_description(example_group)
|
189
|
-
example_group.metadata.fetch(:full_description)
|
190
|
-
end
|
191
|
-
|
192
|
-
# Return new reporter
|
193
|
-
#
|
194
|
-
# @param [StringIO] output
|
195
|
-
#
|
196
|
-
# @return [RSpec::Core::Reporter]
|
197
|
-
#
|
198
|
-
# @api private
|
199
|
-
#
|
200
|
-
def new_reporter(output)
|
201
|
-
formatter = RSpec::Core::Formatters::BaseTextFormatter.new(output)
|
202
|
-
notifications = RSpec::Core::Formatters::Loader.allocate.send(:notifications_for, formatter.class)
|
203
|
-
|
204
|
-
RSpec::Core::Reporter.new(configuration).tap do |reporter|
|
205
|
-
reporter.register_listener(formatter, *notifications)
|
206
|
-
end
|
120
|
+
# Filter examples
|
121
|
+
#
|
122
|
+
# @param [#call] predicate
|
123
|
+
#
|
124
|
+
# @return [undefined]
|
125
|
+
#
|
126
|
+
# @api private
|
127
|
+
#
|
128
|
+
def filter_examples(&predicate)
|
129
|
+
@world.filtered_examples.each_value do |examples|
|
130
|
+
examples.keep_if(&predicate)
|
207
131
|
end
|
132
|
+
end
|
208
133
|
|
209
|
-
end # Rspec3
|
210
134
|
end # Rspec
|
211
135
|
end # Integration
|
212
136
|
end # Mutant
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutant-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mutant
|
@@ -16,21 +16,21 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.7.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.7.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec-core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.0.0
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 3.2.0
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 3.0.0
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 3.2.0
|
@@ -101,4 +101,3 @@ signing_key:
|
|
101
101
|
specification_version: 4
|
102
102
|
summary: Rspec integration for mutant
|
103
103
|
test_files: []
|
104
|
-
has_rdoc:
|