mutant-rspec 0.7.8 → 0.7.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66fc28eece03e4857c80bb10a2c0907fe8ee85ce
4
- data.tar.gz: f91326c42478118b6a57165437d417d5813ddc7d
3
+ metadata.gz: 72406849fd8b2dec6ae91df43cdc7c8b07ec262b
4
+ data.tar.gz: b46c5ace26939895523b29a58fbd62877f8f5ec7
5
5
  SHA512:
6
- metadata.gz: 01170c86a745326819d68fc9d95f62706c76c4b970e381eb94dc8dec79c3af97b26160166d935bede278f4d36fab7e089972fee30d72a2c01e56128da4e72c4d
7
- data.tar.gz: 5892d2de59ef862ad0151e5d899777f2d82411a9bb6a53090d5eb71f6e1310e27cb50ce5192be5d174833f4dc0492d41448a3794bb40281eb03fcdeb2f34715e
6
+ metadata.gz: 38c27e114a09161c1725d0d3ff46e990c3269bf0473286585a7cf55f40c452c449a3dc3d8f2b9efeab277df710a0b8f8b1f839724605ef650dfb7ba50b463d69
7
+ data.tar.gz: 9e75774048aa4fbb817dd76d58f7510760df53ecf54185cc1e9be519a4a4489f1b9a0aef86bb2db9fda88f5c1d476ea82e928126245d98c7b304de42176b0354
@@ -2,11 +2,25 @@ require 'rspec/core'
2
2
 
3
3
  module Mutant
4
4
  class Integration
5
- # Shared parts of rspec2/3 integration
5
+ # Rspec integration
6
+ #
7
+ # This looks so complicated, because rspec:
8
+ #
9
+ # * Keeps its state global in RSpec.world and lots of other places
10
+ # * There is no API to "just run a subset of examples", the examples
11
+ # need to be selected in-place via mutating the `RSpec.filtered_examples`
12
+ # datastructure
13
+ # * Does not maintain a unique identification for an example,
14
+ # aside the instances of `RSpec::Core::Example` objects itself.
15
+ # For that reason identifing examples by:
16
+ # * full description
17
+ # * location
18
+ # Is NOT enough. It would not be uniqe. So we add an "example index"
19
+ # for unique reference.
6
20
  class Rspec < self
7
21
 
8
22
  ALL = Mutant::Expression.parse('*')
9
- EXPRESSION_DELIMITER = ' '.freeze
23
+ EXPRESSION_CANDIDATE = /\A([^ ]+)(?: )?/.freeze
10
24
  LOCATION_DELIMITER = ':'.freeze
11
25
  EXIT_SUCCESS = 0
12
26
  CLI_OPTIONS = IceNine.deep_freeze(%w[spec --fail-fast])
@@ -48,10 +62,10 @@ module Mutant
48
62
  # rubocop:disable MethodLength
49
63
  #
50
64
  def call(tests)
51
- examples = tests.map(&all_tests_index.method(:fetch)).to_set
65
+ examples = tests.map(&all_tests_index.method(:fetch))
52
66
  filter_examples(&examples.method(:include?))
53
67
  start = Time.now
54
- passed = @runner.run_specs(RSpec.world.ordered_example_groups).equal?(EXIT_SUCCESS)
68
+ passed = @runner.run_specs(@world.ordered_example_groups).equal?(EXIT_SUCCESS)
55
69
  @output.rewind
56
70
  Result::Test.new(
57
71
  tests: tests,
@@ -97,17 +111,33 @@ module Mutant
97
111
  # @api private
98
112
  #
99
113
  def parse_example(example, index)
100
- metadata = example.metadata
101
- location = metadata.fetch(:location)
114
+ metadata = example.metadata
115
+ location = metadata.fetch(:location)
102
116
  full_description = metadata.fetch(:full_description)
103
- expression = Expression.try_parse(full_description.split(EXPRESSION_DELIMITER, 2).first) || ALL
104
117
 
105
118
  Test.new(
106
119
  id: "rspec:#{index}:#{location}/#{full_description}",
107
- expression: expression
120
+ expression: parse_expression(metadata)
108
121
  )
109
122
  end
110
123
 
124
+ # Parse metadata into expression
125
+ #
126
+ # @param [RSpec::Core::Example::Medatada] metadata
127
+ #
128
+ # @return [Expression]
129
+ #
130
+ # @api private
131
+ #
132
+ def parse_expression(metadata)
133
+ if metadata.key?(:mutant_expression)
134
+ Expression.parse(metadata.fetch(:mutant_expression))
135
+ else
136
+ match = EXPRESSION_CANDIDATE.match(metadata.fetch(:full_description))
137
+ Expression.try_parse(match.captures.first) || ALL
138
+ end
139
+ end
140
+
111
141
  # Return all examples
112
142
  #
113
143
  # @return [Array<String, RSpec::Core::Example]
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.7.8
4
+ version: 0.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-08 00:00:00.000000000 Z
11
+ date: 2015-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mutant
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.7.8
19
+ version: 0.7.9
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.7.8
26
+ version: 0.7.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec-core
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.2.2
99
+ rubygems_version: 2.4.5
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: Rspec integration for mutant