mutant 0.3.0.rc3 → 0.3.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -3
- data/{Gemfile.devtools → Gemfile.triage} +2 -2
- data/README.md +14 -9
- data/Rakefile +2 -2
- data/TODO +0 -3
- data/config/flay.yml +1 -1
- data/config/rubocop.yml +22 -1
- data/config/{devtools.yml → triage.yml} +0 -0
- data/lib/mutant.rb +4 -0
- data/lib/mutant/cli/classifier.rb +2 -4
- data/lib/mutant/differ.rb +2 -6
- data/lib/mutant/mutator.rb +0 -1
- data/lib/mutant/mutator/node/argument.rb +1 -1
- data/lib/mutant/mutator/node/generic.rb +4 -4
- data/lib/mutant/mutator/node/kwbegin.rb +28 -0
- data/lib/mutant/mutator/node/literal/float.rb +5 -1
- data/lib/mutant/mutator/node/literal/range.rb +0 -1
- data/lib/mutant/mutator/node/loop_control.rb +35 -0
- data/lib/mutant/mutator/node/resbody.rb +45 -0
- data/lib/mutant/mutator/node/yield.rb +29 -0
- data/lib/mutant/reporter/cli/printer/config.rb +1 -0
- data/lib/mutant/subject/method/instance.rb +11 -0
- data/lib/mutant/version.rb +1 -1
- data/mutant.gemspec +3 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/mutant/cli/classifier/method_spec.rb +1 -1
- data/spec/unit/mutant/cli/classifier/namespace/flat_spec.rb +3 -3
- data/spec/unit/mutant/cli/classifier/namespace/recursive_spec.rb +3 -3
- data/spec/unit/mutant/mutator/node/define/mutation_spec.rb +15 -0
- data/spec/unit/mutant/mutator/node/ensure/mutation_spec.rb +2 -1
- data/spec/unit/mutant/mutator/node/kwbegin/mutation_spec.rb +16 -0
- data/spec/unit/mutant/mutator/node/literal/float_spec.rb +50 -15
- data/spec/unit/mutant/mutator/node/loop_ctrl_spec.rb +37 -0
- data/spec/unit/mutant/mutator/node/rescue/mutation_spec.rb +60 -11
- data/spec/unit/mutant/mutator/node/yield/mutation_spec.rb +4 -2
- data/spec/unit/mutant/runner/config/subjects_spec.rb +2 -2
- data/spec/unit/mutant/strategy_spec.rb +0 -1
- data/spec/unit/mutant/subject/method/instance_spec.rb +35 -0
- metadata +33 -13
- data/spec/unit/mutant/mutator/node/break/mutation_spec.rb +0 -15
- data/spec/unit/mutant/mutator/node/next/mutation_spec.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87d33982459e4caf9811b385e18475535904176c
|
4
|
+
data.tar.gz: 3c92be157bed88329abe5dcd26969aa6f8d0b112
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eefc160831c193a9c6cc08b76b1272421dde563bd4a0d6702c5030c0939a007b8b3661a390bad70183ec950bfb97d0b0605b01ee6669cabbdccbb4c993c120af
|
7
|
+
data.tar.gz: 65fb0f377537f48b934cd5be1838f9ef657cba877f34180ba28033d7f2a702ffaf27caf53cb1238ba704193268c722e363b21353613d592cf61620b8451f443f
|
data/Gemfile
CHANGED
@@ -7,7 +7,6 @@ gemspec
|
|
7
7
|
gem 'mutant', path: '.'
|
8
8
|
|
9
9
|
group :development, :test do
|
10
|
-
gem '
|
10
|
+
gem 'triage', git: 'https://github.com/rom-rb/devtools.git', branch: 'triage-rename'
|
11
|
+
gem 'triage-deps', git: 'https://github.com/rom-rb/devtools.git', branch: 'triage-rename'
|
11
12
|
end
|
12
|
-
|
13
|
-
eval_gemfile File.join(File.dirname(__FILE__), 'Gemfile.devtools')
|
@@ -30,11 +30,11 @@ group :guard do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
group :metrics do
|
33
|
-
gem 'coveralls', '~> 0.
|
33
|
+
gem 'coveralls', '~> 0.7.0'
|
34
34
|
gem 'flay', '~> 2.4.0'
|
35
35
|
gem 'flog', '~> 4.1.1'
|
36
36
|
gem 'reek', '~> 1.3.2'
|
37
|
-
gem 'rubocop', '~> 0.
|
37
|
+
gem 'rubocop', '~> 0.14.1'
|
38
38
|
gem 'simplecov', '~> 0.7.1'
|
39
39
|
gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
|
40
40
|
|
data/README.md
CHANGED
@@ -33,6 +33,8 @@ The following projects adopted mutant, and aim 100% mutation coverage:
|
|
33
33
|
* [quacky](https://github.com/benmoss/quacky)
|
34
34
|
* [substation](https://github.com/snusnu/substation)
|
35
35
|
* [large_binomials](https://github.com/filipvanlaenen/large_binomials)
|
36
|
+
* [promise.rb](https://github.com/lgierth/promise.rb)
|
37
|
+
* [full_name](https://github.com/AGILiDEE/full_name)
|
36
38
|
* various small/minor stuff under https://github.com/mbj
|
37
39
|
|
38
40
|
Feel free to ping me to add your project to the list!
|
@@ -84,15 +86,23 @@ Examples
|
|
84
86
|
```
|
85
87
|
cd virtus
|
86
88
|
# Run mutant on virtus namespace
|
87
|
-
mutant --rspec
|
89
|
+
mutant --include lib --require virtus --rspec ::Virtus*
|
88
90
|
# Run mutant on specific virtus class
|
89
|
-
mutant --rspec ::Virtus::Attribute
|
91
|
+
mutant --include lib --require virtus --rspec ::Virtus::Attribute
|
90
92
|
# Run mutant on specific virtus class method
|
91
|
-
mutant --rspec ::Virtus::Attribute.build
|
93
|
+
mutant --include lib --require virtus --rspec ::Virtus::Attribute.build
|
92
94
|
# Run mutant on specific virtus instance method
|
93
|
-
mutant --rspec ::Virtus::Attribute#
|
95
|
+
mutant --include lib --require virtus --rspec ::Virtus::Attribute#type
|
94
96
|
```
|
95
97
|
|
98
|
+
Presentations:
|
99
|
+
--------------
|
100
|
+
|
101
|
+
There are some presentations about mutant in the wild:
|
102
|
+
|
103
|
+
* [Eurocamp-2013](http://2013.eurucamp.org/) / FrOSCon-2013 http://slid.es/markusschirp/mutation-testing
|
104
|
+
* [Cologne.rb](http://www.colognerb.de/topics/mutation-testing-mit-mutant) https://github.com/DonSchado/colognerb-on-mutant/blob/master/mutation_testing_slides.pdf
|
105
|
+
|
96
106
|
Subjects:
|
97
107
|
---------
|
98
108
|
|
@@ -114,11 +124,6 @@ current prefix level, these example groups *must* kill the mutation.
|
|
114
124
|
This test selection strategy is compatible with the old `--rspec-dm2` and `--rspec-unit` strategy.
|
115
125
|
The old flags where removed. It allows to define very fine grained specs, or coarse grained - as you like.
|
116
126
|
|
117
|
-
Alternatives
|
118
|
-
------------
|
119
|
-
|
120
|
-
* [heckle](https://github.com/seattlerb/heckle)
|
121
|
-
|
122
127
|
Support
|
123
128
|
-------
|
124
129
|
|
data/Rakefile
CHANGED
data/TODO
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
Code:
|
2
2
|
* Test mutant with dynamically created zombie.
|
3
|
-
* Break up lib/mutant/mutator/node/send.rb in class specific files
|
4
3
|
* Log all warnings through reporter, so remove random $stderr.puts calls
|
5
4
|
|
6
5
|
Mutations:
|
@@ -12,9 +11,7 @@ Mutations:
|
|
12
11
|
* Mutate options on Regexp literals
|
13
12
|
* Add mutations for dynamic regexp symbol and string literals
|
14
13
|
* Mutate "def foo; bar; end" to "def foo; self; end"?
|
15
|
-
* Emit negative and positive mutations
|
16
14
|
* Mutate Block catch "def foo(&block)" and block pass "foo(&block)"
|
17
|
-
* Mutate super arguments just like send arguments
|
18
15
|
* Binary operator mutations
|
19
16
|
* Add timeout to terminate infinite loops
|
20
17
|
|
data/config/flay.yml
CHANGED
data/config/rubocop.yml
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
# General note about rubocop.
|
2
|
+
# It does NOT allow to silence a specific rule violation.
|
3
|
+
# For that reason I sometimes have to disable a whole cop where
|
4
|
+
# I just tried to whitelist a specific occurence.
|
5
|
+
|
6
|
+
|
1
7
|
AllCops:
|
2
8
|
Includes:
|
3
9
|
- '../**/*.rake'
|
4
10
|
- 'Gemfile'
|
5
|
-
- 'Gemfile.
|
11
|
+
- 'Gemfile.triage'
|
6
12
|
- 'mutant.gemspec'
|
7
13
|
Excludes:
|
8
14
|
- '**/vendor/**'
|
@@ -83,3 +89,18 @@ TrivialAccessors:
|
|
83
89
|
# And also have a differend opinion here
|
84
90
|
AndOr:
|
85
91
|
Enabled: false
|
92
|
+
|
93
|
+
# I like my raise
|
94
|
+
SignalException:
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
# I need to chain optparse builder, else it is more ugly
|
98
|
+
MultilineBlockChain:
|
99
|
+
Enabled: false
|
100
|
+
|
101
|
+
ClassLength:
|
102
|
+
Max: 105
|
103
|
+
|
104
|
+
# I align private keywords with class body
|
105
|
+
IndentationWidth:
|
106
|
+
Enabled: false
|
File without changes
|
data/lib/mutant.rb
CHANGED
@@ -68,12 +68,15 @@ require 'mutant/mutator/node/connective/binary'
|
|
68
68
|
require 'mutant/mutator/node/const'
|
69
69
|
require 'mutant/mutator/node/dstr'
|
70
70
|
require 'mutant/mutator/node/dsym'
|
71
|
+
require 'mutant/mutator/node/kwbegin'
|
71
72
|
require 'mutant/mutator/node/named_value/access'
|
72
73
|
require 'mutant/mutator/node/named_value/constant_assignment'
|
73
74
|
require 'mutant/mutator/node/named_value/variable_assignment'
|
75
|
+
require 'mutant/mutator/node/loop_control'
|
74
76
|
require 'mutant/mutator/node/noop'
|
75
77
|
require 'mutant/mutator/node/op_asgn'
|
76
78
|
require 'mutant/mutator/node/while'
|
79
|
+
require 'mutant/mutator/node/yield'
|
77
80
|
require 'mutant/mutator/node/super'
|
78
81
|
require 'mutant/mutator/node/zsuper'
|
79
82
|
require 'mutant/mutator/node/restarg'
|
@@ -89,6 +92,7 @@ require 'mutant/mutator/node/block'
|
|
89
92
|
require 'mutant/mutator/node/if'
|
90
93
|
require 'mutant/mutator/node/case'
|
91
94
|
require 'mutant/mutator/node/splat'
|
95
|
+
require 'mutant/mutator/node/resbody'
|
92
96
|
require 'mutant/config'
|
93
97
|
require 'mutant/loader'
|
94
98
|
require 'mutant/context'
|
@@ -44,11 +44,9 @@ module Mutant
|
|
44
44
|
# @api private
|
45
45
|
#
|
46
46
|
def self.constant_lookup(location)
|
47
|
-
location
|
48
|
-
.sub(CBASE_PATTERN, EMPTY_STRING)
|
49
|
-
.split(SCOPE_OPERATOR)
|
47
|
+
location.sub(CBASE_PATTERN, EMPTY_STRING).split(SCOPE_OPERATOR)
|
50
48
|
.reduce(Object) do |parent, name|
|
51
|
-
|
49
|
+
parent.const_get(name, nil)
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
data/lib/mutant/differ.rb
CHANGED
@@ -16,16 +16,12 @@ module Mutant
|
|
16
16
|
# @api private
|
17
17
|
#
|
18
18
|
def diff
|
19
|
-
output = ''
|
20
19
|
case diffs.length
|
21
20
|
when 0
|
22
21
|
nil
|
23
22
|
when 1
|
24
|
-
|
25
|
-
|
26
|
-
old, new, diffs.first, max_length, 0
|
27
|
-
).diff(:unified)
|
28
|
-
output << "\n"
|
23
|
+
Diff::LCS::Hunk.new(old, new, diffs.first, max_length, 0)
|
24
|
+
.diff(:unified) << "\n"
|
29
25
|
else
|
30
26
|
$stderr.puts(
|
31
27
|
'Mutation resulted in more than one diff, should not happen! ' +
|
data/lib/mutant/mutator.rb
CHANGED
@@ -21,7 +21,6 @@ module Mutant
|
|
21
21
|
# @api private
|
22
22
|
#
|
23
23
|
def dispatch
|
24
|
-
return if skip?
|
25
24
|
emit_name_mutation
|
26
25
|
end
|
27
26
|
|
@@ -32,6 +31,7 @@ module Mutant
|
|
32
31
|
# @api private
|
33
32
|
#
|
34
33
|
def emit_name_mutation
|
34
|
+
return if skip?
|
35
35
|
Mutator::Util::Symbol.each(name, self) do |name|
|
36
36
|
emit_name(name)
|
37
37
|
end
|
@@ -10,12 +10,12 @@ module Mutant
|
|
10
10
|
# These nodes still need a dedicated mutator,
|
11
11
|
# your contribution is that close!
|
12
12
|
handle(
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:regopt, :
|
13
|
+
:ensure,
|
14
|
+
:rescue, :redo, :defined?,
|
15
|
+
:regopt, :retry, :arg_expr,
|
16
16
|
:kwrestarg, :kwoptarg, :kwarg, :undef, :module, :empty,
|
17
17
|
:alias, :for, :xstr, :back_ref, :class,
|
18
|
-
:sclass, :match_with_lvasgn, :match_current_line
|
18
|
+
:sclass, :match_with_lvasgn, :match_current_line
|
19
19
|
)
|
20
20
|
|
21
21
|
private
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Mutant
|
4
|
+
class Mutator
|
5
|
+
class Node
|
6
|
+
|
7
|
+
# Kwbegin mutator
|
8
|
+
class Kwbegin < Generic
|
9
|
+
|
10
|
+
handle(:kwbegin)
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# Emit mutations
|
15
|
+
#
|
16
|
+
# @return [undefined]
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
#
|
20
|
+
def dispatch
|
21
|
+
super
|
22
|
+
emit_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
end # Kwbegin
|
26
|
+
end # Node
|
27
|
+
end # Mutator
|
28
|
+
end # Mutant
|
@@ -49,7 +49,11 @@ module Mutant
|
|
49
49
|
# @api private
|
50
50
|
#
|
51
51
|
def values
|
52
|
-
|
52
|
+
original = children.first
|
53
|
+
# Work around a bug in RBX/MRI or JRUBY:
|
54
|
+
[0.0, 1.0, -original].delete_if do |value|
|
55
|
+
value.eql?(original)
|
56
|
+
end
|
53
57
|
end
|
54
58
|
|
55
59
|
end # Float
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Mutant
|
4
|
+
class Mutator
|
5
|
+
class Node
|
6
|
+
|
7
|
+
# Mutator for loop control keywords
|
8
|
+
class LoopControl < Generic
|
9
|
+
|
10
|
+
INVERSE = IceNine.deep_freeze(
|
11
|
+
next: :break,
|
12
|
+
break: :next
|
13
|
+
)
|
14
|
+
|
15
|
+
handle(*INVERSE.keys)
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Emit mutations
|
20
|
+
#
|
21
|
+
# @return [undefined]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
#
|
25
|
+
def dispatch
|
26
|
+
super
|
27
|
+
children.each_index(&method(:delete_child))
|
28
|
+
emit(s(INVERSE.fetch(node.type), *children))
|
29
|
+
emit_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
end # Next
|
33
|
+
end # Node
|
34
|
+
end # Mutator
|
35
|
+
end # Mutant
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Mutant
|
2
|
+
class Mutator
|
3
|
+
class Node
|
4
|
+
# Mutator for resbody nodes
|
5
|
+
class Resbody < self
|
6
|
+
|
7
|
+
handle(:resbody)
|
8
|
+
|
9
|
+
children :captures, :assignment, :block
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
# Emit mutations
|
14
|
+
#
|
15
|
+
# @return [undefined]
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
#
|
19
|
+
def dispatch
|
20
|
+
emit_assignment(nil)
|
21
|
+
emit_block_mutations if block
|
22
|
+
mutate_captures
|
23
|
+
end
|
24
|
+
|
25
|
+
# Mutate captures
|
26
|
+
#
|
27
|
+
# @return [undefined]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
def mutate_captures
|
32
|
+
return unless captures
|
33
|
+
emit_captures(nil)
|
34
|
+
Util::Array.each(captures.children, self) do |matchers|
|
35
|
+
next if matchers.empty?
|
36
|
+
emit_captures(s(:array, *matchers))
|
37
|
+
# p capture
|
38
|
+
# emit_captures(s(:array, *capture))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end # Resbody
|
43
|
+
end # Node
|
44
|
+
end # Mutator
|
45
|
+
end # Mutant
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Mutant
|
4
|
+
class Mutator
|
5
|
+
class Node
|
6
|
+
|
7
|
+
# Yield mutator
|
8
|
+
class Yield < Generic
|
9
|
+
|
10
|
+
handle(:yield)
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# Emit mutations
|
15
|
+
#
|
16
|
+
# @return [undefined]
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
#
|
20
|
+
def dispatch
|
21
|
+
super
|
22
|
+
children.each_index(&method(:delete_child))
|
23
|
+
emit_nil
|
24
|
+
end
|
25
|
+
|
26
|
+
end # Yield
|
27
|
+
end # Node
|
28
|
+
end # Mutator
|
29
|
+
end # Mutant
|
@@ -117,6 +117,7 @@ module Mutant
|
|
117
117
|
#
|
118
118
|
def print_generic_stats
|
119
119
|
stats = generic_stats.to_a.sort_by(&:last)
|
120
|
+
return if stats.empty?
|
120
121
|
info('Nodes handled by generic mutator (type:occurrences):')
|
121
122
|
stats.reverse_each do |type, amount|
|
122
123
|
info('%-10s: %d', type, amount)
|
@@ -30,6 +30,17 @@ module Mutant
|
|
30
30
|
class Memoized < self
|
31
31
|
include NodeHelpers
|
32
32
|
|
33
|
+
# Return source
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
#
|
37
|
+
# @api private
|
38
|
+
#
|
39
|
+
def source
|
40
|
+
Unparser.unparse(memoizer_node(node))
|
41
|
+
end
|
42
|
+
memoize :source
|
43
|
+
|
33
44
|
private
|
34
45
|
|
35
46
|
# Return mutations
|
data/lib/mutant/version.rb
CHANGED
data/mutant.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.extra_rdoc_files = %w[TODO LICENSE]
|
19
19
|
gem.executables = %w[mutant]
|
20
20
|
|
21
|
-
gem.add_runtime_dependency('parser', '~> 2.0.0
|
22
|
-
gem.add_runtime_dependency('
|
21
|
+
gem.add_runtime_dependency('parser', '~> 2.0.0')
|
22
|
+
gem.add_runtime_dependency('abstract_type', '~> 0.0.7')
|
23
|
+
gem.add_runtime_dependency('unparser', '~> 0.1.4')
|
23
24
|
gem.add_runtime_dependency('ice_nine', '~> 0.9')
|
24
25
|
gem.add_runtime_dependency('descendants_tracker', '~> 0.0.1')
|
25
26
|
gem.add_runtime_dependency('adamantium', '~> 0.1.0')
|
data/spec/spec_helper.rb
CHANGED
@@ -11,7 +11,7 @@ describe Mutant::CLI::Classifier::Method, '#each' do
|
|
11
11
|
let(:unknown_method) { '::TestApp::Literal#unknown' }
|
12
12
|
|
13
13
|
context 'with a block' do
|
14
|
-
subject { object.each {} }
|
14
|
+
subject { object.each { } }
|
15
15
|
|
16
16
|
context 'with an instance method name' do
|
17
17
|
let(:input) { instance_method }
|
@@ -9,7 +9,7 @@ describe Mutant::CLI::Classifier::Namespace::Flat, '#each' do
|
|
9
9
|
let(:unknown_namespace) { '::TestApp::Object' }
|
10
10
|
|
11
11
|
context 'with a block' do
|
12
|
-
subject { object.each {} }
|
12
|
+
subject { object.each { } }
|
13
13
|
|
14
14
|
context 'with a known namespace' do
|
15
15
|
let(:input) { known_namespace }
|
@@ -32,7 +32,7 @@ describe Mutant::CLI::Classifier::Namespace::Flat, '#each' do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
context 'without a block' do
|
35
|
-
|
35
|
+
subject { object.each }
|
36
36
|
|
37
37
|
context 'with a known namespace' do
|
38
38
|
let(:input) { known_namespace }
|
@@ -51,7 +51,7 @@ describe Mutant::CLI::Classifier::Namespace::Flat, '#each' do
|
|
51
51
|
let(:input) { unknown_namespace }
|
52
52
|
|
53
53
|
it 'raises an exception when #each is called' do
|
54
|
-
expect { subject.each {} }.to raise_error(NameError)
|
54
|
+
expect { subject.each { } }.to raise_error(NameError)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -9,7 +9,7 @@ describe Mutant::CLI::Classifier::Namespace::Recursive, '#each' do
|
|
9
9
|
let(:unknown_namespace) { '::TestApp::Object' }
|
10
10
|
|
11
11
|
context 'with a block' do
|
12
|
-
subject { object.each {} }
|
12
|
+
subject { object.each { } }
|
13
13
|
|
14
14
|
context 'with a known namespace' do
|
15
15
|
let(:input) { known_namespace }
|
@@ -32,7 +32,7 @@ describe Mutant::CLI::Classifier::Namespace::Recursive, '#each' do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
context 'without a block' do
|
35
|
-
|
35
|
+
subject { object.each }
|
36
36
|
|
37
37
|
context 'with a known namespace' do
|
38
38
|
let(:input) { known_namespace }
|
@@ -51,7 +51,7 @@ describe Mutant::CLI::Classifier::Namespace::Recursive, '#each' do
|
|
51
51
|
let(:input) { unknown_namespace }
|
52
52
|
|
53
53
|
it 'raises an exception when #each is called' do
|
54
|
-
expect { subject.each {} }.to raise_error(NameError)
|
54
|
+
expect { subject.each { } }.to raise_error(NameError)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -79,6 +79,21 @@ describe Mutant::Mutator, 'def' do
|
|
79
79
|
it_should_behave_like 'a mutator'
|
80
80
|
end
|
81
81
|
|
82
|
+
context 'with optional argument beginning in an underscore' do
|
83
|
+
let(:source) { 'def foo(_unused = true); end' }
|
84
|
+
|
85
|
+
let(:mutations) do
|
86
|
+
mutations = []
|
87
|
+
mutations << 'def foo(_unused = nil); end'
|
88
|
+
mutations << 'def foo(_unused = false); end'
|
89
|
+
mutations << 'def foo(_unused = true); raise; end'
|
90
|
+
mutations << 'def foo(_unused); end'
|
91
|
+
mutations << 'def foo; end'
|
92
|
+
end
|
93
|
+
|
94
|
+
it_should_behave_like 'a mutator'
|
95
|
+
end
|
96
|
+
|
82
97
|
context 'default argument' do
|
83
98
|
let(:source) { 'def foo(a = true); end' }
|
84
99
|
|
@@ -3,12 +3,13 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Mutant::Mutator::Node::Generic, 'ensure' do
|
6
|
-
let(:source)
|
6
|
+
let(:source) { 'begin; rescue; ensure; true; end' }
|
7
7
|
|
8
8
|
let(:mutations) do
|
9
9
|
mutations = []
|
10
10
|
mutations << 'begin; rescue; ensure; false; end'
|
11
11
|
mutations << 'begin; rescue; ensure; nil; end'
|
12
|
+
mutations << 'nil'
|
12
13
|
end
|
13
14
|
|
14
15
|
it_should_behave_like 'a mutator'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Mutant::Mutator::Node::Kwbegin, 'kwbegin' do
|
6
|
+
let(:source) { 'begin; true; end' }
|
7
|
+
|
8
|
+
let(:mutations) do
|
9
|
+
mutations = []
|
10
|
+
mutations << 'begin; false; end'
|
11
|
+
mutations << 'begin; nil; end'
|
12
|
+
mutations << 'nil'
|
13
|
+
end
|
14
|
+
|
15
|
+
it_should_behave_like 'a mutator'
|
16
|
+
end
|
@@ -3,25 +3,60 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Mutant::Mutator::Node::Literal, 'float' do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
mutations = []
|
10
|
-
mutations << 'nil'
|
11
|
-
mutations << '0.0'
|
12
|
-
mutations << '1.0'
|
13
|
-
mutations << random_float.to_s
|
14
|
-
mutations << '(0.0 / 0.0)'
|
15
|
-
mutations << '(1.0 / 0.0)'
|
16
|
-
mutations << '(-1.0 / 0.0)'
|
17
|
-
mutations << '-10.0'
|
6
|
+
|
7
|
+
before do
|
8
|
+
Mutant::Random.stub(float: random_float)
|
18
9
|
end
|
19
10
|
|
20
11
|
let(:random_float) { 7.123 }
|
21
12
|
|
22
|
-
|
23
|
-
|
13
|
+
context 'positive number' do
|
14
|
+
let(:source) { '10.0' }
|
15
|
+
|
16
|
+
let(:mutations) do
|
17
|
+
mutations = []
|
18
|
+
mutations << 'nil'
|
19
|
+
mutations << '0.0'
|
20
|
+
mutations << '1.0'
|
21
|
+
mutations << random_float.to_s
|
22
|
+
mutations << '(0.0 / 0.0)'
|
23
|
+
mutations << '(1.0 / 0.0)'
|
24
|
+
mutations << '(-1.0 / 0.0)'
|
25
|
+
mutations << '-10.0'
|
26
|
+
end
|
27
|
+
|
28
|
+
it_should_behave_like 'a mutator'
|
24
29
|
end
|
25
30
|
|
26
|
-
|
31
|
+
context '0.0' do
|
32
|
+
let(:source) { '0.0' }
|
33
|
+
|
34
|
+
let(:mutations) do
|
35
|
+
mutations = []
|
36
|
+
mutations << 'nil'
|
37
|
+
mutations << '1.0'
|
38
|
+
mutations << random_float.to_s
|
39
|
+
mutations << '(0.0 / 0.0)'
|
40
|
+
mutations << '(1.0 / 0.0)'
|
41
|
+
mutations << '(-1.0 / 0.0)'
|
42
|
+
end
|
43
|
+
|
44
|
+
it_should_behave_like 'a mutator'
|
45
|
+
end
|
46
|
+
|
47
|
+
context '-0.0' do
|
48
|
+
let(:source) { '-0.0' }
|
49
|
+
|
50
|
+
let(:mutations) do
|
51
|
+
mutations = []
|
52
|
+
mutations << 'nil'
|
53
|
+
mutations << '1.0'
|
54
|
+
mutations << random_float.to_s
|
55
|
+
mutations << '(0.0 / 0.0)'
|
56
|
+
mutations << '(1.0 / 0.0)'
|
57
|
+
mutations << '(-1.0 / 0.0)'
|
58
|
+
end
|
59
|
+
|
60
|
+
it_should_behave_like 'a mutator'
|
61
|
+
end
|
27
62
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Mutant::Mutator::Node::LoopControl do
|
6
|
+
|
7
|
+
context 'with break node' do
|
8
|
+
let(:source) { 'break true' }
|
9
|
+
|
10
|
+
let(:mutations) do
|
11
|
+
mutations = []
|
12
|
+
mutations << 'break false'
|
13
|
+
mutations << 'break nil'
|
14
|
+
mutations << 'break'
|
15
|
+
mutations << 'nil'
|
16
|
+
mutations << 'next true'
|
17
|
+
end
|
18
|
+
|
19
|
+
it_should_behave_like 'a mutator'
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with next node' do
|
24
|
+
let(:source) { 'next true' }
|
25
|
+
|
26
|
+
let(:mutations) do
|
27
|
+
mutations = []
|
28
|
+
mutations << 'next false'
|
29
|
+
mutations << 'next nil'
|
30
|
+
mutations << 'next'
|
31
|
+
mutations << 'nil'
|
32
|
+
mutations << 'break true'
|
33
|
+
end
|
34
|
+
|
35
|
+
it_should_behave_like 'a mutator'
|
36
|
+
end
|
37
|
+
end
|
@@ -3,22 +3,71 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Mutant::Mutator::Node::Generic, 'rescue' do
|
6
|
-
let(:source) { 'begin; rescue Exception => e; true end' }
|
7
|
-
|
8
|
-
let(:mutations) do
|
9
|
-
mutations = []
|
10
|
-
mutations << 'begin; rescue Exception => srandom; true; end'
|
11
|
-
mutations << 'begin; rescue Exception => e; false; end'
|
12
|
-
mutations << 'begin; rescue Exception => e; nil; end'
|
13
|
-
mutations << 'begin; rescue nil => e; true; end'
|
14
|
-
# mutations << 'begin; rescue => e; true; end' # FIXME
|
15
|
-
end
|
16
6
|
|
17
7
|
before do
|
18
8
|
Mutant::Random.stub(hex_string: 'random')
|
19
9
|
end
|
20
10
|
|
21
|
-
|
11
|
+
context 'multiple exception selectors and assignment' do
|
12
|
+
let(:source) { 'begin; rescue ExceptionA, ExceptionB => error; true; end' }
|
13
|
+
|
14
|
+
let(:mutations) do
|
15
|
+
mutations = []
|
16
|
+
mutations << 'nil'
|
17
|
+
# mutations << 'begin; rescue ExceptionA, ExceptionB => error; true; end'
|
18
|
+
mutations << 'begin; rescue ExceptionA, ExceptionB; true; end'
|
19
|
+
mutations << 'begin; rescue ExceptionA, ExceptionB => error; false; end'
|
20
|
+
mutations << 'begin; rescue ExceptionA, ExceptionB => error; nil; end'
|
21
|
+
mutations << 'begin; rescue ExceptionA, nil => error; true; end'
|
22
|
+
mutations << 'begin; rescue ExceptionA => error; true; end'
|
23
|
+
mutations << 'begin; rescue ExceptionB => error; true; end'
|
24
|
+
mutations << 'begin; rescue nil, ExceptionB => error; true; end'
|
25
|
+
mutations << 'begin; rescue => error; true; end'
|
26
|
+
end
|
27
|
+
|
28
|
+
it_should_behave_like 'a mutator'
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'single exception selector and assignment' do
|
32
|
+
let(:source) { 'begin; rescue Exception => error; true; end' }
|
33
|
+
|
34
|
+
let(:mutations) do
|
35
|
+
mutations = []
|
36
|
+
mutations << 'nil'
|
37
|
+
mutations << 'begin; rescue Exception; true; end'
|
38
|
+
mutations << 'begin; rescue Exception => error; false; end'
|
39
|
+
mutations << 'begin; rescue Exception => error; nil; end'
|
40
|
+
mutations << 'begin; rescue nil => error; true; end'
|
41
|
+
mutations << 'begin; rescue => error; true; end'
|
42
|
+
end
|
43
|
+
|
44
|
+
it_should_behave_like 'a mutator'
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'no exection selector and assignment' do
|
48
|
+
let(:source) { 'begin; rescue => error; true end' }
|
49
|
+
|
50
|
+
let(:mutations) do
|
51
|
+
mutations = []
|
52
|
+
mutations << 'nil'
|
53
|
+
mutations << 'begin; rescue => error; false; end'
|
54
|
+
mutations << 'begin; rescue => error; nil; end'
|
55
|
+
mutations << 'begin; rescue; true; end'
|
56
|
+
end
|
57
|
+
|
58
|
+
it_should_behave_like 'a mutator'
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'no exection selector and no assignment' do
|
62
|
+
let(:source) { 'begin; rescue; true end' }
|
63
|
+
|
64
|
+
let(:mutations) do
|
65
|
+
mutations = []
|
66
|
+
mutations << 'nil'
|
67
|
+
mutations << 'begin; rescue; false; end'
|
68
|
+
mutations << 'begin; rescue; nil; end'
|
69
|
+
end
|
70
|
+
|
22
71
|
it_should_behave_like 'a mutator'
|
23
72
|
end
|
24
73
|
end
|
@@ -2,13 +2,15 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe Mutant::Mutator::Node::
|
6
|
-
let(:source)
|
5
|
+
describe Mutant::Mutator::Node::Yield, 'yield' do
|
6
|
+
let(:source) { 'yield true' }
|
7
7
|
|
8
8
|
let(:mutations) do
|
9
9
|
mutations = []
|
10
10
|
mutations << 'yield false'
|
11
11
|
mutations << 'yield nil'
|
12
|
+
mutations << 'yield'
|
13
|
+
mutations << 'nil'
|
12
14
|
end
|
13
15
|
|
14
16
|
it_should_behave_like 'a mutator'
|
@@ -32,7 +32,7 @@ describe Mutant::Runner::Config, '#subjects' do
|
|
32
32
|
Mutant::Runner.stub(:run).with(config, subject_b).and_return(runner_b)
|
33
33
|
end
|
34
34
|
|
35
|
-
context 'without
|
35
|
+
context 'without early stop' do
|
36
36
|
let(:stop_a) { false }
|
37
37
|
let(:stop_b) { false }
|
38
38
|
|
@@ -41,7 +41,7 @@ describe Mutant::Runner::Config, '#subjects' do
|
|
41
41
|
it_should_behave_like 'an idempotent method'
|
42
42
|
end
|
43
43
|
|
44
|
-
context 'with
|
44
|
+
context 'with early stop' do
|
45
45
|
let(:stop_a) { true }
|
46
46
|
let(:stop_b) { false }
|
47
47
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mutant::Subject::Method::Instance do
|
4
|
+
include Mutant::NodeHelpers
|
5
|
+
|
6
|
+
let(:object) { described_class.new(context, node) }
|
7
|
+
let(:context) { double }
|
8
|
+
|
9
|
+
let(:node) do
|
10
|
+
s(:def, :foo, s(:args))
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#source' do
|
14
|
+
subject { object.source }
|
15
|
+
|
16
|
+
it { should eql("def foo\nend") }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Mutant::Subject::Method::Instance::Memoized do
|
21
|
+
include Mutant::NodeHelpers
|
22
|
+
|
23
|
+
let(:object) { described_class.new(context, node) }
|
24
|
+
let(:context) { double }
|
25
|
+
|
26
|
+
let(:node) do
|
27
|
+
s(:def, :foo, s(:args))
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#source' do
|
31
|
+
subject { object.source }
|
32
|
+
|
33
|
+
it { should eql("def foo\nend\nmemoize(:foo)") }
|
34
|
+
end
|
35
|
+
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.3.0.
|
4
|
+
version: 0.3.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -16,28 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.0
|
19
|
+
version: 2.0.0
|
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: 2.0.0
|
26
|
+
version: 2.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: abstract_type
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.7
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.7
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: unparser
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ~>
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.
|
47
|
+
version: 0.1.4
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - ~>
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.1.
|
54
|
+
version: 0.1.4
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: ice_nine
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,7 +200,7 @@ files:
|
|
186
200
|
- .travis.yml
|
187
201
|
- Changelog.md
|
188
202
|
- Gemfile
|
189
|
-
- Gemfile.
|
203
|
+
- Gemfile.triage
|
190
204
|
- Guardfile
|
191
205
|
- LICENSE
|
192
206
|
- README.md
|
@@ -194,12 +208,12 @@ files:
|
|
194
208
|
- TODO
|
195
209
|
- bin/mutant
|
196
210
|
- circle.yml
|
197
|
-
- config/devtools.yml
|
198
211
|
- config/flay.yml
|
199
212
|
- config/flog.yml
|
200
213
|
- config/mutant.yml
|
201
214
|
- config/reek.yml
|
202
215
|
- config/rubocop.yml
|
216
|
+
- config/triage.yml
|
203
217
|
- config/yardstick.yml
|
204
218
|
- lib/mutant.rb
|
205
219
|
- lib/mutant/cache.rb
|
@@ -248,6 +262,7 @@ files:
|
|
248
262
|
- lib/mutant/mutator/node/dsym.rb
|
249
263
|
- lib/mutant/mutator/node/generic.rb
|
250
264
|
- lib/mutant/mutator/node/if.rb
|
265
|
+
- lib/mutant/mutator/node/kwbegin.rb
|
251
266
|
- lib/mutant/mutator/node/literal.rb
|
252
267
|
- lib/mutant/mutator/node/literal/array.rb
|
253
268
|
- lib/mutant/mutator/node/literal/boolean.rb
|
@@ -260,6 +275,7 @@ files:
|
|
260
275
|
- lib/mutant/mutator/node/literal/regex.rb
|
261
276
|
- lib/mutant/mutator/node/literal/string.rb
|
262
277
|
- lib/mutant/mutator/node/literal/symbol.rb
|
278
|
+
- lib/mutant/mutator/node/loop_control.rb
|
263
279
|
- lib/mutant/mutator/node/masgn.rb
|
264
280
|
- lib/mutant/mutator/node/mlhs.rb
|
265
281
|
- lib/mutant/mutator/node/named_value/access.rb
|
@@ -268,6 +284,7 @@ files:
|
|
268
284
|
- lib/mutant/mutator/node/noop.rb
|
269
285
|
- lib/mutant/mutator/node/nthref.rb
|
270
286
|
- lib/mutant/mutator/node/op_asgn.rb
|
287
|
+
- lib/mutant/mutator/node/resbody.rb
|
271
288
|
- lib/mutant/mutator/node/restarg.rb
|
272
289
|
- lib/mutant/mutator/node/return.rb
|
273
290
|
- lib/mutant/mutator/node/send.rb
|
@@ -276,6 +293,7 @@ files:
|
|
276
293
|
- lib/mutant/mutator/node/super.rb
|
277
294
|
- lib/mutant/mutator/node/when.rb
|
278
295
|
- lib/mutant/mutator/node/while.rb
|
296
|
+
- lib/mutant/mutator/node/yield.rb
|
279
297
|
- lib/mutant/mutator/node/zsuper.rb
|
280
298
|
- lib/mutant/mutator/registry.rb
|
281
299
|
- lib/mutant/mutator/util.rb
|
@@ -358,7 +376,6 @@ files:
|
|
358
376
|
- spec/unit/mutant/mutator/node/block/mutation_spec.rb
|
359
377
|
- spec/unit/mutant/mutator/node/block_pass/mutation_spec.rb
|
360
378
|
- spec/unit/mutant/mutator/node/blockarg/mutation_spec.rb
|
361
|
-
- spec/unit/mutant/mutator/node/break/mutation_spec.rb
|
362
379
|
- spec/unit/mutant/mutator/node/case/mutation_spec.rb
|
363
380
|
- spec/unit/mutant/mutator/node/cbase/mutation_spec.rb
|
364
381
|
- spec/unit/mutant/mutator/node/connective/binary/mutation_spec.rb
|
@@ -369,6 +386,7 @@ files:
|
|
369
386
|
- spec/unit/mutant/mutator/node/dsym/mutation_spec.rb
|
370
387
|
- spec/unit/mutant/mutator/node/ensure/mutation_spec.rb
|
371
388
|
- spec/unit/mutant/mutator/node/if/mutation_spec.rb
|
389
|
+
- spec/unit/mutant/mutator/node/kwbegin/mutation_spec.rb
|
372
390
|
- spec/unit/mutant/mutator/node/literal/array_spec.rb
|
373
391
|
- spec/unit/mutant/mutator/node/literal/boolean/mutation_spec.rb
|
374
392
|
- spec/unit/mutant/mutator/node/literal/fixnum_spec.rb
|
@@ -379,12 +397,12 @@ files:
|
|
379
397
|
- spec/unit/mutant/mutator/node/literal/regex_spec.rb
|
380
398
|
- spec/unit/mutant/mutator/node/literal/string_spec.rb
|
381
399
|
- spec/unit/mutant/mutator/node/literal/symbol_spec.rb
|
400
|
+
- spec/unit/mutant/mutator/node/loop_ctrl_spec.rb
|
382
401
|
- spec/unit/mutant/mutator/node/masgn/mutation_spec.rb
|
383
402
|
- spec/unit/mutant/mutator/node/match_current_line/mutation_spec.rb
|
384
403
|
- spec/unit/mutant/mutator/node/named_value/access/mutation_spec.rb
|
385
404
|
- spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb
|
386
405
|
- spec/unit/mutant/mutator/node/named_value/variable_assignment/mutation_spec.rb
|
387
|
-
- spec/unit/mutant/mutator/node/next/mutation_spec.rb
|
388
406
|
- spec/unit/mutant/mutator/node/nthref/mutation_spec.rb
|
389
407
|
- spec/unit/mutant/mutator/node/op_assgn/mutation_spec.rb
|
390
408
|
- spec/unit/mutant/mutator/node/or_asgn/mutation_spec.rb
|
@@ -404,6 +422,7 @@ files:
|
|
404
422
|
- spec/unit/mutant/runner/subject/success_predicate_spec.rb
|
405
423
|
- spec/unit/mutant/strategy_spec.rb
|
406
424
|
- spec/unit/mutant/subject/context_spec.rb
|
425
|
+
- spec/unit/mutant/subject/method/instance_spec.rb
|
407
426
|
- spec/unit/mutant/subject/mutations_spec.rb
|
408
427
|
- spec/unit/mutant/subject/node_spec.rb
|
409
428
|
- spec/unit/mutant/subject_spec.rb
|
@@ -440,7 +459,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
440
459
|
version: 1.3.1
|
441
460
|
requirements: []
|
442
461
|
rubyforge_project:
|
443
|
-
rubygems_version: 2.0.
|
462
|
+
rubygems_version: 2.0.14
|
444
463
|
signing_key:
|
445
464
|
specification_version: 4
|
446
465
|
summary: Mutation testing tool for ruby under MRI and Rubinius
|
@@ -484,7 +503,6 @@ test_files:
|
|
484
503
|
- spec/unit/mutant/mutator/node/block/mutation_spec.rb
|
485
504
|
- spec/unit/mutant/mutator/node/block_pass/mutation_spec.rb
|
486
505
|
- spec/unit/mutant/mutator/node/blockarg/mutation_spec.rb
|
487
|
-
- spec/unit/mutant/mutator/node/break/mutation_spec.rb
|
488
506
|
- spec/unit/mutant/mutator/node/case/mutation_spec.rb
|
489
507
|
- spec/unit/mutant/mutator/node/cbase/mutation_spec.rb
|
490
508
|
- spec/unit/mutant/mutator/node/connective/binary/mutation_spec.rb
|
@@ -495,6 +513,7 @@ test_files:
|
|
495
513
|
- spec/unit/mutant/mutator/node/dsym/mutation_spec.rb
|
496
514
|
- spec/unit/mutant/mutator/node/ensure/mutation_spec.rb
|
497
515
|
- spec/unit/mutant/mutator/node/if/mutation_spec.rb
|
516
|
+
- spec/unit/mutant/mutator/node/kwbegin/mutation_spec.rb
|
498
517
|
- spec/unit/mutant/mutator/node/literal/array_spec.rb
|
499
518
|
- spec/unit/mutant/mutator/node/literal/boolean/mutation_spec.rb
|
500
519
|
- spec/unit/mutant/mutator/node/literal/fixnum_spec.rb
|
@@ -505,12 +524,12 @@ test_files:
|
|
505
524
|
- spec/unit/mutant/mutator/node/literal/regex_spec.rb
|
506
525
|
- spec/unit/mutant/mutator/node/literal/string_spec.rb
|
507
526
|
- spec/unit/mutant/mutator/node/literal/symbol_spec.rb
|
527
|
+
- spec/unit/mutant/mutator/node/loop_ctrl_spec.rb
|
508
528
|
- spec/unit/mutant/mutator/node/masgn/mutation_spec.rb
|
509
529
|
- spec/unit/mutant/mutator/node/match_current_line/mutation_spec.rb
|
510
530
|
- spec/unit/mutant/mutator/node/named_value/access/mutation_spec.rb
|
511
531
|
- spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb
|
512
532
|
- spec/unit/mutant/mutator/node/named_value/variable_assignment/mutation_spec.rb
|
513
|
-
- spec/unit/mutant/mutator/node/next/mutation_spec.rb
|
514
533
|
- spec/unit/mutant/mutator/node/nthref/mutation_spec.rb
|
515
534
|
- spec/unit/mutant/mutator/node/op_assgn/mutation_spec.rb
|
516
535
|
- spec/unit/mutant/mutator/node/or_asgn/mutation_spec.rb
|
@@ -530,6 +549,7 @@ test_files:
|
|
530
549
|
- spec/unit/mutant/runner/subject/success_predicate_spec.rb
|
531
550
|
- spec/unit/mutant/strategy_spec.rb
|
532
551
|
- spec/unit/mutant/subject/context_spec.rb
|
552
|
+
- spec/unit/mutant/subject/method/instance_spec.rb
|
533
553
|
- spec/unit/mutant/subject/mutations_spec.rb
|
534
554
|
- spec/unit/mutant/subject/node_spec.rb
|
535
555
|
- spec/unit/mutant/subject_spec.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Mutant::Mutator::Node::Generic, 'break' do
|
6
|
-
let(:source) { 'break true' }
|
7
|
-
|
8
|
-
let(:mutations) do
|
9
|
-
mutations = []
|
10
|
-
mutations << 'break false'
|
11
|
-
mutations << 'break nil'
|
12
|
-
end
|
13
|
-
|
14
|
-
it_should_behave_like 'a mutator'
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Mutant::Mutator::Node::Generic, 'next' do
|
6
|
-
let(:source) { 'next true' }
|
7
|
-
|
8
|
-
let(:mutations) do
|
9
|
-
mutations = []
|
10
|
-
mutations << 'next false'
|
11
|
-
mutations << 'next nil'
|
12
|
-
end
|
13
|
-
|
14
|
-
it_should_behave_like 'a mutator'
|
15
|
-
end
|