mutant 0.8.0 → 0.8.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.
Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +7 -0
  3. data/config/flay.yml +1 -1
  4. data/config/reek.yml +1 -0
  5. data/lib/mutant.rb +10 -3
  6. data/lib/mutant/actor.rb +2 -5
  7. data/lib/mutant/actor/env.rb +1 -3
  8. data/lib/mutant/actor/mailbox.rb +2 -4
  9. data/lib/mutant/actor/receiver.rb +0 -2
  10. data/lib/mutant/actor/sender.rb +0 -1
  11. data/lib/mutant/ast.rb +22 -28
  12. data/lib/mutant/ast/meta.rb +8 -88
  13. data/lib/mutant/ast/named_children.rb +1 -8
  14. data/lib/mutant/ast/sexp.rb +0 -2
  15. data/lib/mutant/cache.rb +1 -3
  16. data/lib/mutant/cli.rb +9 -19
  17. data/lib/mutant/color.rb +0 -3
  18. data/lib/mutant/config.rb +6 -2
  19. data/lib/mutant/context.rb +2 -4
  20. data/lib/mutant/context/scope.rb +10 -16
  21. data/lib/mutant/delegator.rb +0 -3
  22. data/lib/mutant/diff.rb +8 -17
  23. data/lib/mutant/env.rb +3 -5
  24. data/lib/mutant/env/bootstrap.rb +32 -39
  25. data/lib/mutant/expression.rb +14 -132
  26. data/lib/mutant/expression/method.rb +25 -42
  27. data/lib/mutant/expression/methods.rb +17 -29
  28. data/lib/mutant/expression/namespace.rb +33 -28
  29. data/lib/mutant/expression/parser.rb +71 -0
  30. data/lib/mutant/integration.rb +17 -16
  31. data/lib/mutant/isolation.rb +14 -14
  32. data/lib/mutant/loader.rb +2 -4
  33. data/lib/mutant/matcher.rb +1 -11
  34. data/lib/mutant/matcher/chain.rb +0 -1
  35. data/lib/mutant/matcher/compiler.rb +19 -52
  36. data/lib/mutant/matcher/config.rb +65 -5
  37. data/lib/mutant/matcher/filter.rb +11 -1
  38. data/lib/mutant/matcher/method.rb +11 -21
  39. data/lib/mutant/matcher/method/instance.rb +2 -16
  40. data/lib/mutant/matcher/method/singleton.rb +3 -20
  41. data/lib/mutant/matcher/methods.rb +11 -21
  42. data/lib/mutant/matcher/namespace.rb +0 -4
  43. data/lib/mutant/matcher/null.rb +0 -1
  44. data/lib/mutant/matcher/scope.rb +0 -12
  45. data/lib/mutant/meta.rb +0 -1
  46. data/lib/mutant/meta/example.rb +12 -26
  47. data/lib/mutant/meta/example/dsl.rb +1 -8
  48. data/lib/mutant/mutation.rb +6 -14
  49. data/lib/mutant/mutator.rb +2 -14
  50. data/lib/mutant/mutator/node.rb +6 -33
  51. data/lib/mutant/mutator/node/and_asgn.rb +0 -1
  52. data/lib/mutant/mutator/node/argument.rb +0 -5
  53. data/lib/mutant/mutator/node/arguments.rb +1 -7
  54. data/lib/mutant/mutator/node/begin.rb +0 -2
  55. data/lib/mutant/mutator/node/binary.rb +0 -3
  56. data/lib/mutant/mutator/node/block.rb +0 -2
  57. data/lib/mutant/mutator/node/break.rb +0 -1
  58. data/lib/mutant/mutator/node/case.rb +0 -3
  59. data/lib/mutant/mutator/node/conditional_loop.rb +0 -1
  60. data/lib/mutant/mutator/node/const.rb +0 -1
  61. data/lib/mutant/mutator/node/define.rb +0 -1
  62. data/lib/mutant/mutator/node/defined.rb +0 -1
  63. data/lib/mutant/mutator/node/dstr.rb +0 -1
  64. data/lib/mutant/mutator/node/dsym.rb +0 -1
  65. data/lib/mutant/mutator/node/generic.rb +0 -1
  66. data/lib/mutant/mutator/node/if.rb +0 -4
  67. data/lib/mutant/mutator/node/kwbegin.rb +0 -1
  68. data/lib/mutant/mutator/node/literal/array.rb +0 -2
  69. data/lib/mutant/mutator/node/literal/boolean.rb +0 -1
  70. data/lib/mutant/mutator/node/literal/fixnum.rb +2 -5
  71. data/lib/mutant/mutator/node/literal/float.rb +1 -4
  72. data/lib/mutant/mutator/node/literal/hash.rb +0 -3
  73. data/lib/mutant/mutator/node/literal/nil.rb +0 -1
  74. data/lib/mutant/mutator/node/literal/range.rb +1 -5
  75. data/lib/mutant/mutator/node/literal/regex.rb +1 -3
  76. data/lib/mutant/mutator/node/literal/string.rb +0 -1
  77. data/lib/mutant/mutator/node/literal/symbol.rb +0 -1
  78. data/lib/mutant/mutator/node/masgn.rb +0 -1
  79. data/lib/mutant/mutator/node/match_current_line.rb +0 -1
  80. data/lib/mutant/mutator/node/mlhs.rb +0 -1
  81. data/lib/mutant/mutator/node/named_value/access.rb +0 -1
  82. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -2
  83. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -2
  84. data/lib/mutant/mutator/node/next.rb +0 -1
  85. data/lib/mutant/mutator/node/noop.rb +0 -1
  86. data/lib/mutant/mutator/node/nthref.rb +0 -1
  87. data/lib/mutant/mutator/node/op_asgn.rb +0 -1
  88. data/lib/mutant/mutator/node/or_asgn.rb +1 -2
  89. data/lib/mutant/mutator/node/resbody.rb +0 -2
  90. data/lib/mutant/mutator/node/rescue.rb +1 -6
  91. data/lib/mutant/mutator/node/return.rb +0 -1
  92. data/lib/mutant/mutator/node/send.rb +16 -17
  93. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -3
  94. data/lib/mutant/mutator/node/send/binary.rb +0 -1
  95. data/lib/mutant/mutator/node/send/index.rb +0 -3
  96. data/lib/mutant/mutator/node/splat.rb +0 -1
  97. data/lib/mutant/mutator/node/super.rb +0 -1
  98. data/lib/mutant/mutator/node/when.rb +2 -7
  99. data/lib/mutant/mutator/node/yield.rb +0 -1
  100. data/lib/mutant/mutator/node/zsuper.rb +0 -1
  101. data/lib/mutant/mutator/registry.rb +1 -4
  102. data/lib/mutant/mutator/util.rb +0 -2
  103. data/lib/mutant/mutator/util/array.rb +0 -3
  104. data/lib/mutant/mutator/util/symbol.rb +0 -1
  105. data/lib/mutant/parallel.rb +3 -9
  106. data/lib/mutant/parallel/master.rb +7 -17
  107. data/lib/mutant/parallel/source.rb +2 -7
  108. data/lib/mutant/parallel/worker.rb +1 -5
  109. data/lib/mutant/reporter.rb +0 -4
  110. data/lib/mutant/reporter/cli.rb +1 -8
  111. data/lib/mutant/reporter/cli/format.rb +7 -18
  112. data/lib/mutant/reporter/cli/printer.rb +2 -12
  113. data/lib/mutant/reporter/cli/printer/config.rb +1 -4
  114. data/lib/mutant/reporter/cli/printer/env_progress.rb +3 -7
  115. data/lib/mutant/reporter/cli/printer/env_result.rb +0 -1
  116. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -2
  117. data/lib/mutant/reporter/cli/printer/mutation_result.rb +3 -11
  118. data/lib/mutant/reporter/cli/printer/status.rb +1 -4
  119. data/lib/mutant/reporter/cli/printer/status_progressive.rb +1 -3
  120. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -5
  121. data/lib/mutant/reporter/cli/printer/subject_result.rb +0 -1
  122. data/lib/mutant/reporter/cli/printer/test_result.rb +0 -1
  123. data/lib/mutant/reporter/cli/tput.rb +4 -1
  124. data/lib/mutant/reporter/trace.rb +2 -4
  125. data/lib/mutant/repository.rb +88 -0
  126. data/lib/mutant/require_highjack.rb +0 -1
  127. data/lib/mutant/result.rb +25 -48
  128. data/lib/mutant/runner.rb +7 -16
  129. data/lib/mutant/runner/sink.rb +3 -11
  130. data/lib/mutant/selector.rb +1 -2
  131. data/lib/mutant/selector/expression.rb +1 -2
  132. data/lib/mutant/subject.rb +10 -21
  133. data/lib/mutant/subject/method.rb +11 -12
  134. data/lib/mutant/subject/method/instance.rb +1 -5
  135. data/lib/mutant/subject/method/singleton.rb +1 -3
  136. data/lib/mutant/test.rb +1 -2
  137. data/lib/mutant/version.rb +2 -2
  138. data/lib/mutant/warning_filter.rb +2 -7
  139. data/lib/mutant/zombifier.rb +6 -10
  140. data/meta/send.rb +8 -0
  141. data/spec/spec_helper.rb +5 -1
  142. data/spec/support/corpus.rb +5 -9
  143. data/spec/support/rb_bug.rb +0 -1
  144. data/spec/support/rspec.rb +0 -1
  145. data/spec/support/ruby_vm.rb +0 -2
  146. data/spec/unit/mutant/ast/meta/send_spec.rb +42 -0
  147. data/spec/unit/mutant/ast/named_children_spec.rb +51 -0
  148. data/spec/unit/mutant/ast/sexp_spec.rb +36 -0
  149. data/spec/unit/mutant/ast_spec.rb +8 -0
  150. data/spec/unit/mutant/cli_spec.rb +34 -19
  151. data/spec/unit/mutant/context/scope_spec.rb +11 -0
  152. data/spec/unit/mutant/env/boostrap_spec.rb +5 -2
  153. data/spec/unit/mutant/env_spec.rb +14 -15
  154. data/spec/unit/mutant/expression/method_spec.rb +10 -14
  155. data/spec/unit/mutant/expression/methods_spec.rb +24 -11
  156. data/spec/unit/mutant/expression/namespace/flat_spec.rb +5 -6
  157. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +16 -10
  158. data/spec/unit/mutant/expression/parser_spec.rb +67 -0
  159. data/spec/unit/mutant/expression_spec.rb +24 -57
  160. data/spec/unit/mutant/integration/rspec_spec.rb +7 -7
  161. data/spec/unit/mutant/integration_spec.rb +2 -2
  162. data/spec/unit/mutant/isolation_spec.rb +31 -29
  163. data/spec/unit/mutant/matcher/compiler/subject_prefix_spec.rb +2 -2
  164. data/spec/unit/mutant/matcher/compiler_spec.rb +27 -58
  165. data/spec/unit/mutant/matcher/config_spec.rb +45 -0
  166. data/spec/unit/mutant/matcher/filter_spec.rb +12 -5
  167. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -1
  168. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -1
  169. data/spec/unit/mutant/matcher/namespace_spec.rb +4 -4
  170. data/spec/unit/mutant/parallel/worker_spec.rb +1 -1
  171. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +4 -4
  172. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +7 -7
  173. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +2 -2
  174. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +2 -2
  175. data/spec/unit/mutant/reporter/cli/printer/status_spec.rb +12 -12
  176. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +1 -1
  177. data/spec/unit/mutant/reporter/cli_spec.rb +9 -10
  178. data/spec/unit/mutant/repository/diff_spec.rb +80 -0
  179. data/spec/unit/mutant/repository/subject_filter_spec.rb +28 -0
  180. data/spec/unit/mutant/result/env_spec.rb +1 -1
  181. data/spec/unit/mutant/runner_spec.rb +0 -1
  182. data/spec/unit/mutant/selector/expression_spec.rb +14 -14
  183. data/spec/unit/mutant/subject/method/instance_spec.rb +2 -2
  184. data/spec/unit/mutant/subject/method/singleton_spec.rb +2 -2
  185. data/spec/unit/mutant/subject_spec.rb +5 -2
  186. metadata +20 -3
  187. data/spec/support/mutation_verifier.rb +0 -96
@@ -8,14 +8,14 @@ RSpec.describe Mutant::Reporter::CLI::Printer::StatusProgressive do
8
8
  update(:env_result) { { subject_results: [] } }
9
9
 
10
10
  it_reports <<-REPORT
11
- (00/02) 0% - killtime: 0.00s runtime: 4.00s overhead: 4.00s
11
+ (00/02) 100% - killtime: 0.00s runtime: 4.00s overhead: 4.00s
12
12
  REPORT
13
13
 
14
14
  context 'on non default coverage expectation' do
15
15
  update(:config) { { expected_coverage: 0.1r } }
16
16
 
17
17
  it_reports <<-REPORT
18
- (00/02) 0% - killtime: 0.00s runtime: 4.00s overhead: 4.00s
18
+ (00/02) 100% - killtime: 0.00s runtime: 4.00s overhead: 4.00s
19
19
  REPORT
20
20
  end
21
21
  end
@@ -9,8 +9,8 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
9
9
 
10
10
  it_reports <<-REPORT
11
11
  Mutant configuration:
12
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
13
- Integration: null
12
+ Matcher: #<Mutant::Matcher::Config empty>
13
+ Integration: Mutant::Integration::Null
14
14
  Expect Coverage: 100.00%
15
15
  Jobs: 1
16
16
  Includes: []
@@ -22,7 +22,7 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
22
22
  Runtime: 4.00s
23
23
  Killtime: 0.00s
24
24
  Overhead: Inf%
25
- Coverage: 0.00%
25
+ Coverage: 100.00%
26
26
  Expected: 100.00%
27
27
  Active subjects: 0
28
28
  REPORT
@@ -32,8 +32,8 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
32
32
 
33
33
  it_reports <<-REPORT
34
34
  Mutant configuration:
35
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
36
- Integration: null
35
+ Matcher: #<Mutant::Matcher::Config empty>
36
+ Integration: Mutant::Integration::Null
37
37
  Expect Coverage: 10.00%
38
38
  Jobs: 1
39
39
  Includes: []
@@ -45,7 +45,7 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
45
45
  Runtime: 4.00s
46
46
  Killtime: 0.00s
47
47
  Overhead: Inf%
48
- Coverage: 0.00%
48
+ Coverage: 100.00%
49
49
  Expected: 10.00%
50
50
  Active subjects: 0
51
51
  REPORT
@@ -58,8 +58,8 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
58
58
 
59
59
  it_reports(<<-REPORT)
60
60
  Mutant configuration:
61
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
62
- Integration: null
61
+ Matcher: #<Mutant::Matcher::Config empty>
62
+ Integration: Mutant::Integration::Null
63
63
  Expect Coverage: 100.00%
64
64
  Jobs: 1
65
65
  Includes: []
@@ -85,8 +85,8 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
85
85
 
86
86
  it_reports(<<-REPORT)
87
87
  Mutant configuration:
88
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
89
- Integration: null
88
+ Matcher: #<Mutant::Matcher::Config empty>
89
+ Integration: Mutant::Integration::Null
90
90
  Expect Coverage: 100.00%
91
91
  Jobs: 1
92
92
  Includes: []
@@ -114,8 +114,8 @@ RSpec.describe Mutant::Reporter::CLI::Printer::Status do
114
114
  context 'on success' do
115
115
  it_reports(<<-REPORT)
116
116
  Mutant configuration:
117
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
118
- Integration: null
117
+ Matcher: #<Mutant::Matcher::Config empty>
118
+ Integration: Mutant::Integration::Null
119
119
  Expect Coverage: 100.00%
120
120
  Jobs: 1
121
121
  Includes: []
@@ -29,7 +29,7 @@ RSpec.describe Mutant::Reporter::CLI::Printer::SubjectProgress do
29
29
 
30
30
  it_reports <<-'STR'
31
31
  subject-a mutations: 2
32
- (00/02) 0% - killtime: 0.00s runtime: 0.00s overhead: 0.00s
32
+ (00/02) 100% - killtime: 0.00s runtime: 0.00s overhead: 0.00s
33
33
  - test-a
34
34
  STR
35
35
  end
@@ -121,8 +121,8 @@ RSpec.describe Mutant::Reporter::CLI do
121
121
 
122
122
  it_reports(<<-REPORT)
123
123
  Mutant configuration:
124
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
125
- Integration: null
124
+ Matcher: #<Mutant::Matcher::Config empty>
125
+ Integration: Mutant::Integration::Null
126
126
  Expect Coverage: 100.00%
127
127
  Jobs: 1
128
128
  Includes: []
@@ -136,8 +136,8 @@ RSpec.describe Mutant::Reporter::CLI do
136
136
 
137
137
  it_reports(<<-REPORT)
138
138
  Mutant configuration:
139
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
140
- Integration: null
139
+ Matcher: #<Mutant::Matcher::Config empty>
140
+ Integration: Mutant::Integration::Null
141
141
  Expect Coverage: 10.00%
142
142
  Jobs: 1
143
143
  Includes: []
@@ -155,8 +155,8 @@ RSpec.describe Mutant::Reporter::CLI do
155
155
 
156
156
  it_reports(<<-REPORT)
157
157
  Mutant configuration:
158
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
159
- Integration: null
158
+ Matcher: #<Mutant::Matcher::Config empty>
159
+ Integration: Mutant::Integration::Null
160
160
  Expect Coverage: 100.00%
161
161
  Jobs: 1
162
162
  Includes: []
@@ -181,8 +181,8 @@ RSpec.describe Mutant::Reporter::CLI do
181
181
 
182
182
  it_reports(<<-REPORT)
183
183
  [tput-restore]Mutant configuration:
184
- Matcher: #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
185
- Integration: null
184
+ Matcher: #<Mutant::Matcher::Config empty>
185
+ Integration: Mutant::Integration::Null
186
186
  Expect Coverage: 100.00%
187
187
  Jobs: 1
188
188
  Includes: []
@@ -208,7 +208,7 @@ RSpec.describe Mutant::Reporter::CLI do
208
208
 
209
209
  let(:tty?) { true }
210
210
 
211
- it_reports Mutant::Color::RED.format('(00/02) 0% - killtime: 0.00s runtime: 4.00s overhead: 4.00s') << "\n"
211
+ it_reports Mutant::Color::GREEN.format('(00/02) 100% - killtime: 0.00s runtime: 4.00s overhead: 4.00s') << "\n"
212
212
  end
213
213
 
214
214
  context 'with last mutation present' do
@@ -224,6 +224,5 @@ RSpec.describe Mutant::Reporter::CLI do
224
224
  end
225
225
  end
226
226
  end
227
-
228
227
  end
229
228
  end
@@ -0,0 +1,80 @@
1
+ describe Mutant::Repository::Diff do
2
+ describe '.from_head' do
3
+ subject { described_class.from_head(to_revision) }
4
+
5
+ let(:to_revision) { double('to revision') }
6
+
7
+ it { should eql(described_class.new('HEAD', to_revision)) }
8
+ end
9
+
10
+ describe '#touches?' do
11
+ let(:object) { described_class.new('from_rev', 'to_rev') }
12
+ let(:path) { Pathname.new('foo.rb') }
13
+ let(:line_range) { 1..2 }
14
+
15
+ subject { object.touches?(path, line_range) }
16
+
17
+ before do
18
+ expect(Kernel).to receive(:system)
19
+ .ordered
20
+ .with(
21
+ *%w[git ls-files --error-unmatch -- foo.rb],
22
+ out: File::NULL,
23
+ err: File::NULL
24
+ ).and_return(git_ls_success?)
25
+ end
26
+
27
+ context 'when file is NOT tracked in repository' do
28
+ let(:git_ls_success?) { false }
29
+
30
+ it { should be(false) }
31
+ end
32
+
33
+ context 'when file is tracked in repository' do
34
+ let(:git_ls_success?) { true }
35
+ let(:status) { double('Status', success?: success?) }
36
+ let(:stdout) { double('Stdout', empty?: stdout_empty?) }
37
+ let(:stdout_empty?) { false }
38
+
39
+ before do
40
+ expect(Open3).to receive(:capture2)
41
+ .ordered
42
+ .with(*expected_git_log_command, binmode: true)
43
+ .and_return([stdout, status])
44
+ end
45
+
46
+ let(:expected_git_log_command) do
47
+ %w[
48
+ git log from_rev...to_rev -L 1,2:foo.rb
49
+ ]
50
+ end
51
+
52
+ context 'on failure of git log command' do
53
+ let(:success?) { false }
54
+
55
+ it 'raises error' do
56
+ expect { subject }.to raise_error(
57
+ Mutant::Repository::RepositoryError,
58
+ "Command #{expected_git_log_command} failed!"
59
+ )
60
+ end
61
+ end
62
+
63
+ context 'on suuccess of git command' do
64
+ let(:success?) { true }
65
+
66
+ context 'on empty stdout' do
67
+ let(:stdout_empty?) { true }
68
+
69
+ it { should be(false) }
70
+ end
71
+
72
+ context 'on non empty stdout' do
73
+ let(:stdout_empty?) { false }
74
+
75
+ it { should be(true) }
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,28 @@
1
+ RSpec.describe Mutant::Repository::SubjectFilter do
2
+ context '#call' do
3
+ subject { object.call(mutant_subject) }
4
+
5
+ let(:object) { described_class.new(diff) }
6
+ let(:diff) { double('Diff') }
7
+ let(:return_value) { double('Return Value') }
8
+
9
+ let(:mutant_subject) do
10
+ double(
11
+ 'Subject',
12
+ source_path: double('source path'),
13
+ source_lines: double('source lines')
14
+ )
15
+ end
16
+
17
+ before do
18
+ expect(diff).to receive(:touches?).with(
19
+ mutant_subject.source_path,
20
+ mutant_subject.source_lines
21
+ ).and_return(return_value)
22
+ end
23
+
24
+ it 'connects return value to repository diff API' do
25
+ expect(subject).to be(return_value)
26
+ end
27
+ end
28
+ end
@@ -61,7 +61,7 @@ RSpec.describe Mutant::Result::Env do
61
61
  context 'when there are no results' do
62
62
  let(:results) { 0 }
63
63
 
64
- it { should eql(Rational(0)) }
64
+ it { should eql(Rational(1)) }
65
65
  end
66
66
 
67
67
  context 'when there are no kills' do
@@ -45,7 +45,6 @@ RSpec.describe Mutant::Runner do
45
45
 
46
46
  before do
47
47
  expect(reporter).to receive(:start).with(env).ordered
48
- expect(integration).to receive(:setup).ordered
49
48
  expect(Mutant::Parallel).to receive(:async).with(parallel_config).and_return(driver).ordered
50
49
  end
51
50
 
@@ -3,27 +3,27 @@ RSpec.describe Mutant::Selector::Expression do
3
3
  let(:object) { described_class.new(integration) }
4
4
 
5
5
  let(:subject_class) do
6
+ parse = method(:parse_expression)
7
+
6
8
  Class.new(Mutant::Subject) do
7
- def expression
8
- Mutant::Expression.parse('SubjectA')
9
+ define_method(:expression) do
10
+ parse.('SubjectA')
9
11
  end
10
12
 
11
- def match_expressions
12
- [expression] << Mutant::Expression.parse('SubjectB')
13
+ define_method(:match_expressions) do
14
+ [expression] << parse.('SubjectB')
13
15
  end
14
16
  end
15
17
  end
16
18
 
17
- let(:mutation_subject) { subject_class.new(context, node) }
18
- let(:context) { double('Context') }
19
- let(:node) { double('Node') }
20
-
21
- let(:config) { Mutant::Config::DEFAULT.update(integration: integration) }
22
- let(:integration) { double('Integration', all_tests: all_tests) }
23
-
24
- let(:test_a) { double('test a', expression: Mutant::Expression.parse('SubjectA')) }
25
- let(:test_b) { double('test b', expression: Mutant::Expression.parse('SubjectB')) }
26
- let(:test_c) { double('test c', expression: Mutant::Expression.parse('SubjectC')) }
19
+ let(:mutation_subject) { subject_class.new(context, node) }
20
+ let(:context) { double('Context') }
21
+ let(:node) { double('Node') }
22
+ let(:config) { Mutant::Config::DEFAULT.update(integration: integration) }
23
+ let(:integration) { double('Integration', all_tests: all_tests) }
24
+ let(:test_a) { double('test a', expression: parse_expression('SubjectA')) }
25
+ let(:test_b) { double('test b', expression: parse_expression('SubjectB')) }
26
+ let(:test_c) { double('test c', expression: parse_expression('SubjectC')) }
27
27
 
28
28
  subject { object.call(mutation_subject) }
29
29
 
@@ -26,7 +26,7 @@ RSpec.describe Mutant::Subject::Method::Instance do
26
26
  describe '#expression' do
27
27
  subject { object.expression }
28
28
 
29
- it { should eql(Mutant::Expression.parse('Test#foo')) }
29
+ it { should eql(parse_expression('Test#foo')) }
30
30
 
31
31
  it_should_behave_like 'an idempotent method'
32
32
  end
@@ -34,7 +34,7 @@ RSpec.describe Mutant::Subject::Method::Instance do
34
34
  describe '#match_expression' do
35
35
  subject { object.match_expressions }
36
36
 
37
- it { should eql(%w[Test#foo Test*].map(&Mutant::Expression.method(:parse))) }
37
+ it { should eql(%w[Test#foo Test*].map(&method(:parse_expression))) }
38
38
 
39
39
  it_should_behave_like 'an idempotent method'
40
40
  end
@@ -21,7 +21,7 @@ RSpec.describe Mutant::Subject::Method::Singleton do
21
21
  describe '#expression' do
22
22
  subject { object.expression }
23
23
 
24
- it { should eql(Mutant::Expression.parse('Test.foo')) }
24
+ it { should eql(parse_expression('Test.foo')) }
25
25
 
26
26
  it_should_behave_like 'an idempotent method'
27
27
  end
@@ -29,7 +29,7 @@ RSpec.describe Mutant::Subject::Method::Singleton do
29
29
  describe '#match_expression' do
30
30
  subject { object.match_expressions }
31
31
 
32
- it { should eql(%w[Test.foo Test*].map(&Mutant::Expression.method(:parse))) }
32
+ it { should eql(%w[Test.foo Test*].map(&method(:parse_expression))) }
33
33
 
34
34
  it_should_behave_like 'an idempotent method'
35
35
  end
@@ -2,11 +2,14 @@ RSpec.describe Mutant::Subject do
2
2
  let(:class_under_test) do
3
3
  Class.new(described_class) do
4
4
  def expression
5
- Mutant::Expression.parse('SubjectA')
5
+ Mutant::Expression::Namespace::Exact.new(scope_name: 'SubjectA')
6
6
  end
7
7
 
8
8
  def match_expressions
9
- [expression] << Mutant::Expression.parse('SubjectB')
9
+ [
10
+ expression,
11
+ Mutant::Expression::Namespace::Exact.new(scope_name: 'SubjectB')
12
+ ]
10
13
  end
11
14
  end
12
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.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: 2015-06-14 00:00:00.000000000 Z
11
+ date: 2015-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -298,6 +298,7 @@ files:
298
298
  - lib/mutant/expression/method.rb
299
299
  - lib/mutant/expression/methods.rb
300
300
  - lib/mutant/expression/namespace.rb
301
+ - lib/mutant/expression/parser.rb
301
302
  - lib/mutant/integration.rb
302
303
  - lib/mutant/isolation.rb
303
304
  - lib/mutant/loader.rb
@@ -397,6 +398,7 @@ files:
397
398
  - lib/mutant/reporter/cli/tput.rb
398
399
  - lib/mutant/reporter/null.rb
399
400
  - lib/mutant/reporter/trace.rb
401
+ - lib/mutant/repository.rb
400
402
  - lib/mutant/require_highjack.rb
401
403
  - lib/mutant/result.rb
402
404
  - lib/mutant/runner.rb
@@ -481,7 +483,6 @@ files:
481
483
  - spec/support/fake_actor.rb
482
484
  - spec/support/file_system.rb
483
485
  - spec/support/ice_nine_config.rb
484
- - spec/support/mutation_verifier.rb
485
486
  - spec/support/rb_bug.rb
486
487
  - spec/support/rspec.rb
487
488
  - spec/support/ruby_vm.rb
@@ -493,12 +494,16 @@ files:
493
494
  - spec/unit/mutant/actor/message_spec.rb
494
495
  - spec/unit/mutant/actor/receiver_spec.rb
495
496
  - spec/unit/mutant/actor/sender_spec.rb
497
+ - spec/unit/mutant/ast/meta/send_spec.rb
498
+ - spec/unit/mutant/ast/named_children_spec.rb
499
+ - spec/unit/mutant/ast/sexp_spec.rb
496
500
  - spec/unit/mutant/ast_spec.rb
497
501
  - spec/unit/mutant/cache_spec.rb
498
502
  - spec/unit/mutant/cli_spec.rb
499
503
  - spec/unit/mutant/context/root_spec.rb
500
504
  - spec/unit/mutant/context/scope/root_spec.rb
501
505
  - spec/unit/mutant/context/scope/unqualified_name_spec.rb
506
+ - spec/unit/mutant/context/scope_spec.rb
502
507
  - spec/unit/mutant/context_spec.rb
503
508
  - spec/unit/mutant/diff_spec.rb
504
509
  - spec/unit/mutant/env/boostrap_spec.rb
@@ -507,6 +512,7 @@ files:
507
512
  - spec/unit/mutant/expression/methods_spec.rb
508
513
  - spec/unit/mutant/expression/namespace/flat_spec.rb
509
514
  - spec/unit/mutant/expression/namespace/recursive_spec.rb
515
+ - spec/unit/mutant/expression/parser_spec.rb
510
516
  - spec/unit/mutant/expression_spec.rb
511
517
  - spec/unit/mutant/integration/rspec_spec.rb
512
518
  - spec/unit/mutant/integration_spec.rb
@@ -515,6 +521,7 @@ files:
515
521
  - spec/unit/mutant/matcher/chain_spec.rb
516
522
  - spec/unit/mutant/matcher/compiler/subject_prefix_spec.rb
517
523
  - spec/unit/mutant/matcher/compiler_spec.rb
524
+ - spec/unit/mutant/matcher/config_spec.rb
518
525
  - spec/unit/mutant/matcher/filter_spec.rb
519
526
  - spec/unit/mutant/matcher/method/instance_spec.rb
520
527
  - spec/unit/mutant/matcher/method/singleton_spec.rb
@@ -544,6 +551,8 @@ files:
544
551
  - spec/unit/mutant/reporter/cli_spec.rb
545
552
  - spec/unit/mutant/reporter/null_spec.rb
546
553
  - spec/unit/mutant/reporter/trace_spec.rb
554
+ - spec/unit/mutant/repository/diff_spec.rb
555
+ - spec/unit/mutant/repository/subject_filter_spec.rb
547
556
  - spec/unit/mutant/require_highjack_spec.rb
548
557
  - spec/unit/mutant/result/env_spec.rb
549
558
  - spec/unit/mutant/result/subject_spec.rb
@@ -601,12 +610,16 @@ test_files:
601
610
  - spec/unit/mutant/actor/message_spec.rb
602
611
  - spec/unit/mutant/actor/receiver_spec.rb
603
612
  - spec/unit/mutant/actor/sender_spec.rb
613
+ - spec/unit/mutant/ast/meta/send_spec.rb
614
+ - spec/unit/mutant/ast/named_children_spec.rb
615
+ - spec/unit/mutant/ast/sexp_spec.rb
604
616
  - spec/unit/mutant/ast_spec.rb
605
617
  - spec/unit/mutant/cache_spec.rb
606
618
  - spec/unit/mutant/cli_spec.rb
607
619
  - spec/unit/mutant/context/root_spec.rb
608
620
  - spec/unit/mutant/context/scope/root_spec.rb
609
621
  - spec/unit/mutant/context/scope/unqualified_name_spec.rb
622
+ - spec/unit/mutant/context/scope_spec.rb
610
623
  - spec/unit/mutant/context_spec.rb
611
624
  - spec/unit/mutant/diff_spec.rb
612
625
  - spec/unit/mutant/env/boostrap_spec.rb
@@ -615,6 +628,7 @@ test_files:
615
628
  - spec/unit/mutant/expression/methods_spec.rb
616
629
  - spec/unit/mutant/expression/namespace/flat_spec.rb
617
630
  - spec/unit/mutant/expression/namespace/recursive_spec.rb
631
+ - spec/unit/mutant/expression/parser_spec.rb
618
632
  - spec/unit/mutant/expression_spec.rb
619
633
  - spec/unit/mutant/integration/rspec_spec.rb
620
634
  - spec/unit/mutant/integration_spec.rb
@@ -623,6 +637,7 @@ test_files:
623
637
  - spec/unit/mutant/matcher/chain_spec.rb
624
638
  - spec/unit/mutant/matcher/compiler/subject_prefix_spec.rb
625
639
  - spec/unit/mutant/matcher/compiler_spec.rb
640
+ - spec/unit/mutant/matcher/config_spec.rb
626
641
  - spec/unit/mutant/matcher/filter_spec.rb
627
642
  - spec/unit/mutant/matcher/method/instance_spec.rb
628
643
  - spec/unit/mutant/matcher/method/singleton_spec.rb
@@ -652,6 +667,8 @@ test_files:
652
667
  - spec/unit/mutant/reporter/cli_spec.rb
653
668
  - spec/unit/mutant/reporter/null_spec.rb
654
669
  - spec/unit/mutant/reporter/trace_spec.rb
670
+ - spec/unit/mutant/repository/diff_spec.rb
671
+ - spec/unit/mutant/repository/subject_filter_spec.rb
655
672
  - spec/unit/mutant/require_highjack_spec.rb
656
673
  - spec/unit/mutant/result/env_spec.rb
657
674
  - spec/unit/mutant/result/subject_spec.rb