mutant 0.3.6 → 0.5.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Changelog.md +13 -0
  4. data/Gemfile +1 -1
  5. data/Guardfile +7 -25
  6. data/LICENSE +1 -1
  7. data/README.md +16 -10
  8. data/config/flay.yml +1 -1
  9. data/config/reek.yml +11 -11
  10. data/config/rubocop.yml +1 -1
  11. data/lib/mutant.rb +3 -10
  12. data/lib/mutant/cli.rb +199 -80
  13. data/lib/mutant/config.rb +3 -3
  14. data/lib/mutant/killer.rb +20 -0
  15. data/lib/mutant/matcher/filter.rb +3 -8
  16. data/lib/mutant/matcher/method/instance.rb +1 -1
  17. data/lib/mutant/matcher/namespace.rb +31 -2
  18. data/lib/mutant/matcher/null.rb +26 -0
  19. data/lib/mutant/mutation.rb +0 -1
  20. data/lib/mutant/reporter/cli/printer.rb +29 -0
  21. data/lib/mutant/reporter/cli/printer/config.rb +16 -116
  22. data/lib/mutant/runner/config.rb +47 -1
  23. data/lib/mutant/strategy.rb +39 -1
  24. data/lib/mutant/version.rb +1 -1
  25. data/lib/mutant/walker.rb +51 -0
  26. data/mutant-rspec.gemspec +24 -0
  27. data/mutant.gemspec +7 -3
  28. data/spec/integration/mutant/rspec_spec.rb +11 -6
  29. data/spec/integration/mutant/zombie_spec.rb +2 -2
  30. data/spec/shared/method_matcher_behavior.rb +6 -6
  31. data/spec/spec_helper.rb +2 -2
  32. data/spec/unit/mutant/cli_new_spec.rb +49 -34
  33. data/spec/unit/mutant/context/scope/root_spec.rb +1 -1
  34. data/spec/unit/mutant/loader/eval_spec.rb +2 -2
  35. data/spec/unit/mutant/matcher/chain_spec.rb +1 -1
  36. data/spec/unit/mutant/matcher/methods/instance_spec.rb +1 -1
  37. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +1 -1
  38. data/spec/unit/mutant/matcher/namespace_spec.rb +1 -1
  39. data/spec/unit/mutant/mutation_spec.rb +1 -1
  40. data/spec/unit/mutant/{killer/rspec_spec.rb → rspec/killer_spec.rb} +2 -1
  41. data/spec/unit/mutant/runner/config_spec.rb +36 -21
  42. data/spec/unit/mutant_spec.rb +7 -9
  43. metadata +25 -22
  44. data/lib/mutant/cli/builder.rb +0 -167
  45. data/lib/mutant/killer/rspec.rb +0 -95
  46. data/lib/mutant/predicate.rb +0 -70
  47. data/lib/mutant/predicate/attribute.rb +0 -68
  48. data/lib/mutant/predicate/blacklist.rb +0 -27
  49. data/lib/mutant/predicate/matcher.rb +0 -38
  50. data/lib/mutant/predicate/whitelist.rb +0 -28
  51. data/lib/mutant/strategy/rspec.rb +0 -76
  52. data/spec/unit/mutant/cli/builder/rspec_spec.rb +0 -38
  53. data/spec/unit/mutant/matcher/filter_spec.rb +0 -19
  54. data/spec/unit/mutant/predicate_spec.rb +0 -135
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mutant::Matcher::Filter do
6
- let(:object) { described_class.new(matcher, predicate) }
7
- let(:matcher) { [:foo, :bar] }
8
-
9
- let(:predicate) { Mutant::Predicate::Attribute::Equality.new(:to_s, 'foo') }
10
-
11
- describe '#each' do
12
- subject { object.each { |item| yields << item } }
13
-
14
- let(:yields) { [] }
15
- its(:to_a) { should eql([:bar]) }
16
-
17
- it_should_behave_like 'an #each method'
18
- end
19
- end
@@ -1,135 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- filter_helpers = proc do
6
- let(:input_a) { double('Input A', foo: 'bar') }
7
- let(:input_b) { double('Input B', foo: 'baz') }
8
-
9
- let(:filter_a) do
10
- input_a = self.input_a
11
- Module.new do
12
- define_singleton_method(:match?) do |input|
13
- input == input_a
14
- end
15
- end
16
- end
17
-
18
- subject { object.match?(input) }
19
- end
20
-
21
- describe Mutant::Predicate::Whitelist do
22
- instance_eval(&filter_helpers)
23
-
24
- let(:object) { described_class.new(whitelist) }
25
-
26
- describe '#match?' do
27
-
28
- context 'with empty whitelist' do
29
- let(:whitelist) { [] }
30
-
31
- it 'accepts all inputs' do
32
- expect(object.match?(input_a)).to be(false)
33
- expect(object.match?(input_b)).to be(false)
34
- end
35
- end
36
-
37
- context 'with non empty whitelist' do
38
- let(:whitelist) { [filter_a] }
39
-
40
- context 'with whitelisted input' do
41
- let(:input) { input_a }
42
-
43
- it { should be(true) }
44
- end
45
-
46
- context 'with non whitelisted input' do
47
- let(:input) { input_b }
48
-
49
- it { should be(false) }
50
- end
51
- end
52
- end
53
- end
54
-
55
- describe Mutant::Predicate::Blacklist do
56
- instance_eval(&filter_helpers)
57
-
58
- let(:object) { described_class.new(whitelist) }
59
-
60
- describe '#match?' do
61
-
62
- context 'with empty whitelist' do
63
- let(:whitelist) { [] }
64
-
65
- it 'accepts all inputs' do
66
- expect(object.match?(input_a)).to be(true)
67
- expect(object.match?(input_b)).to be(true)
68
- end
69
- end
70
-
71
- context 'with non empty whitelist' do
72
- let(:whitelist) { [filter_a] }
73
-
74
- context 'with whitelisted input' do
75
- let(:input) { input_a }
76
-
77
- it { should be(false) }
78
- end
79
-
80
- context 'with non whitelisted input' do
81
- let(:input) { input_b }
82
-
83
- it { should be(true) }
84
- end
85
- end
86
- end
87
- end
88
-
89
- describe Mutant::Predicate::Attribute::Equality do
90
- instance_eval(&filter_helpers)
91
-
92
- let(:object) { described_class.new(attribute_name, expected_value) }
93
- let(:input) { double('Input', attribute_name => actual_value) }
94
-
95
- let(:attribute_name) { :foo }
96
- let(:expected_value) { 'value' }
97
-
98
- describe '#match?' do
99
-
100
- context 'not matching' do
101
- let(:actual_value) { 'other-value' }
102
- it { should be(false) }
103
- end
104
-
105
- context 'matching' do
106
- let(:actual_value) { 'value' }
107
- it { should be(true) }
108
- end
109
-
110
- end
111
- end
112
-
113
- describe Mutant::Predicate::Attribute::Regexp do
114
- instance_eval(&filter_helpers)
115
-
116
- let(:object) { described_class.new(attribute_name, expectation) }
117
- let(:input) { double('Input', attribute_name => actual_value) }
118
-
119
- let(:attribute_name) { :foo }
120
- let(:expectation) { /\Avalue\z/ }
121
-
122
- describe '#match?' do
123
-
124
- context 'not matching' do
125
- let(:actual_value) { 'other-value' }
126
- it { should be(false) }
127
- end
128
-
129
- context 'matching' do
130
- let(:actual_value) { 'value' }
131
- it { should be(true) }
132
- end
133
-
134
- end
135
- end